From dd890a133f35b4b21ed00ec557ca83f733ff04dc Mon Sep 17 00:00:00 2001 From: lyh <925863403@qq.com> Date: 星期三, 03 九月 2025 18:03:24 +0800 Subject: [PATCH] 实现二保三保规范一个Word文档中包含多个保养内容(即多个设备)导入 --- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java | 185 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 185 insertions(+), 0 deletions(-) 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); + } + + +} -- Gitblit v1.9.3