lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java
@@ -5,6 +5,8 @@ import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.ZoneId; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; @@ -764,8 +766,21 @@ return dateFormat.format(date); } /** * Date 转 LocalDate * @param date * @return */ public static LocalDate dateToLocalDate(Date date) { return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); } /** * LocalDate 转 Date * @param localDate * @return */ public static Date localDateToDate(LocalDate localDate) { return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/WeekMaintenanceStatusEnum.java
@@ -8,6 +8,7 @@ WAIT_FINAL_ACCEPTANCE, //å¾ ç»éª COMPLETE, //已宿 ABOLISH, //å·²ä½åº EXPIRED, //å·²è¿æ ; public static WeekMaintenanceStatusEnum getInstance(String code) { lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamWeekMaintenanceOrderDetail.java
@@ -64,4 +64,13 @@ /**æ¥ä¿®æ è®°*/ @ApiModelProperty(value = "æ¥ä¿®æ è®°") private String reportFlag; public EamWeekMaintenanceOrderDetail(){} public EamWeekMaintenanceOrderDetail(EamMaintenanceStandardDetail detail) { this.itemCode = detail.getItemCode(); this.itemName = detail.getItemName(); this.subItemName = detail.getSubItemName(); this.itemDemand = detail.getItemDemand(); } } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/WeekMaintenanceOrderExpiredJob.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,86 @@ package org.jeecg.modules.eam.job; import cn.hutool.core.collection.CollectionUtil; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.eam.constant.WeekMaintenanceStatusEnum; import org.jeecg.modules.eam.entity.EamWeekMaintenanceOrder; import org.jeecg.modules.eam.service.IEamWeekMaintenanceOrderService; import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService; import org.jeecg.modules.flowable.service.IFlowTaskService; import org.jeecg.modules.mdc.util.ThrowableUtil; import org.jeecg.modules.quartz.entity.QuartzJob; import org.jeecg.modules.quartz.entity.SysQuartzLog; import org.jeecg.modules.quartz.service.IQuartzJobService; import org.jeecg.modules.quartz.service.ISysQuartzLogService; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.util.Date; import java.util.List; @Component @Slf4j public class WeekMaintenanceOrderExpiredJob implements Job { @Autowired private IEamWeekMaintenanceOrderService eamWeekMaintenanceOrderService; @Autowired private IFlowMyBusinessService flowMyBusinessService; @Autowired private IFlowTaskService flowTaskService; @Autowired private ISysQuartzLogService sysQuartzLogService; @Autowired private IQuartzJobService quartzJobService; @Override @Transactional(rollbackFor = Exception.class) public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //任塿¥å¿ SysQuartzLog quartzLog = new SysQuartzLog(); quartzLog.setCreateTime(new Date()); List<QuartzJob> byJobClassName = quartzJobService.findByJobClassName(this.getClass().getName()); if (byJobClassName != null && !byJobClassName.isEmpty()) { quartzLog.setJobId(byJobClassName.get(0).getId()); } long startTime = System.currentTimeMillis(); LocalDate now = LocalDate.now(); try { List<EamWeekMaintenanceOrder> unCompleteOrderList = eamWeekMaintenanceOrderService.selectUnCompleteOrder(now.toString()); if (CollectionUtil.isEmpty(unCompleteOrderList)) { //没æéè¦å¤ççæ°æ® return; } for (EamWeekMaintenanceOrder order : unCompleteOrderList) { if (WeekMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(order.getMaintenanceStatus())) { order.setMaintenanceStatus(WeekMaintenanceStatusEnum.EXPIRED.name()); } else if (WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(order.getMaintenanceStatus())) { //å·²ç»è¢«æ¥å 使ªæ§è¡å®æ order.setMaintenanceStatus(WeekMaintenanceStatusEnum.EXPIRED.name()); //强å¶ç»ææµç¨ å é¤ç¨æ·çæ¤å¾ åä»»å¡ FlowMyBusiness flowMyBusiness = flowMyBusinessService.selectByDataId(order.getId()); if (flowMyBusiness != null) { flowTaskService.end(flowMyBusiness.getProcessInstanceId(), "è¿æå é¤"); } } } eamWeekMaintenanceOrderService.updateBatchById(unCompleteOrderList); quartzLog.setIsSuccess(0); } catch (Exception e) { log.error("å¨ä¿è¿ææ§è¡å®æ¶ä»»å¡å¤±è´¥ï¼{}", e.getMessage(), e); quartzLog.setIsSuccess(-1); quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); } long endTime = System.currentTimeMillis(); quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); sysQuartzLogService.save(quartzLog); } } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/WeekMaintenanceOrderGenerateJob.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,126 @@ package org.jeecg.modules.eam.job; import cn.hutool.core.collection.CollectionUtil; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.util.DateUtils; import org.jeecg.modules.eam.constant.BusinessCodeConst; import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum; import org.jeecg.modules.eam.entity.EamMaintenanceStandard; import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail; import org.jeecg.modules.eam.entity.EamWeekMaintenanceOrderDetail; import org.jeecg.modules.eam.request.EamWeekMaintenanceRequest; import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService; import org.jeecg.modules.eam.service.IEamMaintenanceStandardService; import org.jeecg.modules.eam.service.IEamWeekMaintenanceOrderService; import org.jeecg.modules.mdc.util.ThrowableUtil; import org.jeecg.modules.quartz.entity.QuartzJob; import org.jeecg.modules.quartz.entity.SysQuartzLog; import org.jeecg.modules.quartz.service.IQuartzJobService; import org.jeecg.modules.quartz.service.ISysQuartzLogService; import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @Component @Slf4j public class WeekMaintenanceOrderGenerateJob implements Job { @Autowired private IEamMaintenanceStandardService eamMaintenanceStandardService; @Autowired private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService; @Autowired private IEamWeekMaintenanceOrderService eamWeekMaintenanceOrderService; @Autowired private ISysBusinessCodeRuleService businessCodeRuleService; @Autowired private ISysQuartzLogService sysQuartzLogService; @Autowired private IQuartzJobService quartzJobService; /** * å·¥åçæ * * @param jobExecutionContext * @throws JobExecutionException */ @Override @Transactional(rollbackFor = Exception.class) public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //任塿¥å¿ SysQuartzLog quartzLog = new SysQuartzLog(); quartzLog.setCreateTime(new Date()); List<QuartzJob> byJobClassName = quartzJobService.findByJobClassName(this.getClass().getName()); if (byJobClassName != null && !byJobClassName.isEmpty()) { quartzLog.setJobId(byJobClassName.get(0).getId()); } long startTime = System.currentTimeMillis(); /** * è·å é ç½®äº å¨ä¿æ åç ä¿¡æ¯ */ List<EamMaintenanceStandard> standardList = eamMaintenanceStandardService.queryListByCategory(MaintenanceCategoryEnum.WEEK_MAINTENANCE.name()); if (CollectionUtil.isEmpty(standardList)) { log.warn("没æé 置任ä½å¨ä¿æ åï¼ä»»å¡ç»æ"); return; } //å½åæ¥æ LocalDate now = LocalDate.now(); try { for (EamMaintenanceStandard standard : standardList) { if (standard.getMaintenancePeriod() == null || standard.getMaintenancePeriod() < 1) { log.error("å¨ä¿æ åå¨æè®¾ç½®é误ï¼è¯·å é ç½®æ å卿, standard:{}", standard); continue; } if (standard.getInitialDate() == null) { //设置åå§æ¥æä¸ºåä¸å¤© standard.setInitialDate(DateUtils.localDateToDate(now.minusDays(1))); } LocalDate generateDate = DateUtils.dateToLocalDate(standard.getInitialDate()); if (standard.getLastGenerateTime() != null) { generateDate = DateUtils.dateToLocalDate(standard.getLastGenerateTime()); } //å 卿 do { //åå§æ¥æè®¾ç½®çæ¯è¾æ©ï¼æä»»å¡é¿æ¶é´æ²¡æ§è¡ï¼å¿ 须卿å°ä»å¤©æä¼çæå·¥å generateDate = generateDate.plusDays(standard.getMaintenancePeriod()); } while (now.isAfter(generateDate)); if(now.compareTo(generateDate) != 0) { //è¿æªå°çææ¥æï¼è·³è¿æ§è¡ continue; } //è·åä¿å »é¡¹æç» List<EamMaintenanceStandardDetail> standardDetailList = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId()); if(CollectionUtil.isEmpty(standardDetailList)) { log.error("å¨ä¿æ åæ²¡æä¿å »æç»ï¼è¯·å é ç½®ä¿å »æç», standard:{}", standard); continue; } //å¼å§çæ EamWeekMaintenanceRequest request = new EamWeekMaintenanceRequest(); request.setEquipmentId(standard.getEquipmentId()); request.setStandardId(standard.getId()); request.setMaintenanceDate(DateUtils.localDateToDate(generateDate)); String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.WEEK_MAINTENANCE_CODE_RULE); request.setOrderNum(codeSeq); List<EamWeekMaintenanceOrderDetail> collect = standardDetailList.stream().map(EamWeekMaintenanceOrderDetail::new).collect(Collectors.toList()); request.setTableDetailList(collect); eamWeekMaintenanceOrderService.addWeekMaintenance(request); } quartzLog.setIsSuccess(0); } catch (Exception e) { log.error("å¨ä¿è¿çææ§è¡å®æ¶ä»»å¡å¤±è´¥ï¼{}", e.getMessage(), e); quartzLog.setIsSuccess(-1); quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); } long endTime = System.currentTimeMillis(); quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); sysQuartzLogService.save(quartzLog); } } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardDetailService.java
@@ -3,6 +3,8 @@ import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; /** * @Description: ä¿å »æ åæç» * @Author: jeecg-boot @@ -10,5 +12,10 @@ * @Version: V1.0 */ public interface IEamMaintenanceStandardDetailService extends IService<EamMaintenanceStandardDetail> { /** * è·åæ å䏿ç»é¡¹ä¿¡æ¯ * @param standardId * @return */ List<EamMaintenanceStandardDetail> selectByStandardId(String standardId); } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java
@@ -57,4 +57,11 @@ * @return */ List<EamMaintenanceStandard> queryListByKeywordAndCategory(String keyword, String equipmentId, Integer pageSize, String maintenanceCategory); /** * æ¥è¯¢ä¿å »ç±»å䏿£å¸¸çä¿å »æ å * @param maintenanceCategory ä¿å »ç±»å * @return */ List<EamMaintenanceStandard> queryListByCategory(String maintenanceCategory); } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamWeekMaintenanceOrderService.java
@@ -7,6 +7,8 @@ import org.jeecg.modules.eam.request.EamWeekMaintenanceQuery; import org.jeecg.modules.eam.request.EamWeekMaintenanceRequest; import java.util.List; /** * @Description: å¨ä¿å·¥å * @Author: jeecg-boot @@ -50,4 +52,11 @@ * @return */ boolean approval(EamWeekMaintenanceRequest request); /** * è·åä»å¤©ä¹åæªä¿å »å®æçå·¥å * @param expiredDate è¿ææ¥æ * @return */ List<EamWeekMaintenanceOrder> selectUnCompleteOrder(String expiredDate); } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardDetailServiceImpl.java
@@ -1,11 +1,17 @@ package org.jeecg.modules.eam.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail; import org.jeecg.modules.eam.mapper.EamMaintenanceStandardDetailMapper; import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import javax.annotation.Resource; import java.util.Collections; import java.util.List; /** * @Description: ä¿å »æ åæç» @@ -15,5 +21,14 @@ */ @Service public class EamMaintenanceStandardDetailServiceImpl extends ServiceImpl<EamMaintenanceStandardDetailMapper, EamMaintenanceStandardDetail> implements IEamMaintenanceStandardDetailService { @Resource private EamMaintenanceStandardDetailMapper emMaintenanceStandardDetailMapper; @Override public List<EamMaintenanceStandardDetail> selectByStandardId(String standardId) { LambdaQueryWrapper<EamMaintenanceStandardDetail> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EamMaintenanceStandardDetail::getStandardId, standardId); queryWrapper.orderByAsc(EamMaintenanceStandardDetail::getItemCode); return emMaintenanceStandardDetailMapper.selectList(queryWrapper); } } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
@@ -28,6 +28,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -283,4 +284,13 @@ IPage<EamMaintenanceStandard> pageData = this.queryPageList(page, query); return pageData.getRecords(); } @Override public List<EamMaintenanceStandard> queryListByCategory(String maintenanceCategory) { LambdaQueryWrapper<EamMaintenanceStandard> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0); queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory); queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.NORMAL.name()); return eamMaintenanceStandardMapper.selectList(queryWrapper); } } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java
@@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -461,6 +462,18 @@ return true; } @Override public List<EamWeekMaintenanceOrder> selectUnCompleteOrder(String expiredDate) { LambdaQueryWrapper<EamWeekMaintenanceOrder> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.lt(EamWeekMaintenanceOrder::getMaintenanceDate, expiredDate); List<String> unCompleteStatus = new ArrayList<>(); unCompleteStatus.add(WeekMaintenanceStatusEnum.WAIT_MAINTENANCE.name()); unCompleteStatus.add(WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name()); queryWrapper.in(EamWeekMaintenanceOrder::getMaintenanceStatus, unCompleteStatus); queryWrapper.orderByAsc(EamWeekMaintenanceOrder::getMaintenanceDate); return eamWeekMaintenanceOrderMapper.selectList(queryWrapper); } private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) { List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class); return todoUsers != null && todoUsers.contains(user.getUsername()); lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/IFlowMyBusinessService.java
@@ -11,9 +11,16 @@ public interface IFlowMyBusinessService extends IService<FlowMyBusiness> { /** * æ ¹æ®æµç¨å®ä¾id è·å æçå¾ å * æ ¹æ®æµç¨å®ä¾id è·å æµç¨å®ä¾ * @param instanceId æµç¨å®ä¾id * @return */ FlowMyBusiness getFlowMyBusiness(String instanceId); /** * è·åæµç¨å®ä¾ * @param dataId ä¸å¡Id * @return */ FlowMyBusiness selectByDataId(String dataId); } lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java
@@ -132,4 +132,11 @@ new QueryWrapper<FlowMyBusiness>().eq("process_instance_id", instanceId)); return businessList.isEmpty() ? null : businessList.get(0); } @Override public FlowMyBusiness selectByDataId(String dataId) { List<FlowMyBusiness> businessList = super.list( new QueryWrapper<FlowMyBusiness>().eq("data_id", dataId)); return businessList.isEmpty() ? null : businessList.get(0); } } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/util/ThrowableUtil.java