diff --git a/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateBussSync.java b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateBussSync.java new file mode 100644 index 00000000..40d9b683 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateBussSync.java @@ -0,0 +1,301 @@ +package com.adc.da.scheduledState.server; + +import com.adc.da.mq.CreateStandMQService; +import com.adc.da.person.service.IPersonCollectEOService; +import com.adc.da.scheduledState.utils.Util; +import com.adc.da.slrs.sarBussStandAttrInfo.dao.SarBussStandAttrInfoDao; +import com.adc.da.slrs.sarBussStandAttrInfo.service.ISarBussStandAttrInfoService; +import com.adc.da.slrs.sarBussionessStand.dao.SarBussionessStandDao; +import com.adc.da.slrs.sarBussionessStand.entity.SarBussionessStand; +import com.adc.da.slrs.sarBussionessStand.service.ISarBussionessStandService; +import com.adc.da.slrs.sarStandItems.dao.SarStandItemsDao; +import com.adc.da.slrs.sarStandardsInfo.entity.SarStandardsInfo; +import com.adc.da.sys.dao.DicTypeEODao; +import com.adc.da.utils.util.FieldConvertUtil; +import com.adc.da.utils.util.InitStandAttrUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.json.JSONTokener; +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.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.sql.Clob; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: TODO + * @author: super_liu + * @date: 2022年01月25日 3:34 + */ +@EnableScheduling +@Component +@Slf4j +public class UpdateStateBussSync { + Logger logger = LoggerFactory.getLogger(UpdateStateBussSync.class); + + @Autowired + private DicTypeEODao dicTypeEODao; + + @Autowired + private SarStandItemsDao standItemsDao; + + @Autowired + private CreateStandMQService createStandMQService; + + @Autowired + private IPersonCollectEOService personCollectEOService; + + @Autowired + private SarBussionessStandDao sarBussionessStandDao; + + @Autowired + private ISarBussionessStandService iSarBussionessStandService; + + @Autowired + private ISarBussStandAttrInfoService sarBussStandAttrInfoService; + + @Autowired + private SarBussStandAttrInfoDao sarBussStandAttrInfoEODao; + + /** + * 根据配置文件设置是否开启定时器 + */ + + @Value("${isNotScheduled}") + private boolean isNotScheduled; //是否开启定时器 + + + // 每天0点1分执行 企标标准文本状态 即将实施和现行有效状态自动变更逻辑 +// @Scheduled(cron="0 0 1 1 * ?") +// @Scheduled(cron="*/60 * * * * ?") +// @Scheduled(cron = "0 1 0 * * ?") + @Async + public void BussScheduled(){ + if(isNotScheduled){ + try{ + Thread.sleep(2000); + logger.info("每天0点1分执行 企标标准文本状态 即将实施和现行有效状态自动变更逻辑:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---START-01"); + + // 发布、即将实施 + List list = new ArrayList<>(); + // 发布 + list.add("6jnqba2mby"); + // 即将实施 + list.add("rpvoxsvr60"); + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("A.VALID_FLAG","0"); + wrapper.in("A.TEXT_STATUS_BUSS",list); + List getStateScheduledList = sarBussionessStandDao.getStateScheduledList(wrapper); + if(!getStateScheduledList.isEmpty()){ + // N个实施日期中大于当前日期 + List getStateScheduledListToIsAfter = getStateScheduledList.stream().filter(info -> { + if(StringUtils.isNotBlank(info.getPutTime())){ + List dateList = Arrays.stream(info.getPutTime().split(",")).map(String::trim).collect(Collectors.toList()); + List dateIsAfterList = dateList.stream().filter(s -> { + if(Util.isValidDate(s)){ + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDateTime parse = LocalDate.parse(s, dateTimeFormatter).atStartOfDay(); + // 实施日期是否大于当前日期 + return parse.isAfter(now); + } + return false; + }).collect(Collectors.toList()); + + return !dateIsAfterList.isEmpty(); + } + return false; + }).collect(Collectors.toList()); + + + // N个实施日期中小于当前时间 + List getStateScheduledListToIsBefore = getStateScheduledList.stream().filter(info -> { + if(StringUtils.isNotBlank(info.getPutTime())){ + List dateList = Arrays.stream(info.getPutTime().split(",")).map(String::trim).collect(Collectors.toList()); + List dateIsBeforeList = dateList.stream().filter(s -> { + if(Util.isValidDate(s)){ + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDateTime parse = LocalDate.parse(s, dateTimeFormatter).atStartOfDay(); + // 实施日期是否小于当前时间 + return parse.isBefore(now); + } + return false; + }).collect(Collectors.toList()); + + return !dateIsBeforeList.isEmpty(); + } + return false; + }).collect(Collectors.toList()); + + // N个实施日期中大于当前日期 执行逻辑 更为即将实施 + if(!getStateScheduledListToIsAfter.isEmpty()){ + execStandDate(getStateScheduledListToIsAfter,"rpvoxsvr60"); + } + + // N个实施日期中小于当前时间 执行逻辑 更为现行有效 + if(!getStateScheduledListToIsBefore.isEmpty()){ + execStandDate(getStateScheduledListToIsBefore,"9z741h2m3j"); + } + + } + + logger.info("每天0点1分执行 企标标准文本状态 即将实施和现行有效状态自动变更逻辑:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---End-01"); + }catch(Exception e){ + logger.info(e.getMessage()); + } + } + } + + // 每天0点1分执行 企标标准文本状态被代替逻辑 自动变更作废状态 +// @Scheduled(cron="0 0 1 1 * ?") +// @Scheduled(cron="*/60 * * * * ?") +// @Scheduled(cron = "0 1 0 * * ?") + @Async + public void BussScheduledToAbolish(){ + if(isNotScheduled){ + try{ + Thread.sleep(2000); + logger.info("每天0点1分执行 企标标准文本状态被代替逻辑 自动变更作废状态:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---START-01"); + + // 现行有效、即将实施 + List list = new ArrayList<>(); + // 现行有效 + list.add("9z741h2m3j"); + // 即将实施 + list.add("rpvoxsvr60"); + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("A.VALID_FLAG","0"); + wrapper.in("A.TEXT_STATUS_BUSS",list); + List getStateScheduledList = sarBussionessStandDao.getStateScheduledList(wrapper); + if(!getStateScheduledList.isEmpty()){ + + // 需要更新为作废状态的集合 + List invalidList = getStateScheduledList.stream().filter(info -> { + if(StringUtils.isNotBlank(info.getBDTQBBHBUSS())){ + List bdtList = Arrays.stream(info.getBDTQBBHBUSS().split(",")).map(String::trim).collect(Collectors.toList()); + // 现行有效、作废 + List bdtStateList = new ArrayList<>(); + // 现行有效 + bdtStateList.add("9z741h2m3j"); + // 作废 + bdtStateList.add("3lqnlgmgcn"); + QueryWrapper wrapperBdt = new QueryWrapper(); + wrapperBdt.eq("VALID_FLAG","0"); + wrapperBdt.in("STAND_CODE",bdtList); + wrapperBdt.in("TEXT_STATUS_BUSS",bdtStateList); + List queryBDTBussList = sarBussionessStandDao.selectList(wrapperBdt); + // 所有的被代替标准号中的有效标准中有一个标准标准状态是现行有效、作废 + return !queryBDTBussList.isEmpty(); + } + return false; + }).collect(Collectors.toList()); + + + // 作废状态的集合 执行逻辑 更为作废 + if(!invalidList.isEmpty()){ + execStandDate(invalidList,"3lqnlgmgcn"); + } + + } + + logger.info("每天0点1分执行 企标标准文本状态被代替逻辑 自动变更作废状态:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---End-01"); + }catch(Exception e){ + logger.info(e.getMessage()); + } + } + } + + + @Async + public void execStandDate(List infoList, String textStatusStand) throws Exception { + List list = new ArrayList<>(); + for (SarBussionessStand info : infoList) { + info.setTextStatusBuss(textStatusStand); + bussAttrInfoShowSearchDetails(info); + if (info.getAttrInfoMap() != null) { + info.setSarStandAttrEOStr(JSONObject.toJSONString(info.getAttrInfoMap())); + } + createStandMQService.sendBussStandMQ(info,"update"); + + // 只批量更新文本字段 + SarBussionessStand newInfo = new SarBussionessStand(); + newInfo.setTextStatusBuss(textStatusStand); + newInfo.setId(info.getId()); + newInfo.setModifyTime(new Date()); + list.add(newInfo); + } + + if(!list.isEmpty()){ + iSarBussionessStandService.updateBatchById(list); + } + } + + + /** + * 获取属性字段 + * @param row + */ + + public void bussAttrInfoShowSearchDetails(SarBussionessStand row) throws Exception { + if (row != null) { + bussAttrInfoSearchDetails(row); + Map getAttrMap = row.getAttrInfoCaseMap(); + if (getAttrMap != null && getAttrMap.size() > 0) { + for (Map.Entry entry : getAttrMap.entrySet()) { + String name = entry.getKey().toUpperCase(); + String value = ""; + List valArr = new ArrayList<>(); + if (entry.getValue() != null && InitStandAttrUtil.selectionFieldListBuss != null && InitStandAttrUtil.selectionFieldListBuss.size() > 0 && InitStandAttrUtil.selectionFieldListBuss.contains(name)) { + if(org.apache.commons.lang.StringUtils.isNotBlank(entry.getValue().toString())){ + Object json= new JSONTokener(entry.getValue().toString()).nextValue(); + if(json instanceof org.json.JSONArray){ + valArr = com.alibaba.fastjson.JSONObject.parseArray(entry.getValue().toString(),String.class); + }else { + value = entry.getValue().toString(); + valArr = Arrays.asList(value.split(",")); + } + if(!valArr.isEmpty()){ + value = dicTypeEODao.getDicNamesByCodes(valArr,""); + } + } + entry.setValue(value); + } + } + } + } + } + + public void bussAttrInfoSearchDetails(SarBussionessStand row) throws Exception { + String fieldInfo = InitStandAttrUtil.queryFieldBuss; + String collectId = personCollectEOService.queryCollectByUserAndId(row.getId()); + row.setCollectId(collectId); + // 查询属性表数据 + if (org.apache.commons.lang.StringUtils.isNotBlank(fieldInfo)) { + Map getAttrMap = sarBussStandAttrInfoEODao.selectStandFieldAndData(fieldInfo, row.getId()); + if (InitStandAttrUtil.clobFieldList != null && !InitStandAttrUtil.clobFieldList.isEmpty()) { + // 遍历修改所有clob类型的值 + for (String clobField : InitStandAttrUtil.clobFieldList) { + Clob clobValue = (Clob) getAttrMap.get(clobField); + String fieldValue = FieldConvertUtil.ClobToString(clobValue); + getAttrMap.put(clobField, fieldValue); + } + } + + row.setAttrInfoMap(getAttrMap); + } + } + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateStandSync.java b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateStandSync.java new file mode 100644 index 00000000..c6b7a081 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateStandSync.java @@ -0,0 +1,405 @@ +package com.adc.da.scheduledState.server; + +import com.adc.da.mq.CreateStandMQService; +import com.adc.da.person.service.IPersonCollectEOService; +import com.adc.da.scheduledState.utils.Util; +import com.adc.da.slrs.sarStandAttrInfo.dao.SarStandAttrInfoDao; +import com.adc.da.slrs.sarStandAttrInfo.service.ISarStandAttrInfoService; +import com.adc.da.slrs.sarStandItems.dao.SarStandItemsDao; +import com.adc.da.slrs.sarStandItems.entity.FindSarItemsPageReqDTO; +import com.adc.da.slrs.sarStandItems.entity.SarStandItems; +import com.adc.da.slrs.sarStandardsInfo.dao.SarStandardsInfoDao; +import com.adc.da.slrs.sarStandardsInfo.entity.SarStandardsInfo; +import com.adc.da.slrs.sarStandardsInfo.service.ISarStandardsInfoService; +import com.adc.da.sys.dao.DicTypeEODao; +import com.adc.da.utils.util.FieldConvertUtil; +import com.adc.da.utils.util.InitStandAttrUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.json.JSONTokener; +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.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.sql.Clob; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: TODO + * @author: super_liu + * @date: 2022年01月25日 3:34 + */ +@EnableScheduling +@Component +@Slf4j +public class UpdateStateStandSync { + Logger logger = LoggerFactory.getLogger(UpdateStateStandSync.class); + + @Autowired + private DicTypeEODao dicTypeEODao; + + @Autowired + private SarStandItemsDao standItemsDao; + + @Autowired + private CreateStandMQService createStandMQService; + + @Autowired + private IPersonCollectEOService personCollectEOService; + + @Autowired + private SarStandAttrInfoDao sarStandAttrInfoEODao; + + @Autowired + private SarStandardsInfoDao sarStandardsInfoDao; + + @Autowired + private ISarStandardsInfoService iSarStandardsInfoService; + + @Autowired + private ISarStandAttrInfoService sarStandAttrInfoEOService; + + /** + * 根据配置文件设置是否开启定时器 + */ + + @Value("${isNotScheduled}") + private boolean isNotScheduled; //是否开启定时器 + + + // 每天0点1分执行 国内标准文本状态 即将实施和现行有效状态自动变更逻辑 +// @Scheduled(cron="0 0 1 1 * ?") +// @Scheduled(cron="0 37 9 * * ?") +// @Scheduled(cron = "0 1 0 * * ?") + @Async + public void StandScheduled(){ + if(isNotScheduled){ + try{ + Thread.sleep(2000); + logger.info("每天0点1分执行 国内标准文本状态 即将实施和现行有效状态自动变更逻辑:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---START-01"); + + // 发布、即将实施 只查询国内标准 + List list = new ArrayList<>(); + // 发布 + list.add("hc99551723c"); + // 即将实施 + list.add("hb0iy9z23c"); + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("A.VALID_FLAG","0"); + wrapper.eq("STAND_TYPE","INLAND"); + wrapper.in("A.TEXT_STATUS",list); + List getStateScheduledList = sarStandardsInfoDao.getStateScheduledList(wrapper); + if(!getStateScheduledList.isEmpty()){ + // N个实施日期中大于当前日期 + List getStateScheduledListToIsAfter = getStateScheduledList.stream().filter(info -> { + if(StringUtils.isNotBlank(info.getSSRQ())){ + List dateList = Arrays.stream(info.getSSRQ().split(",")).map(String::trim).collect(Collectors.toList()); + List dateIsAfterList = dateList.stream().filter(s -> { + if(Util.isValidDate(s)){ + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDateTime parse = LocalDate.parse(s, dateTimeFormatter).atStartOfDay(); + // 实施日期是否大于当前日期 + return parse.isAfter(now); + } + return false; + }).collect(Collectors.toList()); + + return !dateIsAfterList.isEmpty(); + } + return false; + }).collect(Collectors.toList()); + + + // N个实施日期中小于当前时间 + List getStateScheduledListToIsBefore = getStateScheduledList.stream().filter(info -> { + if(StringUtils.isNotBlank(info.getSSRQ())){ + List dateList = Arrays.stream(info.getSSRQ().split(",")).map(String::trim).collect(Collectors.toList()); + List dateIsBeforeList = dateList.stream().filter(s -> { + if(Util.isValidDate(s)){ + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDateTime parse = LocalDate.parse(s, dateTimeFormatter).atStartOfDay(); + // 实施日期是否小于当前时间 + return parse.isBefore(now); + } + return false; + }).collect(Collectors.toList()); + + return !dateIsBeforeList.isEmpty(); + } + return false; + }).collect(Collectors.toList()); + + // N个实施日期中大于当前日期 执行逻辑 更为即将实施 + if(!getStateScheduledListToIsAfter.isEmpty()){ + logger.info("=============N个实施日期中大于当前日期 执行============"); + // 文本状态更为即将实施 + execStandDate(getStateScheduledListToIsAfter,"hb0iy9z23c"); + } + + // N个实施日期中小于当前时间 执行逻辑 更为现行有效 + if(!getStateScheduledListToIsBefore.isEmpty()){ + logger.info("=============N个实施日期中小于当前时间 执行============"); + // 文本状态更为现行有效 + execStandDate(getStateScheduledListToIsBefore,"vsaga7nwub"); + } + + } + + + logger.info("每天0点1分执行 国内标准文本状态 即将实施和现行有效状态自动变更逻辑:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---End-01"); + }catch(Exception e){ + logger.info(e.getMessage()); + } + } + } + + // 每天0点1分执行 国内标准文本状态被代替逻辑 标准自动变更废止 +// @Scheduled(cron="0 0 1 1 * ?") +// @Scheduled(cron="*/60 * * * * ?") +// @Scheduled(cron = "0 1 0 * * ?") + @Async + public void StandScheduledToAbolish(){ + if(isNotScheduled){ + try{ + Thread.sleep(2000); + logger.info("每天0点1分执行 国内标准文本状态被代替逻辑 标准自动变更废止:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---START-01"); + + // 现行有效、即将实施、被代替 只查询国内标准 + List list = new ArrayList<>(); + // 现行有效 + list.add("vsaga7nwub"); + // 即将实施 + list.add("hb0iy9z23c"); + // 被代替 + list.add("qke0ckro2p"); + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("A.VALID_FLAG","0"); + wrapper.eq("STAND_TYPE","INLAND"); + wrapper.in("A.TEXT_STATUS",list); + List getStateStandScheduledList = sarStandardsInfoDao.getStateScheduledList(wrapper); + + if(!getStateStandScheduledList.isEmpty()){ + + List invalidStandToGBList = new ArrayList<>(); + List bdtStandToGBList = new ArrayList<>(); + + // 当前标准的标准类别是否是GB类 GB集合逻辑 + getStateStandScheduledList.forEach(info -> { + if(StringUtils.isNotBlank(info.getBDTBZH())){ + List bdtList = Arrays.stream(info.getBDTBZH().split(",")).map( + s -> s.replace(" ","").trim()).collect(Collectors.toList()); + // 查询等于GB的国内标准 + QueryWrapper wrapperGB = new QueryWrapper(); + wrapperGB.eq("SAR_STANDARDS_INFO.VALID_FLAG","0"); + wrapperGB.eq("SAR_STANDARDS_INFO.STAND_SORT","GB"); + wrapperGB.in("trim(replace(concat(SAR_STANDARDS_INFO.STAND_SORT,' ',SAR_STANDARDS_INFO.STAND_NUMBER,'-'," + + "SAR_STANDARDS_INFO.STAND_YEAR),' ',''))",bdtList); + List queryGBList = sarStandardsInfoDao.selectList(wrapperGB); + + if(!queryGBList.isEmpty()){ + int queryGbCount = queryGBList.size(); + + //被代替标准号中所有有效标准的状态都是现行有效状态 + List yxList = queryGBList.stream().filter(info1 -> + "vsaga7nwub".equals(info1.getTextStatus())).collect(Collectors.toList()); + + //被代替标准号中所有有效标准的状态都是被代替状态 + List bdtStateList = queryGBList.stream().filter(info1 -> + "qke0ckro2p".equals(info1.getTextStatus())).collect(Collectors.toList()); + + //被代替标准号中所有有效标准的状态都是废止状态 + List fzList = queryGBList.stream().filter(info1 -> + "chblaarg77".equals(info1.getTextStatus())).collect(Collectors.toList()); + + // 满足其上存入更新废止逻辑 如果只有一个被代替标准 优先更新废止状态 + if(yxList.size() == queryGbCount || bdtStateList.size() == queryGbCount || fzList.size() == queryGbCount){ + invalidStandToGBList.add(info); + }else { + // 被代替标准号中的有效标准的标准状态中有一个是发布、即将实施、现行有效、被代替状态的 + List singleList = queryGBList.stream().filter(info1 -> { + if("hc99551723c".equals(info1.getTextStatus()) || "hb0iy9z23c".equals(info1.getTextStatus()) + || "vsaga7nwub".equals(info1.getTextStatus()) || "qke0ckro2p".equals(info1.getTextStatus())){ + return true; + } + return false; + }).collect(Collectors.toList()); + + // 满足其上存入更新被代替逻辑 + if(!singleList.isEmpty()){ + bdtStandToGBList.add(info); + } + } + } + } + }); + + + // 当前标准的标准类别是否是GB类 NOT GB集合逻辑 + List bdtStandToNotGBList = getStateStandScheduledList.stream().filter(info -> { + if(StringUtils.isNotBlank(info.getBDTBZH())){ + List bdtList = Arrays.stream(info.getBDTBZH().split(",")).map( + s -> s.replace(" ","").trim()).collect(Collectors.toList()); + + //发布、即将实施、现行有效、被代替 + List bdtStateList = new ArrayList<>(); + // 发布 + bdtStateList.add("hc99551723c"); + // 作废 + bdtStateList.add("hb0iy9z23c"); + // 即将实施 + bdtStateList.add("vsaga7nwub"); + // 被代替 + bdtStateList.add("qke0ckro2p"); + + // 查询不等于GB的国内标准 且 有效的被代替标准 + QueryWrapper wrapperNotGB = new QueryWrapper(); + wrapperNotGB.eq("VALID_FLAG","0"); + wrapperNotGB.ne("STAND_SORT","GB"); + wrapperNotGB.in("TEXT_STATUS",wrapperNotGB); + wrapperNotGB.in("trim(replace(concat(SAR_STANDARDS_INFO.STAND_SORT,' ',SAR_STANDARDS_INFO.STAND_NUMBER,'-'," + + "SAR_STANDARDS_INFO.STAND_YEAR),' ',''))",bdtList); + List queryNotGBList = sarStandardsInfoDao.selectList(wrapperNotGB); + + // 被代替标准号中的有效标准的标准状态中有一个是发布、即将实施、现行有效、被代替状态的 + // 满足其上过滤更新被代替数据 + return !queryNotGBList.isEmpty(); + } + return false; + }).collect(Collectors.toList()); + + if(!invalidStandToGBList.isEmpty()){ + logger.info("=============被代替标准号中所有有效标准的状态都是现行有效、被代替、废止状态 执行============"); + // 文本状态更为废止状态 + execStandDate(invalidStandToGBList,"chblaarg77"); + } + + if(!bdtStandToGBList.isEmpty()){ + logger.info("=============GB=======被代替标准号中的有效标准的标准状态中有一个是发布、即将实施、现行有效、被代替状态的 执行============"); + // 文本状态更为被代替 + execStandDate(bdtStandToGBList,"qke0ckro2p"); + } + + if(!bdtStandToNotGBList.isEmpty()){ + logger.info("=============NOT GB ===被代替标准号中的有效标准的标准状态中有一个是发布、即将实施、现行有效、被代替状态的 执行============"); + // 文本状态更为被代替 + execStandDate(bdtStandToNotGBList,"qke0ckro2p"); + } + + + + } + + logger.info("每天0点1分执行 国内标准文本状态被代替逻辑 标准自动变更废止:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---End-01"); + }catch(Exception e){ + logger.info(e.getMessage()); + } + } + } + + + + @Async + public void execStandDate(List infoList, String textStatusStand) throws Exception { + List list = new ArrayList<>(); + for (SarStandardsInfo info : infoList) { + info.setTextStatus(textStatusStand); + standFunc(info); + createStandMQService.sendStandMQ(info,"update"); + + // 只批量更新文本字段 + SarStandardsInfo newInfo = new SarStandardsInfo(); + newInfo.setTextStatus(textStatusStand); + newInfo.setId(info.getId()); + newInfo.setModifyTime(new Date()); + list.add(newInfo); + } + + if(!list.isEmpty()){ + iSarStandardsInfoService.updateBatchById(list); + } + } + + private void standFunc(SarStandardsInfo sarStandardsInfoEO) throws Exception { + attrInfoSearchDetails(sarStandardsInfoEO); + FindSarItemsPageReqDTO pageInfo = new FindSarItemsPageReqDTO(); + pageInfo.setStandId(sarStandardsInfoEO.getId()); + pageInfo.setFileType("FBGBJBD"); + + /** + * SarItemVO换为sarItemVOS + * List sarItemVOS = standItemsDao.querySarItemAndInterpretation(pageInfo); + * .collect(Collectors.toMap(SarItemVO::getItemsNum, SarItemVO::getItemsName)); + */ + + List sarItemVOS = standItemsDao.querySarItemAndInterpretation(pageInfo); + if (!sarItemVOS.isEmpty()) { + Map collectMap = sarItemVOS.stream().filter((e) -> e.getItemsNum() != null && e.getItemsName() != null) + .collect(Collectors.toMap(SarStandItems::getItemsNum, SarStandItems::getTermsConditions)); + sarStandardsInfoEO.setMapItems(collectMap); + } + if (sarStandardsInfoEO.getAttrInfoMap() != null) { + sarStandardsInfoEO.setSarStandAttrEOStr(JSONObject.toJSONString(sarStandardsInfoEO.getAttrInfoMap())); + } + } + + public void attrInfoSearchDetails(SarStandardsInfo row) throws Exception { + if (row != null) { + String fieldInfo = InitStandAttrUtil.queryField; + String collectId = personCollectEOService.queryCollectByUserAndId(row.getId()); + row.setCollectId(collectId); + // 查询属性表数据 + if (StringUtils.isNotBlank(fieldInfo)) { + Map getAttrMap = sarStandAttrInfoEODao.selectStandFieldAndData(fieldInfo, row.getId()); + if (InitStandAttrUtil.clobFieldList != null && !InitStandAttrUtil.clobFieldList.isEmpty()) { + // 遍历修改所有clob类型的值 + for (String clobField : InitStandAttrUtil.clobFieldList) { + Clob clobValue = (Clob) getAttrMap.get(clobField); + String fieldValue = FieldConvertUtil.ClobToString(clobValue); + getAttrMap.put(clobField, fieldValue); + } + } + + row.setAttrInfoMap(getAttrMap); + } + + Map getAttrMap = row.getAttrInfoMap(); + if (getAttrMap != null && getAttrMap.size() > 0) { + for (Map.Entry entry : getAttrMap.entrySet()) { + String name = entry.getKey(); + String value = ""; + List valArr = new ArrayList<>(); + if (entry.getValue() != null && InitStandAttrUtil.selectionFieldList != null && InitStandAttrUtil.selectionFieldList.size() > 0 && InitStandAttrUtil.selectionFieldList.contains(name)) { + if (StringUtils.isNotBlank(entry.getValue().toString())) { + Object json = new JSONTokener(entry.getValue().toString()).nextValue(); + if (json instanceof org.json.JSONArray) { + valArr = com.alibaba.fastjson.JSONObject.parseArray(entry.getValue().toString(), String.class); + } else { + value = entry.getValue().toString(); + valArr = Arrays.asList(value.split(",")); + } + if (!valArr.isEmpty()) { + value = dicTypeEODao.getDicNamesByCodes(valArr, ""); + } + } + entry.setValue(value); + } + } + } + } + } + + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/scheduledState/utils/Util.java b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/utils/Util.java new file mode 100644 index 00000000..0ab4a92c --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/utils/Util.java @@ -0,0 +1,37 @@ +package com.adc.da.scheduledState.utils; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @Description: TODO + * @author: super_liu + * @date: 2022年05月11日 15:36 + */ +public class Util { + /** + * 判断字符串是否为合法的日期格式 + * @param dateStr 待判断的字符串 + * @return + */ + public static boolean isValidDate(String dateStr){ + //判断结果 默认为true + boolean judgeresult=true; + //1、首先使用SimpleDateFormat初步进行判断,过滤掉注入 yyyy-01-32 或yyyy-00-0x等格式 + //此处可根据实际需求进行调整,如需判断yyyy/MM/dd格式将参数改掉即可 + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + try{ + //增加强判断条件,否则 诸如2022-02-29也可判断出去 + format.setLenient(false); + Date date =format.parse(dateStr); + }catch(Exception e){ + judgeresult=false; + } + //由于上述方法只能验证正常的日期格式,像诸如 0001-01-01、11-01-01,10001-01-01等无法校验,此处再添加校验年费是否合法 + String yearStr=dateStr.split("-")[0]; + if(yearStr.startsWith("0")||yearStr.length()!=4){ + judgeresult=false; + } + return judgeresult; + } +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/search/sync/restSearchSync.java b/adc-da-slrs/src/main/java/com/adc/da/search/sync/restSearchSync.java index beeef499..5cf899a9 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/search/sync/restSearchSync.java +++ b/adc-da-slrs/src/main/java/com/adc/da/search/sync/restSearchSync.java @@ -46,7 +46,7 @@ public class restSearchSync { private boolean isNotScheduled; //是否开启定时器 - // 每天0点1分执行 重置ES 自动更新、新增、删除 + // 每天0点1分执行 重置ES 自动更新、新增 // @Scheduled(cron="0 0 1 1 * ?") @Scheduled(cron = "0 1 0 * * ?") @Async @@ -54,14 +54,14 @@ public class restSearchSync { if(isNotScheduled){ try{ Thread.sleep(2000); - logger.info("每天0点1分执行 重置ES 自动更新、新增、删除:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---START-01"); + logger.info("每天0点1分执行 重置ES 自动更新、新增:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---START-01"); SearchCenter searchCenter = new SearchCenter(); // ALL 执行全部 searchCenter.setExecType("ALL"); resetSearchCenterService.syncResetALLSearchCenter(searchCenter); - logger.info("每天0点1分执行 重置ES 自动更新、新增、删除:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---End-01"); + logger.info("每天0点1分执行 重置ES 自动更新、新增:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---End-01"); }catch(Exception e){ logger.info(e.getMessage()); } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussionessStand/dao/SarBussionessStandDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussionessStand/dao/SarBussionessStandDao.java index aa757296..84b36f01 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussionessStand/dao/SarBussionessStandDao.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussionessStand/dao/SarBussionessStandDao.java @@ -4,9 +4,12 @@ import com.adc.da.slrs.sarBussionessStand.entity.SarBussionessStand; import com.adc.da.slrs.sarBussionessStand.entity.SarBussionessStandExport; import com.adc.da.slrs.sarStandardsInfo.entity.RecommendVO; import com.adc.da.slrs.sarStandardsInfo.entity.SarBussionessStandEOPage; +import com.adc.da.slrs.sarStandardsInfo.entity.SarStandardsInfo; import com.adc.da.sys.entity.UserEO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.Date; @@ -23,6 +26,16 @@ import java.util.List; @Repository public interface SarBussionessStandDao extends BaseMapper { + String updateStateScheduledSql = "SELECT A.*,B.BDTQBBHBUSS FROM sar_bussioness_stand A LEFT JOIN sar_buss_stand_attr_info B ON B.STAND_ID = A.ID ${ew.customSqlSegment}"; + + /** + * 自动更新文本状态通用查询 + * @param queryWrapper + * @return + */ + @Select(updateStateScheduledSql) + List getStateScheduledList(@Param("ew") QueryWrapper queryWrapper); + List queryByBussStateSync(SarBussionessStand sarBussionessStand); SarBussionessStand getStandInfoByReviseStatus(String reviseStatus); diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandardsInfo/dao/SarStandardsInfoDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandardsInfo/dao/SarStandardsInfoDao.java index a0e17aa1..dfc26280 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandardsInfo/dao/SarStandardsInfoDao.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandardsInfo/dao/SarStandardsInfoDao.java @@ -4,8 +4,10 @@ import com.adc.da.slrs.sarStandardsInfo.entity.DSarStandardDTO; import com.adc.da.slrs.sarStandardsInfo.entity.RecommendVO; import com.adc.da.slrs.sarStandardsInfo.entity.SarStandardsInfo; import com.adc.da.slrs.sarStandardsInfo.entity.SarStandardsInfoEOPage; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import javax.annotation.Resource; @@ -22,6 +24,16 @@ import java.util.List; @Repository public interface SarStandardsInfoDao extends BaseMapper { + String updateStateScheduledSql = "SELECT A.*,B.SSRQ,B.BDTBZH FROM sar_standards_info A LEFT JOIN sar_stand_attr_info B ON B.STAND_ID = A.ID ${ew.customSqlSegment}"; + + /** + * 自动更新文本状态通用查询 + * @param queryWrapper + * @return + */ + @Select(updateStateScheduledSql) + List getStateScheduledList(@Param("ew") QueryWrapper queryWrapper); + List getSarStandardsInfoPage(@Param("page") SarStandardsInfoEOPage page,@Param("mark")String mark); List getSarStandardsInfoByNum(@Param("page") SarStandardsInfoEOPage page,@Param("mark")String mark); diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandardsInfo/entity/SarStandardsInfo.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandardsInfo/entity/SarStandardsInfo.java index ac30740c..a1d27dfd 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandardsInfo/entity/SarStandardsInfo.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandardsInfo/entity/SarStandardsInfo.java @@ -224,6 +224,8 @@ public class SarStandardsInfo extends BaseEntity { private String ZCCSSRQ; @TableField(exist = false) private String XCXSSRQ; + @TableField(exist = false) + private String BDTBZH; @TableField(exist = false) private String putTime2; diff --git a/doc/sql/数据库改动.sql b/doc/sql/数据库改动.sql index 97b510d1..24948330 100644 --- a/doc/sql/数据库改动.sql +++ b/doc/sql/数据库改动.sql @@ -1,4 +1,9 @@ 4.13------------------ INSERT INTO `foton_slrs_test2`.`sar_menu`(`ID`, `SOR_DIVIDE`, `MENU_NAME`, `PARENT_ID`, `PARENT_IDS`, `LEVEL`, `DISPLAY_SEQ`, `HREF`, `VALID_FLAG`, `CREATION_TIME`, `MODIFY_TIME`, `REMARKS`) VALUES ('asdzcfgk', NULL, '政策法规库', NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL); -5-7 新增文本状态----- -INSERT INTO `foton_slrs`.`ts_dictype`(`ID`, `DIC_ID`, `DIC_TYPE_NAME`, `DIC_TYPE_CODE`, `DESCRIBES`, `SHOW_INDEX`, `PARENT_ID`, `TREE_PID`, `OTHERS`, `CREATION_USER`, `VALID_FLAG`, `CREATION_TIME`, `MODIFY_TIME`) VALUES ('gycree7258tly7fhrs1n', 'd1c9oygu5yvrtj8qt6w2', '发布', 'hc99551723c', '', 10, NULL, NULL, NULL, 'WY8J26MH23', '0', '2022-05-7 08:08:48', '2022-05-7 08:08:48'); \ No newline at end of file + +5-7 -----新增文本状态 +INSERT INTO `foton_slrs`.`ts_dictype`(`ID`, `DIC_ID`, `DIC_TYPE_NAME`, `DIC_TYPE_CODE`, `DESCRIBES`, `SHOW_INDEX`, `PARENT_ID`, `TREE_PID`, `OTHERS`, `CREATION_USER`, `VALID_FLAG`, `CREATION_TIME`, `MODIFY_TIME`) VALUES ('gycree7258tly7fhrs1n', 'd1c9oygu5yvrtj8qt6w2', '发布', 'hc99551723c', '', 10, NULL, NULL, NULL, 'WY8J26MH23', '0', '2022-05-7 08:08:48', '2022-05-7 08:08:48'); + +5.12------------------- 新增企标文本状态 发布、即将实施 +INSERT INTO `foton_slrs`.`ts_dictype` (`ID`, `DIC_ID`, `DIC_TYPE_NAME`, `DIC_TYPE_CODE`, `DESCRIBES`, `SHOW_INDEX`, `PARENT_ID`, `TREE_PID`, `OTHERS`, `CREATION_USER`, `VALID_FLAG`, `CREATION_TIME`, `MODIFY_TIME`) VALUES ('yxje11vu7hngvakm6xor', 'qybmpmpvykzpwy511xai', '发布', '6jnqba2mby', '', '7', NULL, NULL, NULL, 'chenchunmei', '0', '2022-05-12 01:45:21', '2022-05-12 01:45:21'); +INSERT INTO `foton_slrs`.`ts_dictype` (`ID`, `DIC_ID`, `DIC_TYPE_NAME`, `DIC_TYPE_CODE`, `DESCRIBES`, `SHOW_INDEX`, `PARENT_ID`, `TREE_PID`, `OTHERS`, `CREATION_USER`, `VALID_FLAG`, `CREATION_TIME`, `MODIFY_TIME`) VALUES ('n4wyayhkmbhc58wi21rs', 'qybmpmpvykzpwy511xai', '即将实施', 'rpvoxsvr60', '', '8', NULL, NULL, NULL, 'chenchunmei', '0', '2022-05-12 01:45:56', '2022-05-12 01:45:56');