Merge pull request 'feature: 20240403演示版本合并' (#66) from test into master

Reviewed-on: #66
master
yaoshuli 1 year ago
commit c8082ddab0

@ -22,6 +22,14 @@ public interface UserTokenService {
* @return
*/
User findByLoginname(String loginname);
/**
*
* @param phone
* @return
*/
User findByPhone(String phone);
/**
*
* @param userid
@ -124,6 +132,22 @@ public interface UserTokenService {
*/
public Long listCount(String otherno,String loginname);
/**
*
* @param otherno
* @return
*/
public Long listOthernoCount(String otherno);
/**
*
* @param otherno
* @param loginname
* @return
*/
public Long listLoginNameCount(String otherno,String loginname);
/**
*
* @param otherno

@ -95,6 +95,9 @@ public class SearchQuery implements java.io.Serializable{
public void addGreater(String field,Integer value){
addQuery(field,value, SearchQueryConstant.SEARCH_GREATER);
}
public void addGreater(String field,String value){
addQuery(field,value, SearchQueryConstant.SEARCH_GREATER);
}
public void addGreater(String field,Long value){
addQuery(field,value, SearchQueryConstant.SEARCH_GREATER);
@ -111,6 +114,9 @@ public class SearchQuery implements java.io.Serializable{
public void addGreaterEqual(String field,Integer value){
addQuery(field,value, SearchQueryConstant.SEARCH_GREATER_EQUAL);
}
public void addGreaterEqual(String field,String value){
addQuery(field,value, SearchQueryConstant.SEARCH_GREATER_EQUAL);
}
public void addGreaterEqual(String field,BigDecimal value){
addQuery(field,value, SearchQueryConstant.SEARCH_GREATER_EQUAL);
@ -121,6 +127,9 @@ public class SearchQuery implements java.io.Serializable{
public void addLess(String field,Integer value){
addQuery(field,value, SearchQueryConstant.SEARCH_LESS);
}
public void addLess(String field,String value){
addQuery(field,value, SearchQueryConstant.SEARCH_LESS);
}
public void addLess(String field,Long value){
addQuery(field,value, SearchQueryConstant.SEARCH_LESS);
@ -134,6 +143,9 @@ public class SearchQuery implements java.io.Serializable{
public void addLessEqual(String field,Integer value){
addQuery(field,value, SearchQueryConstant.SEARCH_LESS_EQUAL);
}
public void addLessEqual(String field,String value){
addQuery(field,value, SearchQueryConstant.SEARCH_LESS_EQUAL);
}
public void addLessEqual(String field,BigDecimal value){
addQuery(field,value, SearchQueryConstant.SEARCH_LESS_EQUAL);
@ -142,6 +154,17 @@ public class SearchQuery implements java.io.Serializable{
public void addLessEqual(String field,Date value){
addQuery(field,value, SearchQueryConstant.SEARCH_LESS_EQUAL);
}
public void addRulesOp(String field,String rulesOp){
SearchQueryForm searchQueryForm = new SearchQueryForm();
if(query.get(field)!=null){
searchQueryForm = (SearchQueryForm) query.get(field);
searchQueryForm.setRulesOp(rulesOp);
return;
}
searchQueryForm.setRulesOp(rulesOp);
query.put(field,searchQueryForm);
}
/**
*
* @param field
@ -165,11 +188,15 @@ public class SearchQuery implements java.io.Serializable{
log.error("【添加搜索条件】对象-value-错误value不能为空");
return;
}
if(null != query.get(field)){
log.error("【添加搜索条件】-query-错误query已经存在数据,field={}",field);
return;
}
// if(null != query.get(field)){
// log.error("【添加搜索条件】-query-错误query已经存在数据,field={}",field);
// return;
// }
SearchQueryForm lf = new SearchQueryForm();
if(query.get(field)!=null){
lf = (SearchQueryForm) query.get(field);
}
lf.setField(field);
lf.setDataOp(SearchQueryUtil.filterMap.get(filter));
lf.setOp(filter);

@ -8,10 +8,10 @@ import java.io.Serializable;
*/
public class SearchQueryForm implements Serializable {
private static final long serialVersionUID = 1L;
private String field;// 字段名称
private String op;// 比对条件
private Object value;// 比对内容
private String type;// 类型
private String field;// 字段名称 username and t1.username = %111%(vachar)
private String op;// 比对条件 =
private Object value;// 比对内容 111
private String type;// 类型 ()
private String rulesOp;// 搜索条件的关联方式,或/与and/or
private String tablenameother = "";// 数据表别名
private String dataOp;// 数据库中的比较条件,根据op属性获取

@ -86,6 +86,9 @@ public class User implements java.io.Serializable {
//密码最后更新时间
private Long psdupdatetime;
//用户审批节点
private Integer nodeType;
//用户对应的角色信息,映射文件中对应的字段信息
@JsonIgnore
private List roleslist = new ArrayList(0);

@ -15,32 +15,35 @@ import lombok.NoArgsConstructor;
public class UserToken implements java.io.Serializable {
private static final long serialVersionUID = 8798596773855969L;
private static final long serialVersionUID = 8798596773855969L;
// loginname + tokenuuid用于缓存的key使用
private String tokenid;
// loginname + tokenuuid用于缓存的key使用
private String tokenid;
private String tokenuuid;
private String tokenuuid;
//用户主键
private String userid;
//用户主键
private String userid;
//登陆账号
private String loginname;
//登陆账号
private String loginname;
//用户名
private String username;
//用户名
private String username;
// 客户端
private String userAgent;
// 授权时间
private Long issuedAt;
// 过期时间
private Long expiresAt;
// 是否记住我
private boolean remember;
// 客户端
private String userAgent;
// 授权时间
private Long issuedAt;
// 过期时间
private Long expiresAt;
// 是否记住我
private boolean remember;
//用户登录后的签名信息目前使用userid签名
private String signUser;
//用户登录后的签名信息目前使用userid签名
private String signUser;
//用户审批节点
private Integer nodeType;
}

@ -20,7 +20,7 @@ public interface CacheConstants {
//缓存超时时间,单位:秒,目前验证码使用
int CACHE_TIME = 300;//300;
//缓存超时时间,单位:秒,目前ai统计使用 24小时
//缓存超时时间,单位:秒,目前ai统计使用 24小时,获取验证码在使用
int TOOLSCOUNT_TENANTID_CACHE_TIME = 86400;
//保存ai统计租户id对象

@ -120,15 +120,22 @@ public class MyAuthenticationProvider implements AuthenticationProvider {
// }
//判断手机号与企业编码是否存在
if(!"admin".equals(loginname) && userTokenService.listCount(agentcode,loginname).intValue() <= 0){
// if(!"admin".equals(loginname) && userTokenService.listCount(agentcode,loginname).intValue() <= 0){
// throw new AuthenticationServiceException("企业编码错误!");
// }
//企业编码是否存在
if(!"admin".equals(loginname) && userTokenService.listOthernoCount(agentcode).intValue() <= 0){
throw new AuthenticationServiceException("企业编码错误!");
}
boolean tenantStatus = userTokenService.getTenantStatus(agentcode);
if (!tenantStatus) {
if (!"admin".equals(loginname) && !tenantStatus) {
throw new AuthenticationServiceException("该租户已被冻结!");
}
if(!"admin".equals(loginname) && userTokenService.listCount(agentcode,loginname).intValue() <= 0){
//判断账号是否存在
if(!"admin".equals(loginname) && userTokenService.listLoginNameCount(agentcode,loginname).intValue() <= 0){
throw new AuthenticationServiceException("账号不存在!");
}
@ -179,7 +186,7 @@ public class MyAuthenticationProvider implements AuthenticationProvider {
}
//userTokenService.savePasswordMaxRetry(user.getLoginname());
throw new AuthenticationServiceException("账号密码不正确");
throw new AuthenticationServiceException("密码错误");
}
@Override

@ -25,6 +25,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;
@ -57,6 +58,20 @@ public class SmsLoginServiceImpl implements SmsLoginService {
if (!isPhone) {
return ResultVoUtil.error("请输入正确的手机号。");
}
// 检查手机号当天获取验证码的次数
// 获取今天的日期,用于计算当天的发送次数
LocalDate today = LocalDate.now();
String cacheKey = "verification_count_" + phone + "_" + today;
Integer count = iCacheManager.get(CacheConstants.USER_PHONE_MODEL_NAME, cacheKey);
if (count == null) {
count = 0;
}
if (count >= 10) {
return ResultVoUtil.error("获取验证码次数超限,请明天再试!");
}
//生成验证码
String code = RandomUtil.randomNumbers(4);
@ -68,6 +83,9 @@ public class SmsLoginServiceImpl implements SmsLoginService {
//用户登录信息写入缓存
iCacheManager.put(CacheConstants.USER_PHONE_MODEL_NAME,phone,code,CacheConstants.CACHE_TIME);
// 更新手机号当天获取验证码的次数
iCacheManager.put(CacheConstants.USER_PHONE_MODEL_NAME, cacheKey, count + 1, CacheConstants.TOOLSCOUNT_TENANTID_CACHE_TIME);
//保存验证码到 缓存中
return ResultVoUtil.success(code);
}
@ -96,7 +114,7 @@ public class SmsLoginServiceImpl implements SmsLoginService {
}
//数据库查询用户对象
User user = userTokenService.findByLoginname(phone);
User user = userTokenService.findByPhone(phone);
if(null == user){
return ResultVoUtil.error("用户错误。");
}

@ -19,6 +19,20 @@ public interface UserTenantMybatisDao extends BaseMapper<UserTenant> {
*/
Long listCount(Map<String, Object> query);
/**
*
* @param query otherno
* @return
*/
Long listOthernoCount(Map<String, Object> query);
/**
*
* @param query othernologinname
* @return
*/
Long listLoginNameCount(Map<String, Object> query);
/**
*
* @param query othernomobile

@ -124,6 +124,9 @@ public class User implements BaseDto,java.io.Serializable {
@TableField(value="PSDUPDATETIME")
@JsonSerialize(using = DateSerializer.class)
private Long psdupdatetime;
@Schema(description = "用户审批节点")
@TableField(value="NODETYPE")
private Integer nodeType;
//用户对应的角色信息,映射文件中对应的字段信息
@JsonIgnore

@ -24,6 +24,13 @@ public interface UserService extends BaseService<User> {
*/
public User findByLoginname(String loginname);
/**
*
* @param phone
* @return
*/
public User findByPhone(String phone);
/**
*
* @param userid

@ -41,6 +41,23 @@ public interface UserTenantService extends BaseService<UserTenant> {
*/
public Long listCount(String otherno,String loginname);
/**
*
* @param otherno
* @return
*/
public Long listOthernoCount(String otherno);
/**
*
* @param otherno
* @param loginname
* @return
*/
public Long listLoginNameCount(String otherno,String loginname);
/**
*
* @param otherno

@ -112,6 +112,38 @@ public class UserServiceImpl extends BaseServiceImpl<UserMybatisDao,User> imple
user.setFrontmenuTList(frontmenuTList1);
return user;
}
/**
*
* @param phone
* @return
*/
@Override
public User findByPhone(String phone){
if(StringUtils.isBlank(phone)){
throw new ServiceException(CommonExceptionCodeEnum.PARAM_NOTVALID);
}
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("MOBILE",phone);
User user = this.usermybatisdao.selectOne(queryWrapper);
if(null == user){
return null;
}
List<Department> departmentList = this.departmentMybatisDao.selectDeptByUserid(user.getId());
user.formatDeptlist(departmentList);
user.setTenantList(this.userTenantService.listUserTenant(user.getId()));
//返回用户前端菜单权限列表
List<SFrontmenuT> frontmenuTList1 = isFrontmenuTService.queryUserMenuById(user.getLoginname());
user.setFrontmenuTList(frontmenuTList1);
return user;
}
/**
*
* @param userid

@ -97,6 +97,32 @@ public class UserTenantServiceImpl extends BaseServiceImpl<UserTenantMybatisDao,
return this.userTenantMybatisDao.listCount(query);
}
/**
*
* @param otherno
* @return
*/
public Long listOthernoCount(String otherno){
Map<String, Object> query = new HashMap<>();
query.put("otherno",otherno);
return this.userTenantMybatisDao.listOthernoCount(query);
}
/**
*
* @param otherno
* @param loginname
* @return
*/
public Long listLoginNameCount(String otherno,String loginname){
Map<String, Object> query = new HashMap<>();
query.put("otherno",otherno);
query.put("loginname",loginname);
return this.userTenantMybatisDao.listLoginNameCount(query);
}
/**
*
* @param otherno

@ -101,6 +101,24 @@ public class UserTokenServiceImpl implements UserTokenService {
User user = BeanUtil.copyProperties(userData,User.class);
return user;
}
public User findByPhone(String phone) {
cn.jyjz.xiaoyao.admin.dataobject.User userData = userService.findByPhone(phone);
if(null == userData){
return null;
}
Department department = this.departmentService.selectRootDepartid(userData.getDepartment());
if(null != department){
//userData.setDepartname(department.getDepartname());
userData.setDepartmentRootId(department.getId());
}
User user = BeanUtil.copyProperties(userData,User.class);
return user;
}
public User findByUserid(Long userid) {
cn.jyjz.xiaoyao.admin.dataobject.User userData = userService.findById(userid);
@ -376,6 +394,27 @@ public class UserTokenServiceImpl implements UserTokenService {
return userTenantService.listCount(otherno,loginname);
}
/**
*
* @param otherno
* @return
*/
public Long listOthernoCount(String otherno){
return userTenantService.listOthernoCount(otherno);
}
/**
*
* @param otherno
* @param loginname
* @return
*/
public Long listLoginNameCount(String otherno,String loginname){
return userTenantService.listLoginNameCount(otherno,loginname);
}
/**
*
* @param otherno

@ -62,6 +62,33 @@
)
</select>
<select id="listOthernoCount" resultType="java.lang.Long" parameterType="java.util.Map">
select
count(ten.ID)
from
S_TENANT_T ten
where
ten.OTHERNO = #{otherno}
</select>
<select id="listLoginNameCount" resultType="java.lang.Long" parameterType="java.util.Map">
select
count(ten.ID)
from
S_TENANT_T ten
where
ten.OTHERNO = #{otherno}
and
ten.ID in (
select ue.TENANTID from
S_USER_T us,
S_USER_TENANT_T ue where us.LOGINNAME = #{loginname}
)
</select>
<select id="listMobileCount" resultType="java.lang.Long" parameterType="java.util.Map">
select
count(ten.ID)

@ -1,5 +1,8 @@
package cn.jyjz.flowable.common;
import java.util.HashMap;
import java.util.Map;
/**
*
*/
@ -9,4 +12,13 @@ public class ProcessConstant {
public static final String BPMN_FILE_SUFFIX = ".bpmn";
public static final String FORM_FILE_SUFFIX = ".form";
public static Map<Integer, String> userNodeType;
static {
userNodeType = new HashMap<>();
userNodeType.put(1, "一级审批");
userNodeType.put(2, "二级审批");
userNodeType.put(3, "最终审批");
}
}

@ -2,12 +2,10 @@ package cn.jyjz.flowable.controller;
import cn.jyjz.flowable.common.SystemConstantsOa;
import cn.jyjz.flowable.domain.dto.HistoricTaskInstanceDto;
import cn.jyjz.flowable.domain.vo.FlowTaskVO;
import cn.jyjz.flowable.entity.FlowApprove;
import cn.jyjz.flowable.entity.FlowTaskInfo;
import cn.jyjz.flowable.service.IFlowTaskService;
import cn.jyjz.flowable.utils.PageUtils;
import cn.jyjz.flowable.utils.SysConstant;
import cn.jyjz.xiaoyao.abase.service.SeqManageService;
import cn.jyjz.xiaoyao.admin.dataobject.User;
import cn.jyjz.xiaoyao.admin.service.UserService;
@ -21,33 +19,31 @@ import cn.jyjz.xiaoyao.common.base.util.requestFormat.SearchQueryForm;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.common.mybatisplus.util.SearchQueryFormat;
import cn.jyjz.xiaoyao.oa.from.dataobject.Category;
import cn.jyjz.xiaoyao.oa.from.dataobject.Userapprove;
import cn.jyjz.xiaoyao.oa.from.service.UserapproveService;
import cn.jyjz.xiaoyao.oa.from.vo.FlowUnionVo;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.oa.from.vo.RepeatedTaskVo;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrUsersearch;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrUsersearchchild;
import cn.jyjz.xiaoyao.ocr.service.OcrSearchmanagerService;
import cn.jyjz.xiaoyao.ocr.service.OcrTaskchildPictureService;
import cn.jyjz.xiaoyao.ocr.service.OcrUsersearchService;
import cn.jyjz.xiaoyao.ocr.service.OcrUsersearchchildService;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import com.alanpoi.common.util.StringUtils;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.*;
import org.apache.commons.collections4.CollectionUtils;
import org.flowable.ui.common.model.RemoteUser;
import org.flowable.ui.common.service.idm.RemoteIdmService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@ -75,7 +71,7 @@ public class FlowTaskController extends BaseController {
private OcrTaskchildPictureService ocrTaskchildPictureService;
@Resource
private UserapproveService userapproveService;
private OcrUsersearchchildService usersearchchildService;
// /**
// * 查询我的待办任务
// * @return
@ -147,8 +143,8 @@ public class FlowTaskController extends BaseController {
@ResponseBody
public ResultVo complete(@RequestBody FlowApprove approve, HttpServletRequest request) {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
Boolean flag = flowTaskService.complete(approve, userToken);
return flag ? ResultVoUtil.success() : ResultVoUtil.error();
Integer flag = flowTaskService.complete(approve, userToken, Arrays.asList(approve.getFlowTaskInfoList().get(0).getFormId()));
return flag > 0 ? ResultVoUtil.success() : ResultVoUtil.error();
}
/**
@ -166,17 +162,14 @@ public class FlowTaskController extends BaseController {
if (CollectionUtils.isNotEmpty(flowTaskInfoList)) {
List<String> formIdList = flowTaskInfoList.stream().map(FlowTaskInfo::getFormId).collect(Collectors.toList());
//判断当前任务审批人是否一致
if (!this.ocrTaskchildPictureService.validateAssignee(formIdList, userToken)) {
return ResultVoUtil.error("审批人不一致,请到任务审批中处理。");
}
List<String> formIds = ocrTaskchildPictureService.validateAssignee(formIdList, userToken);
// 判断当前任务是否审批完毕
if (!this.ocrTaskchildPictureService.validateApprove(formIdList)) {
return ResultVoUtil.error("存在已经审批的任务。");
if (CollectionUtils.isNotEmpty(formIds)) {
Integer success = flowTaskService.complete(approve, userToken, formIds);
return ResultVoUtil.success("审批成功" + success + "条," + "无权审核" + (flowTaskInfoList.size() - success) + "条", "");
}
Boolean flag = flowTaskService.complete(approve, userToken);
return flag ? ResultVoUtil.success("审批成功!") : ResultVoUtil.error("审批失败!");
}
return ResultVoUtil.error("审批信息为空!");
return ResultVoUtil.success("审核成功0条" + "无权审核" + flowTaskInfoList.size() + "条", "");
}
@GetMapping("/listhistore")
@ -306,21 +299,27 @@ public class FlowTaskController extends BaseController {
@ResponseBody
public ResultVo listAlldata(PageUtils pageUtils, HttpServletRequest request) {
SearchQuery searchQuery = this.getParametersStartingWithToSearchJson(request, "search_");
//租户主键,由前端页面传送
String tenantId = request.getHeader("X-Tenant-Id");
String taskName = request.getParameter("keyword");
if (org.apache.commons.lang3.StringUtils.isBlank(tenantId)) {
return ResultVoUtil.error("租户主键不能为空");
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(taskName)) {
searchQuery.addLike("fromtaskname", taskName);
}
//获取用户预设检索条件id
String userSearchId = request.getParameter("userSearchId");
User user = this.userService.getSessionUser(request);
if (user.isUserIsSys(xiaoyaoConfig.getWebconfig().getSysLoginUser().split(","))) {
flowTaskService.getMyProcessInstances(searchQuery.getQuery(), pageUtils);
} else {
flowTaskService.getMyProcessInstances(user, tenantId, searchQuery.getQuery(), pageUtils);
flowTaskService.getMyProcessInstances(user, tenantId, searchQuery.getQuery(), pageUtils,userSearchId);
//待办信息,增加是否查看标记
// if(StringUtils.isNotBlank(assigneeId) && assigneeId.equals(user.getId().toString())){
@ -340,6 +339,28 @@ public class FlowTaskController extends BaseController {
return ResultVoUtil.success(pageUtils);
}
private void disSearchQuery(SearchQuery query, OcrUsersearchchild userSearch) {
if (userSearch.getSearchtype().equals("eq")) {
if (userSearch.getSearchvalue().contains(",")) {
String[] userIds = userSearch.getSearchvalue().split(",");
List<String> arrayData = Arrays.asList(userIds);
query.addIn(userSearch.getSearchfield(), arrayData);
} else {
query.addEqual(userSearch.getSearchfield(), userSearch.getSearchvalue());
}
}
if (userSearch.getSearchtype().equals("noteq")) {
if (userSearch.getSearchvalue().contains(",")) {
String[] userIds = userSearch.getSearchvalue().split(",");
List<String> arrayData = Arrays.asList(userIds);
query.addNotIn(userSearch.getSearchfield(), arrayData);
} else {
query.addNotEqual(userSearch.getSearchfield(), userSearch.getSearchvalue());
}
}
}
/**
*
@ -354,6 +375,7 @@ public class FlowTaskController extends BaseController {
@ResponseBody
public ResultVo<OcrTaskchildPicture> listFinalData(PageUtils<OcrTaskchildPicture> pageUtils,
@RequestParam(name = "izupuser", defaultValue = "", required = false) String izupuser,
@RequestParam(name = "taskName", defaultValue = "", required = false) String taskName,
@RequestParam(name = "izproject", defaultValue = "", required = false) String izproject,
@RequestParam(name = "izplan", defaultValue = "", required = false) String izplan,
@RequestParam(name = "izstatus", defaultValue = "", required = false) String izstatus,
@ -371,14 +393,17 @@ public class FlowTaskController extends BaseController {
searchQuery.addEqual("fromuserid", izupuser);
}
}
if(StringUtils.isNotBlank(taskName)){
searchQuery.addLike("fromtaskname",taskName);
}
if (org.springframework.util.StringUtils.hasText(izproject)) {
if (izproject.contains(",")) {
String[] projectIds = izproject.split(","); // 以逗号拆分字符串
List<String> arrayData = Arrays.asList(projectIds);
SearchQueryForm searchQueryForm = new SearchQueryForm();
searchQuery.addIn("fromprojectid", arrayData);
searchQuery.addIn("fromprojectname", arrayData);
} else {
searchQuery.addEqual("fromprojectid", izproject);
searchQuery.addEqual("fromprojectname", izproject);
}
}
if (org.springframework.util.StringUtils.hasText(izplan)) {
@ -411,17 +436,18 @@ public class FlowTaskController extends BaseController {
searchQuery.addEqual("fromsourceid", iztaskrrom);
}
}
if (org.springframework.util.StringUtils.hasText(izuptime)) {
String[] dateRange = izuptime.split("-");
if (dateRange.length == 2) {
try {
SimpleDateFormat sdfInput = new SimpleDateFormat("yyyy/MM/dd");
SimpleDateFormat sdfInput = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
// 解析开始时间
Long startTimeStamp = sdfInput.parse(dateRange[0].trim()).getTime();
Long startTimeStamp = sdfInput.parse(dateRange[0].trim() + " 00:00:00").getTime();
// 解析结束时间
Long endTimeStamp = sdfInput.parse(dateRange[1].trim()).getTime();
Long endTimeStamp = sdfInput.parse(dateRange[1].trim() + " 23:59:59").getTime();
// 如果开始时间不为空,则将其放入查询条件中
if (startTimeStamp != null) {
@ -449,6 +475,14 @@ public class FlowTaskController extends BaseController {
searchQuery.addEqual("thisLoginUserid", user.getId().toString());
searchQuery.addEqual("tenantid", tenantId);
}
String searchId = request.getParameter("searchId");
if (StringUtils.isNotBlank(searchId)) {
List<OcrUsersearchchild> list = usersearchchildService.list(new LambdaQueryWrapper<OcrUsersearchchild>().eq(OcrUsersearchchild::getUsersearchid, searchId).orderByAsc(OcrUsersearchchild::getOrderNum));
for (OcrUsersearchchild userSearch : list) {
disSearchQuery(searchQuery, userSearch);
}
}
Map<String, Object> query = searchQuery.getQuery();
@ -646,7 +680,9 @@ public class FlowTaskController extends BaseController {
})
@GetMapping("/repetitionTaskList")
@ResponseBody
public ResultVo repetitionTaskList() {
return flowTaskService.repetitionTaskList();
public ResultVo repetitionTaskList(@RequestParam(name = "pageNo") Integer pageNo,
@RequestParam(name = "pageSize") Integer pageSize) {
Page<OcrTaskchildPicture> result = flowTaskService.repetitionTaskList(pageNo, pageSize);
return ResultVoUtil.success(result);
}
}

@ -3,7 +3,6 @@ package cn.jyjz.flowable.service;
import cn.jyjz.flowable.domain.dto.HistoricTaskInstanceDto;
import cn.jyjz.flowable.domain.vo.FlowTaskCompleteVO;
import cn.jyjz.flowable.domain.vo.FlowTaskVO;
import cn.jyjz.flowable.domain.vo.WorkFlowNodeVO;
import cn.jyjz.flowable.entity.FlowApprove;
import cn.jyjz.flowable.utils.PageUtils;
@ -14,10 +13,13 @@ import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.oa.from.dataobject.Category;
import cn.jyjz.xiaoyao.oa.from.vo.FlowUnionVo;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.oa.from.vo.RepeatedTaskVo;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPictureAppro;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.task.api.Task;
@ -35,7 +37,7 @@ public interface IFlowTaskService {
Category viewForm(String processId, HttpServletRequest request);
Boolean complete(FlowApprove approve,UserToken userToken);
Integer complete(FlowApprove approve, UserToken userToken, List<String> formIds);
/**
@ -53,7 +55,7 @@ public interface IFlowTaskService {
* @param processDefinition
*/
public void updateAssignee(String processInstanceId, String processDefinitionId, ProcessDefinition processDefinition);
void sendMsg(OcrTaskchildPicture model, UserToken userToken);
void finishedList(PageUtils pageUtils, HttpServletRequest request);
/**
@ -72,7 +74,16 @@ public interface IFlowTaskService {
* @param tenantId
* @param pageUtils
*/
public void getMyProcessInstances(User user,String tenantId, Map<String, Object> query,PageUtils pageUtils);
public void getMyProcessInstances(User user,String tenantId, Map<String, Object> query,PageUtils pageUtils,String userSearchId);
/**
*
*
* @param user
* @param tenantId
* @param pageUtils
*/
public List<OcrTaskchildPictureAppro> getMyProcessInstancesNew(User user, String tenantId, Map<String, Object> query, PageUtils pageUtils);
/**
*
@ -168,5 +179,5 @@ public interface IFlowTaskService {
*/
ResultVo repetitionTask();
ResultVo repetitionTaskList();
Page<OcrTaskchildPicture> repetitionTaskList(Integer pageNo, Integer pageSize);
}

@ -10,7 +10,6 @@ import cn.jyjz.flowable.entity.FlowTaskInfo;
import cn.jyjz.flowable.service.IFlowInstanceService;
import cn.jyjz.xiaoyao.common.base.language.SystemMessage;
import cn.jyjz.xiaoyao.common.base.service.UserTokenService;
import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil;
import cn.jyjz.xiaoyao.common.base.util.requestFormat.SearchQuery;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
@ -31,16 +30,16 @@ import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.oa.from.dataobject.Category;
import cn.jyjz.xiaoyao.oa.from.dataobject.Flowablecc;
import cn.jyjz.xiaoyao.oa.from.dataobject.UserFinal;
import cn.jyjz.xiaoyao.oa.from.service.*;
import cn.jyjz.xiaoyao.oa.from.vo.FlowUnionVo;
import cn.jyjz.xiaoyao.oa.from.vo.RepeatedTaskVo;
import cn.jyjz.xiaoyao.ocr.dataobject.*;
import cn.jyjz.xiaoyao.ocr.service.*;
import cn.jyjz.xiaoyao.ocr.util.SearchParaFormatting;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskchildPictureApproVo;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -55,10 +54,8 @@ import org.flowable.engine.ProcessEngineConfiguration;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.history.HistoricProcessInstanceQuery;
import org.flowable.engine.impl.persistence.entity.ActivityInstanceEntity;
import org.flowable.engine.impl.util.ExecutionGraphUtil;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ActivityInstance;
import org.flowable.engine.runtime.Execution;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.engine.task.Comment;
@ -71,7 +68,6 @@ import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@ -439,11 +435,15 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
*
*/
@Override
public Boolean complete(FlowApprove approve, UserToken userToken) {
public Integer complete(FlowApprove approve, UserToken userToken, List<String> formIds) {
Integer successCount = 0;
try {
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(approve.getFlowTaskInfoList())) {
List<FlowTaskInfo> flowTaskInfoList = approve.getFlowTaskInfoList();
for (FlowTaskInfo flowTaskInfo : flowTaskInfoList) {
if (!formIds.contains(flowTaskInfo.getFormId())) {
continue;
}
// 当前要处理的任务
Task task = taskService.createTaskQuery().taskId(flowTaskInfo.getTaskId()).singleResult();
// 查询流程定义的信息
@ -458,17 +458,18 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
if (approve.getResult()) {
disposeSucceedTask(task, processDefinition, variables, model, flowTaskInfo.getFormId(), userToken);
} else {
disposeFailureTask(task,flowTaskInfo.getFormId(),variables);
disposeFailureTask(task, flowTaskInfo.getFormId(), variables);
}
userapproveService.save(userToken, approve, task,flowTaskInfo.getFormId());
userapproveService.save(userToken, approve, task, flowTaskInfo.getFormId());
successCount++;
}
}
//保存当前审批用户与业务表的关系
return true;
return successCount;
} catch (Exception e) {
log.error("e={}", e);
}
return false;
return successCount;
}
/**
@ -498,7 +499,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
userFinalService.save(user.getId().toString(), formId);
}
OcrTaskchildPicture childPicture = ocrTaskchildPictureService.getById(Long.parseLong(formId));
sendMsg(childPicture, userToken);
this.sendMsg(childPicture, userToken);
childPicture.setTaskId(taskData.getId());
childPicture.setTaskname(taskData.getName());
ocrTaskchildPictureService.updateById(childPicture);
@ -536,19 +537,17 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
}
//1、获取终止节点
List<EndEvent> endNodes = findEndFlowElement(task.getProcessDefinitionId());
String endId = endNodes.get(0).getId();
//2、执行终止
List<Execution> executions = runtimeService.createExecutionQuery().parentId(task.getProcessInstanceId()).list();
List<String> executionIds = new ArrayList<>();
executions.forEach(execution -> executionIds.add(execution.getId()));
runtimeService.createChangeActivityStateBuilder().moveExecutionsToSingleActivityId(executionIds, endId).processVariables(variables).changeState();
OcrTaskchildPicture taskchildPicture = ocrTaskchildPictureService.getById(Long.parseLong(formId));
taskchildPicture.setFinishtime(System.currentTimeMillis());
ocrTaskchildPictureService.updateById(taskchildPicture);
}
//发送消息
private void sendMsg(OcrTaskchildPicture model, UserToken userToken) {
public void sendMsg(OcrTaskchildPicture model, UserToken userToken) {
cn.jyjz.xiaoyao.common.base.vo.User byLoginname = userTokenService.findByLoginname(model.getAssignee());
OcrMsg msg = new OcrMsg();
msg.setCreateTime(System.currentTimeMillis());
@ -565,6 +564,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
jsonObject.put("sendTime", System.currentTimeMillis());
jsonObject.put("fromId", model.getId().toString());
jsonObject.put("taskName", model.getFromtaskname());
jsonObject.put("pictureId", model.getPictureid());
jsonObject.put("packageId", model.getPackageid());
msg.setBusJson(jsonObject.toJSONString());
msg.setCreateBy(Long.valueOf(userToken.getUserid()));
@ -980,7 +980,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
if (StringUtils.isNotBlank(pageUtils.getSortname())) {
paramterPage.setSortname(pageUtils.getSortname());
} else {
paramterPage.setSortname("CREATEDATE");
paramterPage.setSortname("submit_date_timestamp");
}
if (StringUtils.isNotBlank(pageUtils.getSortorder())) {
@ -1292,7 +1292,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
* @param tenantId
* @param pageUtils
*/
public void getMyProcessInstances(User user, String tenantId, Map<String, Object> searchQuery, PageUtils pageUtils) {
public void getMyProcessInstances(User user, String tenantId, Map<String, Object> searchQuery, PageUtils pageUtils, String userSearchId) {
ParamterPage paramterPage = new ParamterPage();
paramterPage.setStart((pageUtils.getCurrPage() - 1) * pageUtils.getPageSize());
paramterPage.setPagesize(pageUtils.getPageSize());
@ -1317,11 +1317,19 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
query.put("searchassignee", user.getLoginname());
query.putAll(searchQuery);
// if (!StringUtils.isBlank(userSearchId)) {
// OcrUsersearch ocrUsersearch = ocrUsersearchService.selectByUserSearchId(userSearchId);
// SearchQuery additionalQuery = new SearchQuery();
// for (OcrUsersearchchild usersearchchild : ocrUsersearch.getOcrUsersearchchildList()) {
// this.formattingSearchChild1(additionalQuery, usersearchchild);
// }
// query.putAll(additionalQuery.getQuery());
// }
Long count = ocrTaskchildPictureService.listmytaskCount(query);
query.put("page", paramterPage);
List<OcrTaskchildPictureAppro> list = ocrTaskchildPictureService.listmytask(query);
for (OcrTaskchildPictureAppro taskchildPicture : list) {
if (taskchildPicture.getPictureid() != null && !taskchildPicture.getPictureid().isEmpty()) {
@ -1331,6 +1339,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
OcrPicture ocrPictureOne = ocrPictureService.getOne(ocrPictureLambdaQueryWrapper);
taskchildPicture.setFromUserName(ocrPictureOne.getField1());
taskchildPicture.setPicture(ocrPictureOne);
taskchildPicture.setFinishTime(ocrPictureOne.getSubmitDateTimestamp());
}
//查询对应的流程分类
@ -1460,7 +1469,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
ocrTaskchildPictureApproVo.setFromtaskname(one.getFromtaskname()); //任务名称
ocrTaskchildPictureApproVo.setStatshisText(one.getStatshisText()); //历史-审批状态中文
ocrTaskchildPictureApproVo.setTasknamehis(one.getTasknamehis());//历史-审批节点名称
ocrTaskchildPictureApproVo.setFinishTime(one.getTransferRecords().get(0).getFinishTime()); //完成时间
ocrTaskchildPictureApproVo.setFinishTime(one.getFinishTime()); //完成时间
ocrTaskchildPictureApproVo.setReleaseProvince(one.getPicture().getReleaseprovince()); //省份
ocrTaskchildPictureApproVo.setFromprojectid(one.getFromprojectid()); //项目id
ocrTaskchildPictureApproVo.setProductName(one.getPicture().getField9()); //产品
@ -1472,12 +1481,57 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
ocrTaskchildPictureApproVo.setFromUserName(one.getFromUserName()); //提报人
ocrTaskchildPictureApproVo.setManufacturer(one.getPicture().getField5()); //manufacturer
ocrTaskchildPictureApproVo.setPackageid(one.getPackageid()); //任务包id
ocrTaskchildPictureApproVo.setProjectName(one.getFromprojectname());//项目名称
ocrTaskchildPictureApproVo.setCustomerLevel(one.getFromCustomerLevel());//客户级别
ocrTaskchildPictureApproVo.setReleaseArea(one.getFromCity());//拜访城市
listNew.add(ocrTaskchildPictureApproVo);
}
pageUtils.setList(listNew);
}
/**
*
*
* @param user
* @param tenantId
* @param pageUtils
*/
public List<OcrTaskchildPictureAppro> getMyProcessInstancesNew(User user, String tenantId, Map<String, Object> searchQuery, PageUtils pageUtils) {
ParamterPage paramterPage = new ParamterPage();
paramterPage.setStart((pageUtils.getCurrPage() - 1) * pageUtils.getPageSize());
paramterPage.setPagesize(pageUtils.getPageSize());
if (StringUtils.isNotBlank(pageUtils.getSortname())) {
paramterPage.setSortname(pageUtils.getSortname());
} else {
paramterPage.setSortname("CREATEDATE");
}
if (StringUtils.isNotBlank(pageUtils.getSortorder())) {
paramterPage.setSortorder(pageUtils.getSortorder());
} else {
paramterPage.setSortorder("DESC");
}
Map<String, Object> query = new HashMap<>();
query.put("page", paramterPage);
query.put("thisLoginUserid", user.getId().toString());
query.put("searchtenantid", tenantId);
//我的待办数据
query.put("searchassignee", user.getLoginname());
query.putAll(searchQuery);
Long count = ocrTaskchildPictureService.listmytaskCount(query);
query.put("page", paramterPage);
List<OcrTaskchildPictureAppro> list = ocrTaskchildPictureService.listmytask(query);
return list;
}
/**
*
*
@ -1766,8 +1820,10 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
}
@Override
public ResultVo repetitionTaskList() {
return ResultVoUtil.success(flowableccMybatisDao.repetitionTaskList());
public Page<OcrTaskchildPicture> repetitionTaskList(Integer pageNo, Integer pageSize) {
Page<OcrTaskchildPicture> page = new Page<>(pageNo, pageSize);
Page<OcrTaskchildPicture> result = flowableccMybatisDao.repetitionTaskList(page);
return result;
}
/**
@ -1897,5 +1953,132 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
return queryWrapper;
}
// private SearchQuery formattingSearchChild1(SearchQuery searchQuery, OcrUsersearchchild usersearchchild) {
// switch (usersearchchild.getSearchRelationType()) {
// case "where":
// // 添加 "where" 查询条件
// this.formattingSearchType1(searchQuery, usersearchchild);
// break;
// case "and":
// // 添加 "and" 查询条件
// searchQuery.addRulesOp(usersearchchild.getSearchfield(),"and");
// SearchQuery andQuery = this.formattingSearchType1(searchQuery, usersearchchild);
// searchQuery.setSearchQuery(andQuery);
// break;
// case "or":
// // 添加 "or" 查询条件
// searchQuery.addRulesOp(usersearchchild.getSearchfield(),"or");
// SearchQuery orQuery = this.formattingSearchType1(searchQuery, usersearchchild);
// searchQuery.setSearchQuery(orQuery);
// break;
// default:
// break;
// }
// return searchQuery;
// }
//
// private SearchQuery formattingSearchType1(SearchQuery searchQuery, OcrUsersearchchild usersearchchild) {
// //查询类型 相等true 不相等fase
// boolean queryType = "eq".equals(usersearchchild.getSearchtype());
//
// // 1.获取检查数据,确定数据类型
// String valueType = SearchParaFormatting.clickSearchValue(usersearchchild.getSearchvalue());
// List<String> arrayData = null; //集合型数据
// List<Integer> sectionInts = null; //纯数字区间型数据
// String[] sections = null; //字符串区间型数据
// DateTime beginTime = null; //日期时间区间型数据
// DateTime endTime = null; //日期时间区间型数据
//
// // 2.根据数据类型,解构数据
// switch (valueType) {
// case "array":
// //处理多文件
// String[] datas = usersearchchild.getSearchvalue().split(",");
// arrayData = Arrays.asList(datas);
// break;
// case "section":
// //格式化数据,仅在做区间的时候去除空格,其他地方不进行空格去除.
// sections = usersearchchild.getSearchvalue().trim().replaceAll("\\s+", "").split("-");
// //校验是否纯数字,纯数字的话要转成int,否则比对时会有问题
// sectionInts = new ArrayList<>();
// for (String data : sections) {
// if (data.matches("\\d+")) {
// sectionInts.add(Integer.parseInt(data));
// }
// }
// break;
// case "time":
// //格式化时间数据
// String[] times = usersearchchild.getSearchvalue().trim().replaceAll("\\s+", "").split("-");
// beginTime = DateUtil.parse(times[0], "yyyy/MM/dd");
// endTime = DateUtil.parse(times[1], "yyyy/MM/dd");
// break;
// default:
// }
//
// // 3.根据查询类型 组装查询条件 相等
// switch (valueType) {
// case "array":
// //集合数据
// //相等
// if (queryType) {
// searchQuery.addIn(usersearchchild.getSearchfield(), arrayData);
// break;
// }
// //不相等
// searchQuery.addNotIn(usersearchchild.getSearchfield(), arrayData);
// break;
//
// case "section":
// //数字区间查询
// if (sectionInts != null && sectionInts.size() == 2) {
// if (queryType) {
// //相等
// searchQuery.addGreaterEqual(usersearchchild.getSearchfield(), sectionInts.get(0));
// searchQuery.addLessEqual(usersearchchild.getSearchfield(), sectionInts.get(1));
// break;
// }
// //不相等
// searchQuery.addLess(usersearchchild.getSearchfield(), sectionInts.get(0));
// searchQuery.addGreater(usersearchchild.getSearchfield(), sectionInts.get(1));
// break;
// }
//
// //字符串区间查询
// if (queryType) {
// //相等
// searchQuery.addGreaterEqual(usersearchchild.getSearchfield(), sections[0]);
// searchQuery.addLessEqual(usersearchchild.getSearchfield(), sections[1]);
// break;
// }
// //不相等
// searchQuery.addLess(usersearchchild.getSearchfield(), sections[0]);
// searchQuery.addGreater(usersearchchild.getSearchfield(), sections[1]);
// break;
//
//
// case "time":
// //时间区间数据
// //相等
// if (queryType) {
// searchQuery.addGreaterEqual(usersearchchild.getSearchfield(), beginTime);
// searchQuery.addLessEqual(usersearchchild.getSearchfield(), endTime);
// break;
// }
// //不相等
// searchQuery.addLess(usersearchchild.getSearchfield(), beginTime);
// searchQuery.addGreater(usersearchchild.getSearchfield(), endTime);
// break;
//
// default:
// if (queryType) {
// searchQuery.addEqual(usersearchchild.getSearchfield(), usersearchchild.getSearchvalue());
// break;
// }
// searchQuery.addNotEqual(usersearchchild.getSearchfield(), usersearchchild.getSearchvalue());
// }
// return searchQuery;
// }
}

@ -3,9 +3,10 @@ package cn.jyjz.xiaoyao.oa.from.dataDao;
import cn.jyjz.xiaoyao.oa.from.dataobject.Flowablecc;
import cn.jyjz.xiaoyao.oa.from.vo.FlowUnionVo;
import cn.jyjz.xiaoyao.oa.from.vo.RepeatedContentVo;
import cn.jyjz.xiaoyao.oa.from.vo.RepeatedTaskVo;
import cn.jyjz.xiaoyao.oa.from.vo.UserDistionaryVo;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@ -40,5 +41,5 @@ public interface FlowableccMybatisDao extends BaseMapper<Flowablecc> {
List<RepeatedContentVo> repetitionTask();
List<RepeatedTaskVo> repetitionTaskList();
Page<OcrTaskchildPicture> repetitionTaskList(Page<OcrTaskchildPicture> page);
}

@ -75,6 +75,12 @@ public class Userapprove implements BaseDto,java.io.Serializable {
@Schema(description = "审批意见")
@TableField(value="TASKCOMMENT")
private String taskcomment;
@Schema(description = "审批不通过原因")
@TableField(value="REASON")
private String reason;
@Schema(description = "审批不通过处理方式")
@TableField(value="PROCESSMETHOD")
private String processMethod;
//保存当前登录用户的数据权限范围的搜索条件
@TableField(exist = false)

@ -31,6 +31,8 @@ public class UserapproveServiceImpl extends BaseServiceImpl<UserapproveMybatisDa
userapprove.setTaskcomment(approve.getComment());
userapprove.setCreatedate(System.currentTimeMillis());
userapprove.setUsername(userToken.getUsername());
userapprove.setReason(approve.getFailCauseName());
userapprove.setReason(approve.getDisposeType());
if (approve.getResult()) {
userapprove.setStatshis(2);
} else {

@ -13,6 +13,10 @@ public class RepeatedTaskVo {
private String taskId;
private String formId;
private String fromTaskId;
private String taskName;
private String nodeName;

@ -159,9 +159,9 @@ public class PictureSourceResult {
*/
String companyDepartment;
/**
*
*
*/
String manufacturer;
Map<String,Object> manufacturer;
/**
* 访

@ -86,6 +86,7 @@ public class PrevailCloudApiImpl implements PrevailCloudApi {
//组装请求参数
String url = apiConfig.getInterfaceDomain()+pictureSourceUrl;
String requestBodyJson = JSONObject.toJSONString(requestData);
// String requestBodyJson = "{\"accessKey\":\"7390F0221A1A73D8E13F8C8BB96F33B0\",\"data\":\"gzUtN5Mt24_fbDDMK3wLop8Tgu68xLCVy3Wzp9BcXnkxnCiPg_D2TNEXnQ68-Y-GhGYYcD7Iwg8juZTx1m5v4NkDvKvEwdvjQvZnMDTRYbqtHrwgVLAvUGotIMTckDY67yo2Ku52vWedjYpzzDseHwiIGVcIl-u1CljEbyjLzJzIf6oXfD7qKjOYnxKjfjp11k0IlvsPdS-mgNXTHcBei5jOFrYmZrE2y4v9bI5n1QE\",\"signature\":\"0bmIbhhybDcGeyX4ao5gSPZQeaY8G2JRh3nRt7NC7qw\",\"tenantCode\":\"1673196576094806016\",\"timestamp\":1711971774448}";
//入参
System.out.println("入参数据:"+requestBodyJson);
HttpParamers httpParamers = new HttpParamers(HttpMethod.POST);

@ -37,18 +37,18 @@ public class ApiTestController {
String pageNo = request.getParameter("pageNo");
PictureSourceParameter pictureSourceParameter = new PictureSourceParameter();
// DateTime dateTime = DateUtil.parse(beginStr+" 00:00:00","yyyy-MM-dd HH:mm:ss");
DateTime dateTime = DateUtil.parse("2024-03-31 07:00:000","yyyy-MM-dd HH:mm:ss");
DateTime dateTime = DateUtil.parse(beginStr+" 00:00:00","yyyy-MM-dd HH:mm:ss");
// DateTime dateTime = DateUtil.parse("2024-03-31 07:00:000","yyyy-MM-dd HH:mm:ss");
Instant binstant = dateTime.toInstant();
// DateTime dateTime1 = DateUtil.parse(" 00:00:00","yyyy-MM-dd HH:mm:ss");
DateTime dateTime1 = DateUtil.parse("2024-03-31 09:00:00","yyyy-MM-dd HH:mm:ss");
DateTime dateTime1 = DateUtil.parse(endStr+" 00:00:00","yyyy-MM-dd HH:mm:ss");
// DateTime dateTime1 = DateUtil.parse("2024-03-31 09:00:00","yyyy-MM-dd HH:mm:ss");
Instant einstant = dateTime1.toInstant();
pictureSourceParameter.setStartTime(Date.from(binstant));
pictureSourceParameter.setEndTime(Date.from(einstant));
pictureSourceParameter.setPageNo(Integer.parseInt(pageNo));
pictureSourceParameter.setPageSize(Integer.parseInt(pageSize));
pictureSourceParameter.setTenantNo(1714548920583360512L);
pictureSourceParameter.setAccountNo(1714559587755397120L);
pictureSourceParameter.setAccountNo(1714887674875514880L);
try {
ApiPage<PictureSourceResult> apiPage = prevailCloudApi.pullPictureSource(pictureSourceParameter);
List<PictureSourceResult> listResult= apiPage.getRecords();

@ -1,18 +1,27 @@
package cn.jyjz.xiaoyao.ocr.controller;
import cn.jyjz.flowable.service.IFlowTaskService;
import cn.jyjz.flowable.utils.PageUtils;
import cn.jyjz.xiaoyao.admin.dataobject.User;
import cn.jyjz.xiaoyao.admin.service.UserService;
import cn.jyjz.xiaoyao.common.base.controller.BaseController;
import cn.jyjz.xiaoyao.common.base.service.UserTokenService;
import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil;
import cn.jyjz.xiaoyao.common.base.util.requestFormat.SearchQuery;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPictureAppro;
import cn.jyjz.xiaoyao.ocr.service.IOcrSearchHistoryService;
import cn.jyjz.xiaoyao.framework.security.sms.MsmService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -34,6 +43,7 @@ public class OcrAiApprovalTools {
@Autowired
IOcrSearchHistoryService iocrsearchhistoryservice;
/**
*
*
@ -51,8 +61,8 @@ public class OcrAiApprovalTools {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
ResultVo toolscount = iocrsearchhistoryservice.toolscount(tenantId,userToken.getUserid(),request);
ResultVo toolscount = iocrsearchhistoryservice.toolscount(tenantId);
return toolscount;
}
@ -63,7 +73,7 @@ public class OcrAiApprovalTools {
public ResultVo aiApprovaltools(HttpServletRequest request,@RequestParam(value = "taskid", required = true) String taskid) {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
Map<Object, Object> selectaisp = iocrsearchhistoryservice.selectaisp(userToken.getUserid(), taskid);
Map<Object, Object> selectaisp = iocrsearchhistoryservice.selectaisp(userToken.getUserid(), taskid,userToken.getNodeType());
return ResultVoUtil.success(selectaisp);
}

@ -83,6 +83,8 @@ public class OcrCheckDuplicateController {
queryWrapper = SearchParaFormatting.searchParaParse(queryWrapper, paraMap);
queryWrapper.eq("tenant_id", tenantId);
queryWrapper.eq("suspiciousfile", "0");
queryWrapper.orderBy(true,true,"submit_date_timestamp");
List<OcrPicture> pageList = ocrPictureService.listPage(queryWrapper);
if (null != pageList && !pageList.isEmpty()) {
if (pageList.size() == 1) {

@ -59,4 +59,26 @@ public class OcrDictionaryController {
}
return new ResultVo<>(ResultVo.ERROR,"根据field查询不到字典组!");
}
/**
*valuelable
*
*mail.zhangyong@gmail.com
*2024-01-14 10:27:02
**/
@GetMapping("/getLabelByValue")
@ResponseBody
public ResultVo<IPage<OcrDictionary>> getLabelByValue(HttpServletResponse response,
HttpServletRequest request,
@RequestParam(name="field", defaultValue="upName",required = true) String field,
@RequestParam(name="value", defaultValue="",required = true) String value) {
String tenantId = request.getHeader("X-Tenant-Id");
if(StringUtils.isBlank(tenantId)){
return ResultVoUtil.error("租户主键不能为空");
}
String result= ocrDictionaryService.queryLabelByValue(field,value,tenantId);
return new ResultVo<>(ResultVo.ERROR,result);
}
}

@ -264,13 +264,15 @@ public class OcrPictureController extends BaseController {
return ResultVoUtil.error("租户主键不能为空");
}
QueryWrapper<OcrPicture> queryWrapper = new QueryWrapper<>();
String search_month = req.getParameter("search_month");
String ordertype = req.getParameter("ordertype");
queryWrapper.eq("suspiciousfile", "0");
if (StringUtils.isNotBlank(ordertype)) {
if (ordertype.equals("0")) {
if (ordertype.equals("asc")) {
queryWrapper.orderByAsc("similarity_score");
} else {
queryWrapper.orderByDesc("similarity_score");
@ -280,10 +282,10 @@ public class OcrPictureController extends BaseController {
//按时间排序
String orderByTime = req.getParameter("orderByTime");
if (StringUtils.isNotBlank(orderByTime)) {
if (orderByTime.equals("0")) {
queryWrapper.orderByAsc("create_time");
if (orderByTime.equals("asc")) {
queryWrapper.orderByAsc("submit_date_timestamp");
} else {
queryWrapper.orderByDesc("create_time");
queryWrapper.orderByDesc("submit_date_timestamp");
}
}
@ -291,6 +293,12 @@ public class OcrPictureController extends BaseController {
queryWrapper.ge("create_time", DataUtil.afterDateByMonth(Integer.parseInt(search_month)));
}
//提报人模糊搜索
String upUserName = req.getParameter("upUserName");
if(StringUtils.isNotBlank(upUserName)){
queryWrapper.like("upName",upUserName);
}
//根据参数枚举获取检索参数并映射为数据库的字段的key-v map
Map<String, Object> paraMap = new HashMap<>();
for (SearchConfigEnum config : SearchConfigEnum.values()) {
@ -394,7 +402,8 @@ public class OcrPictureController extends BaseController {
public ResultVo getPackagePictureInfo(@RequestParam(name = "checkDuplicateId") String checkDuplicateId,
@RequestParam(name = "pictureId", required = false) String pictureId,
HttpServletRequest req) {
OcrPicture result = ocrPictureService.getPackagePictureInfo(checkDuplicateId, pictureId);
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(req));
OcrPicture result = ocrPictureService.getPackagePictureInfo(checkDuplicateId, pictureId,userToken);
return ResultVoUtil.success(result);
}

@ -66,38 +66,38 @@ public class OcrSUserTController {
if(map.get("newPassword").equals(map.get("rePasswrod"))){
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
UpdateWrapper<OcrSUserT> updatewrapper = new UpdateWrapper<>();
updatewrapper.eq("LOGINNAME", map.get("loginname")).set("PASSWORD",bCryptPasswordEncoder.encode(map.get("newPassword")));
updatewrapper.eq("MOBILE", map.get("loginname")).set("PASSWORD",bCryptPasswordEncoder.encode(map.get("newPassword")));
boolean update = sUserTService.update(updatewrapper);
if(update){
// return new ResponseEntity<Object>("密码重设成功!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"密码重设成功!");
return ResultVoUtil.success(ResultVo.SUCCESS,"密码重设成功!");
}
}else{
// return new ResponseEntity<Object>("两次密码输入不一致!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"两次密码输入不一致!");
return ResultVoUtil.error(ResultVo.ERROR,"两次密码输入不一致!");
}
}else{
// return new ResponseEntity<Object>("请再次输入新密码!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"请再次输入新密码!");
return ResultVoUtil.error(ResultVo.ERROR,"请再次输入新密码!");
}
}else{
// return new ResponseEntity<Object>("请输入新密码!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"请输入新密码!");
return ResultVoUtil.error(ResultVo.ERROR,"请输入新密码!");
}
}else {
// return new ResponseEntity<Object>("请输入同时包含英文、数字的8~16位密码",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"请输入同时包含英文、数字的8~16位密码");
return ResultVoUtil.error(ResultVo.ERROR,"请输入同时包含英文、数字的8~16位密码");
}
return ResultVoUtil.error(ResultVo.SUCCESS);
return ResultVoUtil.error(ResultVo.ERROR);
}
@ApiOperation(value = "忘记密码", notes = "忘记密码")

@ -57,6 +57,7 @@ public class OcrSearchHistoryController {
OcrSearchHistory ocrsearchhistory =new OcrSearchHistory();
ocrsearchhistory.setHistoryname(search);
ocrsearchhistory.setTenantId(Long.valueOf(tenantId));
ocrsearchhistory.setUserid(Long.valueOf(userToken.getUserid()));
ocrsearchhistory.setCreatedate(System.currentTimeMillis());
ocrSearchHistoryService.save(ocrsearchhistory);
@ -75,9 +76,16 @@ public class OcrSearchHistoryController {
*/
@RequestMapping(value = "/searchdelete", method = RequestMethod.DELETE)
public ResultVo searchdelete(HttpServletRequest request) {
//租户主键,由前端页面传送
String tenantId = request.getHeader("X-Tenant-Id");
if (StringUtils.isBlank(tenantId)) {
return ResultVoUtil.error("租户主键不能为空");
}
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
QueryWrapper<OcrSearchHistory> wrapper = new QueryWrapper<>();
wrapper.eq("userid",userToken.getUserid());
wrapper.eq("tenant_id",Long.valueOf(tenantId));
//根据具体情况 判断 是否需要 进行数据返回, 默认不返回数据
ocrSearchHistoryService.remove(wrapper);
// return new ResponseEntity<Object>("true",HttpStatus.OK);
@ -92,10 +100,15 @@ public class OcrSearchHistoryController {
*/
@RequestMapping(value = "/historySearch", method = RequestMethod.GET)
public ResultVo historySearch(HttpServletRequest request) {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
//租户主键,由前端页面传送
String tenantId = request.getHeader("X-Tenant-Id");
if (StringUtils.isBlank(tenantId)) {
return ResultVoUtil.error("租户主键不能为空");
}
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
QueryWrapper<OcrSearchHistory> wrapper = new QueryWrapper<>();
wrapper.select("historyname","createdate").eq("userid",userToken.getUserid()).orderByDesc("createdate").last("limit 8");
wrapper.select("historyname","createdate").eq("userid",userToken.getUserid()).eq("tenant_id",Long.valueOf(tenantId)).orderByDesc("createdate").last("limit 8");
List<OcrSearchHistory> list = ocrSearchHistoryService.list(wrapper);
// return new ResponseEntity<List<OcrSearchHistory>>(list, HttpStatus.OK);

@ -110,7 +110,11 @@ public class OcrTaskPackageController extends BaseController {
@RequestParam(name = "pageNo") Integer pageNo,
@RequestParam(name = "pageSize") Integer pageSize,
HttpServletRequest req) {
Page<Map<String, Object>> result = ocrTaskPackageService.getPackageList(pageNo, pageSize, packageName);
String tenantId = req.getHeader("X-Tenant-Id");
if(StringUtils.isBlank(tenantId)){
return ResultVoUtil.error("租户主键不能为空");
}
Page<Map<String, Object>> result = ocrTaskPackageService.getPackageList(pageNo, pageSize, packageName,tenantId);
return ResultVoUtil.success(result);
}

@ -1,5 +1,6 @@
package cn.jyjz.xiaoyao.ocr.controller;
import cn.hutool.core.collection.CollUtil;
import cn.jyjz.xiaoyao.common.base.service.UserTokenService;
import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
@ -8,10 +9,13 @@ import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.ocr.dataobject.*;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.service.OcrTaskchildPictureService;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.PathVariable;
@ -30,11 +34,12 @@ import java.util.Map;
import java.util.stream.Collectors;
/**
* ocr
* ocr
*
* @author
* @Date 2024-03-21 19:00:57
*/
@Api(tags="ocr可疑文件控制器")
@RestController
@RequestMapping("/ocr/dubiousfile")
public class OcrTaskchildDubiousFileController {
@ -57,40 +62,42 @@ public class OcrTaskchildDubiousFileController {
* @param request
* @return
*/
@ApiOperation(value="可疑文件列表查询", notes="可疑文件列表查询")
@RequestMapping(value = "/dubiousfilelist", method = RequestMethod.GET)
public ResultVo dubiousfilelist(HttpServletRequest request,
@RequestParam(value = "pageNo", required = false, defaultValue = "0") int pageNo,
@RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize,
@RequestParam(value = "orderbyname", required = true, defaultValue = "0") String orderbyname) {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
QueryWrapper<OcrTaskchildDubiousFile> dubiouswrapper = new QueryWrapper<>();
dubiouswrapper.eq("userid",userToken.getUserid());
List<OcrTaskchildDubiousFile> list = ocrTaskchildDubiousFileService.list(dubiouswrapper);
if(list.size()==0){
return ResultVoUtil.success();
}
IPage<OcrPicture> iPage = new Page<>(Integer.valueOf(pageNo),Integer.valueOf(pageSize));
QueryWrapper<OcrPicture> wrapper = new QueryWrapper<>();
wrapper.in("ID",list.stream().map(i->i.getPictureId()).collect(Collectors.toList()));
public ResultVo<Page<OcrTaskChildPictureVo>> dubiousfilelist(HttpServletRequest request,
@RequestParam(value = "pageNo", required = false, defaultValue = "0") Integer pageNo,
@RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize,
@RequestParam(value = "orderbyname", required = true, defaultValue = "asc") String orderbyname) {
if(orderbyname.equals("desc")){
wrapper.orderByDesc("create_time");
}else {
wrapper.orderByAsc("create_time");
String tenantId = request.getHeader("X-Tenant-Id");
if(StringUtils.isBlank(tenantId)){
return ResultVoUtil.error("租户主键不能为空");
}
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
//执行查询方法
IPage<OcrPicture> page = ocrpictureservice.page(iPage, wrapper);
// QueryWrapper<OcrTaskchildDubiousFile> dubiouswrapper = new QueryWrapper<>();
// dubiouswrapper.eq("userid",userToken.getUserid());
// List<OcrTaskchildDubiousFile> list = ocrTaskchildDubiousFileService.list(dubiouswrapper);
// if(list.size()==0){
// return ResultVoUtil.success();
// }
// IPage<OcrPicture> iPage = new Page<>(Integer.valueOf(pageNo),Integer.valueOf(pageSize));
//
// QueryWrapper<OcrPicture> wrapper = new QueryWrapper<>();
// wrapper.in("ID",list.stream().map(i->i.getPictureId()).collect(Collectors.toList()));
//
//
// if(orderbyname.equals("desc")){
// wrapper.orderByDesc("create_time");
// }else {
// wrapper.orderByAsc("create_time");
// }
//
// //IPage<OcrPicture> page = ocrpictureservice.page(iPage, wrapper);
Page<OcrTaskChildPictureVo> page = ocrTaskchildDubiousFileService.dubiousfilelist(pageNo,pageSize,orderbyname,userToken,tenantId);
return ResultVoUtil.success(page);
}
@ -101,6 +108,7 @@ public class OcrTaskchildDubiousFileController {
* @param request
* @return
*/
@ApiOperation(value="可疑文件列表移除", notes="可疑文件列表移除")
@RequestMapping(value = "/dubiousfileyc", method = RequestMethod.GET)
public ResultVo dubiousfileyc(HttpServletRequest request, @RequestParam(value = "pictureid", required = true) String pictureid) {
@ -112,28 +120,39 @@ public class OcrTaskchildDubiousFileController {
List<OcrTaskchildDubiousFile> fileList = new ArrayList<>();
for (String childpictureid : cps) {
OcrPicture ocrPicture = ocrpictureservice.selectDtoById(Long.parseLong(childpictureid));
if(ocrPicture != null){
ocrPicture.setSuspiciousfile(0);
ocrPicture.setUpdateTime(System.currentTimeMillis());
saveList.add(ocrPicture);
}
QueryWrapper<OcrTaskchildDubiousFile> dubiouswrapper = new QueryWrapper<>();
dubiouswrapper.eq("userid",userToken.getUserid()).eq("picture_id",childpictureid);
OcrTaskchildDubiousFile one = ocrTaskchildDubiousFileService.getOne(dubiouswrapper);
fileList.add(one);
if(one != null){
fileList.add(one);
}
}
//无对应图片信息
if(CollUtil.isEmpty(saveList)){
return ResultVoUtil.error("可疑文件不存在!");
}
ocrpictureservice.updateBatchById(saveList);
//根据具体情况 判断 是否需要 进行数据返回, 默认不返回数据
return ocrTaskchildDubiousFileService.removeByIds(fileList)?ResultVoUtil.success():ResultVoUtil.error();
return ocrTaskchildDubiousFileService.removeByIds(fileList)?ResultVoUtil.success():ResultVoUtil.error("可疑文件不存在!");
}
/**
*
* @param request
* @return
*/
@ApiOperation(value="可疑文件列表添加", notes="可疑文件列表添加")
@RequestMapping(value = "/dubiousfileyd", method = RequestMethod.GET)
public ResultVo dubiousfileyd(HttpServletRequest request, @RequestParam(value = "pictureid", required = true) String pictureid) {

@ -377,27 +377,15 @@ public class OcrTaskchildPictureController extends BaseController {
@ApiImplicitParam(paramType = "header", name = "X-Tenant-Id", value = "租户主键,用户登录时的信息“tenantList”中获得。", dataType = "String", required = true)
})
@GetMapping("/getSimilarityList")
public ResultVo<IPage<OcrTaskChildPictureVo>> getSimilarityList(HttpServletRequest request) {
//获取页码、当前页
String pageNo = request.getParameter("pageNo");
String pageSize = request.getParameter("pageSize");
if (StringUtils.isEmpty(pageNo) || StringUtils.isEmpty(pageSize)) {
return ResultVoUtil.error("页码和条数必传!");
}
String pictureId = request.getParameter("pictureId");
if (StringUtils.isBlank(pictureId)) {
return ResultVoUtil.error("pictureId必传");
}
//租户主键,由前端页面传送
String tenantId = request.getHeader("X-Tenant-Id");
if (StringUtils.isBlank(tenantId)) {
return ResultVoUtil.error("租户主键不能为空");
}
//排序方式
String orderType = request.getParameter("orderType");
//排序字段
String orderValue = request.getParameter("orderName");
Page<OcrTaskChildPictureVo> similarityList = ocrTaskchildPictureService.getSimilarityList(Integer.valueOf(pageNo), Integer.valueOf(pageSize), pictureId, orderType, orderValue);
public ResultVo<IPage<OcrTaskChildPictureVo>> getSimilarityList(
@RequestParam(name = "pageNo") Integer pageNo,
@RequestParam(name = "pageSize") Integer pageSize,
@RequestParam(name = "orderType") String orderType,
@RequestParam(name = "orderName") String orderName,
@RequestParam(name = "pictureId") String pictureId,
HttpServletRequest request) {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
Page<OcrTaskChildPictureVo> similarityList = ocrTaskchildPictureService.getSimilarityList(pageNo, pageSize, pictureId, orderType, orderName,userToken);
return ResultVoUtil.success(similarityList);
}
@ -413,9 +401,10 @@ public class OcrTaskchildPictureController extends BaseController {
@RequestParam(name = "orderType") String orderType,
@RequestParam(name = "orderName") String orderName,
@RequestParam(name = "checkDuplicateId") String checkDuplicateId,
@RequestParam(name = "pictureId", required = false) String pictureId,
HttpServletRequest req) {
Page<OcrTaskChildPictureVo> result = ocrTaskchildPictureService.getPackageSimilarityList(pageNo, pageSize, orderType, orderName, checkDuplicateId, pictureId);
@RequestParam(name = "pictureId") String pictureId,
HttpServletRequest request) {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
Page<OcrTaskChildPictureVo> result = ocrTaskchildPictureService.getPackageSimilarityList(pageNo, pageSize, orderType, orderName, checkDuplicateId, pictureId,userToken);
return ResultVoUtil.success(result);
}

@ -16,6 +16,8 @@ import cn.jyjz.xiaoyao.ocr.dataobject.OcrUsersearch;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrUsersearchchild;
import cn.jyjz.xiaoyao.ocr.service.OcrUsersearchService;
import cn.jyjz.xiaoyao.ocr.service.OcrUsersearchchildService;
import cn.jyjz.xiaoyao.ocr.util.SearchConfigEnum;
import cn.jyjz.xiaoyao.ocr.vo.SearchConditionVO;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.*;
@ -301,4 +303,21 @@ public class OcrUsersearchController extends BaseController{
}
return ResultVoUtil.success(ocrUsersearch);
}
/**
*
* @param userSearchId
* @return
*/
@ApiOperation(value="获取AI查询过滤条件回写", notes="获取AI查询过滤条件回写")
@GetMapping(value = "/querySearchCondition")
public ResultVo<SearchConditionVO> querySearchCondition(@RequestParam(name="userSearchId",required=true) String userSearchId) {
//解析此条件列表字段并返回前端解析为对应前端字段内容
SearchConditionVO searchConditionVO = ocrUsersearchchildService.querySearchCondition(userSearchId);
if(searchConditionVO==null) {
return ResultVoUtil.error("未找到对应数据");
}
return ResultVoUtil.success(searchConditionVO);
}
}

@ -5,10 +5,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
*
*/
@Mapper
public interface OcrPictureMybatisDao extends BaseMapper<OcrPicture> {
OcrPicture getPackagePictureInfo(@Param("packageId") String packageId, @Param("pictureId") String pictureId);
OcrPicture getPackagePictureInfo(@Param("packageId") String packageId, @Param("pictureId") String pictureId, @Param("userNodeType") String userNodeType);
List<OcrPicture> getPictureNodeStatesList(@Param("pictureIds") List<String> pictureIds, @Param("userNodeType") String userNodeType);
}

@ -27,9 +27,13 @@ public interface OcrSearchHistoryMapper extends BaseMapper<OcrSearchHistory> {
Map<Object,Object> toolscount(@Param("tenantid")String tenantid);
// Map<Object,Object> toolscount(@Param("tenantid")String tenantid);
Map<Object,Object> toolscount(@Param("userId")String userId);
Map<Object,Object> selectaisp(@Param("id")String id);
List<Map<Object, Object>> selectaispList(@Param("id")String id);
String selectaiuser(@Param("userid")String userid);
}

@ -20,5 +20,6 @@ import java.util.Map;
@Mapper
public interface OcrTaskPackageMapper extends BaseMapper<OcrTaskPackage> {
Page<Map<String,Object>> getPackageList(Page<Map<String, Object>> page, @Param("packageName") String packageName);
Page<Map<String,Object>> getPackageList(Page<Map<String, Object>> page, @Param("packageName") String packageName,
@Param("tenantId") String tenantId);
}

@ -1,6 +1,5 @@
package cn.jyjz.xiaoyao.ocr.dataDao;
import cn.jyjz.xiaoyao.oa.from.vo.FlowUnionVo;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPictureAppro;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
@ -50,8 +49,9 @@ public interface OcrTaskchildPictureMybatisDao extends BaseMapper<OcrTaskchildPi
String selectocpicture(@Param("tenantid")String tenantid,@Param("packageid")String packageid,@Param("id")String id);
List<OcrTaskChildPictureVo> getPictureHistoryList(@Param("pictureIds") List<String> pictureIds, @Param("taskname") String taskname);
List<OcrTaskChildPictureVo> getDubiousfileList(@Param("pictureIds") List<String> pictureIds, @Param("taskname") String taskname);
PictureDetailVo getPictureDetail(String pictureId);
Page<OcrTaskChildPictureVo> getPackageSimilarityList(Page<OcrTaskChildPictureVo> page, @Param("checkDuplicateId") String checkDuplicateId, @Param("pictureId") String pictureId, @Param("oderType") String oderType, @Param("oderName") String oderName);
Page<OcrTaskChildPictureVo> getPackageSimilarityList(Page<OcrTaskChildPictureVo> page, @Param("checkDuplicateId") String checkDuplicateId, @Param("pictureId") String pictureId, @Param("oderType") String oderType, @Param("oderName") String oderName, @Param("taskname") String taskname);
}

@ -50,5 +50,7 @@ public class OcrCheckDuplicateResult implements Serializable {
@ApiModelProperty(value = "当前图片在当前任务包下比对最高阈值")
private Double maxSimilarity;
@ApiModelProperty(value = "阈值分组排序值,数值越低排序越靠前,")
private Integer similarityGroupOrder;
}

@ -359,6 +359,14 @@ public class OcrPicture implements BaseDto, java.io.Serializable {
@TableField(value = "photo_date_timestamp")
private Long photoDateTimestamp;
@ApiModelProperty(value = "节点状态")
@TableField(exist = false)
private Integer historyStates;
@ApiModelProperty(value = "节点状态")
@TableField(exist = false)
private String taskId;
//保存当前登录用户的数据权限范围的搜索条件
@TableField(exist = false)
@JsonIgnore

@ -1,9 +1,12 @@
package cn.jyjz.xiaoyao.ocr.dataobject;
import cn.jyjz.xiaoyao.common.base.jsonDomain.DateNotimeSerializer;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
/**
* ClassName $className$.java
@ -12,6 +15,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
* Date 2024/3/22 07:09
*/
@TableName(value = "ocr_picture_info")
@Data
public class OcrPictureInfo {
/**
*
@ -31,6 +35,12 @@ public class OcrPictureInfo {
@TableField(value = "img_size")
private String imgSize;
/**
*
*/
@TableField(value = "img_name")
private String imgName;
/**
*
*/
@ -47,12 +57,14 @@ public class OcrPictureInfo {
*
*/
@TableField(value = "upload_time")
@JsonSerialize(using = DateNotimeSerializer.class)
private Long uploadTime;
/**
*
*/
@TableField(value = "create_time")
@JsonSerialize(using = DateNotimeSerializer.class)
private Long createTime;
/**
@ -65,6 +77,7 @@ public class OcrPictureInfo {
*
*/
@TableField(value = "tag_time")
@JsonSerialize(using = DateNotimeSerializer.class)
private Long tagTime;
/**
@ -73,183 +86,4 @@ public class OcrPictureInfo {
@TableField(value = "`source`")
private String source;
/**
*
*
* @return id -
*/
public Long getId() {
return id;
}
/**
*
*
* @param id
*/
public void setId(Long id) {
this.id = id;
}
/**
*
*
* @return picture_id -
*/
public Long getPictureId() {
return pictureId;
}
/**
*
*
* @param pictureId
*/
public void setPictureId(Long pictureId) {
this.pictureId = pictureId;
}
/**
*
*
* @return img_size -
*/
public String getImgSize() {
return imgSize;
}
/**
*
*
* @param imgSize
*/
public void setImgSize(String imgSize) {
this.imgSize = imgSize;
}
/**
*
*
* @return img_format -
*/
public String getImgFormat() {
return imgFormat;
}
/**
*
*
* @param imgFormat
*/
public void setImgFormat(String imgFormat) {
this.imgFormat = imgFormat;
}
/**
*
*
* @return img_measure -
*/
public String getImgMeasure() {
return imgMeasure;
}
/**
*
*
* @param imgMeasure
*/
public void setImgMeasure(String imgMeasure) {
this.imgMeasure = imgMeasure;
}
/**
*
*
* @return upload_time -
*/
public Long getUploadTime() {
return uploadTime;
}
/**
*
*
* @param uploadTime
*/
public void setUploadTime(Long uploadTime) {
this.uploadTime = uploadTime;
}
/**
*
*
* @return create_time -
*/
public Long getCreateTime() {
return createTime;
}
/**
*
*
* @param createTime
*/
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
/**
*
*
* @return img_space -
*/
public String getImgSpace() {
return imgSpace;
}
/**
*
*
* @param imgSpace
*/
public void setImgSpace(String imgSpace) {
this.imgSpace = imgSpace;
}
/**
*
*
* @return tag_time -
*/
public Long getTagTime() {
return tagTime;
}
/**
*
*
* @param tagTime
*/
public void setTagTime(Long tagTime) {
this.tagTime = tagTime;
}
/**
*
*
* @return source -
*/
public String getSource() {
return source;
}
/**
*
*
* @param source
*/
public void setSource(String source) {
this.source = source;
}
}

@ -4,6 +4,12 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@ -15,7 +21,14 @@ import java.io.Serializable;
* @author 123
* @since 2024-03-15
*/
@TableName("ocr_search_history")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "综合搜索历史表", title = "综合搜索历史表")
@ApiModel(value = "综合搜索历史表", description = "综合搜索历史表")
@TableName(value = "ocr_search_history")
public class OcrSearchHistory extends Model<OcrSearchHistory> {
private static final long serialVersionUID = 1L;
@ -30,13 +43,10 @@ public class OcrSearchHistory extends Model<OcrSearchHistory> {
*/
private String historyname;
public Long getUserid() {
return userid;
}
public void setUserid(Long userid) {
this.userid = userid;
}
/**
* ID
*/
private Long tenantId;
/**
*
@ -47,44 +57,14 @@ public class OcrSearchHistory extends Model<OcrSearchHistory> {
*/
private Long createdate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getHistoryname() {
return historyname;
}
public void setHistoryname(String historyname) {
this.historyname = historyname;
}
public Long getCreatedate() {
return createdate;
}
public void setCreatedate(Long createdate) {
this.createdate = createdate;
}
@Override
public Serializable pkVal() {
return this.id;
}
@Override
public String toString() {
return "OcrSearchHistory{" +
"id=" + id +
", historyname=" + historyname +
", userid=" + userid +
", createdate=" + createdate +
"}";
"id=" + id +
", historyname='" + historyname + '\'' +
", tenantId=" + tenantId +
", userid=" + userid +
", createdate=" + createdate +
'}';
}
}

@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@ -21,6 +22,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.AbstractMap.SimpleEntry;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -131,6 +133,17 @@ public class OcrTaskchildPictureAppro implements java.io.Serializable {
@ApiModelProperty(value = "所属项目")
private String fromprojectid;
@ApiModelProperty(value = "所属项目名称")
private String fromprojectname;
@ApiModelProperty(value = "拜访客户级别")
private String fromCustomerLevel;
@ApiModelProperty(value = "拜访城市")
private String fromCity;
@ApiModelProperty(value = "所属计划")
private String fromplanid;
@ -179,4 +192,7 @@ public class OcrTaskchildPictureAppro implements java.io.Serializable {
@ApiModelProperty(value = "picture表数据")
private OcrPicture picture;
@ApiModelProperty(value = "提交时间")
private Long finishTime;
}

@ -5,6 +5,7 @@ import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrSearchHistory;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
@ -19,9 +20,9 @@ import java.util.Map;
public interface IOcrSearchHistoryService extends IService<OcrSearchHistory> {
Map<Object, List<Map<String,String>>> selectsearch(String search, String assignee, String userId, String tenantId);
ResultVo toolscount(String tenantid);
ResultVo toolscount(String tenantid, String userId, HttpServletRequest request);
Map<Object,Object> selectaisp(String userid,String id);
Map<Object,Object> selectaisp(String userid,String id,Integer nodeType);
ResultVo clearmark(String id);

@ -34,5 +34,5 @@ public interface IOcrTaskPackageService extends IService<OcrTaskPackage> {
* @param packageName
* @return
*/
Page<Map<String, Object>> getPackageList(Integer pageNo, Integer pageSize, String packageName);
Page<Map<String, Object>> getPackageList(Integer pageNo, Integer pageSize, String packageName,String tenantId);
}

@ -1,7 +1,10 @@
package cn.jyjz.xiaoyao.ocr.service;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildDubiousFile;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
/**
@ -14,4 +17,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IOcrTaskchildDubiousFileService extends IService<OcrTaskchildDubiousFile> {
Page<OcrTaskChildPictureVo> dubiousfilelist(Integer pageNo, Integer pageSize, String orderbyname, UserToken userToken, String tenantId);
}

@ -2,7 +2,6 @@ package cn.jyjz.xiaoyao.ocr.service;
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseService;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionary;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionaryGroup;
import liquibase.pro.packaged.L;
/**
*
@ -27,4 +26,14 @@ public interface OcrDictionaryService extends BaseService<OcrDictionary> {
* @return
*/
OcrDictionaryGroup queryGroupByField(String field);
/**
* value lable
*
* @param field
* @param value 1.value(xxx) ,2.value(xxx,xxx)
* @param tenantId
* @return
*/
String queryLabelByValue(String field, String value, String tenantId);
}

@ -6,7 +6,6 @@ import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseService;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -68,6 +67,16 @@ public interface OcrPictureService extends BaseService<OcrPicture> {
String getServerUrl();
OcrPicture getPackagePictureInfo(String packageId, String pictureId);
OcrPicture getPackagePictureInfo(String packageId, String pictureId, UserToken userToken);
/**
* id
* @param pictureIds
* @param nodeType
* @return
*/
List<OcrPicture> getPictureNodeStatesList(List<String> pictureIds,Integer nodeType);
// Long getPhotoDateTime(OcrPicture picture);
}

@ -1,8 +1,10 @@
package cn.jyjz.xiaoyao.ocr.service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import cn.jyjz.flowable.entity.FlowApprove;
import cn.jyjz.xiaoyao.common.base.param.ParamterPage;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
@ -51,7 +53,7 @@ public interface OcrTaskchildPictureService extends BaseService<OcrTaskchildPict
* @param formid
* @return
*/
public boolean validateApprove(List<String> formid);
public List<String> validateApprove(List<String> formid);
public boolean validateBoole(String[] formid);
@ -61,7 +63,7 @@ public interface OcrTaskchildPictureService extends BaseService<OcrTaskchildPict
* @param userToken
* @return
*/
public boolean validateAssignee(List<String> formid,UserToken userToken);
public List<String> validateAssignee(List<String> formid,UserToken userToken);
/**
*
@ -143,10 +145,11 @@ public interface OcrTaskchildPictureService extends BaseService<OcrTaskchildPict
PictureDetailVo getPictureDetail(String pictureId, UserToken userToken);
Page<OcrTaskChildPictureVo> getSimilarityList(Integer pageNo, Integer pageSize, String pictureId, String orderType, String orderValue);
Page<OcrTaskChildPictureVo> getSimilarityList(Integer pageNo, Integer pageSize, String pictureId, String orderType, String orderValue, UserToken userToken);
Page<OcrTaskChildPictureVo> getPackageSimilarityList(Integer pageNo, Integer pageSize, String oderType, String oderName, String checkDuplicateId, String pictureId);
Page<OcrTaskChildPictureVo> getPackageSimilarityList(Integer pageNo, Integer pageSize, String oderType, String oderName, String checkDuplicateId, String pictureId, UserToken userToken);
void sendFlowTaskResult(OcrTaskchildPicture taskchildPicture,OcrPicture picture);
void sendFlowTaskResult(OcrTaskchildPicture taskchildPicture, OcrPicture picture, FlowApprove flowApprove);
List<OcrTaskChildPictureVo> getDubiousfileList(List<String> pictureIds, String userNodeType);
}

@ -3,6 +3,7 @@ package cn.jyjz.xiaoyao.ocr.service;
import java.util.List;
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseService;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrUsersearchchild;
import cn.jyjz.xiaoyao.ocr.vo.SearchConditionVO;
/**
*
@ -16,4 +17,6 @@ public interface OcrUsersearchchildService extends BaseService<OcrUsersearchchil
* @return List<OcrUsersearchchild>
*/
public List<OcrUsersearchchild> selectByMainId(String mainId);
SearchConditionVO querySearchCondition(String userSearchId);
}

@ -45,6 +45,8 @@ public class OcrCheckDuplicateResultServiceImpl extends ServiceImpl<OcrCheckDupl
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("check_duplicate_id", ocrCheckDuplicate.getId());
queryWrapper.orderBy(true,false,"max_similarity");
queryWrapper.orderBy(true,true,"similarity_group_order");
List<OcrCheckDuplicateResult> list = checkDuplicateResultMapper.selectList(queryWrapper);
return list;
}

@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.slf4j.Logger;
@ -33,6 +34,8 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@ -104,6 +107,12 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
checkDuplicateService.comparePictureResultSave(ocrPictureList, sysUser, id);
checkDuplicate.setStatus(2);
} catch (Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String exceptionDetails = sw.toString(); // 包含堆栈跟踪信息的字符串
logger.error(exceptionDetails);
logger.error("异步执行图片比对异常:", e);
logger.error("异步执行图片比对异常:", e.getMessage());
checkDuplicate.setStatus(3);
} finally {
@ -176,13 +185,24 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
//图片信息不能为空
if (null != ocrPictureList && !ocrPictureList.isEmpty()) {
//阈值分组从1开始
int similarityGroupOrder = 1;
//阈值分组map
Map<String,Integer> similarityGroupOrderMap = new HashMap<>();
//1.开启比对任务
for (OcrPicture ocrPicture : ocrPictureList) {
logService.addLog(103, "AI获取图片相似度接口", sysUser, "sendParams");
if (org.apache.commons.lang3.StringUtils.isBlank(ocrPicture.getImgHash())) {
Map<String, String> map = this.getOcrPictureClassifyAndHash(ocrPicture.getLocalpictrueurl());
String url = ocrPicture.getLocalpictrueurl();
if(StringUtils.isBlank(url)){
if(StringUtils.isBlank(ocrPicture.getImgurl())){
continue;
}
url = ocrPicture.getImgurl();
}
Map<String, String> map = this.getOcrPictureClassifyAndHash(url);
if (map != null) {
ocrPicture.setImgHash(map.get("hash"));
ocrPicture.setClassificationid(map.get("classId"));
@ -203,7 +223,15 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
//分类不一致的也不需要进行比对
//TODO 接口请求判断重复情况
if (org.apache.commons.lang3.StringUtils.isBlank(ocrPictureNext.getImgHash())) {
Map<String, String> map = this.getOcrPictureClassifyAndHash(ocrPictureNext.getLocalpictrueurl());
logger.info("图片没有hash值进入分类并获取hash接口:{}",JSONObject.toJSON(ocrPictureNext));
String url = ocrPictureNext.getLocalpictrueurl();
if(StringUtils.isBlank(url)){
if(StringUtils.isBlank(ocrPictureNext.getImgurl())){
continue;
}
url = ocrPictureNext.getImgurl();
}
Map<String, String> map = this.getOcrPictureClassifyAndHash(url);
if (map != null) {
ocrPictureNext.setImgHash(map.get("hash"));
ocrPictureNext.setClassificationid(map.get("classId"));
@ -223,12 +251,27 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
}
ocrPictureNext.setResult(resultValue);
BigDecimal b1 = new BigDecimal(resultValue);
//比对是否重复图片
// BigDecimal b2 = new BigDecimal("100");
// int val = b1.compareTo(b2);
// if (val == 0) {
// havePoint = true;
// }
//进行图片分组
BigDecimal b2 = new BigDecimal("95");
if (b1.compareTo(b2)==1) {
//阈值超过95 对两张图片进行阈值分组
//1.获取主图片组别编号
Integer groupOrderNo = similarityGroupOrderMap.get(ocrPicture.getId().toString());
//2.获取对比图片组别编号
Integer nextGroupOrderNo = similarityGroupOrderMap.get(ocrPictureNext.getId().toString());
if(groupOrderNo==null && nextGroupOrderNo==null){
//2.1 两种图片都没有组别,则创建新的组别
similarityGroupOrderMap.put(ocrPictureNext.getId().toString(),similarityGroupOrder);
similarityGroupOrderMap.put(ocrPicture.getId().toString(),similarityGroupOrder);
similarityGroupOrder = similarityGroupOrder+1;
}else if(groupOrderNo!=null && nextGroupOrderNo==null){
//2.2 主图有组别,对比图没有,将对比图分入主图组别
similarityGroupOrderMap.put(ocrPictureNext.getId().toString(),groupOrderNo);
}else if(nextGroupOrderNo!=null && groupOrderNo==null){
//2.3 对比图有组别,主图没有,将主图分入对比图组别
similarityGroupOrderMap.put(ocrPicture.getId().toString(),nextGroupOrderNo);
}
}
//当前阈值大于 最高阈值 进行替换
if (b1.compareTo(maxSimilarity) == 1) {
maxSimilarity = b1;
@ -242,23 +285,34 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
ocrCheckDuplicateResult.setMaxSimilarity(maxSimilarity.doubleValue());
ocrCheckDuplicateResult.setCompareResultJson(JSONObject.toJSONString(resultMap));
ocrCheckDuplicateResult.setCheckDuplicateId(checkDuplicateId);
if(similarityGroupOrderMap.get(ocrPicture.getId().toString())!=null){
ocrCheckDuplicateResult.setSimilarityGroupOrder(similarityGroupOrderMap.get(ocrPicture.getId().toString()));
}
saveList.add(ocrCheckDuplicateResult);
}
}
logger.info("查重任务:{},开启创建任务",checkDuplicateId);
if (CollectionUtils.isNotEmpty(ocrPictureList)) {
ocrTaskchildPictureService.createTask(ocrPictureList, ocrPictureList.get(0).getTenantId().toString(), sysUser);
}
logger.info("查重任务:{},结束创建任务",checkDuplicateId);
//批量入库
logger.info("查重任务:{},开启批量入库任务",checkDuplicateId);
boolean b = checkDuplicateResultService.saveOrUpdateBatch(saveList);
if (!b) {
throw new Exception("批量入库比对结果失败!");
}
logger.info("查重任务:{},结束批量入库任务",checkDuplicateId);
//开始更新图片最高阈值
logger.info("查重任务:{},更新最高阈值",checkDuplicateId);
this.updatePictureSimilarityScore(saveList);
logger.info("查重任务:{},结束更新最高阈值",checkDuplicateId);
//开始更新 图片历史比对数据结果
logger.info("查重任务:{},更新图片历史比对结果",checkDuplicateId);
this.updateCompareToPictureDuplicateHis(saveList);
logger.info("查重任务:{},结束图片历史比对结果",checkDuplicateId);
}
@Override
@ -396,9 +450,12 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
List<OcrCheckDuplicateResult> ocrCheckDuplicateResults = checkDuplicateResultService.selectListByCheckDuplicateNo(checkDuplicateNo, tenantId);
//调用查询参数解析方法解析为queryWrapper
List<Long> picIdList = new ArrayList<>();
Map<Long,Double> picMaxScoreMap = new HashMap<>();
if(CollUtil.isNotEmpty(ocrCheckDuplicateResults)){
for (OcrCheckDuplicateResult ocrCheckDuplicateResult : ocrCheckDuplicateResults) {
picIdList.add(ocrCheckDuplicateResult.getPictureId());
picMaxScoreMap.put(ocrCheckDuplicateResult.getPictureId(),ocrCheckDuplicateResult.getMaxSimilarity());
}
}
if(CollUtil.isEmpty(picIdList)){
@ -413,7 +470,17 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
Page<OcrPicture> page = new Page<OcrPicture>(pageNo, pageSize);
IPage<OcrPicture> pageList = pictureService.page(page, queryWrapper);
return pageList;
List<OcrPicture> records = pageList.getRecords();
records.forEach(picture ->picture.setSimilarityscore(picMaxScoreMap.get(picture.getId()).intValue()));
List<OcrPicture> collect = records.stream().sorted(Comparator.comparing(OcrPicture::getSimilarityscore).reversed()).collect(Collectors.toList());
Page<OcrPicture> pageVO = new Page<OcrPicture>(pageNo, pageSize);
pageVO.setRecords(collect);
pageVO.setTotal(records.size());
return pageVO;
}
}

@ -1,5 +1,7 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.util.ArrayUtil;
import cn.jyjz.xiaoyao.common.base.util.StringUtils;
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseServiceImpl;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrDictionaryDao;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrDictionaryGroupDao;
@ -8,9 +10,12 @@ import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionaryGroup;
import cn.jyjz.xiaoyao.ocr.service.OcrDictionaryService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
/**
@ -47,4 +52,33 @@ public class OcrDictionaryServiceImpl extends BaseServiceImpl<OcrDictionaryDao,
}
return null;
}
@Override
public String queryLabelByValue(String field, String value, String tenantId) {
if(!StringUtils.isNotBlank(value)){
return null;
}
OcrDictionaryGroup dictionaryGroup = this.queryGroupByField(field);
if(dictionaryGroup==null){
return null;
}
String[] values = value.split(",");
if(values!=null && values.length>0){
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("group_id",dictionaryGroup.getId());
queryWrapper.eq("tenant_id",tenantId);
queryWrapper.in("value",values);
List<OcrDictionary> dictionaries = baseMapper.selectList(queryWrapper);
List<String> result = new ArrayList<>();
if(dictionaries!=null && dictionaries.size()>0){
for (OcrDictionary dictionary: dictionaries) {
result.add(dictionary.getLable());
}
return String.join(",",result);
}
}
return null;
}
}

@ -3,6 +3,7 @@ package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.jyjz.flowable.common.ProcessConstant;
import cn.jyjz.flowable.service.IFlowInstanceService;
import cn.jyjz.xiaoyao.common.base.service.UserTokenService;
import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil;
@ -313,11 +314,82 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
}
@Override
public OcrPicture getPackagePictureInfo(String checkDuplicateId, String pictureId) {
public OcrPicture getPackagePictureInfo(String checkDuplicateId, String pictureId, UserToken userToken) {
String userNodeType = ProcessConstant.userNodeType.getOrDefault(userToken.getNodeType(), "一级审批");
return pictureMybatisDao.getPackagePictureInfo(checkDuplicateId,pictureId);
return pictureMybatisDao.getPackagePictureInfo(checkDuplicateId,pictureId,userNodeType);
}
@Override
public List<OcrPicture> getPictureNodeStatesList(List<String> pictureIds, Integer nodeType) {
String userNodeType = ProcessConstant.userNodeType.getOrDefault(nodeType, "一级审批");
return pictureMybatisDao.getPictureNodeStatesList(pictureIds,userNodeType);
}
// @Override
// public Long getPhotoDateTime(OcrPicture picture) {
// long timestamp = 0L;
// JSONObject requestBody = new JSONObject();
// requestBody.put("task_id", "1111");
// requestBody.put("img_path", picture.getLocalpictrueurl());
// requestBody.put("scenes", 0);
// System.out.println("img_path===============>>>>>>>>>" + picture.getLocalpictrueurl());
// // 创建自定义的HttpClientBuilder设置连接超时和套接字超时
// HttpClientBuilder httpClientBuilder = HttpClients.custom()
// .setDefaultRequestConfig(RequestConfig.custom()
// .setConnectTimeout(30 * 1000) // 设置连接超时时间为30秒
// .setSocketTimeout(30 * 1000) // 设置套接字超时时间为30秒
// .build());
//
// // 使用自定义的HttpClientBuilder创建HttpClient
// HttpClient httpClient = httpClientBuilder.build();
// HttpPost httpPost = new HttpPost(PictureImgToLocalTask.api_test2_identify_url);
// StringEntity requestEntity = new StringEntity(requestBody.toString(), ContentType.APPLICATION_JSON);
// httpPost.setEntity(requestEntity);
// try {
// HttpResponse response = httpClient.execute(httpPost);
// System.out.println("response===========>>>>" + response);
// HttpEntity responseEntity = response.getEntity();
// if (responseEntity != null) {
// String responseString = EntityUtils.toString(responseEntity);
// JSONObject semanticResponseJson = JSONObject.parseObject(responseString);
// System.out.println("semanticResponseJson===========>>>>>>>>" + semanticResponseJson.toString());
// JSONObject semanticResult = semanticResponseJson.getJSONObject("semantic_result");
// System.out.println("semanticResult===========>>>>>>>>" + semanticResult.toString());
// JSONArray timeArray = semanticResult.getJSONArray("时间");
// StringBuilder dateTimeBuilder = new StringBuilder();
// for (int i = 0; i < Math.min(2, timeArray.size()); i++) {
// JSONObject timeObject = timeArray.getJSONObject(i);
// String timeValue = timeObject.getString("ocrText");
// if (i == 0) {
// dateTimeBuilder.append(timeValue);
// dateTimeBuilder.append(" ");
// } else {
// dateTimeBuilder.append(timeValue);
// }
// }
//
// String dateTimeString = dateTimeBuilder.toString();
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// try {
// Date date = sdf.parse(dateTimeString);
// timestamp = date.getTime();
// } catch (ParseException e) {
// e.printStackTrace();
// }
// }
// } catch (ClientProtocolException e) {
// log.error("HTTP请求发生客户端协议异常: " + e.getMessage());
// } catch (IOException e) {
// log.error("HTTP请求发生IO异常: " + e.getMessage());
// }
// return timestamp;
// }
public OcrTaskchildPicture updateTaskChild(OcrPicture ocrPicture, Long packageid, String buessinessno) {
OcrTaskchildPicture ocrTaskchildPicture = ocrTaskchildPictureService.getOne(new LambdaQueryWrapper<OcrTaskchildPicture>().eq(OcrTaskchildPicture::getPictureid, ocrPicture.getId()));
ocrTaskchildPicture.setBuessinessno(buessinessno);
@ -601,7 +673,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
//2.调整图片地址,补齐域名
for (OcrPicture picture : ocrPictureList) {
picture.setCreateTime(System.currentTimeMillis()); //获取创建时间戳
picture.setImgurl(interfaceDomain + picture.getImgurl());
// picture.setImgurl(interfaceDomain + picture.getImgurl());
}
boolean saveBatch = this.saveBatch(ocrPictureList);
@ -621,6 +693,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
OcrPictureInfo imageInfo = getImageInfo(ocrPicture.getImgurl());
if (ObjectUtil.isNotEmpty(imageInfo)) {
imageInfo.setPictureId(ocrPicture.getId());
imageInfo.setImgName(ocrPicture.getImgname());
list.add(imageInfo);
}
}
@ -665,15 +738,14 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
break;
}
String formatName = ImageIO.getImageReadersByMIMEType("image/jpeg").next().getFormatName();
System.out.println("Image Size: " + imageSize + " bytes");
System.out.println("Width: " + width + ", Height: " + height);
System.out.println("Color Space: " + colorSpaceType);
info.setCreateTime(System.currentTimeMillis());
info.setUploadTime(System.currentTimeMillis());
info.setTagTime(System.currentTimeMillis());
info.setImgSpace(colorSpaceType);
info.setImgSize(imageSize.toString());
info.setImgMeasure(width + "x" + height);
info.setImgFormat(formatName);
info.setSource("无量云2.0");
return info;
} else {
log.info("Cannot read image from URL.");

@ -1,19 +1,44 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.jyjz.flowable.common.ProcessConstant;
import cn.jyjz.flowable.entity.FlowTaskInfo;
import cn.jyjz.flowable.service.IFlowTaskService;
import cn.jyjz.flowable.utils.PageUtils;
import cn.jyjz.xiaoyao.admin.dataobject.SFrontmenuT;
import cn.jyjz.xiaoyao.admin.dataobject.User;
import cn.jyjz.xiaoyao.admin.service.ISFrontmenuTService;
import cn.jyjz.xiaoyao.admin.service.UserService;
import cn.jyjz.xiaoyao.common.base.service.UserTokenService;
import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil;
import cn.jyjz.xiaoyao.common.base.util.requestFormat.SearchQuery;
import cn.jyjz.xiaoyao.common.base.util.requestFormat.SearchQueryUtil;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.common.redis.cache.ICacheManager;
import cn.jyjz.xiaoyao.common.redis.cache.constants.CacheConstants;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrTaskchildPictureMybatisDao;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrSearchHistory;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPictureAppro;
import cn.jyjz.xiaoyao.ocr.service.IOcrSearchHistoryService;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.service.OcrTaskchildPictureService;
import cn.jyjz.xiaoyao.ocr.util.FrontMenuEnum;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrSearchHistoryMapper;
import javax.annotation.Resource;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.stream.Collectors;
@ -37,15 +62,39 @@ public class OcrSearchHistoryServiceImpl extends ServiceImpl<OcrSearchHistoryMap
@Resource
private OcrPictureService ocrPictureService;
@Override
public Map<Object, List<Map<String,String>>> selectsearch(String search, String assignee, String userId, String tenantId) {
@Resource
private OcrTaskchildPictureMybatisDao taskchildPictureMybatisDao;
@Resource
private UserService userService;
@Resource
IFlowTaskService flowTaskService;
@Resource
private ISFrontmenuTService isFrontmenuTService;
List<Map<String,String>> strings1 = ocrsearchhistorymapper.selectsearch1(userId,search,tenantId);
List<Map<String,String>> strings2 = ocrsearchhistorymapper.selectsearch2(assignee,search,tenantId);
List<Map<String,String>> strings3 = ocrsearchhistorymapper.selectsearch3(assignee,search,tenantId);
@Override
public Map<Object, List<Map<String,String>>> selectsearch(String search, String assignee, String userId, String tenantId) {
List<Map<String,String>> strings1 = new ArrayList<>();
List<Map<String,String>> strings2 = new ArrayList<>();
List<Map<String,String>> strings3 = new ArrayList<>();
//查询用户搜索的数据前需要判断用户是否有对应菜单模块的权限并过滤
//返回用户前端菜单权限列表
List<SFrontmenuT> frontmenuTList = isFrontmenuTService.queryUserMenuById(assignee);
if(CollUtil.isNotEmpty(frontmenuTList)){
for (SFrontmenuT sFrontmenuT : frontmenuTList) {
if(sFrontmenuT.getResKey().equals(FrontMenuEnum.WORKSHEETMAIN.getResKey())){
strings1 = ocrsearchhistorymapper.selectsearch1(userId,search,tenantId);
}
if(sFrontmenuT.getResKey().equals(FrontMenuEnum.TASKMAIN.getResKey())){
strings2 = ocrsearchhistorymapper.selectsearch2(assignee,search,tenantId);
}
if(sFrontmenuT.getResKey().equals(FrontMenuEnum.FINALMAIN.getResKey())){
strings3 = ocrsearchhistorymapper.selectsearch3(assignee,search,tenantId);
}
}
}
// List<Map<Object,List<Map<String,String>>>> list = new ArrayList<>();
Map<Object,List<Map<String,String>>> map=new HashMap<>();
@ -59,51 +108,128 @@ public class OcrSearchHistoryServiceImpl extends ServiceImpl<OcrSearchHistoryMap
}
@Override
public ResultVo toolscount(String tenantid) {
public ResultVo toolscount(String tenantid, String userId, HttpServletRequest request) {
ResultVo<Map<String, Integer>> resultVo = null;
try {
//系统中记录的ai统计租户id
String counttenantid = iCacheManager.get(CacheConstants.TOOLSCOUNT_TENANTID_MODEL_NAME,tenantid+"_"+userId);
// if(!StringUtils.isBlank(counttenantid)){
// return ResultVoUtil.error("true");
// }
//用户登录信息写入缓存
iCacheManager.put(CacheConstants.TOOLSCOUNT_TENANTID_MODEL_NAME,tenantid+"_"+userId,"true",CacheConstants.TOOLSCOUNT_TENANTID_CACHE_TIME);
SearchQuery searchQuery = this.getParametersStartingWithToSearchJson(request, "search_");
String taskName = request.getParameter("keyword");
if (StringUtils.isNotBlank(taskName)) {
searchQuery.addLike("fromtaskname", taskName);
}
User user = this.userService.getSessionUser(request);
PageUtils pageUtils = new PageUtils();
pageUtils.setPageSize(9999);
pageUtils.setCurrPage(1);
List<OcrTaskchildPictureAppro> ocrTaskchildPictureApproList = flowTaskService.getMyProcessInstancesNew(user, tenantid, searchQuery.getQuery(), pageUtils);
resultVo = new ResultVo<>();
int pendingApprovalCount = 0; // 待审批的数量
int approvedCount = 0; // 通过的数量
int notGoCount = 0; // 不通过的数量
for (OcrTaskchildPictureAppro ocrTaskchildPictureAppro : ocrTaskchildPictureApproList) {
if (ocrTaskchildPictureAppro.getStatshis() != null) {
switch (ocrTaskchildPictureAppro.getStatshis()) {
case 1:
pendingApprovalCount++;
break;
case 2:
approvedCount++;
break;
case 3:
notGoCount++;
break;
default:
break;
}
} else {
//暂定,后期修改
pendingApprovalCount++;
}
}
//系统中记录的ai统计租户id
String counttenantid = iCacheManager.get(CacheConstants.TOOLSCOUNT_TENANTID_MODEL_NAME,tenantid);
if(!StringUtils.isBlank(counttenantid)){
return ResultVoUtil.error("true");
Map<String, Integer> counts = new HashMap<>();
counts.put("total", approvedCount + pendingApprovalCount + notGoCount);
counts.put("treat", pendingApprovalCount);
counts.put("approvedCount", approvedCount+notGoCount);
resultVo.setCode("OK");
resultVo.setMessage("成功");
resultVo.setData(counts);
} catch (Exception e) {
e.printStackTrace();
}
//用户登录信息写入缓存
iCacheManager.put(CacheConstants.TOOLSCOUNT_TENANTID_MODEL_NAME,tenantid,"true",CacheConstants.TOOLSCOUNT_TENANTID_CACHE_TIME);
Map<Object, Object> toolscount = ocrsearchhistorymapper.toolscount(tenantid);
return ResultVoUtil.success(toolscount);
return resultVo;
}
@Override
public Map<Object, Object> selectaisp(String userid,String id) {
Map<Object, Object> selectaisp = ocrsearchhistorymapper.selectaisp(id);
if(null==selectaisp){
return null;
public Map<Object, Object> selectaisp(String userid, String id,Integer nodeType) {
List<Map<Object, Object>> resultList = ocrsearchhistorymapper.selectaispList(id);
Map<Object, Object> mappedResults = new LinkedHashMap<>();
if (resultList == null || resultList.isEmpty()) {
return Collections.emptyMap();
}
String selectaiuser = ocrsearchhistorymapper.selectaiuser(userid);
mappedResults.put("packageId", id);
mappedResults.put("tenantUserName", selectaiuser);
mappedResults.put("packageName", resultList.get(0).get("packageName"));
mappedResults.put("createTime", resultList.get(0).get("createTime"));
int similarComplete = 0;
List<String> pictureIds = new ArrayList<>(); // 存储所有的pictureId
for (Map<Object, Object> selectaisp : resultList) {
if(selectaisp.size()!=0){
Object pictureResult = selectaisp.get("pictureResult");
String pictureResultStr = pictureResult.toString();
if ("100.0".equals(pictureResultStr)) {
// if (Double.parseDouble(pictureResultStr) < 90.0) {
similarComplete++;
Long pictureId = (Long) selectaisp.get("pictureId");
if (pictureId != null) {
pictureIds.add(String.valueOf(pictureId)); // 转换为String
}
}
}
String[] cps = selectaisp.get("pictureresult").toString().split(",");
List<OcrPicture> saveList = new ArrayList<>();
int i=0;
for (String childpictureid : cps) {
if (childpictureid.equals("100.00")){
i++;
}
List<FlowTaskInfo> pendingApprovalList = new ArrayList<>(); // 存储待审批的pictureId集合
List<String> approvedList = new ArrayList<>(); // 存储通过的pictureId集合
List<String> failedList = new ArrayList<>(); // 存储不通过的pictureId集合
if(pictureIds.size()!=0){
String userNodeType = ProcessConstant.userNodeType.getOrDefault(nodeType, "一级审批");
List<OcrTaskChildPictureVo> failedPictureIds = taskchildPictureMybatisDao.getPictureHistoryList(pictureIds, userNodeType);
for (OcrTaskChildPictureVo picture : failedPictureIds) {
if (picture.getHistoryStates() == 3) {
failedList.add(picture.getId());
} else if (picture.getHistoryStates() == 1) {
FlowTaskInfo flowTaskInfo = new FlowTaskInfo();
flowTaskInfo.setFormId(picture.getId());
flowTaskInfo.setTaskId(picture.getTaskId());
flowTaskInfo.setTaskName(picture.getTaskName());
pendingApprovalList.add(flowTaskInfo);
} else if (picture.getHistoryStates() == 2) {
approvedList.add(picture.getId());
}
}
}
Map<Object,Object> map=new HashMap<>();
map.put("taskid",id);
map.put("tenantusername",selectaiuser);
map.put("packagename",selectaisp.get("packagename"));
map.put("tasks","基线任务");
map.put("similarcount",selectaisp.get("similarcount"));
map.put("createtime",selectaisp.get("createtime"));
map.put("similarComplete",i);
return map;
int pendingApprovaCount = pendingApprovalList.size(); // 待审批的数量
int passCount = approvedList.size(); // 通过的数量
mappedResults.put("similarComplete", similarComplete);
mappedResults.put("passCount", passCount);
mappedResults.put("pendingApprovaCount", pendingApprovaCount);
mappedResults.put("flowTaskInfoList", pendingApprovalList);
return mappedResults;
}
@Override
public ResultVo clearmark(String id) {
@ -126,14 +252,31 @@ public class OcrSearchHistoryServiceImpl extends ServiceImpl<OcrSearchHistoryMap
}
// List<OcrPicture> collect = Arrays.stream(cps)
// .map(Long::parseLong)
// .map(childpictureid -> this.ocrPictureService.selectDtoById(childpictureid))
// .filter(ocrPicture->ocrPicture.getSimilarityscore() >= 90)
//
// .collect(Collectors.toList());
return this.ocrPictureService.updateBatchById(saveList) ? ResultVoUtil.success() : ResultVoUtil.error();
}
/**
*Request Parameters, copy from spring WebUtils.
* @param request
* @param prefix
* @return Parameter.ligerui使
*/
public SearchQuery getParametersStartingWithToSearchJson(ServletRequest request, String prefix) {
Map<String, Object> params = SearchQueryUtil.getParametersStartingWith(request,prefix);
SearchQuery searchQuery = new SearchQuery();
if(null != params && params.size() > 0){
for (Map.Entry<String, Object> entry : params.entrySet()) {
JSONObject obj = JSON.parseObject(entry.getValue().toString());
String value = obj.getString("value");
if(StringUtils.isNotBlank(value) && !"null".equals(value) && !"undefined".equals(value)){
obj.put("field",entry.getKey());
searchQuery.addJsonQuery(obj);
}
}
}
return this.ocrPictureService.updateBatchById(saveList) ? ResultVoUtil.success() : ResultVoUtil.error();
return searchQuery;
}
}

@ -1,6 +1,8 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.jyjz.xiaoyao.admin.dataobject.User;
import cn.jyjz.xiaoyao.admin.service.UserService;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrTaskPackageMapper;
@ -9,17 +11,21 @@ import cn.jyjz.xiaoyao.ocr.dto.OcrTaskPackageDto;
import cn.jyjz.xiaoyao.ocr.service.*;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
@ -38,6 +44,12 @@ public class OcrTaskPackageServiceImpl extends ServiceImpl<OcrTaskPackageMapper,
@Resource
private OcrTaskPackageMapper taskPackageMapper;
@Resource
private OcrFieldService fieldService;
@Resource
private UserService userService;
@Resource
private OcrDictionaryService ocrDictionaryService;
@Override
public ResultVo saveTaskPackage(OcrTaskPackageDto ocrTaskPackage) {
@ -50,28 +62,46 @@ public class OcrTaskPackageServiceImpl extends ServiceImpl<OcrTaskPackageMapper,
BeanUtil.copyProperties(ocrTaskPackage, taskPackage);
taskPackage.setCheckDuplicateId(ocrCheckDuplicate.getId());
if (this.save(taskPackage)) {
return ResultVoUtil.success("创建任务包成功!");
return ResultVoUtil.success("创建任务包成功",taskPackage);
}
return ResultVoUtil.error("创建任务包失败!");
}
@Override
public Page<Map<String, Object>> getPackageList(Integer pageNo, Integer pageSize, String packageName) {
public Page<Map<String, Object>> getPackageList(Integer pageNo, Integer pageSize, String packageName,String tenantId) {
Page<Map<String, Object>> page = new Page<>(pageNo, pageSize);
Page<Map<String, Object>> result = taskPackageMapper.getPackageList(page, packageName);
if(CollectionUtils.isNotEmpty(result.getRecords())){
Page<Map<String, Object>> result = taskPackageMapper.getPackageList(page, packageName,tenantId);
if (CollectionUtils.isNotEmpty(result.getRecords())) {
List<OcrField> list = fieldService.list(new LambdaQueryWrapper<OcrField>().eq(OcrField::getReviewType, 1));
List<Map<String, Object>> records = result.getRecords();
List<String> fieldName = list.stream().map(OcrField::getName).collect(Collectors.toList());
for (Map<String, Object> record : records) {
record.put("id",record.get("id").toString());
record.put("checkDuplicateId",record.get("checkDuplicateId").toString());
record.put("id", record.get("id").toString());
record.put("checkDuplicateId", record.get("checkDuplicateId").toString());
Object search = record.getOrDefault("search", null);
if(search!=null){
if (search != null) {
Map map = JSONObject.parseObject(search.toString(), Map.class);
for (String field : fieldName) {
if (!map.containsKey(field)) {
map.put(field, "");
}
}
disMapData(map,tenantId);
map.putAll(record);
record.putAll(map);
record.put("searchTime",map.getOrDefault("submit_date_timestamp","").toString());
}
}
}
return result;
}
private void disMapData(Map map,String tenantId) {
Object field1 = map.get("upuserid");
if (ObjectUtils.isNotEmpty(field1)) {
String result = ocrDictionaryService.queryLabelByValue("person",field1.toString(),tenantId);
if (!StringUtils.isEmpty(result)) {
map.put("upuserid", result);
}
}
}
}

@ -1,11 +1,30 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.jyjz.flowable.common.ProcessConstant;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrTaskchildDubiousFileMapper;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureInfo;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildDubiousFile;
import cn.jyjz.xiaoyao.ocr.service.IOcrTaskchildDubiousFileService;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureInfoService;
import cn.jyjz.xiaoyao.ocr.service.OcrTaskchildPictureService;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
*
@ -17,4 +36,55 @@ import org.springframework.stereotype.Service;
@Service
public class OcrTaskchildDubiousFileServiceImpl extends ServiceImpl<OcrTaskchildDubiousFileMapper, OcrTaskchildDubiousFile> implements IOcrTaskchildDubiousFileService {
@Resource
private OcrPictureInfoService pictureInfoService;
@Resource
private OcrTaskchildPictureService ocrTaskchildPictureService;
/**
* ,
*
* @param pageNo
* @param pageSize
* @param orderbyname
* @param userToken
* @param tenantId
* @return
*/
@Override
public Page<OcrTaskChildPictureVo> dubiousfilelist(Integer pageNo, Integer pageSize, String orderbyname, UserToken userToken, String tenantId) {
Page<OcrTaskChildPictureVo> objectPage = new Page<>(Integer.valueOf(pageNo), Integer.valueOf(pageSize));
//获取可疑文件图片列表
QueryWrapper<OcrTaskchildDubiousFile> dubiouswrapper = new QueryWrapper<>();
dubiouswrapper.eq("userid", userToken.getUserid());
dubiouswrapper.eq("tenantid", tenantId);
List<OcrTaskchildDubiousFile> list = this.list(dubiouswrapper);
if (list.size() == 0) {
return objectPage;
}
//提取可疑图片列表id
List<String> pictureIdList = list.stream().map(i -> String.valueOf(i.getPictureId())).collect(Collectors.toList());
//确定用户审批节点对应阶段的图片审核状态
String userNodeType = ProcessConstant.userNodeType.getOrDefault(userToken.getNodeType(), "一级审批");
List<OcrTaskChildPictureVo> taskChildPictures = ocrTaskchildPictureService.getDubiousfileList(new ArrayList<>(pictureIdList), userNodeType);
if (CollUtil.isNotEmpty(taskChildPictures)) {
//按时间字段排序
if ("desc".equals(orderbyname)) {
taskChildPictures.sort(Comparator.comparing(OcrTaskChildPictureVo::getSubmitDateTimestamp).reversed());
} else {
taskChildPictures.sort(Comparator.comparing(OcrTaskChildPictureVo::getSubmitDateTimestamp));
}
List<OcrTaskChildPictureVo> records = taskChildPictures.stream().skip((pageNo - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
objectPage.setRecords(records);
objectPage.setTotal(taskChildPictures.size());
}
return objectPage;
}
}

@ -1,10 +1,16 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.map.MapBuilder;
import cn.hutool.core.util.ObjectUtil;
import cn.jyjz.flowable.common.ProcessConstant;
import cn.jyjz.flowable.common.SystemConstantsOa;
import cn.jyjz.flowable.domain.vo.FlowModelVO;
import cn.jyjz.flowable.entity.FlowApprove;
import cn.jyjz.flowable.service.IFlowInstanceService;
import cn.jyjz.flowable.service.IFlowTaskService;
import cn.jyjz.flowable.service.IFormCustomService;
import cn.jyjz.xiaoyao.common.base.param.ParamterPage;
import cn.jyjz.xiaoyao.common.base.util.SpringUtils;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
@ -14,6 +20,7 @@ import cn.jyjz.xiaoyao.oa.from.service.CategoryService;
import cn.jyjz.xiaoyao.oa.from.service.UserapproveService;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrTaskchildPictureMybatisDao;
import cn.jyjz.xiaoyao.ocr.dataobject.*;
import cn.jyjz.xiaoyao.ocr.dto.ApproveNodeDto;
import cn.jyjz.xiaoyao.ocr.dto.FlowResultDto;
import cn.jyjz.xiaoyao.ocr.dto.UserapproveDto;
import cn.jyjz.xiaoyao.ocr.service.IOcrPictureDuplicateHisService;
@ -31,6 +38,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.task.api.Task;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.stereotype.Service;
@ -53,6 +63,9 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
@Resource
private OcrTaskchildPictureMybatisDao ocrtaskchildpicturemybatisdao;
@Resource
private IFlowTaskService taskService;
@Resource
private OcrPictureService ocrPictureService;
@ -203,21 +216,21 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
* @param userToken
* @return
*/
public boolean validateAssignee(List<String> formid, UserToken userToken) {
public List<String> validateAssignee(List<String> formid, UserToken userToken) {
List<String> formIds = new ArrayList<>();
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.in("ID", formid);
List<OcrTaskchildPicture> list = this.ocrtaskchildpicturemybatisdao.selectList(queryWrapper);
//目前没有做其他信息返回,如果需要再做修改
for (OcrTaskchildPicture ocrTaskchildPicture : list) {
//判断审批人是否为当前登录用户
if (userToken.getLoginname().equals(ocrTaskchildPicture.getAssignee())) {
} else {
return false;
if (userToken.getLoginname().equals(ocrTaskchildPicture.getAssignee()) &&
(ocrTaskchildPicture.getStates().intValue() != SystemConstantsOa.OA_STATUS_TYPE_END
&& ocrTaskchildPicture.getStates().intValue() != SystemConstantsOa.OA_STATUS_TYPE_REFUSE)) {
formIds.add(ocrTaskchildPicture.getId().toString());
}
}
return true;
return formIds;
}
/**
@ -226,22 +239,17 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
* @param formid
* @return
*/
public boolean validateApprove(List<String> formid) {
public List<String> validateApprove(List<String> formid) {
List<String> formIds = new ArrayList<>();
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.in("ID", formid);
List<OcrTaskchildPicture> list = this.ocrtaskchildpicturemybatisdao.selectList(queryWrapper);
//目前没有做其他信息返回,如果需要再做修改
for (OcrTaskchildPicture ocrTaskchildPicture : list) {
//判断当前审批状态为拒绝或者通过的,不允许再做审批
if (ocrTaskchildPicture.getStates().intValue() == SystemConstantsOa.OA_STATUS_TYPE_END
|| ocrTaskchildPicture.getStates().intValue() == SystemConstantsOa.OA_STATUS_TYPE_REFUSE) {
return false;
} else {
}
}
return true;
return formIds;
}
@ -321,11 +329,21 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
ocrTaskchildPicture.getId().toString(),
category.getServicename()
);
IFormCustomService iFormCustomService = SpringUtils.getBean(category.getServicename());
FlowModelVO formData = iFormCustomService.getForm(ocrTaskchildPicture.getId().toString());
List<Task> taskList = iFlowTaskService.nowRunTask(formData.getProcessInstanceId(), ocrTaskchildPicture.getProcessdefinitionid());
Task taskData = null;
if (null != taskList && !taskList.isEmpty()) {
taskData = taskList.get(0);
ocrTaskchildPicture.setAssignee(taskData.getAssignee());
}
ocrPicture.setTaskchildpictureid(ocrTaskchildPicture.getId().toString());
//修改状态为已生成任务并且审批状态为审批中
ocrPicture.setTaskstatus("1");
ocrPicture.setWorkStatus("1");
ocrPictureService.updateById(ocrPicture);
taskService.sendMsg(ocrTaskchildPicture, userToken);
}
}
}
@ -372,7 +390,7 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
if (null != userToken) {
Optional<Userapprove> first = list.stream().filter(userapprove -> userapprove.getUserid().toString().equals(userToken.getUserid())).findFirst();
Userapprove userapprove = new Userapprove();
userapprove.setStatshis(1);
userapprove.setStatshis(ocrTaskchildPicture.getStates()==3?2:ocrTaskchildPicture.getStates()==5?3:1);
ocrTaskchildPicture.setUserapprove(first.orElse(userapprove));
}
//查询图片对象
@ -549,7 +567,7 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
ocrTaskchildPicture.setCategoryid(ocrPicture.getCategoryid());
ocrTaskchildPicture.setFromsourceid(ocrPicture.getField4());
ocrTaskchildPicture.setFromuptime(ocrPicture.getUptime());
ocrTaskchildPicture.setFromuptime(ocrPicture.getSubmitDateTimestamp());
ocrTaskchildPicture.setFromplanid(ocrPicture.getPlanid());
ocrTaskchildPicture.setFromprojectid(ocrPicture.getProjectid());
ocrTaskchildPicture.setFromuserid(ocrPicture.getUpuserid());
@ -650,28 +668,28 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
}
@Override
public Page<OcrTaskChildPictureVo> getSimilarityList(Integer pageNo, Integer pageSize, String pictureId, String orderType, String orderValue) {
public Page<OcrTaskChildPictureVo> getSimilarityList(Integer pageNo, Integer pageSize, String pictureId, String orderType, String orderValue, UserToken userToken) {
OcrPictureDuplicateHis duplicateHis = pictureDuplicateHisService.getOne(new LambdaQueryWrapper<OcrPictureDuplicateHis>().eq(OcrPictureDuplicateHis::getPictureId, pictureId));
Page<OcrTaskChildPictureVo> objectPage = new Page<>();
if (ObjectUtils.isNotEmpty(duplicateHis) && org.apache.commons.lang3.StringUtils.isNotBlank(duplicateHis.getCheckDuplicateResultHisJson())) {
OcrTaskchildPicture one = this.getOne(new LambdaQueryWrapper<OcrTaskchildPicture>().eq(OcrTaskchildPicture::getPictureid, pictureId));
String userNodeType = ProcessConstant.userNodeType.getOrDefault(userToken.getNodeType(), "一级审批");
JSONObject jsonObject = JSONObject.parseObject(duplicateHis.getCheckDuplicateResultHisJson());
Set<String> pictureIds = jsonObject.keySet();
List<OcrTaskChildPictureVo> taskChildPictures = this.getPictureHistoryList(new ArrayList<>(pictureIds), one.getTaskname());
List<OcrTaskChildPictureVo> taskChildPictures = this.getPictureHistoryList(new ArrayList<>(pictureIds), userNodeType);
for (OcrTaskChildPictureVo taskChildPicture : taskChildPictures) {
taskChildPicture.setSimilarityScore(Integer.parseInt(jsonObject.getString(taskChildPicture.getPictureId().toString())));
}
if (orderValue.equals("similarityScore")) {
if ("desc".equals(orderType)) {
taskChildPictures.sort(Comparator.comparing(OcrTaskChildPictureVo::getSimilarityScore).reversed());
taskChildPictures.sort(Comparator.comparing(OcrTaskChildPictureVo::getSimilarityScore).thenComparing(OcrTaskChildPictureVo::getSubmitDateTimestamp).reversed());
} else {
taskChildPictures.sort(Comparator.comparing(OcrTaskChildPictureVo::getSimilarityScore));
taskChildPictures.sort(Comparator.comparing(OcrTaskChildPictureVo::getSimilarityScore).thenComparing(OcrTaskChildPictureVo::getSubmitDateTimestamp));
}
} else {
if ("desc".equals(orderType)) {
taskChildPictures.sort(Comparator.comparing(OcrTaskChildPictureVo::getCreateDate).reversed());
taskChildPictures.sort(Comparator.comparing(OcrTaskChildPictureVo::getFromupTime).reversed());
} else {
taskChildPictures.sort(Comparator.comparing(OcrTaskChildPictureVo::getCreateDate));
taskChildPictures.sort(Comparator.comparing(OcrTaskChildPictureVo::getFromupTime));
}
}
List<OcrTaskChildPictureVo> collect = taskChildPictures.stream().skip((pageNo - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
@ -683,21 +701,52 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
}
@Override
public Page<OcrTaskChildPictureVo> getPackageSimilarityList(Integer pageNo, Integer pageSize, String oderType, String oderName, String checkDuplicateId, String pictureId) {
public Page<OcrTaskChildPictureVo> getPackageSimilarityList(Integer pageNo, Integer pageSize, String oderType, String oderName, String checkDuplicateId, String pictureId, UserToken userToken) {
Page<OcrTaskChildPictureVo> page = new Page<>(pageNo, pageSize);
String userNodeType = ProcessConstant.userNodeType.getOrDefault(userToken.getNodeType(), "一级审批");
return ocrtaskchildpicturemybatisdao.getPackageSimilarityList(page, checkDuplicateId, pictureId, oderType, oderName);
return ocrtaskchildpicturemybatisdao.getPackageSimilarityList(page, checkDuplicateId, pictureId, oderType, oderName, userNodeType);
}
@Override
public void sendFlowTaskResult(OcrTaskchildPicture taskchildPicture, OcrPicture picture) {
public void sendFlowTaskResult(OcrTaskchildPicture taskchildPicture, OcrPicture picture, FlowApprove flowApprove) {
FlowResultDto flowResultDto = new FlowResultDto();
flowResultDto.setTenantNo(picture.getTenantId());
flowResultDto.setAccountNo(Long.parseLong(picture.getPictureid()));
flowResultDto.setTaskNo(Long.parseLong(picture.getRemark()));
flowResultDto.setPictureMatchDegree(BigDecimal.valueOf(picture.getSimilarityscore()));
flowResultDto.setIsPictureRepeat(Integer.valueOf(picture.getField14()));
Integer resultStatus = taskchildPicture.getStates() == SystemConstantsOa.OA_STATUS_TYPE_END ? SystemConstantsOa.OCR_STATUS_SUCCESS : SystemConstantsOa.OCR_STATUS_FAILURE;
flowResultDto.setIsPictureRight(picture.getIztrueorfalse());
Integer resultStatus = Objects.equals(taskchildPicture.getStates(), SystemConstantsOa.OA_STATUS_TYPE_END) ? SystemConstantsOa.OCR_STATUS_SUCCESS : SystemConstantsOa.OCR_STATUS_FAILURE;
flowResultDto.setApproveResult(resultStatus);
flowResultDto.setApproveRemark(flowApprove.getComment());
List<ApproveNodeDto> nodeList = new ArrayList<>();
List<Userapprove> userApproves = userapproveService.list(new LambdaQueryWrapper<Userapprove>().eq(Userapprove::getFormid, taskchildPicture.getId()));
if (CollectionUtils.isNotEmpty(userApproves)) {
for (Userapprove userApprove : userApproves) {
ApproveNodeDto approveNode = getApproveNodeDto(userApprove);
nodeList.add(approveNode);
}
}
flowResultDto.setApproveDetailList(nodeList);
}
@Override
public List<OcrTaskChildPictureVo> getDubiousfileList(List<String> pictureIds, String taskname) {
return ocrtaskchildpicturemybatisdao.getDubiousfileList(pictureIds, taskname);
}
private static ApproveNodeDto getApproveNodeDto(Userapprove userApprove) {
ApproveNodeDto approveNode = new ApproveNodeDto();
approveNode.setApproveRemark(userApprove.getTaskcomment());
approveNode.setApproveResult(userApprove.getStatshis() == 2 ? 0 : 1);
approveNode.setApproveWay(0);
approveNode.setNodeName(userApprove.getTaskname());
approveNode.setReason(userApprove.getReason());
approveNode.setApproveByName(userApprove.getUsername());
//审批不通过出来方式
approveNode.setProcessMethod(1);
return approveNode;
}
}

@ -1,13 +1,19 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrUsersearchchildMybatisDao;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrUsersearchchild;
import cn.jyjz.xiaoyao.ocr.service.OcrUsersearchchildService;
import cn.jyjz.xiaoyao.ocr.util.SearchConfigEnum;
import cn.jyjz.xiaoyao.ocr.vo.SearchConditionVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
*
@ -18,10 +24,92 @@ public class OcrUsersearchchildServiceImpl extends BaseServiceImpl<OcrUsersearch
@Autowired
private OcrUsersearchchildMybatisDao ocrusersearchchildmybatisdao;
@Resource
private OcrUsersearchchildService ocrUsersearchchildService;
@Override
public List<OcrUsersearchchild> selectByMainId(String mainId) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("usersearchid",mainId);
return ocrusersearchchildmybatisdao.selectList(queryWrapper);
}
/**
* AI
* @param userSearchId
* @return
*/
@Override
public SearchConditionVO querySearchCondition(String userSearchId) {
//获取条件id下的所有条件
List<OcrUsersearchchild> list = ocrUsersearchchildService.selectByMainId(userSearchId);
SearchConditionVO vo = new SearchConditionVO();
List<SearchConditionVO> conditionVOList = new ArrayList<>();
for (OcrUsersearchchild ocrUsersearchchild : list) {
String searchfield = ocrUsersearchchild.getSearchfield();//解析对应字段
if(SearchConfigEnum.PROJECT.getId().equals(searchfield)){
vo.setIzproject(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.FILED2.getId().equals(searchfield)){
vo.setIzcustomtype(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.FILED3.getId().equals(searchfield)){
vo.setIzcustomname(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.FIELD4.getId().equals(searchfield)){
vo.setIztaskrrom(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.FIELD5.getId().equals(searchfield)){
vo.setIzfirm(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.FILED6.getId().equals(searchfield)){
vo.setIzcustomlevel(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.FIELD9.getId().equals(searchfield)){
vo.setIzproductname(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.FIELD16.getId().equals(searchfield)){
vo.setIztaskstatus(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.FIELD17.getId().equals(searchfield)){
vo.setIzprojecttype(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.PROCINCE.getId().equals(searchfield)){
vo.setIzvisitpro(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.UPUSERSEARCH.getId().equals(searchfield)){
vo.setIzupuser(ocrUsersearchchild.getSearchvalue());
}
// if(SearchConfigEnum.SIMISEARCH.getId().equals(searchfield)){
// vo.setIzsimilarity(ocrUsersearchchild.getSearchvalue());
// }
if(SearchConfigEnum.CLASSISEARCH.getId().equals(searchfield)){
vo.setIzshow(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.YEARSEARCH.getId().equals(searchfield)){
vo.setIzyear(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.TYPESEARCH.getId().equals(searchfield)){
vo.setIzpicturetype(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.AREASEARCH.getId().equals(searchfield)){
vo.setIzvisitcity(ocrUsersearchchild.getSearchvalue());
}
if(SearchConfigEnum.THREEWEEKdd.getId().equals(searchfield)){
vo.setIzYeardddd(ocrUsersearchchild.getSearchvalue());
}
}
return vo;
}
}

@ -45,7 +45,11 @@ public class PictureDisposeTask implements Runnable{
//定义新增集合对象
List<OcrPicture> ocrPictureList = new ArrayList<>();
int index =0;
for (Map<String, Object> map : livePhoto) {
if(index>0){
continue;
}
//检查图片地址是否为空
if(map.get("imgUrl")!=null && !StringUtils.isEmpty(map.get("imgUrl").toString())){
//判断该任务是否存在判断依据是任务ID相同提报时间不同则可以插入
@ -113,7 +117,7 @@ public class PictureDisposeTask implements Runnable{
//所属任务名称
picture.setTaskname(pictureSourceResult.getTaskName());
//任务来源名称
picture.setField4(pictureSourceResult.getTaskName());
picture.setField4("无量云2.0");
//所属任务状态
if(pictureSourceResult.getTenantStatus()!=null) {
picture.setTaskstatus(pictureSourceResult.getTenantStatus().toString());
@ -182,10 +186,16 @@ public class PictureDisposeTask implements Runnable{
picture.setField9(pictureSourceResult.getProductName().get("name").toString());
}
}
//厂商
if(pictureSourceResult.getManufacturer()!=null){
if(pictureSourceResult.getManufacturer().get("name")!=null){
picture.setField5(pictureSourceResult.getManufacturer().get("name").toString());
}
}
//拜访科室
picture.setField7(pictureSourceResult.getCompanyDepartment());
//生产基地
picture.setField5(pictureSourceResult.getManufacturer());
//拜访小结
picture.setField8(pictureSourceResult.getDiscoveredIssues());
//拜访日期
@ -193,6 +203,8 @@ public class PictureDisposeTask implements Runnable{
//提报日期时间戳
picture.setSubmitDateTimestamp(pictureSourceResult.getSubmitTime());
// picture.setSubmitDateTimestamp(System.currentTimeMillis());
picture.setPhotoDateTimestamp(System.currentTimeMillis());
System.out.println("SubmitDateTimestamp1=================>>>>>>>"+pictureSourceResult.getSubmitTime());
System.out.println("SubmitDateTimestamp2=================>>>>>>>"+picture.getSubmitDateTimestamp());
@ -210,6 +222,7 @@ public class PictureDisposeTask implements Runnable{
//默认为创建人为admin
picture.setCreateBy("1");
ocrPictureList.add(picture);
index++;
}
}

@ -25,6 +25,9 @@ import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@ -43,8 +46,6 @@ public class PictureImgToLocalTask implements Runnable {
private PictureImgToLocalEntity pictureImgToLocal;
public PictureImgToLocalTask(PictureImgToLocalEntity pictureImgToLocal) {
this.pictureImgToLocal = pictureImgToLocal;
}
@ -73,67 +74,14 @@ public class PictureImgToLocalTask implements Runnable {
picture.setImgHash(ocrPictureClassifyAndHash.get("hash"));
picture.setClassificationid(ocrPictureClassifyAndHash.get("classId"));
}
//获取拍照时间
// JSONObject requestBody = new JSONObject();
// requestBody.put("task_id", "1111");
//// requestBody.put("img_path", picture.getLocalpictrueurl());
// requestBody.put("img_path", "https://b-dr.prevailcloud.com/pangu/changen/attachment/query/pb/attachment/1754054888247390208.jpg");
// requestBody.put("scenes", 0);
// System.out.println("img_path===============>>>>>>>>>"+picture.getLocalpictrueurl());
// HttpClient httpClient = HttpClients.createDefault();
// HttpPost httpPost = new HttpPost(PictureImgToLocalTask.api_test2_identify_url);
// StringEntity requestEntity = new StringEntity(requestBody.toString(), ContentType.APPLICATION_JSON);
// httpPost.setEntity(requestEntity);
// try {
// HttpResponse response = httpClient.execute(httpPost);
// System.out.println("response===========>>>>"+response);
// HttpEntity responseEntity = response.getEntity();
// if (responseEntity != null) {
// String responseString = EntityUtils.toString(responseEntity);
// JSONObject semanticResponseJson = JSONObject.parseObject(responseString);
// System.out.println("semanticResponseJson===========>>>>>>>>"+semanticResponseJson.toString());
// JSONObject semanticResult = semanticResponseJson.getJSONObject("semantic_result");
// System.out.println("semanticResult===========>>>>>>>>"+semanticResult.toString());
// // 获取键为"时间"的值
// JSONArray timeArray = semanticResult.getJSONArray("时间");
// StringBuilder dateTimeBuilder = new StringBuilder(); // 用于拼接日期时间字符串
// for (int i = 0; i < Math.min(2, timeArray.size()); i++) {
// JSONObject timeObject = timeArray.getJSONObject(i);
// String timeValue = timeObject.getString("ocrText");
// // 第一个元素是日期,第二个元素是时间
// if (i == 0) {
// dateTimeBuilder.append(timeValue); // 拼接日期
// dateTimeBuilder.append(" "); // 添加一个空格分隔符
// } else {
// dateTimeBuilder.append(timeValue); // 拼接时间
// }
// }
//
// String dateTimeString = dateTimeBuilder.toString(); // 获取拼接后的日期时间字符串
// System.out.println("dateTimeString===========>>>>>>>>"+dateTimeString);
// // 假设时间值的格式为"yyyy-MM-dd HH:mm:ss"
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// try {
// // 解析时间字符串并转换为时间戳
// Date date = sdf.parse(dateTimeString);
// long timestamp = date.getTime();
// // 将时间戳赋值给picture.setTime
// picture.setPhotoDateTimestamp(timestamp);
// System.out.println("picture.setPhotoDateTimestamp===========>>>>>>>>"+picture.getPhotoDateTimestamp());
// } catch (ParseException e) {
// // 如果解析失败,处理异常
// e.printStackTrace();
// }
// }
// } catch (ClientProtocolException e) {
// log.error("HTTP请求发生客户端协议异常: " + e.getMessage());
// } catch (IOException e) {
// log.error("HTTP请求发生IO异常: " + e.getMessage());
// 获取拍照时间
// Long timestamp = ocrPictureService.getPhotoDateTime(picture);
// if(timestamp != 0L){
// picture.setPhotoDateTimestamp(timestamp);
// }
ocrPictureService.updateById(picture);
}
}
}
}

@ -0,0 +1,35 @@
package cn.jyjz.xiaoyao.ocr.util;
public enum FrontMenuEnum {
HOMEMAIN("home_main", "查重"),
WORKSHEETMAIN("worksheet-main", "工单"),
TASKMAIN("task-main", "审批"),
FINALMAIN("final-main", "终审");
//菜单键
private String resKey;
//菜单名
private String name;
FrontMenuEnum(String resKey, String name) {
this.resKey = resKey;
this.name = name;
}
public String getResKey() {
return resKey;
}
public void setResKey(String resKey) {
this.resKey = resKey;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

@ -76,7 +76,7 @@ public class SearchParaFormatting {
//格式化时间数据
String[] times =searchValue.trim().replaceAll("\\s+", "").split("-");
beginTime = DateUtil.parse(times[0],"yyyy/MM/dd");
endTime = DateUtil.parse(times[1],"yyyy/MM/dd");
endTime = DateUtil.parse(times[1]+" 23:59:59","yyyy/MM/dd HH:mm:ss");
break;
default:
}
@ -93,10 +93,7 @@ public class SearchParaFormatting {
//相等
// queryWrapper.between(key,sectionInts.get(0),sectionInts.get(1));
if (sectionInts.get(0) == 0) {
// 构建查询条件key 为 null 或者在指定区间内
queryWrapper.isNull(key);
queryWrapper.or();
queryWrapper.between(key, sectionInts.get(0), sectionInts.get(1));
queryWrapper.apply("( "+key+" IS NULL OR "+key+" BETWEEN "+sectionInts.get(0)+" AND "+sectionInts.get(1)+")");;
} else {
// 相等
queryWrapper.between(key, sectionInts.get(0), sectionInts.get(1));
@ -149,10 +146,24 @@ public class SearchParaFormatting {
}
}catch (Exception e){
}
return "section";
}
//如果不是数字区间,则按字符串处理
if(!isInRange(searchvalue)){
return "text";
}
return "section";
}
//3.都不是就按text文本处理
return "text";
}
/**
*
* @param number
* @return
*/
public static boolean isInRange(String number) {
String regex = "\\b(100|[1-9]?\\d)-\\b(100|[1-9]?\\d)";
return number.matches(regex);
}
}

@ -168,4 +168,7 @@ public class OcrTaskChildPictureVo implements java.io.Serializable {
@ApiModelProperty(value = "拍照时间")
private String photoDateTimestamp;
@ApiModelProperty(value = "查重id")
private String checkDuplicateId;
}

@ -1,8 +1,10 @@
package cn.jyjz.xiaoyao.ocr.vo;
import cn.jyjz.flowable.domain.dto.HistoricTaskInstanceDto;
import cn.jyjz.xiaoyao.common.base.jsonDomain.DateSerializer;
import cn.jyjz.xiaoyao.oa.from.dataobject.Category;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
@ -36,7 +38,8 @@ public class OcrTaskchildPictureApproVo implements java.io.Serializable {
@ApiModelProperty(value = "提交时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date finishTime;
@JsonSerialize(using = DateSerializer.class)
private Long finishTime;
@ApiModelProperty(value = "拜访地区")
private String releaseProvince;

@ -0,0 +1,71 @@
package cn.jyjz.xiaoyao.ocr.vo;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "查询条件前端回写VO对象", title = "查询条件前端回写VO对象")
public class SearchConditionVO {
@ApiModelProperty(value = "所属项目")
private String izproject;
@ApiModelProperty(value = "拜访客户类型")
private String izcustomtype;
@ApiModelProperty(value = "拜访客户级别")
private String izcustomlevel;
@ApiModelProperty(value = "拜访客户名称")
private String izcustomname;
@ApiModelProperty(value = "任务来源")
private String iztaskrrom;
@ApiModelProperty(value = "任务状态")
private String iztaskstatus;
@ApiModelProperty(value = "拜访省份/直辖市、")
private String izvisitpro;
@ApiModelProperty(value = "厂商")
private String izfirm;
@ApiModelProperty(value = "产品名称")
private String izproductname;
@ApiModelProperty(value = "拜访项目类别")
private String izprojecttype;
@ApiModelProperty(value = "提报人")
private String izupuser;
@ApiModelProperty(value = "所属计划")
private String izplan;
@ApiModelProperty(value = "相似度")
private String izsimilarity;
@ApiModelProperty(value = "分类搜索")
private String izshow;
@ApiModelProperty(value = "是否展示年份")
private String izyear;
@ApiModelProperty(value = "图片类型")
private String izpicturetype;
@ApiModelProperty(value = "发布地区、拜访城市")
private String izvisitcity;
@ApiModelProperty(value = "上传时间")
private String izYeardddd;
}

@ -37,6 +37,8 @@
<result column="imgUrl" property="imgUrl"/>
<collection property="repeatedTaskList" ofType="cn.jyjz.xiaoyao.oa.from.vo.RepeatedTaskVo">
<result column="taskId" property="taskId"/>
<result column="formId" property="formId"/>
<result column="fromTaskId" property="fromTaskId"/>
<result column="taskName" property="taskName"/>
<result column="nodeName" property="nodeName"/>
<result column="states" property="states"/>
@ -199,42 +201,39 @@
</select>
<select id="repetitionTask" resultMap="resultMap">
SELECT t1.count,
t1.content,
t1.id,
t1.imgUrl,
t3.similarity_score similarityScore,
t2.STATES,
t3.remark taskId,
t3.taskName,
t2.TASKNAME nodeName,
t2.FROMUPTIME fromTime,
t2.UPDATETIME updateTime
from (select count(field8) count, field8 content, ID id, imgUrl
FROM ocr_picture
GROUP BY field8
HAVING count(field8) > 1) t1
LEFT JOIN ocr_taskchild_picture t2 ON t1.ID = t2.PICTUREID
LEFT JOIN ocr_picture t3 on t1.content = t3.field8
</select>
<select id="repetitionTaskList" resultType="cn.jyjz.xiaoyao.oa.from.vo.RepeatedTaskVo">
SELECT
t1.content,
t1.id,
t1.imgUrl,
t3.similarity_score similarityScore,
t2.STATES,
t3.remark taskId,
t3.taskName,
t2.TASKNAME nodeName,
t2.FROMUPTIME fromTime,
t2.UPDATETIME updateTime
from (select field8 content, ID id, imgUrl
SELECT t1.count,
t1.content,
t1.id,
t1.imgUrl,
t3.similarity_score similarityScore,
t2.STATES,
t3.remark fromTaskId,
t3.taskName,
t2.TASKNAME nodeName,
t2.FROMUPTIME fromTime,
t2.UPDATETIME updateTime,
t2.TASKID taskId,
t2.ID formId
from (select count(field8) count, field8 content, ID id, imgUrl
FROM ocr_picture
where ID in (select child.PICTUREID from oa_userfinal_t final left join ocr_taskchild_picture child on final.FORMID = child.ID)
GROUP BY field8
HAVING count(field8) > 1) t1
LEFT JOIN ocr_taskchild_picture t2 ON t1.ID = t2.PICTUREID
LEFT JOIN ocr_picture t3 on t1.content = t3.field8
LEFT JOIN ocr_picture t3 on t1.id = t3.ID
</select>
<select id="repetitionTaskList" resultType="cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture">
SELECT t2.*,t3.similarity_score similarityScore
FROM oa_userfinal_t t1
LEFT JOIN ocr_taskchild_picture t2 ON t2.ID = t1.FORMID
LEFT JOIN ocr_picture t3 ON t2.PICTUREID = t3.ID
WHERE t3.field8 IN (SELECT t3.field8
FROM oa_userfinal_t t1
LEFT JOIN
ocr_taskchild_picture t2 on t1.FORMID = t2.ID
LEFT JOIN ocr_picture t3 on t2.PICTUREID = t3.ID
GROUP BY t3.field8
HAVING count(t3.field8) > 1)
</select>
</mapper>

@ -67,11 +67,15 @@
<result column="submit_date_timestamp" property="submitDateTimestamp" jdbcType="VARCHAR"/>
<result column="photo_date_timestamp" property="photoDateTimestamp" jdbcType="VARCHAR"/>
<result column="suspiciousfile" property="suspiciousfile" jdbcType="INTEGER"/>
<result column="states" property="states" jdbcType="INTEGER"/>
<result column="STATES" property="states" jdbcType="INTEGER"/>
<result column="TASKID" property="taskId" jdbcType="VARCHAR"/>
<result column="historyStates" property="historyStates" jdbcType="INTEGER"/>
<result column="taskchildId" property="taskchildpictureid"/>
<association property="pictureInfo" javaType="cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureInfo">
<result column="pictureid" property="pictureId"/>
<result column="img_size" property="imgSize"/>
<result column="img_name" property="imgName"/>
<result column="img_format" property="imgFormat"/>
<result column="img_measure" property="imgMeasure"/>
<result column="upload_time" property="uploadTime"/>
@ -222,16 +226,30 @@
</sql>
<select id="getPackagePictureInfo" resultMap="BaseResultMap">
SELECT t2.*,t3.*,t4.STATES
SELECT t2.*,t3.*,ifnull(t5.STATSHIS, 1) historyStates,t4.STATES,t4.TASKID,t4.ID taskchildId
FROM ocr_check_duplicate_result t1
LEFT JOIN ocr_picture t2 ON t1.picture_id = t2.ID
left join ocr_picture_info t3 on t2.ID=t3.picture_id
left join ocr_taskchild_picture t4 on t2.ID=t4.PICTUREID
left join oa_userapprove_t t5 on t4.ID=t5.FORMID and t5.TASKNAME = '${userNodeType}'
where t1.check_duplicate_id = #{packageId}
<if test="pictureId != null and pictureId != ''">
and t1.picture_id = #{pictureId}
</if>
ORDER BY t1.max_similarity desc, t2.create_time DESC
ORDER BY t1.max_similarity desc,t1.similarity_group_order asc, t2.submit_date_timestamp DESC
LIMIT 1
</select>
<select id="getPictureNodeStatesList" resultType="cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture">
SELECT t1.*,
ifnull(t3.STATSHIS, 1) historyStates
FROM ocr_picture t1
LEFT JOIN ocr_taskchild_picture t2
on t1.ID = t2.PICTUREID
LEFT JOIN oa_userapprove_t t3 on t2.ID = t3.FORMID and t3.TASKNAME = '${userNodeType}'
where t1.ID in
<foreach collection="pictureIds" open="(" close=")" item="item" separator="," index="index">
#{item}
</foreach>
</select>
</mapper>

@ -18,7 +18,7 @@
<select id="selectsearch1" resultType="map">
<!-- SELECT ID as id,packagename as name FROM ocr_packagetask WHERE create_by=#{userid} AND packagename like "%"#{search}"%"-->
SELECT id,name FROM ocr_task_package WHERE create_by=#{userid} AND name like "%"#{search}"%" AND tenant_id = #{tenantId}
SELECT id,name FROM ocr_task_package WHERE create_by=#{userid} AND name like "%"#{search}"%" AND tenant_id = #{tenantId} AND is_delete = 0
</select>
<select id="selectsearch2" resultType="map">
@ -59,11 +59,18 @@
</select>
<!-- <select id="toolscount" resultType="map">-->
<!-- SELECT-->
<!-- (SELECT COUNT(*) FROM ocr_taskchild_picture WHERE TENANTID = ""#{tenantid}"") as taskTotal,-->
<!-- (SELECT COUNT(*) FROM ocr_taskchild_picture WHERE TENANTID = ""#{tenantid}"" AND STATES = '2') as treat,-->
<!-- (SELECT COUNT(*) FROM ocr_taskchild_picture WHERE TENANTID = ""#{tenantid}"" AND STATES = '3') as approved-->
<!-- </select>-->
<select id="toolscount" resultType="map">
SELECT
(SELECT COUNT(*) FROM ocr_taskchild_picture WHERE TENANTID = ""#{tenantid}"") as taskTotal,
(SELECT COUNT(*) FROM ocr_taskchild_picture WHERE TENANTID = ""#{tenantid}"" AND STATES = '2') as treat,
(SELECT COUNT(*) FROM ocr_taskchild_picture WHERE TENANTID = ""#{tenantid}"" AND STATES = '3') as approved
(SELECT COUNT(*) FROM oa_userapprove_t WHERE USERID = #{userId} AND TASKNAME = '一级审批') as total,
(SELECT COUNT(*) FROM oa_userapprove_t WHERE USERID = #{userId} AND TASKNAME = '一级审批' AND STATSHIS IS NULL) as treat,
(SELECT COUNT(*) FROM oa_userapprove_t WHERE USERID = #{userId} AND TASKNAME = '一级审批' AND STATSHIS = 2) as approved
</select>
<select id="selectaisp" resultType="map">
@ -76,6 +83,21 @@
WHERE t.ID = #{id}
</select>
<select id="selectaispList" resultType="map">
SELECT
tp.id as id,
tp.name as packageName,
cdr.picture_id as pictureId,
IFNULL(cdr.max_similarity, 0) as pictureResult,
tp.create_time as createTime
FROM
ocr_task_package tp
LEFT JOIN ocr_check_duplicate_result cdr ON tp.check_duplicate_id = cdr.check_duplicate_id
WHERE
tp.ID = #{id}
</select>
<select id="selectaiuser" resultType="String">
SELECT CONCAT_WS( "-", t.`NAME`, u.USERNAME ) as tenantusername FROM s_user_t u LEFT JOIN s_user_tenant_t z ON u.ID = z.USERID
LEFT JOIN s_tenant_t t ON z.TENANTID = t.ID WHERE u.ID = #{userid}

@ -3,15 +3,24 @@
<mapper namespace="cn.jyjz.xiaoyao.ocr.dataDao.OcrTaskPackageMapper">
<select id="getPackageList" resultType="java.util.Map">
SELECT t1.id, t1.name,t1.check_duplicate_id checkDuplicateId,t1.create_time createTime,t1.update_time updateTime,t2.picture_count pictureCount,
t2.searching_json search,t3.USERNAME createName
SELECT t1.id,
t1.name,
t1.check_duplicate_id checkDuplicateId,
t1.create_time createTime,
t1.update_time updateTime,
t2.picture_count pictureCount,
t2.searching_json search,
t3.USERNAME createName
FROM ocr_task_package t1
LEFT JOIN ocr_check_duplicate t2 ON t1.check_duplicate_id = t2.id
left join s_user_t t3 on t1.create_by = t3.ID
left join s_user_t t3 on t1.create_by = t3.ID
<where>
t1.tenant_id = #{tenantId} and t1.is_delete = 0
<if test="packageName != null and packageName != ''">
t1.name like concat('%', #{packageName}, '%')
and t1.name like concat('%', #{packageName}, '%')
or T3.USERNAME like concat('%', #{packageName}, '%')
</if>
</where>
ORDER BY T1.create_time desc
</select>
</mapper>

@ -39,6 +39,51 @@
<result column="HAVEPOINTS" property="havepoints" jdbcType="INTEGER"/>
<result column="TASKNAME" property="taskname" jdbcType="VARCHAR"/>
</resultMap>
<resultMap id="taskResultMap" type="cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo">
<result column="assigneeName" property="assigneeName"/>
<result column="createDate" property="createDate"/>
<result column="createUser" property="createUser"/>
<result column="createUserName" property="createUserName"/>
<result column="deploymentId" property="deploymentId"/>
<result column="fileAnnex" property="fileAnnex"/>
<result column="finishTime" property="finishTime"/>
<result column="fromPlanId" property="fromPlanId"/>
<result column="fromProjectId" property="fromProjectId"/>
<result column="fromProjectName" property="fromProjectName"/>
<result column="fromSourceId" property="fromSourceId"/>
<result column="fromTaskId" property="fromTaskId"/>
<result column="fromTaskName" property="fromTaskName"/>
<result column="fromUserId" property="fromUserId"/>
<result column="fromUserName" property="fromUserName"/>
<result column="fromupTime" property="fromupTime"/>
<result column="guiDang" property="guiDang"/>
<result column="havePoints" property="havePoints"/>
<result column="historyStates" property="historyStates"/>
<result column="imgUrl" property="imgUrl"/>
<result column="maxSimilarity" property="maxSimilarity"/>
<result column="photoDateTimestamp" property="photoDateTimestamp"/>
<result column="pictureId" property="pictureId"/>
<result column="processDefinitionId" property="processDefinitionId"/>
<result column="processInstanceId" property="processInstanceId"/>
<result column="serverThumbnailUrl" property="serverThumbnailUrl"/>
<result column="submitDateTimestamp" property="submitDateTimestamp"/>
<result column="taskId" property="taskId"/>
<result column="taskName" property="taskName"/>
<result column="userId" property="userId"/>
<result column="userName" property="userName"/>
<association property="pictureInfo" javaType="cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureInfo">
<result column="picture_id" property="pictureId"/>
<result column="img_size" property="imgSize"/>
<result column="img_name" property="imgName"/>
<result column="img_format" property="imgFormat"/>
<result column="img_measure" property="imgMeasure"/>
<result column="upload_time" property="uploadTime"/>
<result column="create_time" property="createTime"/>
<result column="img_space" property="imgSpace"/>
<result column="tag_time" property="tagTime"/>
<result column="source" property="source"/>
</association>
</resultMap>
<resultMap id="PictureResultMap" type="cn.jyjz.xiaoyao.ocr.vo.PictureDetailVo">
<result column="picture_id" property="pictureId"/>
<result column="taskChildId" property="taskChildId"/>
@ -139,6 +184,8 @@
</if>
<if test="ocpictureid != null">
and OCPICTUREID ${ocpictureid.dataOp} ${ocpictureid.likestar}#{ocpictureid.value}${ocpictureid.likeend}
</if>
<if test="pictureresult != null">
@ -260,6 +307,8 @@
</if>
<if test="ocpictureid != null">
and tcp.OCPICTUREID ${ocpictureid.dataOp} ${ocpictureid.likestar}#{ocpictureid.value}${ocpictureid.likeend}
</if>
<if test="pictureresult != null">
@ -453,6 +502,7 @@
on tcp.PICTUREID = pic.ID
<include refid="Base_Where_union">
</include>
and pic.suspiciousfile = 0
<if test="fromuptimeStart != null">
and tcp.fromuptime &gt;= ${fromuptimeStart}
</if>
@ -461,7 +511,12 @@
</if>
<if test="page != null">
<if test="page.sortname != null">
order by tcp.${page.sortname} ${page.sortorder}
<if test="page.sortname == 'states'">
order by tcp.${page.sortname} ${page.sortorder}
</if>
<if test="page.sortname != 'states'">
order by pic.${page.sortname} ${page.sortorder}
</if>
</if>
limit ${page.start}, ${page.Pagesize}
</if>
@ -470,19 +525,31 @@
select count(tcp.ID) from (
select tc.*
from ocr_taskchild_picture tc,
OA_USERFINAL_T uf
OA_USERFINAL_T uf,
ocr_picture p
where tc.ID = uf.FORMID
and p.ID = tc.PICTUREID
and p.suspiciousfile = 0
<if test="thisLoginUserid != null">
and uf.USERID ${thisLoginUserid.dataOp} ${thisLoginUserid.likestar}#{thisLoginUserid.value}${thisLoginUserid.likeend}
</if>
UNION
select
tc.*
tc.*
from ocr_taskchild_picture tc
where tc.STATES = 5
) as tcp
left join ocr_picture pic
on tcp.PICTUREID = pic.ID
<include refid="Base_Where_union">
</include>
and pic.suspiciousfile = 0
<if test="fromuptimeStart != null">
and tcp.fromuptime &gt;= ${fromuptimeStart}
</if>
<if test="fromuptimeEnd != null">
and tcp.fromuptime &lt;= ${fromuptimeEnd}
</if>
</select>
<select id="listmytask" resultType="cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPictureAppro"
@ -493,9 +560,12 @@
uf.TASKNAME as TASKNAMEHIS,
uf.STATSHIS,
uf.TASKINDEX,
uf.TASKNO
uf.TASKNO,
op.field6 as fromCustomerLevel,
op.releaseArea as fromCity
from ocr_taskchild_picture tc
LEFT JOIN OA_USERAPPROVE_T uf ON tc.ID = uf.ID
left join ocr_picture op on tc.PICTUREID = op.ID and op.suspiciousfile = 0
where tc.ASSIGNEE = #{searchassignee}
and tc.TENANTID = #{searchtenantid}
and tc.STATES = 2
@ -505,10 +575,15 @@
uf.TASKNAME as TASKNAMEHIS,
uf.STATSHIS,
uf.TASKINDEX,
uf.TASKNO
uf.TASKNO,
op.field6 as fromCustomerLevel,
op.releaseArea as fromCity
from ocr_taskchild_picture tc,
OA_USERAPPROVE_T uf
OA_USERAPPROVE_T uf,
ocr_picture op
where tc.ID = uf.FORMID
and tc.PICTUREID = op.ID
and op.suspiciousfile = 0
and tc.TENANTID = #{searchtenantid}
<if test="thisLoginUserid != null">
and uf.USERID = #{thisLoginUserid}
@ -555,43 +630,46 @@
</select>
<select id="getPictureHistoryList" resultType="cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo">
SELECT t2.ID id,
t2.PICTUREID pictureId,
t2.STATES states,
t2.PROCESSINSTANCEID processInstanceId,
t2.PROCESSDEFINITIONID processDefinitionId,
t2.DEPLOYMENTID deploymentId,
t2.ASSIGNEENAME assigneeName,
t2.ASSIGNEE assignee,
t2.FILEANNEX fileAnnex,
t2.GUIDANG guiDang,
t2.CREATEUSER createUser,
t2.CREATEUSERNAME createUserName,
t2.CREATEDATE createDate,
t2.USERID userId,
t2.USERNAME userName,
t2.FROMTASKID fromTaskId,
t2.FROMTASKNAME fromTaskName,
t2.FROMUSERID fromUserId,
t2.FROMPROJECTID fromProjectId,
t2.FROMPLANID fromPlanId,
t2.FROMUPTIME fromupTime,
t2.FROMSOURCEID fromSourceId,
t2.HAVEPOINTS havePoints,
t2.TASKNAME taskName,
t2.TASKID taskId,
t2.FROMUSERNAME fromUserName,
t2.FROMPROJECTNAME fromProjectName,
t2.FINISHTIME finishTime,
t1.imgUrl,
ifnull(t3.STATSHIS, 1) historyStates,
t1.submit_date_timestamp submitDateTimestamp,
t1.photo_date_timestamp photoDateTimestamp
SELECT distinct t2.ID id,
t2.PICTUREID pictureId,
t2.STATES states,
t2.PROCESSINSTANCEID processInstanceId,
t2.PROCESSDEFINITIONID processDefinitionId,
t2.DEPLOYMENTID deploymentId,
t2.ASSIGNEENAME assigneeName,
t2.ASSIGNEE assignee,
t2.FILEANNEX fileAnnex,
t2.GUIDANG guiDang,
t2.CREATEUSER createUser,
t2.CREATEUSERNAME createUserName,
t2.CREATEDATE createDate,
t2.USERID userId,
t2.USERNAME userName,
t2.FROMTASKID fromTaskId,
t2.FROMTASKNAME fromTaskName,
t2.FROMUSERID fromUserId,
t2.FROMPROJECTID fromProjectId,
t2.FROMPLANID fromPlanId,
t2.FROMUPTIME fromupTime,
t2.FROMSOURCEID fromSourceId,
t2.HAVEPOINTS havePoints,
t2.TASKNAME taskName,
t2.TASKID taskId,
t2.FROMUSERNAME fromUserName,
t2.FROMPROJECTNAME fromProjectName,
t2.FINISHTIME finishTime,
t1.imgUrl,
ifnull(t3.STATSHIS, 1) historyStates,
t1.submit_date_timestamp submitDateTimestamp,
t1.photo_date_timestamp photoDateTimestamp,
t1.similarity_score similarityScore,
t1.server_thumbnail_url serverThumbnailUrl
FROM ocr_picture t1
LEFT JOIN ocr_taskchild_picture t2
on t1.ID = t2.PICTUREID
LEFT JOIN oa_userapprove_t t3 on t2.ID = t3.FORMID and t3.TASKNAME = '${taskname}'
where t1.ID in
where t1.suspiciousfile = 0
and t1.ID in
<foreach collection="pictureIds" open="(" close=")" item="item" separator="," index="index">
#{item}
</foreach>
@ -656,10 +734,11 @@
LEFT JOIN ocr_taskchild_picture t3 on t1.ID = t3.PICTUREID
LEFT JOIN oa_userapprove_t t4 on t4.FORMID = t3.ID
where t1.ID = #{pictureId}
and t1.suspiciousfile = 0
</select>
<select id="getPackageSimilarityList" resultType="cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo">
SELECT t3.ID id,
SELECT distinct t3.ID id,
t3.PICTUREID pictureId,
t3.STATES states,
t3.PROCESSINSTANCEID processInstanceId,
@ -692,20 +771,67 @@
t2.photo_date_timestamp photoDateTimestamp,
t2.server_thumbnail_url serverThumbnailUrl,
t1.max_similarity maxSimilarity,
ifnull(t4.STATSHIS, 1) historyStates
ifnull(t4.STATSHIS, 1) historyStates,
t1.check_duplicate_id
FROM ocr_check_duplicate_result t1
LEFT JOIN ocr_picture t2 ON t1.picture_id = t2.ID
LEFT JOIN ocr_taskchild_picture t3 ON t2.ID = t3.PICTUREID
LEFT JOIN oa_userapprove_t t4 ON t3.ID = t4.FORMID
LEFT JOIN oa_userapprove_t t4 ON t3.ID = t4.FORMID and t4.TASKNAME = '${taskname}'
left join ocr_picture_info t5 on t2.ID = t5.picture_id
WHERE t1.check_duplicate_id = #{checkDuplicateId}
and t2.suspiciousfile = 0
<if test="pictureId != null and pictureId != ''">
and t1.picture_id != #{pictureId}
</if>
<if test="oderName == 'similarityScore'">
order by t1.max_similarity ${oderType}
order by t1.max_similarity ${oderType},t1.similarity_group_order asc,t2.submit_date_timestamp ${oderType}
</if>
<if test="oderName == 'createdate'">
order by t2.create_time ${oderType}
order by t2.submit_date_timestamp ${oderType}
</if>
</select>
<select id="getDubiousfileList" resultType="cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo">
SELECT t2.ID id,
t2.PICTUREID pictureId,
t2.STATES states,
t2.PROCESSINSTANCEID processInstanceId,
t2.PROCESSDEFINITIONID processDefinitionId,
t2.DEPLOYMENTID deploymentId,
t2.ASSIGNEENAME assigneeName,
t2.ASSIGNEE assignee,
t2.FILEANNEX fileAnnex,
t2.GUIDANG guiDang,
t2.CREATEUSER createUser,
t2.CREATEUSERNAME createUserName,
t2.CREATEDATE createDate,
t2.USERID userId,
t2.USERNAME userName,
t2.FROMTASKID fromTaskId,
t2.FROMTASKNAME fromTaskName,
t2.FROMUSERID fromUserId,
t2.FROMPROJECTID fromProjectId,
t2.FROMPLANID fromPlanId,
t2.FROMUPTIME fromupTime,
t2.FROMSOURCEID fromSourceId,
t2.HAVEPOINTS havePoints,
t2.TASKNAME taskName,
t2.TASKID taskId,
t2.FROMUSERNAME fromUserName,
t2.FROMPROJECTNAME fromProjectName,
t2.FINISHTIME finishTime,
t1.imgUrl,
ifnull(t3.STATSHIS, 1) historyStates,
t1.submit_date_timestamp submitDateTimestamp,
t1.photo_date_timestamp photoDateTimestamp,
t1.similarity_score similarityScore
FROM ocr_picture t1
LEFT JOIN ocr_taskchild_picture t2
on t1.ID = t2.PICTUREID
LEFT JOIN oa_userapprove_t t3 on t2.ID = t3.FORMID and t3.TASKNAME = '${taskname}'
where t1.ID in
<foreach collection="pictureIds" open="(" close=")" item="item" separator="," index="index">
#{item}
</foreach>
</select>
</mapper>

@ -35,6 +35,7 @@ import java.util.List;
import java.util.stream.Collectors;
/**
*
* @Author scott
*/
@Configuration

@ -276,7 +276,7 @@ debugger_tools: true
ocr:
api:
wly:
interface-domain: https://b-dr.prevailcloud.com #接口域名
interface-domain: https://b-test.prevailcloud.com #接口域名
accessKey: 7390F0221A1A73D8E13F8C8BB96F33B0 #秘钥
accessCode: ED6F7B39768AF95E87AEA8ACCCC71A6F #秘钥编码
connectTimeout: 5000 #请求超时时间 毫秒

@ -280,7 +280,7 @@ debugger_tools: true
ocr:
api:
wly:
interface-domain: https://b-dr.prevailcloud.com #接口域名
interface-domain: https://b-test.prevailcloud.com #接口域名
accessKey: 7390F0221A1A73D8E13F8C8BB96F33B0 #秘钥
accessCode: ED6F7B39768AF95E87AEA8ACCCC71A6F #秘钥编码
connectTimeout: 5000 #请求超时时间 毫秒

Loading…
Cancel
Save