diff --git a/dangan-common/src/main/java/com/da/common/constant/Constants.java b/dangan-common/src/main/java/com/da/common/constant/Constants.java index e0075df..e60da5d 100644 --- a/dangan-common/src/main/java/com/da/common/constant/Constants.java +++ b/dangan-common/src/main/java/com/da/common/constant/Constants.java @@ -169,7 +169,7 @@ public class Constants /** * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加) */ - public static final String[] JOB_WHITELIST_STR = { "com.da.quartz.task" }; + public static final String[] JOB_WHITELIST_STR = { "com.da.quartz.task","com.da.dangan.timetask" }; /** * 定时任务违规的字符 diff --git a/dangan-dangan/src/main/java/com/da/dangan/timetask/TimeTask.java b/dangan-dangan/src/main/java/com/da/dangan/timetask/TimeTask.java new file mode 100644 index 0000000..caf00b3 --- /dev/null +++ b/dangan-dangan/src/main/java/com/da/dangan/timetask/TimeTask.java @@ -0,0 +1,347 @@ +package com.da.dangan.timetask; + +import cn.hutool.json.JSONObject; +import com.alibaba.fastjson2.JSONArray; +import com.da.common.utils.DictUtils; +import com.da.dangan.domain.*; +import com.da.dangan.domain.vo.*; +import com.da.dangan.service.*; +import com.da.dangan.util.CallThirdInterface; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 定时任务调度测试 + * + * @author ruoyi + */ +@Component("timeTask") +public class TimeTask +{ + @Autowired + private IDaTaskService daTaskService; + @Autowired + private IDaPicturesRecardService daPicturesRecardService; + @Autowired + private IDaCzrkdjService daCzrkdjService; + @Autowired + private IDaBirthDjService daBirthDjService; + @Autowired + private IDaQyzService daQyzService; + @Autowired + private IDaZqzService daZqzService; + @Autowired + private IDaYtzmService daYtzmService; + @Autowired + private IDaZfnyhkcgService daZfnyhkcgService; + @Value("${ocr.url2}") + private String url2; + @Value("${ocr.url4}") + private String url4; + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Transactional + public void daNoParams() throws Exception { + DaTask param = new DaTask(); + param.setStatus("1"); //处理中 + //查询所有未完成的任务 + List daTasks = daTaskService.selectDaTaskList(param); + if(daTasks!=null&&daTasks.size()>0){ + for(DaTask datask:daTasks){ + //查看认识是否超时, 计算两个日期之间的差值(毫秒) 分钟-> / (1000 * 60) + long diff = (new Date().getTime()-datask.getUpdateTime().getTime())/(1000 * 60 ); + String expired = DictUtils.getDictValue("task_time_out", "task_timeout"); + if(diff> Long.parseLong(expired)){ + datask.setStatus("3"); //设置状态任务超时 + daTaskService.updateDaTask(datask); + continue; + } + //获取当前任务相关信息 + String ywType = datask.getYwType(); + Long muId = datask.getMuId(); + String muPath = datask.getMuPath(); + logger.info("--------开启任务:"+datask.getId()+"结果查询"); + //调用第三方接口查看识别任务状态 已结束直接取结果,处理中跳过 + String result = CallThirdInterface.callThirdInterfaceGetByTaskId(url2, datask.getId()); + //! 解析JSON字符串,获取键对应的值 + JSONObject jsonobject = new JSONObject(result); + String status = jsonobject.getStr("status"); + // if(status!=null&&!status.trim().equals("")){ + if(status.equals("1")){ //1处理中 + continue; + }else if(status.equals("2")){ //识别任务已结束,获取并存储数据 + String code = jsonobject.getStr("code"); + Integer success = jsonobject.getInt("success"); + Integer total = jsonobject.getInt("total"); + //失败id + String failPicid = jsonobject.getStr("failPicid"); + //获取失败的id集合 + List failIds = JSONArray.parseArray(failPicid, Long.class); + + //更新任务记录信息 + datask.setStatus("2");//已结束 + datask.setFailIds(StringUtils.join(failIds, ",")); + //获取成功的图片ids 重传任务时 成功ids=alls-fails + List allpicIds = Stream.of(datask.getPicIds().split(",")) + .map(Long::parseLong) + .collect(Collectors.toList()); + List successIds = allpicIds.stream().filter(item -> !failIds.contains(item)).collect(Collectors.toList()); + datask.setSuccessIds(StringUtils.join(successIds, ",")); + datask.setFailNum(failIds.size()); + datask.setSuccessNum(allpicIds.size()-failIds.size()); + datask.setResultStr(result); + daTaskService.updateDaTask(datask); + + //如果code=0 识别失败 无需存储响应的合集信息 code=1 识别成功或者部分成功 + if (code.equals("0")) { + } else { + //数据解析 根据业务类型存储识别后的信息 + String datas = jsonobject.getStr("datas"); + switch (ywType) { + case "option1": //常住人口登记表1 + //break; + case "option2": //常住卡 + // break; + case "option3": //常住人口登记表2 + //break; + case "option9": //常住人口登记表3 + //获取常住人口信息集合 + List czrkDatas = JSONArray.parseArray(datas, CzrkDatas.class); + for (CzrkDatas czrkData : czrkDatas) { + List picids = czrkData.getPicid(); + String picIds = StringUtils.join(picids, ",");//逗号分割 + //根据picIds查找对应的图片记录 + List picRecards = daPicturesRecardService.selectDaPicturesRecardByIds(picids.toArray(new Long[picids.size()])); + List picUrls = picRecards.stream() + .map(DaPicturesRecard::getPicUrl).collect(Collectors.toList()); + String pictures = StringUtils.join(picUrls, ",");//逗号分割 + + List info = czrkData.getInfo(); + if (info != null && info.size() > 0) { + for (DaCzrkdj daCzrkdj : info) { + //判断返回结果是否都是字符串 "无" + /*if(CallThirdInterface.allFieldsEqualTo(daCzrkdj,"无")){ + continue; + }*/ + daCzrkdj.setAllPicIds(picIds); + daCzrkdj.setAllPics(pictures); + daCzrkdj.setPicIds(picIds); + daCzrkdj.setPictures(pictures); + //其他字段存储 + daCzrkdj.setYwType(ywType); + daCzrkdj.setMuId(muId); + daCzrkdj.setMuPath(muPath); + daCzrkdj.setAuditStatus("0"); + daCzrkdj.setErrorCorrect("0"); + daCzrkdj.setTaskId(datask.getId()); + //daCzrkdj.setCreateBy(); + daCzrkdjService.insertDaCzrkdj(daCzrkdj); + } + } + } + break; + case "option4": + //获取出生医学证明信息集合 + List cszmDatas = JSONArray.parseArray(datas, CszmDatas.class); + for (CszmDatas cszmData : cszmDatas) { + List picids = cszmData.getPicid(); + String picIds = StringUtils.join(picids, ",");//逗号分割 + //根据picIds查找对应的图片记录 + List picRecards = daPicturesRecardService.selectDaPicturesRecardByIds(picids.toArray(new Long[picids.size()])); + List picUrls = picRecards.stream() + .map(DaPicturesRecard::getPicUrl).collect(Collectors.toList()); + String pictures = StringUtils.join(picUrls, ",");//逗号分割 + + List info = cszmData.getInfo(); + if (info != null && info.size() > 0) { + for (DaBirthDj daBirthdj : info) { + //判断返回结果是否都是字符串 "无" + /*if(CallThirdInterface.allFieldsEqualTo(daBirthdj,"无")){ + continue; + }*/ + daBirthdj.setAllPicIds(picIds); + daBirthdj.setAllPics(pictures); + daBirthdj.setPicIds(picIds); + daBirthdj.setPictures(pictures); + //其他字段存储 + daBirthdj.setTaskId(datask.getId()); + daBirthdj.setYwType(ywType); + daBirthdj.setMuId(muId); + daBirthdj.setMuPath(muPath); + daBirthdj.setAuditStatus("0"); + daBirthdj.setErrorCorrect("0"); + daBirthDjService.insertDaBirthDj(daBirthdj); + } + } + } + break; + case "option5": + //获取迁移证信息集合 + List qyzDatas = JSONArray.parseArray(datas, QyzDatas.class); + for (QyzDatas qyzData : qyzDatas) { + List picids = qyzData.getPicid(); + String picIds = StringUtils.join(picids, ",");//逗号分割 + //根据picIds查找对应的图片记录 + List picRecards = daPicturesRecardService.selectDaPicturesRecardByIds(picids.toArray(new Long[picids.size()])); + List picUrls = picRecards.stream() + .map(DaPicturesRecard::getPicUrl).collect(Collectors.toList()); + String pictures = StringUtils.join(picUrls, ",");//逗号分割 + + List info = qyzData.getInfo(); + if (info != null && info.size() > 0) { + for (DaQyz qyz : info) { + //判断返回结果是否都是字符串 "无" + /*if(CallThirdInterface.allFieldsEqualTo(qyz,"无")){ + continue; + }*/ + qyz.setAllPicIds(picIds); + qyz.setAllPics(pictures); + qyz.setPicIds(picIds); + qyz.setPictures(pictures); + //其他字段存储 + qyz.setYwType(ywType); + qyz.setMuId(muId); + qyz.setMuPath(muPath); + qyz.setAuditStatus("0"); + qyz.setErrorCorrect("0"); + qyz.setTaskId(datask.getId()); + daQyzService.insertDaQyz(qyz); + } + } + } + break; + case "option6": + //获取一胎证明信息集合 + List ytzmDatas = JSONArray.parseArray(datas, YtzmDatas.class); + for (YtzmDatas ytzmData : ytzmDatas) { + List picids = ytzmData.getPicid(); + String picIds = StringUtils.join(picids, ",");//逗号分割 + //根据picIds查找对应的图片记录 + List picRecards = daPicturesRecardService.selectDaPicturesRecardByIds(picids.toArray(new Long[picids.size()])); + List picUrls = picRecards.stream() + .map(DaPicturesRecard::getPicUrl).collect(Collectors.toList()); + String pictures = StringUtils.join(picUrls, ",");//逗号分割 + + List info = ytzmData.getInfo(); + if (info != null && info.size() > 0) { + for (DaYtzm ytzm : info) { + //判断返回结果是否都是字符串 "无" + /* if(CallThirdInterface.allFieldsEqualTo(ytzm,"无")){ + continue; + }*/ + ytzm.setAllPicIds(picIds); + ytzm.setAllPics(pictures); + ytzm.setPicIds(picIds); + ytzm.setPictures(pictures); + //其他字段存储 + ytzm.setYwType(ywType); + ytzm.setMuId(muId); + ytzm.setMuPath(muPath); + ytzm.setAuditStatus("0"); + ytzm.setErrorCorrect("0"); + ytzm.setTaskId(datask.getId()); + daYtzmService.insertDaYtzm(ytzm); + } + } + } + break; + case "option7": + //获取转非农业人口批复存根信息集合 + List zfnyDatas = JSONArray.parseArray(datas, ZfnyDatas.class); + for (ZfnyDatas zfnyData : zfnyDatas) { + List picids = zfnyData.getPicid(); + String picIds = StringUtils.join(picids, ",");//逗号分割 + //根据picIds查找对应的图片记录 + List picRecards = daPicturesRecardService.selectDaPicturesRecardByIds(picids.toArray(new Long[picids.size()])); + List picUrls = picRecards.stream() + .map(DaPicturesRecard::getPicUrl).collect(Collectors.toList()); + String pictures = StringUtils.join(picUrls, ",");//逗号分割 + + List info = zfnyData.getInfo(); + if (info != null && info.size() > 0) { + for (DaZfnyhkcg zfnyhkcg : info) { + //判断返回结果是否都是字符串 "无" + /*if(CallThirdInterface.allFieldsEqualTo(zfnyhkcg,"无")){ + continue; + }*/ + zfnyhkcg.setAllPicIds(picIds); + zfnyhkcg.setAllPics(pictures); + zfnyhkcg.setPicIds(picIds); + zfnyhkcg.setPictures(pictures); + //其他字段存储 + zfnyhkcg.setYwType(ywType); + zfnyhkcg.setMuId(muId); + zfnyhkcg.setMuPath(muPath); + zfnyhkcg.setAuditStatus("0"); + zfnyhkcg.setErrorCorrect("0"); + zfnyhkcg.setTaskId(datask.getId()); + daZfnyhkcgService.insertDaZfnyhkcg(zfnyhkcg); + } + } + } + break; + case "option8": + //获取准迁证信息集合 + List zqzDatas = JSONArray.parseArray(datas, ZqzDatas.class); + for (ZqzDatas zqzData : zqzDatas) { + List picids = zqzData.getPicid(); + String picIds = StringUtils.join(picids, ",");//逗号分割 + //根据picIds查找对应的图片记录 + List picRecards = daPicturesRecardService.selectDaPicturesRecardByIds(picids.toArray(new Long[picids.size()])); + List picUrls = picRecards.stream() + .map(DaPicturesRecard::getPicUrl).collect(Collectors.toList()); + String pictures = StringUtils.join(picUrls, ",");//逗号分割 + + List info = zqzData.getInfo(); + if (info != null && info.size() > 0) { + for (DaZqz zqz : info) { + //判断返回结果是否都是字符串 "无" + /*if(CallThirdInterface.allFieldsEqualTo(zqz,"无")){ + continue; + }*/ + zqz.setAllPicIds(picIds); + zqz.setAllPics(pictures); + zqz.setPicIds(picIds); + zqz.setPictures(pictures); + //其他字段存储 + zqz.setYwType(ywType); + zqz.setMuId(muId); + zqz.setMuPath(muPath); + zqz.setAuditStatus("0"); + zqz.setErrorCorrect("0"); + zqz.setTaskId(datask.getId()); + daZqzService.insertDaZqz(zqz); + } + } + } + break; + } + //获取数据成功后,清除对应taskId的信息 + clearThirdTaskResult(datask.getId()); + } + } + } + }else{ + System.out.println("-------------------------------------暂时没有未完成的识别任务----------------------------------"); + } + } + + public void clearThirdTaskResult(Long taskId) throws Exception { + String result = CallThirdInterface.callThirdInterfaceClearByTaskId(url4,taskId); + //! 解析JSON字符串,获取键对应的值 + JSONObject jsonobject = new JSONObject(result); + String msg = jsonobject.getStr("msg"); + String code = jsonobject.getStr("code"); + logger.info("clearByTaskId------------------------------------"+taskId+" ---"+code+"---"+msg); + } +}