diff --git a/adc-da-slrs/src/main/java/com/adc/da/common/GetBeanUtil.java b/adc-da-slrs/src/main/java/com/adc/da/common/GetBeanUtil.java new file mode 100644 index 00000000..a3bfc75c --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/common/GetBeanUtil.java @@ -0,0 +1,28 @@ +package com.adc.da.common; + +/** + * @Description: TODO + * @author: super_liu + * @date: 2022年05月27日 14:26 + */ + +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +@Component +public class GetBeanUtil implements ApplicationContextAware { + private static ApplicationContext applicationContext; + + public void setApplicationContext(ApplicationContext context) { + GetBeanUtil.applicationContext = context; + } + + public static Object getBean(String name) { + return applicationContext.getBean(name); + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } +} 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 index 40d9b683..b8db762d 100644 --- 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 @@ -1,301 +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); - } - } - -} +//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/UpdateStateBussSyncFz.java b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateBussSyncFz.java new file mode 100644 index 00000000..20a9e073 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateBussSyncFz.java @@ -0,0 +1,220 @@ +package com.adc.da.scheduledState.server; + +import com.adc.da.common.GetBeanUtil; +import com.adc.da.mq.CreateStandMQService; +import com.adc.da.person.service.IPersonCollectEOService; +import com.adc.da.search.bean.SearchCenter; +import com.adc.da.search.server.ResetSearchCenterService; +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.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 java.sql.Clob; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: TODO + * @author: super_liu + * @date: 2022年01月25日 3:34 + */ + +@Slf4j +public class UpdateStateBussSyncFz implements Runnable { + Logger logger = LoggerFactory.getLogger(UpdateStateBussSyncFz.class); + + private DicTypeEODao dicTypeEODao; + + private SarStandItemsDao standItemsDao; + + private CreateStandMQService createStandMQService; + + private IPersonCollectEOService personCollectEOService; + + private SarBussionessStandDao sarBussionessStandDao; + + private ISarBussionessStandService iSarBussionessStandService; + + private ISarBussStandAttrInfoService sarBussStandAttrInfoService; + + private SarBussStandAttrInfoDao sarBussStandAttrInfoEODao; + /** + * 根据配置文件设置是否开启定时器 + */ + @Value("${isNotScheduled}") + private boolean isNotScheduled; //是否开启定时器 + + public UpdateStateBussSyncFz(){ + sarBussionessStandDao = GetBeanUtil.getApplicationContext().getBean(SarBussionessStandDao.class); + createStandMQService = GetBeanUtil.getApplicationContext().getBean(CreateStandMQService.class); + iSarBussionessStandService = GetBeanUtil.getApplicationContext().getBean(ISarBussionessStandService.class); + dicTypeEODao = GetBeanUtil.getApplicationContext().getBean(DicTypeEODao.class); + personCollectEOService = GetBeanUtil.getApplicationContext().getBean(IPersonCollectEOService.class); + sarBussStandAttrInfoEODao = GetBeanUtil.getApplicationContext().getBean(SarBussStandAttrInfoDao.class); + } + + + /** + * 每天0点1分执行 企标标准文本状态被代替逻辑 自动变更作废状态 + */ + @Override + public void run() { + 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()); + } + } + + // 每天0点1分执行 企标标准文本状态被代替逻辑 自动变更作废状态 +// @Scheduled(cron="0 0 1 1 * ?") +// @Scheduled(cron="*/60 * * * * ?") +// @Scheduled(cron = "0 1 0 * * ?") +// @Async +// public void BussScheduledToAbolish(){ +// if(isNotScheduled){ +// +// } +// } + + + @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/UpdateStateBussSyncSsAndYx.java b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateBussSyncSsAndYx.java new file mode 100644 index 00000000..4defb29c --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateBussSyncSsAndYx.java @@ -0,0 +1,245 @@ +package com.adc.da.scheduledState.server; + +import com.adc.da.common.GetBeanUtil; +import com.adc.da.mq.CreateStandMQService; +import com.adc.da.person.service.IPersonCollectEOService; +import com.adc.da.scheduledState.utils.Util; +import com.adc.da.search.server.ResetSearchCenterService; +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.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 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 + */ + +@Slf4j +public class UpdateStateBussSyncSsAndYx implements Runnable { + Logger logger = LoggerFactory.getLogger(UpdateStateBussSyncSsAndYx.class); + + private DicTypeEODao dicTypeEODao; + + private SarStandItemsDao standItemsDao; + + private CreateStandMQService createStandMQService; + + private IPersonCollectEOService personCollectEOService; + + private SarBussionessStandDao sarBussionessStandDao; + + private ISarBussionessStandService iSarBussionessStandService; + + private SarBussStandAttrInfoDao sarBussStandAttrInfoEODao; + + /** + * 根据配置文件设置是否开启定时器 + */ + @Value("${isNotScheduled}") + private boolean isNotScheduled; //是否开启定时器 + + public UpdateStateBussSyncSsAndYx(){ + sarBussionessStandDao = GetBeanUtil.getApplicationContext().getBean(SarBussionessStandDao.class); + createStandMQService = GetBeanUtil.getApplicationContext().getBean(CreateStandMQService.class); + iSarBussionessStandService = GetBeanUtil.getApplicationContext().getBean(ISarBussionessStandService.class); + dicTypeEODao = GetBeanUtil.getApplicationContext().getBean(DicTypeEODao.class); + personCollectEOService = GetBeanUtil.getApplicationContext().getBean(IPersonCollectEOService.class); + sarBussStandAttrInfoEODao = GetBeanUtil.getApplicationContext().getBean(SarBussStandAttrInfoDao.class); + } + + + /** + * 每天0点1分执行 企标标准文本状态 即将实施和现行有效状态自动变更逻辑 + */ + @Override + public void run() { + 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){ +// +// } +// } + + + @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 = 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 index c6b7a081..fc035d4d 100644 --- 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 @@ -1,405 +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); - } - } - } - } - } - - -} +//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/server/UpdateStateStandSyncFz.java b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateStandSyncFz.java new file mode 100644 index 00000000..36555485 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateStandSyncFz.java @@ -0,0 +1,310 @@ +package com.adc.da.scheduledState.server; + +import com.adc.da.common.GetBeanUtil; +import com.adc.da.mq.CreateStandMQService; +import com.adc.da.person.service.IPersonCollectEOService; +import com.adc.da.search.bean.SearchCenter; +import com.adc.da.search.server.ResetSearchCenterService; +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 java.sql.Clob; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: TODO + * @author: super_liu + * @date: 2022年01月25日 3:34 + */ + +@Slf4j +public class UpdateStateStandSyncFz implements Runnable { + Logger logger = LoggerFactory.getLogger(UpdateStateStandSyncFz.class); + + private DicTypeEODao dicTypeEODao; + + private SarStandItemsDao standItemsDao; + + private CreateStandMQService createStandMQService; + + private IPersonCollectEOService personCollectEOService; + + private SarStandAttrInfoDao sarStandAttrInfoEODao; + + private SarStandardsInfoDao sarStandardsInfoDao; + + private ISarStandardsInfoService iSarStandardsInfoService; + + private ISarStandAttrInfoService sarStandAttrInfoEOService; + + + /** + * 根据配置文件设置是否开启定时器 + */ + @Value("${isNotScheduled}") + private boolean isNotScheduled; //是否开启定时器 + + + public UpdateStateStandSyncFz(){ + dicTypeEODao = GetBeanUtil.getApplicationContext().getBean(DicTypeEODao.class); + standItemsDao = GetBeanUtil.getApplicationContext().getBean(SarStandItemsDao.class); + createStandMQService = GetBeanUtil.getApplicationContext().getBean(CreateStandMQService.class); + personCollectEOService = GetBeanUtil.getApplicationContext().getBean(IPersonCollectEOService.class); + sarStandAttrInfoEODao = GetBeanUtil.getApplicationContext().getBean(SarStandAttrInfoDao.class); + sarStandardsInfoDao = GetBeanUtil.getApplicationContext().getBean(SarStandardsInfoDao.class); + iSarStandardsInfoService = GetBeanUtil.getApplicationContext().getBean(ISarStandardsInfoService.class); + sarStandAttrInfoEOService = GetBeanUtil.getApplicationContext().getBean(ISarStandAttrInfoService.class); + } + + + /** + * 每天0点1分执行 国内标准文本状态被代替逻辑 标准自动变更废止 + */ + @Override + public void run() { + 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/server/UpdateStateStandSyncSsAndYx.java b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateStandSyncSsAndYx.java new file mode 100644 index 00000000..72a8afec --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/scheduledState/server/UpdateStateStandSyncSsAndYx.java @@ -0,0 +1,259 @@ +package com.adc.da.scheduledState.server; + +import com.adc.da.common.GetBeanUtil; +import com.adc.da.mq.CreateStandMQService; +import com.adc.da.person.service.IPersonCollectEOService; +import com.adc.da.scheduledState.utils.Util; +import com.adc.da.search.server.ResetSearchCenterService; +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 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 + */ + +@Slf4j +public class UpdateStateStandSyncSsAndYx implements Runnable { + Logger logger = LoggerFactory.getLogger(UpdateStateStandSyncSsAndYx.class); + + private ResetSearchCenterService resetSearchCenterService; + + private DicTypeEODao dicTypeEODao; + + private SarStandItemsDao standItemsDao; + + private CreateStandMQService createStandMQService; + + private IPersonCollectEOService personCollectEOService; + + private SarStandAttrInfoDao sarStandAttrInfoEODao; + + private SarStandardsInfoDao sarStandardsInfoDao; + + private ISarStandardsInfoService iSarStandardsInfoService; + + private ISarStandAttrInfoService sarStandAttrInfoEOService; + + + /** + * 根据配置文件设置是否开启定时器 + */ + @Value("${isNotScheduled}") + private boolean isNotScheduled; //是否开启定时器 + + public UpdateStateStandSyncSsAndYx(){ + dicTypeEODao = GetBeanUtil.getApplicationContext().getBean(DicTypeEODao.class); + standItemsDao = GetBeanUtil.getApplicationContext().getBean(SarStandItemsDao.class); + createStandMQService = GetBeanUtil.getApplicationContext().getBean(CreateStandMQService.class); + personCollectEOService = GetBeanUtil.getApplicationContext().getBean(IPersonCollectEOService.class); + sarStandAttrInfoEODao = GetBeanUtil.getApplicationContext().getBean(SarStandAttrInfoDao.class); + sarStandardsInfoDao = GetBeanUtil.getApplicationContext().getBean(SarStandardsInfoDao.class); + iSarStandardsInfoService = GetBeanUtil.getApplicationContext().getBean(ISarStandardsInfoService.class); + sarStandAttrInfoEOService = GetBeanUtil.getApplicationContext().getBean(ISarStandAttrInfoService.class); + } + + + /** + * 每天0点1分执行 国内标准文本状态 即将实施和现行有效状态自动变更逻辑 + */ + @Override + public void run() { + 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()); + } + } + + @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 = 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/search/conf/SchedulerConf.java b/adc-da-slrs/src/main/java/com/adc/da/search/conf/SchedulerConf.java index a8383101..6b161dcf 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/search/conf/SchedulerConf.java +++ b/adc-da-slrs/src/main/java/com/adc/da/search/conf/SchedulerConf.java @@ -29,10 +29,10 @@ import java.util.concurrent.ScheduledFuture; public class SchedulerConf { //数据库的任务 - public static ConcurrentHashMap tasks = new ConcurrentHashMap<>(10); + public static ConcurrentHashMap tasks = new ConcurrentHashMap<>(50); //正在运行的任务 - public static ConcurrentHashMap runTasks = new ConcurrentHashMap<>(10); + public static ConcurrentHashMap runTasks = new ConcurrentHashMap<>(50); //线程池任务调度 private ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); @@ -48,7 +48,7 @@ public class SchedulerConf { */ @Autowired public SchedulerConf(){ - this.threadPoolTaskScheduler.setPoolSize(10); + this.threadPoolTaskScheduler.setPoolSize(50); this.threadPoolTaskScheduler.setThreadNamePrefix("task-thread-"); this.threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true); this.threadPoolTaskScheduler.initialize(); @@ -69,10 +69,9 @@ public class SchedulerConf { */ public void start(String taskId){ try { - //如果为空,重新获取 - if(SchedulerConf.tasks.size() <= 0){ - this.getAllTbTask(); - } + //重新获取最新执行任务周期 + this.getAllTbTask(); + TbTask tbTask = SchedulerConf.tasks.get(taskId); //获取并实例化Runnable任务类 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 37182093..ffcb662e 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 @@ -1,5 +1,6 @@ package com.adc.da.search.sync; +import com.adc.da.common.GetBeanUtil; import com.adc.da.search.bean.SearchCenter; import com.adc.da.search.server.ResetSearchCenterService; import lombok.extern.slf4j.Slf4j; @@ -19,7 +20,6 @@ import java.util.Date; public class restSearchSync implements Runnable { Logger logger = LoggerFactory.getLogger(restSearchSync.class); - @Autowired private ResetSearchCenterService resetSearchCenterService; /** @@ -28,6 +28,10 @@ public class restSearchSync implements Runnable { @Value("${isNotScheduled}") private boolean isNotScheduled; //是否开启定时器 + public restSearchSync(){ + resetSearchCenterService = GetBeanUtil.getApplicationContext().getBean(ResetSearchCenterService.class); + } + /** * 动态调用重置ES7天内标准数据