From 3d608c21c56207ebae81fd1ff1aaa401d5d8bd2b Mon Sep 17 00:00:00 2001 From: shuliYao <1397940314@qq.com> Date: Mon, 11 Mar 2024 01:15:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=87=AA=E5=AE=9A=E4=B9=89=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9D=A1=E4=BB=B6=E3=80=81=E5=9B=BE=E7=89=87=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E6=9D=A1=E4=BB=B6=E6=9F=A5=E8=AF=A2=201.?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=AD=97=E6=AE=B5=EF=BC=8C=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E5=85=B3=E7=B3=BB=E3=80=81=E6=8E=92=E5=BA=8F=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=202.=E5=A2=9E=E5=8A=A0=E6=A0=B9=E6=8D=AE=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E6=9D=A1=E4=BB=B6id=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ocr/controller/OcrPictureController.java | 106 +++-- .../ocr/dataobject/OcrUsersearchchild.java | 26 +- .../ocr/service/OcrPictureService.java | 33 +- .../ocr/service/OcrPictureclassService.java | 4 +- .../ocr/service/OcrUsersearchService.java | 13 +- .../service/impl/OcrPictureServiceImpl.java | 367 +++++++++++++----- .../impl/OcrPictureclassServiceImpl.java | 15 +- .../impl/OcrUsersearchServiceImpl.java | 31 +- 8 files changed, 434 insertions(+), 161 deletions(-) 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 74a1ddca..1c49c614 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 @@ -78,7 +78,7 @@ public class OcrPictureController extends BaseController{ HttpServletRequest req) { return ocrTaskchildPictureService.closeOrder(orderid)?ResultVoUtil.success():ResultVoUtil.error("失败"); } - + /** * 工单查询@MM1vvPNHRprA7ScHnwE+WG6yz7hcA/u3tzMj6pSdvwc= *@MM1vvPNHRprA7ScHnwE+WG6yz7hcA/u3tzMj6pSdvwc= @@ -103,15 +103,15 @@ public class OcrPictureController extends BaseController{ if(StringUtils.isBlank(tenantId)){ return ResultVoUtil.error("租户主键不能为空"); } - + //获取当前登录人 UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(req)); - + List pageList = ocrPictureService.listByTaskChild(tenantId,userToken.getLoginname(),izClose,tasktype,null); - + return ResultVoUtil.success(pageList); } - + /** * 工单查询 * @@ -129,24 +129,24 @@ public class OcrPictureController extends BaseController{ @GetMapping(value = "/createorder") public ResultVo createorder(OcrPicture ocrPicture, HttpServletRequest req) { - + //获取当前登录人 UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(req)); - + //租户主键,由前端页面传送 String tenantId = req.getHeader("X-Tenant-Id"); if(StringUtils.isBlank(tenantId)){ return ResultVoUtil.error("租户主键不能为空"); } - + QueryWrapper queryWrapper = new QueryWrapper<>(); - + //是否查询历史记录 String search_history = req.getParameter("search_history"); - + //任务包名称 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){ @@ -154,16 +154,16 @@ public class OcrPictureController extends BaseController{ }else if(StringUtils.isNotBlank(search_month) && Integer.parseInt(search_month) > 20){ queryWrapper.le("createTime",DataUtil.afterDateByWeek(Integer.parseInt(search_month) - 20)); } - + //判断是否需要查询历史记录 if(search_history.equals("0")){ queryWrapper.eq("taskstatus", search_history); } - + queryWrapper.eq("tenant_id",tenantId); - + List pageList = ocrPictureService.listPage(queryWrapper); - + if(null != pageList && !pageList.isEmpty()){ if(pageList.size() == 1){ return ResultVoUtil.error("查重数据至少要有两条。"); @@ -175,7 +175,7 @@ public class OcrPictureController extends BaseController{ } //return Result.error("失败。"); } - + /** * 分页列表查询 * @@ -202,24 +202,24 @@ public class OcrPictureController extends BaseController{ if(StringUtils.isBlank(tenantId)){ return ResultVoUtil.error("租户主键不能为空"); } - + QueryWrapper queryWrapper = new QueryWrapper<>(); - + //是否查询历史记录 String search_history = req.getParameter("search_history"); //判断是否需要查询历史记录 if(search_history.equals("0")){ queryWrapper.eq("taskstatus", search_history); } - + String search_month = req.getParameter("search_month"); if(StringUtils.isNotBlank(search_month) && Integer.parseInt(search_month) <= 12 && Integer.parseInt(search_month) > 0){ queryWrapper.le("createTime",DataUtil.afterDateByMonth(Integer.parseInt(search_month))); } - - + + for(SearchConfigEnum config : SearchConfigEnum.values()){ - + //相似度不在搜索范围内 if(!config.getId().equals("izSimilarity")){ String searchvalue = req.getParameter(config.getId()); @@ -238,36 +238,68 @@ public class OcrPictureController extends BaseController{ } catch (ParseException e) { continue; } - + queryWrapper.ge(config.getMeaning(),start); queryWrapper.le(config.getMeaning(),end); } - + }else{ queryWrapper.eq(config.getMeaning(),searchvalue); } - + } - + } - + } - + queryWrapper.eq("tenant_id",tenantId); Page page = new Page(pageNo, pageSize); IPage pageList = ocrPictureService.page(page, queryWrapper); - + for(OcrPicture ocrPicture1:pageList.getRecords()){ if(StringUtils.isNotBlank(ocrPicture1.getPictureclassid())){ OcrPictureclass ocrPictureclass = this.ocrPictureclassService.getById(ocrPicture1.getPictureclassid()); ocrPicture1.setOcrPictureclass(ocrPictureclass); } - + } - + return ResultVoUtil.success(pageList); } - + + /** + * 分页列表查询 + * + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @ApiOperation(value="图片分页列表查询-根据用户预设检索条件查询", notes="") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "header", name = "X-Tenant-Id", value = "租户主键,用户登录时的信息“tenantList”中获得。", dataType = "String", required = true), + @ApiImplicitParam(paramType = "path",name = "userSearchId", value = "预设检索条件id", required = true), + }) + @GetMapping(value = "/listByUserSearchId") + public ResultVo> queryPageByUserSearchId( + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + + //租户主键,由前端页面传送 + String tenantId = req.getHeader("X-Tenant-Id"); + if(StringUtils.isBlank(tenantId)){ + return ResultVoUtil.error("租户主键不能为空"); + } + + //获取用户预设检索条件id + String userSearchId = req.getParameter("userSearchId"); + IPage pageList = ocrPictureService.queryPageByUserSearchId(pageNo,pageSize,userSearchId); + return ResultVoUtil.success(pageList); + } + + /** * 分页列表查询 * @@ -279,7 +311,7 @@ public class OcrPictureController extends BaseController{ @PostMapping(value = "/loadpicture") public ResultVo loadpicture(OcrPicture ocrPicture, HttpServletRequest request) { - + BufferedReader streamReader = null; try { streamReader = new BufferedReader( new InputStreamReader(request.getInputStream(),"UTF-8")); @@ -298,17 +330,17 @@ public class OcrPictureController extends BaseController{ log.error("【数据接收】jsonFormatError:{}",e); logService.addLog(101,"接收数据失败。",null,null); } - + logService.addLog(101,"接收数据成功。",null,null); - + JSONObject jsonArray = JSONObject.parseObject(sb.toString()); - + //TODO 结束json数据,并持久化 //this.ocrPictureService //TODO AI获取图片分类接口 logService.addLog(102,"AI获取图片分类接口。",null,null); - + return ResultVoUtil.success(); } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrUsersearchchild.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrUsersearchchild.java index 5648456d..5381d810 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrUsersearchchild.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrUsersearchchild.java @@ -19,8 +19,8 @@ import java.util.Map; import java.util.AbstractMap.SimpleEntry; import java.util.stream.Stream; import java.util.stream.Collectors; - - + + @Data @Builder @@ -29,30 +29,38 @@ import java.util.stream.Collectors; @Schema(name = "个人过滤条件子表", title = "个人过滤条件子表") @TableName(value = "ocr_usersearchchild") public class OcrUsersearchchild implements BaseDto,java.io.Serializable { - + private static final long serialVersionUID = 6404860339470764341L; @Schema(description = "主键") @TableId(value = "id",type = IdType.ASSIGN_ID) @JsonSerialize(using = ToStringSerializer.class) @TableField(value="ID") private Long id; - + @Schema(description = "过滤条件主表主键") @TableField(value="usersearchid") private Long usersearchid; - + @Schema(description = "过滤内容,搜索的字段名称") @TableField(value="searchfield") private String searchfield; - + @Schema(description = "比较类型") @TableField(value="searchtype") private String searchtype; - + @Schema(description = "比较内容,如果是多个使用英文逗号分隔") @TableField(value="searchvalue") private String searchvalue; + @Schema(description = "筛选关系 当(where)、与(and)、或(or),多条件下的并集与、或关系") + @TableField(value="search_relation_type") + private String searchRelationType; + + @Schema(description = "排序字段,用于规范多筛选下顺序") + @TableField(value="order_num") + private String orderNum; + //保存当前登录用户的数据权限范围的搜索条件 @TableField(exist = false) @JsonIgnore @@ -66,7 +74,9 @@ public class OcrUsersearchchild implements BaseDto,java.io.Serializable { new SimpleEntry<>("usersearchid","usersearchid"), new SimpleEntry<>("searchfield","searchfield"), new SimpleEntry<>("searchtype","searchtype"), - new SimpleEntry<>("searchvalue","searchvalue") + new SimpleEntry<>("searchvalue","searchvalue"), + new SimpleEntry<>("search_relation_type","searchRelationType"), + new SimpleEntry<>("order_num","orderNum") ) .collect(Collectors.toMap(SimpleEntry::getKey, SimpleEntry::getValue)); @Override diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java index 2bf5d91d..dbcca46a 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java @@ -12,6 +12,7 @@ import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureNotes; import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicturejob; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import javax.servlet.http.HttpServletRequest; @@ -19,19 +20,19 @@ import javax.servlet.http.HttpServletRequest; * 业务层 */ public interface OcrPictureService extends BaseService { - - + + List listPage(Wrapper queryWrapper); - + /** * 保存接口传来的json数据 * @param jsonArray * @return */ public List savePicture(JSONObject jsonArray); - + public ResultVo createTaskChild(List ocrPictureList, String tenantId , UserToken sysUser, String search_month, HttpServletRequest req, String buessinessno); - + /** * 查询工单图片信息 * @param tenantId @@ -39,13 +40,13 @@ public interface OcrPictureService extends BaseService { * @return */ public List listByTaskChild(String tenantId,String createuser,String isclose,String tasktype,String packageid); - + /** * 查询工单图片信息 * @return */ public List listByTaskChild(List pictureid); - + /** * 添加一对多 * @@ -54,7 +55,7 @@ public interface OcrPictureService extends BaseService { * @param ocrPictureNotesList */ public void saveMain(OcrPicture ocrPicture, List ocrPicturejobList, List ocrPictureNotesList) ; - + /** * 修改一对多 * @@ -63,20 +64,28 @@ public interface OcrPictureService extends BaseService { * @param ocrPictureNotesList */ public void updateMain(OcrPicture ocrPicture,List ocrPicturejobList,List ocrPictureNotesList); - + /** * 删除一对多 * * @param id */ public void delMain (String id); - + /** * 批量删除一对多 * * @param idList */ public void delBatchMain (Collection idList); - - + + /** + * 根本预设检索条件id,分页查询图片信息 + * @param pageNo + * @param pageSize + * @param userSearchId + * @return + */ + IPage queryPageByUserSearchId(Integer pageNo, Integer pageSize, String userSearchId); + } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureclassService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureclassService.java index 8c7f3fd9..f75b65f9 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureclassService.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureclassService.java @@ -2,14 +2,16 @@ package cn.jyjz.xiaoyao.ocr.service; import java.util.List; import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseService; +import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture; import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureclass; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; /** * 业务层 */ public interface OcrPictureclassService extends BaseService { - + /** * 查询所有数据,无分页 * diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrUsersearchService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrUsersearchService.java index f493e769..e433732a 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrUsersearchService.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrUsersearchService.java @@ -8,25 +8,32 @@ import cn.jyjz.xiaoyao.ocr.dataobject.OcrUsersearch; * 业务层 */ public interface OcrUsersearchService extends BaseService { - + /** * 删除个人过滤数据,包含子表 * @param ids * @return */ public boolean removeByIds(String ids); - + /** * 删除个人过滤含子表 * @param ids * @return */ public boolean removeChildByIds(String ids); - + /** * 获取当前个人过滤的最大排序字段 * @param userid * @return */ public int getReorder(Long userid); + + /** + * 根据id检索出对应的预设条件 + * @param userSearchId + * @return + */ + OcrUsersearch selectByUserSearchId(String userSearchId); } 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 c58dfa56..fd75924f 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 @@ -1,5 +1,7 @@ package cn.jyjz.xiaoyao.ocr.service.impl; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.jyjz.flowable.domain.vo.FlowInstanceVo; import cn.jyjz.flowable.service.IFlowInstanceService; import cn.jyjz.xiaoyao.abase.service.SeqManageService; @@ -23,6 +25,8 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hpsf.Decimal; import org.springframework.beans.factory.annotation.Autowired; @@ -37,6 +41,7 @@ import java.io.Serializable; import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; /** @@ -47,12 +52,12 @@ import java.util.List; public class OcrPictureServiceImpl extends BaseServiceImpl implements OcrPictureService { @Resource private OcrPictureMybatisDao ocrpicturemybatisdao; - + @Resource private OcrPicturejobService ocrPicturejobService; @Resource private OcrPictureNotesService ocrPictureNotesService; - + @Resource private OcrPackagetaskService ocrPackagetaskService; @Resource @@ -63,102 +68,108 @@ public class OcrPictureServiceImpl extends BaseServiceImpl ocrPictureList, String tenantId , UserToken sysUser, String search_month, HttpServletRequest request, String buessinessno){ - + //图片错误信息 StringBuffer error = new StringBuffer(); //项目错误信息 StringBuffer errorProject = new StringBuffer(); //流程错误信息 StringBuffer errorFlow = new StringBuffer(); - + //记录任务相似度为百分百的任务主键 List pointsList = new ArrayList<>(); //图片信息不能为空 if(null != ocrPictureList && !ocrPictureList.isEmpty()){ //生成任务包 //String packageName = seqManageService.getSeqNextNo("AI任务包"); - + //TODO 相似度、图片查询时间未传 - + //创建任务包 OcrPackagetask ocrPackagetask = this.ocrPackagetaskService.create(buessinessno,tenantId,sysUser); - + if(null == ocrPackagetask){ return ResultVoUtil.error("失败。"); } - + //用于标记相似度是否存在百分百的情况 - + List newList = new ArrayList<>(); for(OcrPicture ocrPicture:ocrPictureList){ - + //如果当前图片已经生成任务包,直接跳过 if(ocrPicture.getTaskstatus().equals("1")){ continue; } - - + + //图片查重的比对图片集合 List compareList = new ArrayList<>(); - + //非历史图片主键集合 List picturecompareList = new ArrayList<>(); - + boolean havePoint = false; //二次遍历进行比对 for(OcrPicture ocrPictureNext:ocrPictureList){ - + if(ocrPictureNext.getId().longValue() == ocrPicture.getId().longValue()){ continue; } - - + + //TODO 接口请求判断重复情况 logService.addLog(103,"AI获取图片相似度接口", sysUser, "sendParams"); - - + + JSONObject jsonObjectSimi = ImageClassUtil.getSimilarity(ocrPicture.getImgurl(), ocrPictureNext.getImgurl(), null); System.out.println("responseDataXs--code = [" + jsonObjectSimi.get("code") + "]"); System.out.println("responseDataXs--similarity = [" + jsonObjectSimi.get("similarity") + "]"); - + String resultValue = ""; - + //返回内容为零,表示成功,否则表示失败 if(null != jsonObjectSimi && jsonObjectSimi.getString("code").equals("0")){ - + resultValue = jsonObjectSimi.getString("similarity"); ocrPictureNext.setResult(resultValue); }else{ resultValue = "0"; ocrPictureNext.setResult(resultValue); } - + BigDecimal b1 = new BigDecimal(resultValue); BigDecimal b2 = new BigDecimal("100"); int val = b1.compareTo(b2); if(val == 0){ havePoint = true; } - + //如果当前图片未生成任务需要临时保存 if(ocrPictureNext.getTaskstatus().equals("0")){ picturecompareList.add(ocrPictureNext.getId().toString()); } - + compareList.add(ocrPictureNext); } bubbleSortOpt(compareList); //从大到小进行排序 ocrPicture.setListCom(compareList); - + //非历史图片主键集合 ocrPicture.setPicturecompareList(picturecompareList); - + //查询项目对象 if(null == ocrPicture.getCategoryid()){ //TODO 没有对应项目,返回提示信息 @@ -185,11 +196,11 @@ public class OcrPictureServiceImpl extends BaseServiceImpl 0){ - + ocrPackagetask.setSearchtimes(SearchEnum.getName(Integer.parseInt(search_month))); }else if(StringUtils.isNotBlank(search_month) && Integer.parseInt(search_month) > 20){ ocrPackagetask.setSearchtimes(SearchEnum.getName((Integer.parseInt(search_month) - 20))); @@ -228,29 +239,29 @@ public class OcrPictureServiceImpl extends BaseServiceImpl compareList) { - + if(null == compareList) { return; } @@ -272,43 +283,43 @@ public class OcrPictureServiceImpl extends BaseServiceImpl savePicture(JSONObject jsonArray){ List list = new ArrayList<>(); - - + + return list; } public List listPage( Wrapper queryWrapper){ - + long count = this.count(queryWrapper); - + Page ocrPicturePage = new Page<>(1,count); ocrPicturePage.setMaxLimit(count); IPage iPage = this.page(ocrPicturePage,queryWrapper); - + return iPage.getRecords(); } - + public List listByTaskChild(String tenantId,String createuser,String isclose,String tasktype,String packageid){ - + List resultPicture = new ArrayList<>(); - + QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("TENANTID",tenantId); if(StringUtils.isNotBlank(createuser)){ queryWrapper.eq("CREATEUSER",createuser); } - + if(StringUtils.isNotBlank(isclose)){ queryWrapper.eq("IZCLOSE",isclose); } - + if(StringUtils.isNotBlank(tasktype)){ queryWrapper.eq("TASKTYPE",tasktype); } - + if(StringUtils.isNotBlank(packageid)){ queryWrapper.eq("PACKAGEID",packageid); } - + //查询工单/任务集合 List list = ocrTaskchildPictureService.listAll(tenantId,createuser,queryWrapper); for(OcrTaskchildPicture ocrTaskchildPicture:list){ @@ -317,11 +328,11 @@ public class OcrPictureServiceImpl extends BaseServiceImpl page = new Page<>(1, count); page.setMaxLimit(count); - + IPage iPage = this.ocrTaskchildPictureService.page(page,queryWrapper); - + List list = iPage.getRecords(); for(OcrTaskchildPicture ocrTaskchildPicture:list){ OcrPicture ocrPicture = view(ocrTaskchildPicture); @@ -346,64 +357,64 @@ public class OcrPictureServiceImpl extends BaseServiceImpl listCom = null; - + //判断查重图片是否为空 if(StringUtils.isNotBlank(ocrTaskchildPicture.getOcpictureid())){ //图片比较数量不确定 - + QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.in("id",ocrTaskchildPicture.getOcpictureid().split(",")); - + long count = this.count(queryWrapper); - + Page ocrPicturePage = new Page<>(1,count); ocrPicturePage.setMaxLimit(count); - + IPage iPage = this.page(ocrPicturePage,queryWrapper); - + int tempco = 0; for(OcrPicture ocrPicture1:iPage.getRecords()){ - + //比对结果 if(null != comResult && comResult.length > 0){ ocrPicture1.setResult(comResult[tempco]); } tempco++; } - + listCom = iPage.getRecords(); - + ocrPicture.setListCom(listCom); - + return ocrPicture; - + } - + return null; } - + @Override @Transactional(rollbackFor = Exception.class) public void saveMain(OcrPicture ocrPicture, List ocrPicturejobList, List ocrPictureNotesList) { @@ -423,16 +434,16 @@ public class OcrPictureServiceImpl extends BaseServiceImpl ocrPicturejobList,List ocrPictureNotesList) { ocrpicturemybatisdao.updateById(ocrPicture); - + //1.先删除子表数据 ocrPicturejobService .deleteByMainId(ocrPicture.getId().toString()); ocrPictureNotesService.deleteByMainId(ocrPicture.getId().toString()); - + //2.子表数据重新插入 if(ocrPicturejobList!=null && ocrPicturejobList.size()>0) { for(OcrPicturejob entity:ocrPicturejobList) { @@ -449,7 +460,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl idList) { @@ -467,6 +478,188 @@ public class OcrPictureServiceImpl extends BaseServiceImpl queryPageByUserSearchId(Integer pageNo, Integer pageSize, String userSearchId) { + OcrUsersearch ocrUsersearch= ocrUsersearchService.selectByUserSearchId(userSearchId); + + QueryWrapper queryWrapper = new QueryWrapper(); + + + for (OcrUsersearchchild usersearchchild : ocrUsersearch.getOcrUsersearchchildList()) { + this.formattingSearchChild(queryWrapper,usersearchchild); + + } + //分页查询并组装子集数据 + Page page = new Page(pageNo, pageSize); + IPage pageList = this.page(page, queryWrapper); + for(OcrPicture ocrPicture1:pageList.getRecords()){ + if(StringUtils.isNotBlank(ocrPicture1.getPictureclassid())){ + OcrPictureclass ocrPictureclass = ocrPictureclassService.getById(ocrPicture1.getPictureclassid()); + ocrPicture1.setOcrPictureclass(ocrPictureclass); + } + } + return pageList; + } + + /** + * 格式化筛选关系 + * @param queryWrapper + * @param usersearchchild + * @return + */ + private QueryWrapper formattingSearchChild(QueryWrapper queryWrapper,OcrUsersearchchild usersearchchild ){ + switch (usersearchchild.getSearchRelationType()){ + case "where": + this.formattingSearchType(queryWrapper,usersearchchild); + break; + case "and": + queryWrapper.and(wrapper->this.formattingSearchType(wrapper,usersearchchild)); + break; + case "or": + queryWrapper.or(wrapper->this.formattingSearchType(wrapper,usersearchchild)); + break; + default: + return queryWrapper; + } + return queryWrapper; + } + + /** + * 格式化查询类型 + * @param queryWrapper + * @param usersearchchild + * @return + */ + private QueryWrapper formattingSearchType(QueryWrapper queryWrapper,OcrUsersearchchild usersearchchild){ + //查询类型 相等true 不相等fase + boolean queryType = "eq".equals(usersearchchild.getSearchtype()); + + //1.获取检查数据,确定数据类型 + String valueType = clickSearchValue(usersearchchild.getSearchvalue()); + List arrayData = null; //集合型数据 + List 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){ + queryWrapper.in(usersearchchild.getSearchfield(),arrayData); + break; + } + //不相等 + queryWrapper.notIn(usersearchchild.getSearchfield(),arrayData); + break; + + case "section": + //数字区间查询 + if(sectionInts!=null && sectionInts.size()==2){ + if(queryType) { + //相等 + queryWrapper.between(usersearchchild.getSearchfield(),sectionInts.get(0),sectionInts.get(1)); + break; + } + //不相等 + queryWrapper.notBetween(usersearchchild.getSearchfield(),sectionInts.get(0),sectionInts.get(1)); + break; + } + + //字符串区间查询 + if(queryType) { + //相等 + queryWrapper.between(usersearchchild.getSearchfield(),sections[0],sections[1]); + break; + } + //不相等 + queryWrapper.notBetween(usersearchchild.getSearchfield(),sections[0],sections[1]); + break; + + case "time": + //时间区间数据 + //相等 + if(queryType) { + queryWrapper.between(usersearchchild.getSearchfield(),beginTime.getTime(),endTime.getTime()); + break; + } + //不相等 + queryWrapper.notBetween(usersearchchild.getSearchfield(),beginTime.getTime(),endTime.getTime()); + break; + + default: + if(queryType) { + queryWrapper.eq(usersearchchild.getSearchfield(), usersearchchild.getSearchvalue()); + break; + } + queryWrapper.ne(usersearchchild.getSearchfield(), usersearchchild.getSearchvalue()); + } + return queryWrapper; + } + + /** + * 检查数据类型 不同类型处理方案不同 + * 集合型 格式: xxx,xxx (array) + * 区间型 格式: xxx-xxx (section) + * 时间区间型 格式: xxxx/xx/xx-xxxx/xx/xx (time) + * 通用型 格式: xxxx (text) + * @param searchvalue + * @return + */ + private 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"; + } + } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureclassServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureclassServiceImpl.java index 67b7ce8f..2431e367 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureclassServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureclassServiceImpl.java @@ -1,16 +1,21 @@ package cn.jyjz.xiaoyao.ocr.service.impl; import cn.jyjz.xiaoyao.ocr.dataDao.OcrPictureclassMybatisDao; +import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture; import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureclass; +import cn.jyjz.xiaoyao.ocr.dataobject.OcrUsersearch; import cn.jyjz.xiaoyao.ocr.service.OcrPictureclassService; +import cn.jyjz.xiaoyao.ocr.service.OcrUsersearchService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; 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; /** @@ -21,16 +26,18 @@ import java.util.List; public class OcrPictureclassServiceImpl extends BaseServiceImpl implements OcrPictureclassService { @Autowired private OcrPictureclassMybatisDao ocrpictureclassmybatisdao; - + + @Override public List queryListNoPage(QueryWrapper queryWrapper) { - + Long count = ocrpictureclassmybatisdao.selectCount(queryWrapper); - + Page page = new Page(1,count); page.setMaxLimit(count); - + IPage iPage = this.page(page,queryWrapper); return iPage.getRecords(); } + } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrUsersearchServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrUsersearchServiceImpl.java index 64931ef5..04f82e03 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrUsersearchServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrUsersearchServiceImpl.java @@ -2,6 +2,7 @@ package cn.jyjz.xiaoyao.ocr.service.impl; import cn.jyjz.xiaoyao.ocr.dataDao.OcrUsersearchMybatisDao; 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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -21,18 +22,18 @@ import java.util.List; public class OcrUsersearchServiceImpl extends BaseServiceImpl implements OcrUsersearchService { @Resource private OcrUsersearchMybatisDao ocrusersearchmybatisdao; - + @Resource private OcrUsersearchchildService ocrUsersearchchildService; public boolean removeByIds(String ids){ this.ocrusersearchmybatisdao.deleteBatchIds(Arrays.asList(ids.split(","))); - + QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.in("usersearchid",Arrays.asList(ids.split(","))); - + return this.ocrUsersearchchildService.remove(queryWrapper); } - + /** * 删除个人过滤含子表 * @param ids @@ -41,10 +42,10 @@ public class OcrUsersearchServiceImpl extends BaseServiceImpl list = this.ocrusersearchmybatisdao.selectList(queryWrapper); - + if(null == list || list.isEmpty()){ return 1; }else{ return (list.get(0).getReorder() + 3); } - + + } + + @Override + public OcrUsersearch selectByUserSearchId(String userSearchId) { + OcrUsersearch usersearch = baseMapper.selectById(userSearchId); + + //获取子集依赖 + if(usersearch!=null){ + List ocrUsersearchchildList = ocrUsersearchchildService.selectByMainId(usersearch.getId().toString()); + usersearch.setOcrUsersearchchildList(ocrUsersearchchildList); + } + return usersearch; } }