From f0b15e95102e4b8e2385c4e31d618d1be94f4efb Mon Sep 17 00:00:00 2001 From: shuliYao <1397940314@qq.com> Date: Tue, 12 Mar 2024 19:43:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=9B=BE=E7=89=87=E6=A3=80=E7=B4=A2?= =?UTF-8?q?=E3=80=81=E4=B8=80=E4=BB=B6=E6=9F=A5=E9=87=8D=201.=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E6=9F=A5=E8=AF=A2=E3=80=81=E4=B8=80=E9=94=AE=E6=9F=A5?= =?UTF-8?q?=E9=87=8D-=E6=A3=80=E7=B4=A2=E6=9D=A1=E4=BB=B6=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E5=B0=81=E8=A3=85=E6=A0=BC=E5=BC=8F=E5=8C=96=202.?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A3=80=E7=B4=A2=E6=9D=A1=E4=BB=B6=E6=9E=9A?= =?UTF-8?q?=E4=B8=BE=E6=98=A0=E5=B0=84=E7=B1=BBSearchConfigEnum=EF=BC=8C?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=AD=97=E6=AE=B5=E6=9C=89=E5=A4=A7=E5=86=99?= =?UTF-8?q?=E8=BD=AC=E4=B8=BA=E5=B0=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ocr/controller/OcrPictureController.java | 76 +++----- .../service/impl/OcrPictureServiceImpl.java | 37 +--- .../impl/OcrTaskchildPictureServiceImpl.java | 170 +++++++++--------- .../xiaoyao/ocr/util/SearchConfigEnum.java | 40 ++--- .../ocr/util/SearchParaFormatting.java | 149 +++++++++++++++ 5 files changed, 285 insertions(+), 187 deletions(-) create mode 100644 jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/util/SearchParaFormatting.java diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureController.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureController.java index 9b4182bc..1abf85e0 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureController.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureController.java @@ -3,26 +3,22 @@ package cn.jyjz.xiaoyao.ocr.controller; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import cn.jyjz.xiaoyao.admin.service.LogService; import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil; import cn.jyjz.xiaoyao.common.base.vo.UserToken; -import cn.jyjz.xiaoyao.common.mybatisplus.util.SearchQueryFormat; import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture; import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureclass; -import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture; import cn.jyjz.xiaoyao.ocr.service.OcrPictureService; import cn.jyjz.xiaoyao.ocr.service.OcrPictureclassService; import cn.jyjz.xiaoyao.ocr.service.OcrTaskchildPictureService; import cn.jyjz.xiaoyao.ocr.util.DataUtil; import cn.jyjz.xiaoyao.ocr.util.SearchConfigEnum; +import cn.jyjz.xiaoyao.ocr.util.SearchParaFormatting; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; @@ -32,15 +28,11 @@ import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; - import cn.jyjz.xiaoyao.admin.service.UserService; import cn.jyjz.xiaoyao.common.base.service.UserTokenService; import cn.jyjz.xiaoyao.common.base.controller.BaseController; -import cn.jyjz.xiaoyao.common.base.param.ParamterPage; -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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -148,11 +140,15 @@ public class OcrPictureController extends BaseController{ String buessinessno = req.getParameter("buessinessno"); //搜索时间段 +// String search_month = req.getParameter("search_month"); +// if(StringUtils.isNotBlank(search_month) && Integer.parseInt(search_month) <= 12 && Integer.parseInt(search_month) > 0){ +// queryWrapper.le("create_time", DataUtil.afterDateByMonth(Integer.parseInt(search_month))); +// }else if(StringUtils.isNotBlank(search_month) && Integer.parseInt(search_month) > 20){ +// queryWrapper.le("create_time",DataUtil.afterDateByWeek(Integer.parseInt(search_month) - 20)); +// } String search_month = req.getParameter("search_month"); if(StringUtils.isNotBlank(search_month) && Integer.parseInt(search_month) <= 12 && Integer.parseInt(search_month) > 0){ - queryWrapper.le("create_time", DataUtil.afterDateByMonth(Integer.parseInt(search_month))); - }else if(StringUtils.isNotBlank(search_month) && Integer.parseInt(search_month) > 20){ - queryWrapper.le("create_time",DataUtil.afterDateByWeek(Integer.parseInt(search_month) - 20)); + queryWrapper.le("create_time",DataUtil.afterDateByMonth(Integer.parseInt(search_month))); } //判断是否需要查询历史记录 @@ -160,6 +156,18 @@ public class OcrPictureController extends BaseController{ queryWrapper.eq("taskstatus", search_history); } + + //根据参数枚举,获取检索参数,并映射为数据库的字段的key-v map + Map paraMap = new HashMap<>(); + for(SearchConfigEnum config : SearchConfigEnum.values()){ + String searchvalue = req.getParameter(config.getId()); + if(StringUtils.isNotBlank(searchvalue)){ + paraMap.put(config.getMeaning(),searchvalue); + } + } + //调用查询参数解析方法,解析为queryWrapper + queryWrapper = SearchParaFormatting.searchParaParse(queryWrapper,paraMap); + queryWrapper.eq("tenant_id",tenantId); List pageList = ocrPictureService.listPage(queryWrapper); @@ -173,7 +181,6 @@ public class OcrPictureController extends BaseController{ }else{ return ResultVoUtil.error("没有查重数据。"); } - //return Result.error("失败。"); } /** @@ -217,41 +224,16 @@ public class OcrPictureController extends BaseController{ queryWrapper.le("create_time",DataUtil.afterDateByMonth(Integer.parseInt(search_month))); } - + //根据参数枚举,获取检索参数,并映射为数据库的字段的key-v map + Map paraMap = new HashMap<>(); for(SearchConfigEnum config : SearchConfigEnum.values()){ - - //相似度不在搜索范围内 - if(!config.getId().equals("izSimilarity")){ - String searchvalue = req.getParameter(config.getId()); - if(StringUtils.isNotBlank(searchvalue)){ - if(config.getId().equals("izYear")){ - //针对年份搜索,需要拆分 - String[] year = searchvalue.split(","); - //当前数据必须是两条 - if(year.length == 2){ - java.text.SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); - Date start = null; - Date end = null; - try { - start = sdf.parse(year[0]); - end = sdf.parse(year[1]); - } catch (ParseException e) { - continue; - } - - queryWrapper.ge(config.getMeaning(),start); - queryWrapper.le(config.getMeaning(),end); - } - - }else{ - queryWrapper.eq(config.getMeaning(),searchvalue); - } - - } - + String searchvalue = req.getParameter(config.getId()); + if(StringUtils.isNotBlank(searchvalue)){ + paraMap.put(config.getMeaning(),searchvalue); } - } + //调用查询参数解析方法,解析为queryWrapper + queryWrapper = SearchParaFormatting.searchParaParse(queryWrapper,paraMap); queryWrapper.eq("tenant_id",tenantId); Page page = new Page(pageNo, pageSize); diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java index fd75924f..692caf52 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java @@ -16,6 +16,7 @@ import cn.jyjz.xiaoyao.ocr.dataobject.*; import cn.jyjz.xiaoyao.ocr.service.*; import cn.jyjz.xiaoyao.ocr.util.ImageClassUtil; import cn.jyjz.xiaoyao.ocr.util.SearchEnum; +import cn.jyjz.xiaoyao.ocr.util.SearchParaFormatting; import cn.jyjz.xiaoyao.ocr.util.httputil.HttpClient; import cn.jyjz.xiaoyao.ocr.util.httputil.HttpHeader; import cn.jyjz.xiaoyao.ocr.util.httputil.HttpParamers; @@ -536,7 +537,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl arrayData = null; //集合型数据 List sectionInts =null; //纯数字区间型数据 String[] sections =null; //字符串区间型数据 @@ -627,39 +628,5 @@ public class OcrPictureServiceImpl extends BaseServiceImpl0){ - return "array"; - } - //2.判断是否为区间 - if(searchvalue.indexOf("-")>0){ - String [] datas = searchvalue.split("-"); - if(datas!=null && datas.length==2){ - //2.1 判断是时间区间,还是数字区间 - try { - DateTime beginTime = DateUtil.parse(datas[0],"yyyy/MM/dd"); - DateTime endTime = DateUtil.parse(datas[0],"yyyy/MM/dd"); - if(beginTime!=null && endTime!=null){ - return "time"; - } - }catch (Exception e){ - } - return "section"; - } - } - //3.都不是就按text文本处理 - return "text"; - } } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrTaskchildPictureServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrTaskchildPictureServiceImpl.java index d946dff5..8d3158f2 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrTaskchildPictureServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrTaskchildPictureServiceImpl.java @@ -34,10 +34,10 @@ import java.util.*; public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl implements OcrTaskchildPictureService { @Resource private OcrTaskchildPictureMybatisDao ocrtaskchildpicturemybatisdao; - + @Resource private OcrPictureService ocrPictureService; - + @Resource IFlowTaskService iFlowTaskService; /** @@ -46,17 +46,17 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl saveList =new ArrayList<>(); - + StringBuffer historyPname = new StringBuffer(); - + StringBuffer taskType = new StringBuffer(); for(String childpictureid:cps){ OcrTaskchildPicture old = this.listPicturePackageId(childpictureid,Long.parseLong(packageid)); - + //如果是历史图片,不允许进行设置 if(old.isIzHistory()){ if(historyPname.length() > 0){ @@ -72,37 +72,37 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl saveList =new ArrayList<>(); - + StringBuffer historyPname = new StringBuffer(); - + StringBuffer taskType = new StringBuffer(); for(String childpictureid:cps){ OcrTaskchildPicture old = this.listPicturePackageId(childpictureid,Long.parseLong(packageid)); - + //如果是历史图片,不允许进行设置 if(old.isIzHistory()){ if(historyPname.length() > 0){ @@ -118,26 +118,26 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl list = this.ocrtaskchildpicturemybatisdao.selectList(queryWrapper); - + //目前没有做其他信息返回,如果需要再做修改 for(OcrTaskchildPicture ocrTaskchildPicture:list){ //判断审批人是否为当前登录用户 if(userToken.getLoginname().equals(ocrTaskchildPicture.getAssignee())){ - + }else{ return false; } } return true; } - + /** * 判断任务是否已经审批 * @param formid 任务主键 @@ -199,7 +199,7 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl list = this.ocrtaskchildpicturemybatisdao.selectList(queryWrapper); - + //目前没有做其他信息返回,如果需要再做修改 for(OcrTaskchildPicture ocrTaskchildPicture:list){ //判断当前审批状态为拒绝或者通过的,不允许再做审批 @@ -207,7 +207,7 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl listAll(String tenantId, String createUser, QueryWrapper queryWrapper){ - - + + long count = this.count(queryWrapper); - + Page page = new Page<>(1, count); page.setMaxLimit(count); - + IPage iPage = this.page(page,queryWrapper); - + return iPage.getRecords(); } - + /** * 批量标记当前任务相似度为百分之百 * @param taskids 任务主键 @@ -236,7 +236,7 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl queryWrapperNew = new QueryWrapper<>(); queryWrapperNew.eq("HAVEPOINTS","1"); queryWrapperNew.eq("PACKAGEID",packageid); - + List list = this.ocrtaskchildpicturemybatisdao.selectList(queryWrapperNew); this.formatTask(list,packageid); - + return list; } - + /** * 根据主键,查询图片详情 * @param fromid 任务主键 @@ -265,34 +265,34 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl listPictureids = Arrays.asList(splitPictureids); // //设置是否为历史信息 // ocrTaskchildPicture.setIzHistory(listPictureids.contains(ocrPicture.getPictureid())?false:true); - + //如果当前任务的任务包主键一致,说明不是历史数据,如果不一致,说明是历史数据 if(packageid.toString().equals(ocrTaskchildPicture.getPackageid().toString())){ ocrTaskchildPicture.setIzHistory(false); }else{ ocrTaskchildPicture.setIzHistory(true); } - + //查询审批流节点信息 List taskList = iFlowTaskService.nowRunTask(ocrTaskchildPicture.getProcessinstanceid(),ocrTaskchildPicture.getProcessdefinitionid()); if(null != taskList && !taskList.isEmpty()) { ocrTaskchildPicture.setTaskId(taskList.get(0).getId()); } - + //获取当前真假标记 ocrTaskchildPicture.setIztrueorfalse(ocrPicture.getIztrueorfalse()); //是否已经审批 ocrTaskchildPicture.setWorkStatus(ocrPicture.getWorkStatus()); - - + + ocrTaskchildPicture.setOcrPicture(ocrPicture); - + return ocrTaskchildPicture; } /** @@ -303,30 +303,30 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl listByPackageId(String taskchildpictureid, ParamterPage paramterPage,QueryWrapper queryWrapper,String orderbyname,String orderbyvalue,String packageid,String tenantId ){ Page page = new Page<>(paramterPage.getStart(), paramterPage.getPagesize()); - + //当前显示的任务对象 OcrTaskchildPicture mainOcrTaskchildPicture = this.getById(taskchildpictureid); - + //判断当前图片是否为历史图片 if(!packageid.equals(mainOcrTaskchildPicture.getPackageid().toString())){ - + QueryWrapper queryWrapperNew = new QueryWrapper<>(); queryWrapperNew.eq("TENANTID",tenantId); queryWrapperNew.eq("PACKAGEID",packageid); - + //查询非历史图片存在的集合 IPage pageNew = this.selectSearchListPage(paramterPage,queryWrapperNew); - + //如果是历史图片,从非历史图片存在的集合中随机选取一个 if(!pageNew.getRecords().isEmpty()){ mainOcrTaskchildPicture = pageNew.getRecords().get(0); } - + } - + //不包含当前选中的图片 queryWrapper.ne("ID",taskchildpictureid); - + queryWrapper.eq("TENANTID",tenantId); if(StringUtils.isNotBlank(orderbyname) && orderbyname.equals("asc")){ if(StringUtils.isNotBlank(orderbyvalue) && orderbyvalue.equals("pictureResult")){ @@ -334,28 +334,28 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl iPage = this.page(page,queryWrapper); - + this.formatTask(iPage.getRecords(),packageid); - - + + return iPage; } - + /** * 格式化显示数据 * @param list @@ -363,7 +363,7 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl list,String packageid){ for(OcrTaskchildPicture ocrTaskchildPicture:list){ - + //查询审批流节点信息 List taskList = iFlowTaskService.nowRunTask(ocrTaskchildPicture.getProcessinstanceid(),ocrTaskchildPicture.getProcessdefinitionid()); if(null != taskList && !taskList.isEmpty()) { @@ -375,25 +375,25 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl listPictureids = Arrays.asList(splitPictureids); // //设置是否为历史信息 // ocrTaskchildPicture.setIzHistory(listPictureids.contains(ocrTaskchildPicture.getPictureid())?false:true); - + //如果当前任务的任务包主键一致,说明不是历史数据,如果不一致,说明是历史数据 if(packageid.equals(ocrTaskchildPicture.getPackageid().toString())){ ocrTaskchildPicture.setIzHistory(false); }else{ ocrTaskchildPicture.setIzHistory(true); } - - + + OcrPicture ocrPicture = this.ocrPictureService.selectDtoById(ocrTaskchildPicture.getPictureid()); //获取当前真假标记 ocrTaskchildPicture.setIztrueorfalse(ocrPicture.getIztrueorfalse()); //是否已经审批 ocrTaskchildPicture.setWorkStatus(ocrPicture.getWorkStatus()); - + ocrTaskchildPicture.setOcrPicture(ocrPicture); } } - + /** * 关闭工单 * @param id @@ -407,7 +407,7 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl listFinal(Map query){ - + return this.ocrtaskchildpicturemybatisdao.listFinal(query); } - - + + /** * 根据任务\工单主键查询图片对象 * @param taskchildid @@ -471,16 +471,16 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl para){ + for (String key : para.keySet()) { + Object value = para.get(key); + if(value==null || StringUtils.isEmpty(value.toString())){ + continue; + } + + //检查数据原始类型,字符串还是整型、或小数 + String paraValueType = "str"; + if (value instanceof Integer) { + paraValueType = "int"; + }else if(value instanceof Double){ + paraValueType = "double"; + } + + //参数统一先转换成 字符串进行解析 + String searchValue =value.toString(); + //1.获取检查数据,确定数据类型 + String valueType = SearchParaFormatting.clickSearchValue(searchValue); + List arrayData = null; //集合型数据 + List sectionInts =null; //纯数字区间型数据 + String[] sections =null; //字符串区间型数据 + DateTime beginTime =null; //日期时间区间型数据 + DateTime endTime=null; //日期时间区间型数据 + + //2.根据数据类型,解构数据 + switch (valueType){ + case "array": + //处理多文件 + String [] datas =searchValue.split(","); + arrayData = Arrays.asList(datas); + break; + case "section": + //格式化数据,仅在做区间的时候去除空格,其他地方不进行空格去除. + sections =searchValue.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 =searchValue.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": + //集合数据 + queryWrapper.in(key,arrayData); + break; + case "section": + //数字区间查询 + if(sectionInts!=null && sectionInts.size()==2){ + //相等 + queryWrapper.between(key,sectionInts.get(0),sectionInts.get(1)); + break; + } + queryWrapper.between(key,sections[0],sections[1]); + break; + case "time": + //时间区间数据 + //相等 + queryWrapper.between(key,beginTime.getTime(),endTime.getTime()); + break; + default: + if("int".equals(paraValueType)){ + queryWrapper.eq(key, Integer.parseInt(searchValue)); + }else if("double".equals(paraValueType)){ + queryWrapper.eq(key, Double.parseDouble(searchValue)); + }else{ + queryWrapper.eq(key, searchValue); + } + + } + } + return queryWrapper; + } + + + /** + * 检查数据类型 不同类型处理方案不同 + * @param searchvalue + * @return + */ + public static String clickSearchValue(String searchvalue){ + searchvalue = searchvalue.trim().replaceAll("\\s+", ""); + //1.判断是否为数组格式 + if(searchvalue.indexOf(",")>0){ + return "array"; + } + //2.判断是否为区间 + if(searchvalue.indexOf("-")>0){ + String [] datas = searchvalue.split("-"); + if(datas!=null && datas.length==2){ + //2.1 判断是时间区间,还是数字区间 + try { + DateTime beginTime = DateUtil.parse(datas[0],"yyyy/MM/dd"); + DateTime endTime = DateUtil.parse(datas[0],"yyyy/MM/dd"); + if(beginTime!=null && endTime!=null){ + return "time"; + } + }catch (Exception e){ + } + return "section"; + } + } + //3.都不是就按text文本处理 + return "text"; + } +}