From f71cea3609c4c7bf0b70c77b2c9d8c571586df33 Mon Sep 17 00:00:00 2001 From: lyh <925863403@qq.com> Date: 星期二, 02 九月 2025 14:24:26 +0800 Subject: [PATCH] 二保定时任务修改 --- lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java | 26 ++ lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java | 3 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java | 40 +++- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamSecondMaintenanceRequest.java | 14 - lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java | 12 + lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java | 3 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml | 17 + lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java | 9 + lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java | 5 /dev/null | 153 ----------------- lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java | 5 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java | 185 ++++++++++++++++++++ lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java | 10 + 13 files changed, 301 insertions(+), 181 deletions(-) diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java index 67cbf37..6c68dca 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java @@ -69,4 +69,14 @@ /** 寮傚父鎻忚堪 */ @ApiModelProperty(name = "寮傚父鎻忚堪",notes = "") private String exceptionDescription; + + public EamSecondMaintenanceOrderDetail() { + } + + public EamSecondMaintenanceOrderDetail(EamMaintenanceStandardDetail detail) { + this.itemCode = detail.getItemCode(); + this.itemCategory = detail.getItemCategory(); + this.itemName = detail.getItemName(); + } + } diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java index 984e76b..b34b079 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java @@ -62,6 +62,11 @@ List<EamEquipment> selectThreeMaintenanceEquipmentList(@Param(Constants.WRAPPER) Wrapper<EamEquipment> queryWrapper); /** + * 鑾峰彇鍙敓鎴愪簩淇濆伐鍗曠殑璁惧鍒楄〃 + */ + List<EamEquipment> selectSecondMaintenanceEquipmentList(@Param(Constants.WRAPPER) Wrapper<EamEquipment> queryWrapper); + + /** * 璁惧绠$悊棣栭〉 * @param ids * @return diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml index b407bb0..1cc5d47 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml @@ -77,6 +77,23 @@ on e.id = ext.id ${ew.customSqlSegment} </select> + + <select id="selectSecondMaintenanceEquipmentList" resultType="org.jeecg.modules.eam.entity.EamEquipment"> + select e.*, + ext.latest_second_maintenance, + ext.next_second_maintenance, + ext.technology_status, + ext.third_maintenance_period, + ext.technology_check_period, + ext.latest_technology_check, + ext.next_technology_check, + ext.technology_generate_flag + from eam_equipment e + left join eam_equipment_extend ext + on e.id = ext.id + ${ew.customSqlSegment} + </select> + <select id="echartsList" resultType="org.jeecg.modules.eam.dto.EchartsDto"> WITH TotalCount AS ( SELECT COUNT(a.id) AS total_count diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java index ab9ce90..083a2c3 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java @@ -47,4 +47,13 @@ * @return */ boolean updateThirdMaintenanceParam(String equipmentId, String status, Date evaluationDate, String thirdMaintenanceGenerateFlag); + + /** + * 鏇存柊璁惧浜屼繚鍙婁繚鍏绘棩鏈� + * @param equipmentId 璁惧ID + * @param status 淇濆吇鐘舵�� + * @param secondMaintenanceGenerateFlag 浜屼繚宸ュ崟鐢熸垚鏍囪瘑 + * @return + */ + boolean updateSecondMaintenanceParam(String equipmentId, String status, String secondMaintenanceGenerateFlag); } diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java index 09a764f..e427d58 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java @@ -88,6 +88,11 @@ List<EamEquipment> selectThreeMaintenanceEquipmentList(); /** + * 鑾峰彇鍙敓鎴愪簩淇濆伐鍗曠殑璁惧鍒楄〃 + */ + List<EamEquipment> selectSecondMaintenanceEquipmentList(); + + /** * 璁惧绠$悊棣栭〉-鎶�鏈姸鎬� * @return */ diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java index a876b22..6adaf88 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java @@ -13,6 +13,8 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; import java.util.Date; /** @@ -98,4 +100,28 @@ } return this.getBaseMapper().updateById(entity) > 0; } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updateSecondMaintenanceParam(String equipmentId, String status,String secondMaintenanceGenerateFlag){ + if (StringUtils.isBlank(status) && StringUtils.isBlank(secondMaintenanceGenerateFlag)) { + return false; + } + EamEquipmentExtend entity = this.getBaseMapper().selectById(equipmentId); + UpdateWrapper<EamEquipmentExtend> updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", equipmentId); + if (StringUtils.isNotBlank(status)) { + entity.setMaintenanceStatus(status); + } + //浜屼繚榛樿鐢熸垚鍏釜鏈堝悗 + // 杞崲涓篖ocalDate澶勭悊鏃ユ湡 + LocalDate localDate = DateUtils.dateToLocalDate(entity.getLatestSecondMaintenance()); + // 璁$畻鍏釜鏈堝悗鐨勬棩鏈� + LocalDate sixMonthsLater = localDate.plusMonths(6); + // 璋冩暣鍒板綋鏈堢殑鏈�鍚庝竴澶� + LocalDate lastDayOfMonth = sixMonthsLater.with(TemporalAdjusters.lastDayOfMonth()); + entity.setNextSecondMaintenance(DateUtils.localDateToDate(lastDayOfMonth)); + + return this.getBaseMapper().updateById(entity) > 0; + } } diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java index 0160666..805fa02 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java @@ -449,6 +449,18 @@ } /** + * 鑾峰彇鍙敓鎴愪簩淇濆伐鍗曠殑璁惧鍒楄〃 + */ + @Override + public List<EamEquipment> selectSecondMaintenanceEquipmentList(){ + QueryWrapper<EamEquipment> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("e.del_flag", CommonConstant.DEL_FLAG_0); + queryWrapper.ne("ext.maintenance_status", MaintenanceStatusEnum.PROHIBITED.name()); + queryWrapper.isNotNull("ext.next_second_maintenance"); + return this.getBaseMapper().selectSecondMaintenanceEquipmentList(queryWrapper); + } + + /** * 璁惧绠$悊棣栭〉-鎶�鏈姸鎬� * @return */ diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java index 2b6b560..43932ee 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java @@ -28,6 +28,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import java.text.ParseException; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; @@ -514,7 +515,7 @@ */ @ApiOperation(value = "浜屼繚宸ュ崟-鎵ц鎿嶄綔", notes = "浜屼繚宸ュ崟-鎵ц鎿嶄綔") @PutMapping(value = "/approval") - public Result<?> approval(@RequestBody EamSecondMaintenanceRequest request) { + public Result<?> approval(@RequestBody EamSecondMaintenanceRequest request) throws ParseException { if (request == null) { return Result.error("瀹℃壒鐨勫璞′笉鑳戒负绌猴紒"); } diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java new file mode 100644 index 0000000..568feb6 --- /dev/null +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java @@ -0,0 +1,185 @@ +package org.jeecg.modules.eam.job; + +import cn.hutool.core.collection.CollectionUtil; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.constant.CommonConstant; +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.constant.OrderCreationMethodEnum; +import org.jeecg.modules.eam.entity.EamEquipment; +import org.jeecg.modules.eam.entity.EamMaintenanceStandard; +import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail; +import org.jeecg.modules.eam.entity.EamSecondMaintenanceOrderDetail; +import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest; +import org.jeecg.modules.eam.service.*; +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.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * @Author: Lyh + * @CreateTime: 2025-09-01 + * @Description: 浜屼繚宸ュ崟鐢熸垚 + */ +@Component +@Slf4j +public class SecondMaintenanceOrderGenerateJob implements Job { + + @Autowired + private IEamEquipmentService equipmentService; + @Autowired + private IEamSecondMaintenanceOrderService eamSecondMaintenanceOrderService; + @Autowired + private IEamMaintenanceStandardService eamMaintenanceStandardService; + @Autowired + private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService; + @Autowired + private ISysBusinessCodeRuleService businessCodeRuleService; + @Autowired + private ISysQuartzLogService sysQuartzLogService; + @Autowired + private IQuartzJobService quartzJobService; + @Autowired + private IEamEquipmentExtendService equipmentExtendService; + + @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<EamEquipment> equipmentList = equipmentService.selectSecondMaintenanceEquipmentList(); + if (CollectionUtil.isEmpty(equipmentList)) { + log.warn("娌℃湁闇�瑕佺敓鎴愪簩淇濆伐鍗曠殑璁惧锛佹棩鏈燂細{}", DateUtils.date2Str(DateUtils.date_sdf.get())); + quartzLog.setIsSuccess(-1); + quartzLog.setExceptionDetail("娌℃湁闇�瑕佺敓鎴愪簩淇濆伐鍗曠殑璁惧"); + saveQuartzLog(quartzLog, startTime); + return; + } + + AtomicInteger successCount = new AtomicInteger(0); + AtomicInteger failCount = new AtomicInteger(0); + StringBuilder sb = new StringBuilder(); + + // 閬嶅巻璁惧鐢熸垚宸ュ崟 + for (EamEquipment equipment : equipmentList) { + generateSecondMaintenanceOrder( + equipment, + successCount, + failCount, + sb + ); + } + + // 淇濆瓨浠诲姟鏃ュ織 + quartzLog.setIsSuccess(failCount.get() > 0 ? -1 : 0); + sb.insert(0, "浜屼繚宸ュ崟鐢熸垚缁撴灉锛�"); + sb.append("\n鎴愬姛锛�").append(successCount.get()).append("锛屽け璐ワ細").append(failCount.get()); + quartzLog.setExceptionDetail(sb.toString()); + saveQuartzLog(quartzLog, startTime); + } + + private void saveQuartzLog(SysQuartzLog quartzLog, long startTime) { + long endTime = System.currentTimeMillis(); + quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); + sysQuartzLogService.save(quartzLog); + } + + private void generateSecondMaintenanceOrder(EamEquipment equipment, AtomicInteger successCount, AtomicInteger failCount, StringBuilder sb) { + Date nextMaintenanceDate=equipment.getNextSecondMaintenance(); + //妫�鏌ユ槸鍚︽弧瓒崇敓鎴愭潯浠讹紝鎻愬墠涓�澶╃敓鎴� + Calendar cal = Calendar.getInstance(); + cal.setTime(nextMaintenanceDate); + cal.add(Calendar.DAY_OF_MONTH, -1); + Date targetDate = cal.getTime(); + + // 鑾峰彇褰撳墠鏃ユ湡锛堜笉鍚椂闂撮儴鍒嗭級 + Calendar today = Calendar.getInstance(); + today.set(Calendar.HOUR_OF_DAY, 0); + today.set(Calendar.MINUTE, 0); + today.set(Calendar.SECOND, 0); + today.set(Calendar.MILLISECOND, 0); + // 姣旇緝鏃ユ湡鏄惁鍖归厤 + if (targetDate.equals(today.getTime())) { + // 鐢熸垚浜屼繚宸ュ崟 + EamMaintenanceStandard standard = eamMaintenanceStandardService.queryByEquipmentIdAndCategory( + equipment.getId(), + MaintenanceCategoryEnum.SECOND_MAINTENANCE.name() + ); + + if (standard == null) { + handleFailure(equipment, "鏈厤缃簩绾т繚鍏昏鑼�", failCount, sb); + return; + } + + // 鑾峰彇瑙勮寖鏄庣粏 + List<EamMaintenanceStandardDetail> details = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId()); + if (CollectionUtil.isEmpty(details)) { + handleFailure(equipment, "鏈厤缃簩绾т繚鍏昏鑼冩槑缁�", failCount, sb); + return; + } + + // 鏋勫缓宸ュ崟璇锋眰 + EamSecondMaintenanceRequest request = new EamSecondMaintenanceRequest(); + request.setOrderNum(businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.SECOND_MAINTENANCE_CODE_RULE)); + request.setEquipmentId(equipment.getId()); + request.setStandardId(standard.getId()); + request.setMaintenanceDate(nextMaintenanceDate); + request.setCreationMethod(OrderCreationMethodEnum.AUTO.name()); + + // 杞崲瑙勮寖鏄庣粏 + List<EamSecondMaintenanceOrderDetail> orderDetails = details.stream() + .map(EamSecondMaintenanceOrderDetail::new) + .collect(Collectors.toList()); + request.setTableDetailList(orderDetails); + + try { + // 鍒涘缓宸ュ崟 + eamSecondMaintenanceOrderService.addMaintenance(request); + // 鏇存柊璁惧鐘舵�� + equipmentExtendService.updateSecondMaintenanceParam( + equipment.getId(), + null, + CommonConstant.STATUS_1 + ); + successCount.incrementAndGet(); + log.info("璁惧 {} 浜屼繚宸ュ崟鐢熸垚鎴愬姛", equipment.getEquipmentCode()); + } catch (Exception e) { + handleFailure(equipment, "鐢熸垚澶辫触: " + e.getMessage(), failCount, sb); + log.error("璁惧 {} 浜屼繚宸ュ崟鐢熸垚寮傚父", equipment.getEquipmentCode(), e); + } + } + } + + private void handleFailure(EamEquipment equipment, String reason, AtomicInteger failCount, StringBuilder sb) { + failCount.incrementAndGet(); + sb.append("\n璁惧 ") + .append(equipment.getEquipmentCode()) + .append("锛�") + .append(reason); + log.warn("璁惧 {} 浜屼繚宸ュ崟鐢熸垚澶辫触锛歿}", equipment.getEquipmentCode(), reason); + } + + +} diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamSecondMaintenanceRequest.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamSecondMaintenanceRequest.java index 3831e50..26ed73e 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamSecondMaintenanceRequest.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamSecondMaintenanceRequest.java @@ -55,20 +55,6 @@ @DateTimeFormat(pattern = "yyyy-MM-dd") private Date maintenanceDate; /** - * 閿佸畾宸ュ崟鏃ユ湡 - */ - @ApiModelProperty(value = "閿佸畾宸ュ崟鏃ユ湡;鎻愬墠55澶╅攣瀹氬伐鍗�") - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern = "yyyy-MM-dd") - private Date freezeOrderDate; - /** - * 宸ュ崟杩囨湡鏃ユ湡 - */ - @ApiModelProperty(value = "宸ュ崟杩囨湡鏃ユ湡;鍒版湡鏈仛鐩存帴杩囨湡") - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern = "yyyy-MM-dd") - private Date orderExpirationDate; - /** * 瀹為檯寮�濮嬫椂闂� */ @ApiModelProperty(value = "瀹為檯寮�濮嬫椂闂�") diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java index 6606bba..f175d51 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java @@ -9,6 +9,7 @@ import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest; import org.jeecg.modules.eam.vo.EamEquipmentTree; +import java.text.ParseException; import java.util.List; /** @@ -57,7 +58,7 @@ * @param request * @return */ - EamSecondMaintenanceOrder approval(EamSecondMaintenanceRequest request); + EamSecondMaintenanceOrder approval(EamSecondMaintenanceRequest request) throws ParseException; /** diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderAsyncService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderAsyncService.java deleted file mode 100644 index 5c1dadc..0000000 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderAsyncService.java +++ /dev/null @@ -1,153 +0,0 @@ -package org.jeecg.modules.eam.service.impl; - -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.util.StrUtil; -import lombok.extern.slf4j.Slf4j; -import org.jeecg.common.constant.CommonConstant; -import org.jeecg.common.exception.JeecgBootException; -import org.jeecg.common.util.DateUtils; -import org.jeecg.modules.eam.constant.BusinessCodeConst; -import org.jeecg.modules.eam.constant.HfTemplateCategoryEnum; -import org.jeecg.modules.eam.constant.SecondMaintenanceStatusEnum; -import org.jeecg.modules.eam.entity.EamBaseHFCode; -import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail; -import org.jeecg.modules.eam.entity.EamSecondMaintenanceOrder; -import org.jeecg.modules.eam.entity.EamSecondMaintenanceOrderDetail; -import org.jeecg.modules.eam.mapper.EamSecondMaintenanceOrderMapper; -import org.jeecg.modules.eam.service.IEamBaseHFCodeService; -import org.jeecg.modules.eam.service.IEamFactorySecondMaintPlanService; -import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService; -import org.jeecg.modules.eam.service.IEamSecondMaintenanceOrderDetailService; -import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import javax.annotation.Resource; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.temporal.TemporalAdjusters; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Service -@Slf4j -public class EamSecondMaintenanceOrderAsyncService { - @Resource - private EamSecondMaintenanceOrderMapper eamSecondMaintenanceOrderMapper; - - @Autowired - private IEamSecondMaintenanceOrderDetailService secondMaintenanceOrderDetailService; - - @Autowired - private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService; - - @Autowired - private IEamBaseHFCodeService hfCodeService; - - @Autowired - private ISysBusinessCodeRuleService businessCodeRuleService; - - @Autowired - private IEamFactorySecondMaintPlanService factorySecondMaintPlanService; - - @Async - public void asyncGenerateNextMaintenanceOrder(String orderId) { - try { - log.info("寮�濮嬪紓姝ョ敓鎴愪笅娆″伐鍗曪紝鍘熷伐鍗旾D: {}", orderId); - generateNextOrder(orderId); - log.info("寮傛鐢熸垚涓嬫宸ュ崟瀹屾垚锛屽師宸ュ崟ID: {}", orderId); - } catch (Exception e) { - log.error("寮傛鐢熸垚涓嬫宸ュ崟澶辫触锛屽伐鍗旾D: {}", orderId, e); - // 鍙戦�佸憡璀﹂�氱煡鎴栬繘琛岄噸璇� - } - } - - @Transactional(rollbackFor = Exception.class) - public void generateNextOrder(String orderId) { - EamSecondMaintenanceOrder entity = eamSecondMaintenanceOrderMapper.selectById(orderId); - if (entity == null) { - log.warn("鍘熷伐鍗曚笉瀛樺湪锛孖D: {}", orderId); - return; - } - if (!entity.getMaintenanceStatus().equals(SecondMaintenanceStatusEnum.COMPLETE.name())) { - log.warn("鍘熷伐鍗曠姸鎬佹湭瀹屾垚锛屼笉鐢熸垚涓嬫宸ュ崟锛孖D: {}", orderId); - return; - } - - // 鐢熸垚鏂扮殑宸ュ崟缂栧彿 - String newOrderNum = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.SECOND_MAINTENANCE_CODE_RULE); - if (StrUtil.isEmpty(newOrderNum)) { - throw new JeecgBootException("鐢熸垚宸ュ崟缂栧彿澶辫触"); - } - - EamSecondMaintenanceOrder nextOrder = new EamSecondMaintenanceOrder(); - nextOrder.setOrderNum(newOrderNum); - nextOrder.setEquipmentId(entity.getEquipmentId()); - nextOrder.setStandardId(entity.getStandardId()); - nextOrder.setCreationMethod("AUTO"); - // 璁剧疆淇濆吇鏃ユ湡涓哄師宸ュ崟淇濆吇鏃ユ湡鍔�6涓湀 - nextOrder.setMaintenanceDate(calculateNextMaintenanceDate(entity.getMaintenanceDate())); - // 璁剧疆鎶�鏈姸鎬侀壌瀹氳〃HF缂栫爜 - EamBaseHFCode eamBaseHFCode = hfCodeService.selectByCategory(HfTemplateCategoryEnum.SECOND_MAINTENANCE.name()); - if (eamBaseHFCode == null) { - throw new JeecgBootException("鏈厤缃妧鏈姸鎬侀壌瀹氳〃鐨凥F缂栫爜锛屾坊鍔犲け璐ワ紒"); - } - nextOrder.setHfCode(eamBaseHFCode.getHfCode()); - nextOrder.setRemark(entity.getRemark()); - nextOrder.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_MAINTENANCE.name()); - nextOrder.setCreationMethod(entity.getCreationMethod()); - nextOrder.setDelFlag(CommonConstant.DEL_FLAG_0); - - // 鎻掑叆鏂板伐鍗� - eamSecondMaintenanceOrderMapper.insert(nextOrder); - - // 澶嶅埗宸ュ崟鏄庣粏 - List<EamMaintenanceStandardDetail> standardDetails = eamMaintenanceStandardDetailService.selectByStandardId(entity.getStandardId()); - if (CollectionUtil.isEmpty(standardDetails)) { - log.warn("鍘熷伐鍗曠殑淇濆吇瑙勮寖鏄庣粏涓虹┖锛屽伐鍗旾D: {}", orderId); - return; - } - - List<EamSecondMaintenanceOrderDetail> orderDetails = standardDetails.stream() - .map(item -> { - EamSecondMaintenanceOrderDetail detail = new EamSecondMaintenanceOrderDetail(); - BeanUtils.copyProperties(item, detail); - detail.setId(null); - detail.setOrderId(nextOrder.getId()); - return detail; - }) - .collect(Collectors.toList()); - - secondMaintenanceOrderDetailService.saveBatch(orderDetails); - - // 鎻掑叆棣栭〉浜屼繚鍏昏鍒� - // 浣跨敤 SimpleDateFormat 鐩存帴鏍煎紡鍖栦负鈥測yyy骞碝M鏈堚�濇牸寮� - SimpleDateFormat sdf = new SimpleDateFormat("yyyy骞碝M鏈�"); - String formattedDate = sdf.format(nextOrder.getMaintenanceDate()); - factorySecondMaintPlanService.add(nextOrder.getEquipmentId(), formattedDate); - } - - - /** - * 璁$畻鍏釜鏈堝悗鐨勫綋鏈堟渶鍚庝竴澶� - * @param currentDate 褰撳墠宸ュ崟鏃ユ湡 - * @return 鍏釜鏈堝悗鐨勫綋鏈堟渶鍚庝竴澶� - */ - private Date calculateNextMaintenanceDate(Date currentDate) { - // 杞崲涓篖ocalDate澶勭悊鏃ユ湡 - LocalDate localDate = DateUtils.dateToLocalDate(currentDate); - // 璁$畻鍏釜鏈堝悗鐨勬棩鏈� - LocalDate sixMonthsLater = localDate.plusMonths(6); - - // 璋冩暣鍒板綋鏈堢殑鏈�鍚庝竴澶� - LocalDate lastDayOfMonth = sixMonthsLater.with(TemporalAdjusters.lastDayOfMonth()); - - // 杞崲鍥濪ate绫诲瀷 - return DateUtils.localDateToDate(lastDayOfMonth); - } - -} diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java index 423acba..10cb913 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java @@ -52,7 +52,10 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -100,8 +103,6 @@ private BaseFactoryMapper baseFactoryMapper; @Autowired private IEamSecondMaintenanceOrderDetailService eamSecondMaintenanceOrderDetailService; - @Autowired - private EamSecondMaintenanceOrderAsyncService eamSecondMaintenanceOrderAsyncService; @Autowired private IEamFactorySecondMaintPlanService factorySecondMaintPlanService; @@ -349,9 +350,9 @@ } // 鎻掑叆棣栭〉浜屼繚鍏昏鍒� // 浣跨敤 SimpleDateFormat 鐩存帴鏍煎紡鍖栦负鈥測yyy骞碝M鏈堚�濇牸寮� - SimpleDateFormat sdf = new SimpleDateFormat("yyyy骞碝M鏈�"); - String formattedDate = sdf.format(order.getMaintenanceDate()); - factorySecondMaintPlanService.add(order.getEquipmentId(), formattedDate); +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy骞碝M鏈�"); +// String formattedDate = sdf.format(order.getMaintenanceDate()); +// factorySecondMaintPlanService.add(order.getEquipmentId(), formattedDate); return true; } @@ -486,7 +487,7 @@ @Override @Transactional(rollbackFor = Exception.class) @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.SECOND_MAINTENANCE, businessTable = "eam_second_maintenance_order") - public EamSecondMaintenanceOrder approval(EamSecondMaintenanceRequest request) { + public EamSecondMaintenanceOrder approval(EamSecondMaintenanceRequest request) throws ParseException { EamSecondMaintenanceOrder entity = eamSecondMaintenanceOrderMapper.selectById(request.getId()); if (entity == null) { throw new JeecgBootException("瀹℃壒鐨勬暟鎹凡鍒犻櫎锛岃鍒锋柊閲嶈瘯锛�"); @@ -683,17 +684,32 @@ eamSecondMaintenanceOrderMapper.updateById(entity); //寮傛鐢熸垚涓嬫浜屼繚宸ュ崟 if (SecondMaintenanceStatusEnum.COMPLETE.name().equals(entity.getMaintenanceStatus())) { - try { - eamSecondMaintenanceOrderAsyncService.asyncGenerateNextMaintenanceOrder(entity.getId()); - } catch (Exception e) { - log.error("瑙﹀彂寮傛鐢熸垚涓嬫宸ュ崟澶辫触锛屽伐鍗旾D: {}", entity.getId(), e); - } + //濉厖璁$畻涓嬫浜屼繚鏃ユ湡 + EamEquipmentExtend eamEquipmentExtend=eamEquipmentExtendService.getById(entity.getEquipmentId()); + eamEquipmentExtend.setLatestSecondMaintenance(entity.getMaintenanceDate()); + eamEquipmentExtend.setNextSecondMaintenance(calculateNextMaintenanceDate(entity.getMaintenanceDate())); + eamEquipmentExtendService.updateById(eamEquipmentExtend); } - return entity; } /** + * 璁$畻鍏釜鏈堝悗鐨勫綋鏈堟渶鍚庝竴澶� + * @param currentDate 褰撳墠宸ュ崟鏃ユ湡 + * @return 鍏釜鏈堝悗鐨勫綋鏈堟渶鍚庝竴澶� + */ + private Date calculateNextMaintenanceDate(Date currentDate) { + // 杞崲涓篖ocalDate澶勭悊鏃ユ湡 + LocalDate localDate = DateUtils.dateToLocalDate(currentDate); + // 璁$畻鍏釜鏈堝悗鐨勬棩鏈� + LocalDate sixMonthsLater = localDate.plusMonths(6); + // 璋冩暣鍒板綋鏈堢殑鏈�鍚庝竴澶� + LocalDate lastDayOfMonth = sixMonthsLater.with(TemporalAdjusters.lastDayOfMonth()); + // 杞崲鍥濪ate绫诲瀷 + return DateUtils.localDateToDate(lastDayOfMonth); + } + + /** * 鎵归噺鎵撳嵃浜屼繚宸ュ崟 * @param ids * @return -- Gitblit v1.9.3