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 | 200 ++++++++++++++++++++++++++++++------------------- 1 files changed, 123 insertions(+), 77 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 index 111a0ea..568feb6 100644 --- 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 @@ -2,18 +2,17 @@ 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.*; +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.request.EamWeekMaintenanceRequest; -import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService; -import org.jeecg.modules.eam.service.IEamMaintenanceStandardService; -import org.jeecg.modules.eam.service.IEamSecondMaintenanceOrderService; -import org.jeecg.modules.eam.service.IEamWeekMaintenanceOrderService; -import org.jeecg.common.util.ThrowableUtil; +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; @@ -26,16 +25,23 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDate; -import java.util.ArrayList; +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 @@ -48,12 +54,13 @@ 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()); @@ -61,79 +68,118 @@ quartzLog.setJobId(byJobClassName.get(0).getId()); } long startTime = System.currentTimeMillis(); - /** - * 鑾峰彇 閰嶇疆浜� 浜屼繚鏍囧噯鐨� 淇℃伅 - */ - List<EamMaintenanceStandard> standardList = eamMaintenanceStandardService.queryListByCategory(MaintenanceCategoryEnum.SECOND_MAINTENANCE.name()); - if (CollectionUtil.isEmpty(standardList)) { - log.warn("娌℃湁閰嶇疆浠讳綍浜屼繚鏍囧噯锛屼换鍔$粨鏉�"); + // 鑾峰彇闇�瑕佷簩淇濈殑璁惧鍒楄〃 + 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; } - //褰撳墠鏃ユ湡 - 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.isEqual(generateDate)) { - //杩樻湭鍒扮敓鎴愭棩鏈燂紝璺宠繃鎵ц - continue; - } - //鑾峰彇淇濆吇椤规槑缁� - List<EamMaintenanceStandardDetail> standardDetailList = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId()); - if(CollectionUtil.isEmpty(standardDetailList)) { - log.error("浜屼繚鏍囧噯娌℃湁淇濆吇鏄庣粏锛岃鍏堥厤缃繚鍏绘槑缁�, standard:{}", standard); - continue; - } - //寮�濮嬬敓鎴� - EamSecondMaintenanceRequest request = new EamSecondMaintenanceRequest(); - request.setEquipmentId(standard.getEquipmentId()); - request.setStandardId(standard.getId()); - request.setMaintenanceDate(DateUtils.localDateToDate(generateDate)); - String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.SECOND_MAINTENANCE_CODE_RULE); - request.setOrderNum(codeSeq); - request.setCreationMethod(OrderCreationMethodEnum.AUTO.name()); - List<EamSecondMaintenanceOrderDetail> tableDetailList = new ArrayList<>(); - for (EamMaintenanceStandardDetail msd : standardDetailList) { - EamSecondMaintenanceOrderDetail sod = new EamSecondMaintenanceOrderDetail(); - sod.setItemCode(msd.getItemCode()); - sod.setItemCategory(msd.getItemPart()); - sod.setItemName(msd.getItemName()); - sod.setMaintenanceResult(msd.getItemDemand()); - tableDetailList.add(sod); - } -// List<EamSecondMaintenanceOrderDetail> collect = standardDetailList.stream().map(EamSecondMaintenanceOrderDetail::new).collect(Collectors.toList()); - request.setTableDetailList(tableDetailList); - eamSecondMaintenanceOrderService.addMaintenance(request); + AtomicInteger successCount = new AtomicInteger(0); + AtomicInteger failCount = new AtomicInteger(0); + StringBuilder sb = new StringBuilder(); -// standard.setLastGenerateTime(new Date()); - eamMaintenanceStandardService.updateById(standard); - } - quartzLog.setIsSuccess(0); - } catch (Exception e) { - log.error("浜屼繚鐢熸垚鎵ц瀹氭椂浠诲姟澶辫触锛寋}", e.getMessage(), e); - quartzLog.setIsSuccess(-1); - quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); + // 閬嶅巻璁惧鐢熸垚宸ュ崟 + 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