feat: There is no way the, 动态定时任务

This commit is contained in:
super_liu
2022-05-27 15:08:41 +08:00
parent bfc84ab47d
commit e08b8eaca0
9 changed files with 1779 additions and 714 deletions
@@ -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;
}
}
@@ -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<String> 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<SarBussionessStand> getStateScheduledList = sarBussionessStandDao.getStateScheduledList(wrapper);
if(!getStateScheduledList.isEmpty()){
// N个实施日期中大于当前日期
List<SarBussionessStand> getStateScheduledListToIsAfter = getStateScheduledList.stream().filter(info -> {
if(StringUtils.isNotBlank(info.getPutTime())){
List<String> dateList = Arrays.stream(info.getPutTime().split(",")).map(String::trim).collect(Collectors.toList());
List<String> 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<SarBussionessStand> getStateScheduledListToIsBefore = getStateScheduledList.stream().filter(info -> {
if(StringUtils.isNotBlank(info.getPutTime())){
List<String> dateList = Arrays.stream(info.getPutTime().split(",")).map(String::trim).collect(Collectors.toList());
List<String> 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<String> 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<SarBussionessStand> getStateScheduledList = sarBussionessStandDao.getStateScheduledList(wrapper);
if(!getStateScheduledList.isEmpty()){
// 需要更新为作废状态的集合
List<SarBussionessStand> invalidList = getStateScheduledList.stream().filter(info -> {
if(StringUtils.isNotBlank(info.getBDTQBBHBUSS())){
List<String> bdtList = Arrays.stream(info.getBDTQBBHBUSS().split(",")).map(String::trim).collect(Collectors.toList());
// 现行有效、作废
List<String> 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<SarBussionessStand> 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<SarBussionessStand> infoList, String textStatusStand) throws Exception {
List<SarBussionessStand> 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<String, Object> getAttrMap = row.getAttrInfoCaseMap();
if (getAttrMap != null && getAttrMap.size() > 0) {
for (Map.Entry<String, Object> entry : getAttrMap.entrySet()) {
String name = entry.getKey().toUpperCase();
String value = "";
List<String> 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<String, Object> 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<String> 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<SarBussionessStand> getStateScheduledList = sarBussionessStandDao.getStateScheduledList(wrapper);
// if(!getStateScheduledList.isEmpty()){
// // N个实施日期中大于当前日期
// List<SarBussionessStand> getStateScheduledListToIsAfter = getStateScheduledList.stream().filter(info -> {
// if(StringUtils.isNotBlank(info.getPutTime())){
// List<String> dateList = Arrays.stream(info.getPutTime().split(",")).map(String::trim).collect(Collectors.toList());
// List<String> 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<SarBussionessStand> getStateScheduledListToIsBefore = getStateScheduledList.stream().filter(info -> {
// if(StringUtils.isNotBlank(info.getPutTime())){
// List<String> dateList = Arrays.stream(info.getPutTime().split(",")).map(String::trim).collect(Collectors.toList());
// List<String> 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<String> 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<SarBussionessStand> getStateScheduledList = sarBussionessStandDao.getStateScheduledList(wrapper);
// if(!getStateScheduledList.isEmpty()){
//
// // 需要更新为作废状态的集合
// List<SarBussionessStand> invalidList = getStateScheduledList.stream().filter(info -> {
// if(StringUtils.isNotBlank(info.getBDTQBBHBUSS())){
// List<String> bdtList = Arrays.stream(info.getBDTQBBHBUSS().split(",")).map(String::trim).collect(Collectors.toList());
// // 现行有效、作废
// List<String> 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<SarBussionessStand> 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<SarBussionessStand> infoList, String textStatusStand) throws Exception {
// List<SarBussionessStand> 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<String, Object> getAttrMap = row.getAttrInfoCaseMap();
// if (getAttrMap != null && getAttrMap.size() > 0) {
// for (Map.Entry<String, Object> entry : getAttrMap.entrySet()) {
// String name = entry.getKey().toUpperCase();
// String value = "";
// List<String> 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<String, Object> 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);
// }
// }
//
//}
@@ -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<String> 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<SarBussionessStand> getStateScheduledList = sarBussionessStandDao.getStateScheduledList(wrapper);
if(!getStateScheduledList.isEmpty()){
// 需要更新为作废状态的集合
List<SarBussionessStand> invalidList = getStateScheduledList.stream().filter(info -> {
if(StringUtils.isNotBlank(info.getBDTQBBHBUSS())){
List<String> bdtList = Arrays.stream(info.getBDTQBBHBUSS().split(",")).map(String::trim).collect(Collectors.toList());
// 现行有效、作废
List<String> 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<SarBussionessStand> 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<SarBussionessStand> infoList, String textStatusStand) throws Exception {
List<SarBussionessStand> 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<String, Object> getAttrMap = row.getAttrInfoCaseMap();
if (getAttrMap != null && getAttrMap.size() > 0) {
for (Map.Entry<String, Object> entry : getAttrMap.entrySet()) {
String name = entry.getKey().toUpperCase();
String value = "";
List<String> 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<String, Object> 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);
}
}
}
@@ -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<String> 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<SarBussionessStand> getStateScheduledList = sarBussionessStandDao.getStateScheduledList(wrapper);
if(!getStateScheduledList.isEmpty()){
// N个实施日期中大于当前日期
List<SarBussionessStand> getStateScheduledListToIsAfter = getStateScheduledList.stream().filter(info -> {
if(StringUtils.isNotBlank(info.getPutTime())){
List<String> dateList = Arrays.stream(info.getPutTime().split(",")).map(String::trim).collect(Collectors.toList());
List<String> 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<SarBussionessStand> getStateScheduledListToIsBefore = getStateScheduledList.stream().filter(info -> {
if(StringUtils.isNotBlank(info.getPutTime())){
List<String> dateList = Arrays.stream(info.getPutTime().split(",")).map(String::trim).collect(Collectors.toList());
List<String> 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<SarBussionessStand> infoList, String textStatusStand) throws Exception {
List<SarBussionessStand> 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<String, Object> getAttrMap = row.getAttrInfoCaseMap();
if (getAttrMap != null && getAttrMap.size() > 0) {
for (Map.Entry<String, Object> entry : getAttrMap.entrySet()) {
String name = entry.getKey().toUpperCase();
String value = "";
List<String> 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<String, Object> 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);
}
}
}
@@ -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<String> 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<SarStandardsInfo> getStateScheduledList = sarStandardsInfoDao.getStateScheduledList(wrapper);
if(!getStateScheduledList.isEmpty()){
// N个实施日期中大于当前日期
List<SarStandardsInfo> getStateScheduledListToIsAfter = getStateScheduledList.stream().filter(info -> {
if(StringUtils.isNotBlank(info.getSSRQ())){
List<String> dateList = Arrays.stream(info.getSSRQ().split(",")).map(String::trim).collect(Collectors.toList());
List<String> 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<SarStandardsInfo> getStateScheduledListToIsBefore = getStateScheduledList.stream().filter(info -> {
if(StringUtils.isNotBlank(info.getSSRQ())){
List<String> dateList = Arrays.stream(info.getSSRQ().split(",")).map(String::trim).collect(Collectors.toList());
List<String> 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<String> 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<SarStandardsInfo> getStateStandScheduledList = sarStandardsInfoDao.getStateScheduledList(wrapper);
if(!getStateStandScheduledList.isEmpty()){
List<SarStandardsInfo> invalidStandToGBList = new ArrayList<>();
List<SarStandardsInfo> bdtStandToGBList = new ArrayList<>();
// 当前标准的标准类别是否是GB类 GB集合逻辑
getStateStandScheduledList.forEach(info -> {
if(StringUtils.isNotBlank(info.getBDTBZH())){
List<String> 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<SarStandardsInfo> queryGBList = sarStandardsInfoDao.selectList(wrapperGB);
if(!queryGBList.isEmpty()){
int queryGbCount = queryGBList.size();
//被代替标准号中所有有效标准的状态都是现行有效状态
List<SarStandardsInfo> yxList = queryGBList.stream().filter(info1 ->
"vsaga7nwub".equals(info1.getTextStatus())).collect(Collectors.toList());
//被代替标准号中所有有效标准的状态都是被代替状态
List<SarStandardsInfo> bdtStateList = queryGBList.stream().filter(info1 ->
"qke0ckro2p".equals(info1.getTextStatus())).collect(Collectors.toList());
//被代替标准号中所有有效标准的状态都是废止状态
List<SarStandardsInfo> 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<SarStandardsInfo> 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<SarStandardsInfo> bdtStandToNotGBList = getStateStandScheduledList.stream().filter(info -> {
if(StringUtils.isNotBlank(info.getBDTBZH())){
List<String> bdtList = Arrays.stream(info.getBDTBZH().split(",")).map(
s -> s.replace(" ","").trim()).collect(Collectors.toList());
//发布、即将实施、现行有效、被代替
List<String> 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<SarStandardsInfo> 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<SarStandardsInfo> infoList, String textStatusStand) throws Exception {
List<SarStandardsInfo> 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<SarItemVO> sarItemVOS = standItemsDao.querySarItemAndInterpretation(pageInfo);
* .collect(Collectors.toMap(SarItemVO::getItemsNum, SarItemVO::getItemsName));
*/
List<SarStandItems> sarItemVOS = standItemsDao.querySarItemAndInterpretation(pageInfo);
if (!sarItemVOS.isEmpty()) {
Map<String, String> 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<String, Object> 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<String, Object> getAttrMap = row.getAttrInfoMap();
if (getAttrMap != null && getAttrMap.size() > 0) {
for (Map.Entry<String, Object> entry : getAttrMap.entrySet()) {
String name = entry.getKey();
String value = "";
List<String> 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<String> 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<SarStandardsInfo> getStateScheduledList = sarStandardsInfoDao.getStateScheduledList(wrapper);
// if(!getStateScheduledList.isEmpty()){
// // N个实施日期中大于当前日期
// List<SarStandardsInfo> getStateScheduledListToIsAfter = getStateScheduledList.stream().filter(info -> {
// if(StringUtils.isNotBlank(info.getSSRQ())){
// List<String> dateList = Arrays.stream(info.getSSRQ().split(",")).map(String::trim).collect(Collectors.toList());
// List<String> 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<SarStandardsInfo> getStateScheduledListToIsBefore = getStateScheduledList.stream().filter(info -> {
// if(StringUtils.isNotBlank(info.getSSRQ())){
// List<String> dateList = Arrays.stream(info.getSSRQ().split(",")).map(String::trim).collect(Collectors.toList());
// List<String> 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<String> 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<SarStandardsInfo> getStateStandScheduledList = sarStandardsInfoDao.getStateScheduledList(wrapper);
//
// if(!getStateStandScheduledList.isEmpty()){
//
// List<SarStandardsInfo> invalidStandToGBList = new ArrayList<>();
// List<SarStandardsInfo> bdtStandToGBList = new ArrayList<>();
//
// // 当前标准的标准类别是否是GB类 GB集合逻辑
// getStateStandScheduledList.forEach(info -> {
// if(StringUtils.isNotBlank(info.getBDTBZH())){
// List<String> 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<SarStandardsInfo> queryGBList = sarStandardsInfoDao.selectList(wrapperGB);
//
// if(!queryGBList.isEmpty()){
// int queryGbCount = queryGBList.size();
//
// //被代替标准号中所有有效标准的状态都是现行有效状态
// List<SarStandardsInfo> yxList = queryGBList.stream().filter(info1 ->
// "vsaga7nwub".equals(info1.getTextStatus())).collect(Collectors.toList());
//
// //被代替标准号中所有有效标准的状态都是被代替状态
// List<SarStandardsInfo> bdtStateList = queryGBList.stream().filter(info1 ->
// "qke0ckro2p".equals(info1.getTextStatus())).collect(Collectors.toList());
//
// //被代替标准号中所有有效标准的状态都是废止状态
// List<SarStandardsInfo> 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<SarStandardsInfo> 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<SarStandardsInfo> bdtStandToNotGBList = getStateStandScheduledList.stream().filter(info -> {
// if(StringUtils.isNotBlank(info.getBDTBZH())){
// List<String> bdtList = Arrays.stream(info.getBDTBZH().split(",")).map(
// s -> s.replace(" ","").trim()).collect(Collectors.toList());
//
// //发布、即将实施、现行有效、被代替
// List<String> 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<SarStandardsInfo> 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<SarStandardsInfo> infoList, String textStatusStand) throws Exception {
// List<SarStandardsInfo> 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<SarItemVO> sarItemVOS = standItemsDao.querySarItemAndInterpretation(pageInfo);
// * .collect(Collectors.toMap(SarItemVO::getItemsNum, SarItemVO::getItemsName));
// */
//
// List<SarStandItems> sarItemVOS = standItemsDao.querySarItemAndInterpretation(pageInfo);
// if (!sarItemVOS.isEmpty()) {
// Map<String, String> 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<String, Object> 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<String, Object> getAttrMap = row.getAttrInfoMap();
// if (getAttrMap != null && getAttrMap.size() > 0) {
// for (Map.Entry<String, Object> entry : getAttrMap.entrySet()) {
// String name = entry.getKey();
// String value = "";
// List<String> 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);
// }
// }
// }
// }
// }
//
//
//}
@@ -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<String> 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<SarStandardsInfo> getStateStandScheduledList = sarStandardsInfoDao.getStateScheduledList(wrapper);
if(!getStateStandScheduledList.isEmpty()){
List<SarStandardsInfo> invalidStandToGBList = new ArrayList<>();
List<SarStandardsInfo> bdtStandToGBList = new ArrayList<>();
// 当前标准的标准类别是否是GB类 GB集合逻辑
getStateStandScheduledList.forEach(info -> {
if(StringUtils.isNotBlank(info.getBDTBZH())){
List<String> 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<SarStandardsInfo> queryGBList = sarStandardsInfoDao.selectList(wrapperGB);
if(!queryGBList.isEmpty()){
int queryGbCount = queryGBList.size();
//被代替标准号中所有有效标准的状态都是现行有效状态
List<SarStandardsInfo> yxList = queryGBList.stream().filter(info1 ->
"vsaga7nwub".equals(info1.getTextStatus())).collect(Collectors.toList());
//被代替标准号中所有有效标准的状态都是被代替状态
List<SarStandardsInfo> bdtStateList = queryGBList.stream().filter(info1 ->
"qke0ckro2p".equals(info1.getTextStatus())).collect(Collectors.toList());
//被代替标准号中所有有效标准的状态都是废止状态
List<SarStandardsInfo> 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<SarStandardsInfo> 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<SarStandardsInfo> bdtStandToNotGBList = getStateStandScheduledList.stream().filter(info -> {
if(StringUtils.isNotBlank(info.getBDTBZH())){
List<String> bdtList = Arrays.stream(info.getBDTBZH().split(",")).map(
s -> s.replace(" ","").trim()).collect(Collectors.toList());
//发布、即将实施、现行有效、被代替
List<String> 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<SarStandardsInfo> 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<SarStandardsInfo> infoList, String textStatusStand) throws Exception {
List<SarStandardsInfo> 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<SarItemVO> sarItemVOS = standItemsDao.querySarItemAndInterpretation(pageInfo);
* .collect(Collectors.toMap(SarItemVO::getItemsNum, SarItemVO::getItemsName));
*/
List<SarStandItems> sarItemVOS = standItemsDao.querySarItemAndInterpretation(pageInfo);
if (!sarItemVOS.isEmpty()) {
Map<String, String> 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<String, Object> 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<String, Object> getAttrMap = row.getAttrInfoMap();
if (getAttrMap != null && getAttrMap.size() > 0) {
for (Map.Entry<String, Object> entry : getAttrMap.entrySet()) {
String name = entry.getKey();
String value = "";
List<String> 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);
}
}
}
}
}
}
@@ -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<String> 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<SarStandardsInfo> getStateScheduledList = sarStandardsInfoDao.getStateScheduledList(wrapper);
if(!getStateScheduledList.isEmpty()){
// N个实施日期中大于当前日期
List<SarStandardsInfo> getStateScheduledListToIsAfter = getStateScheduledList.stream().filter(info -> {
if(StringUtils.isNotBlank(info.getSSRQ())){
List<String> dateList = Arrays.stream(info.getSSRQ().split(",")).map(String::trim).collect(Collectors.toList());
List<String> 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<SarStandardsInfo> getStateScheduledListToIsBefore = getStateScheduledList.stream().filter(info -> {
if(StringUtils.isNotBlank(info.getSSRQ())){
List<String> dateList = Arrays.stream(info.getSSRQ().split(",")).map(String::trim).collect(Collectors.toList());
List<String> 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<SarStandardsInfo> infoList, String textStatusStand) throws Exception {
List<SarStandardsInfo> 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<SarItemVO> sarItemVOS = standItemsDao.querySarItemAndInterpretation(pageInfo);
* .collect(Collectors.toMap(SarItemVO::getItemsNum, SarItemVO::getItemsName));
*/
List<SarStandItems> sarItemVOS = standItemsDao.querySarItemAndInterpretation(pageInfo);
if (!sarItemVOS.isEmpty()) {
Map<String, String> 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<String, Object> 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<String, Object> getAttrMap = row.getAttrInfoMap();
if (getAttrMap != null && getAttrMap.size() > 0) {
for (Map.Entry<String, Object> entry : getAttrMap.entrySet()) {
String name = entry.getKey();
String value = "";
List<String> 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);
}
}
}
}
}
}
@@ -29,10 +29,10 @@ import java.util.concurrent.ScheduledFuture;
public class SchedulerConf {
//数据库的任务
public static ConcurrentHashMap<String, TbTask> tasks = new ConcurrentHashMap<>(10);
public static ConcurrentHashMap<String, TbTask> tasks = new ConcurrentHashMap<>(50);
//正在运行的任务
public static ConcurrentHashMap<String, ScheduledFuture> runTasks = new ConcurrentHashMap<>(10);
public static ConcurrentHashMap<String, ScheduledFuture> 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任务类
@@ -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天内标准数据