From 08d5cafe503e79c45f2aa2cf272a29582d97f941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=AE=8F=E6=96=8C?= <2164406372@qq.com> Date: Wed, 14 Jan 2026 14:54:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=82=B9=E6=A3=80=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E5=9B=A0=E4=B8=BA?= =?UTF-8?q?=E4=B8=80=E6=9D=A1=E6=95=B0=E6=8D=AE=E6=9C=89=E8=AF=AF=EF=BC=8C?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E5=85=A8=E9=83=A8=E5=BE=97=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E9=83=BD=E5=9B=9E=E6=BB=9A=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/service/Impl/EamServiceImpl.java | 17 +-- .../pms/service/Impl/QcServiceImpl.java | 107 ++++++++++++++++++ .../sys/modules/pms/service/QcService.java | 2 + 3 files changed, 119 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/xujie/sys/modules/pms/service/Impl/EamServiceImpl.java b/src/main/java/com/xujie/sys/modules/pms/service/Impl/EamServiceImpl.java index 34419435..c2e1f568 100644 --- a/src/main/java/com/xujie/sys/modules/pms/service/Impl/EamServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/pms/service/Impl/EamServiceImpl.java @@ -26,10 +26,7 @@ import com.xujie.sys.modules.pms.entity.vo.LoraWatchResponseVo; import com.xujie.sys.modules.pms.mapper.EamDao; import com.xujie.sys.modules.pms.mapper.EamMapper; import com.xujie.sys.modules.pms.mapper.QcMapper; -import com.xujie.sys.modules.pms.service.EamService; -import com.xujie.sys.modules.pms.service.ILoraWatchUtils; -import com.xujie.sys.modules.pms.service.SendMessageNotificationService; -import com.xujie.sys.modules.pms.service.TpmMessageNotificationService; +import com.xujie.sys.modules.pms.service.*; import com.xujie.sys.modules.pms.util.HolidayUtils; import com.xujie.sys.modules.pms.util.MapToObjectConverter; import com.xujie.sys.modules.pms.util.ResponseData; @@ -83,6 +80,8 @@ public class EamServiceImpl implements EamService { @Autowired private RedisTemplate redisTemplate; @Autowired + private QcService qcService; + @Autowired private QcMapper qcMapper; @Autowired @@ -3196,7 +3195,6 @@ public class EamServiceImpl implements EamService { * 点检和维保生成计划的定时任务 */ @Override - @Transactional public void eamWorkPlanTask () { EamWorkPlanInData workPlanData = new EamWorkPlanInData(); // 循环事业部 @@ -3223,8 +3221,13 @@ public class EamServiceImpl implements EamService { List objectList = eamMapper.selectObjectByPlanID(data); data.setObjectList(objectList); data.setUserId(data.getCreatedBy()); - // 新增计划 - eamWorkPlanSave(data); + try { + // 新增计划(为了触发事务回滚异常,复制一样的方法到 qcService) + qcService.eamWorkPlanSave(data); // 每次新增单独事务 + } catch (Exception e) { + System.out.println("定时任务自动生成计划失败,planID: " + data.getPlanID() +"异常信息:"+e.getMessage()); + log.error("定时任务自动生成计划失败,planID: " + data.getPlanID() +"异常信息:"+e.getMessage(), e); + } } } } diff --git a/src/main/java/com/xujie/sys/modules/pms/service/Impl/QcServiceImpl.java b/src/main/java/com/xujie/sys/modules/pms/service/Impl/QcServiceImpl.java index 5266c1a7..8ca7c675 100644 --- a/src/main/java/com/xujie/sys/modules/pms/service/Impl/QcServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/pms/service/Impl/QcServiceImpl.java @@ -14,6 +14,7 @@ import com.xujie.sys.modules.oss.service.SysOssService; import com.xujie.sys.modules.pms.data.*; import com.xujie.sys.modules.pms.entity.QmsDataDictionaryData; import com.xujie.sys.modules.pms.entity.vo.CheckSubDetailValueVo; +import com.xujie.sys.modules.pms.mapper.EamMapper; import com.xujie.sys.modules.pms.mapper.PqcMapper; import com.xujie.sys.modules.pms.mapper.QcDao; import com.xujie.sys.modules.pms.mapper.QcMapper; @@ -39,6 +40,7 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -63,6 +65,8 @@ public class QcServiceImpl implements QcService { @Autowired private QcMapper qcMapper; + @Autowired + private EamMapper eamMapper; @Autowired private PqcMapper pqcMapper; @@ -3506,6 +3510,109 @@ public class QcServiceImpl implements QcService { return qcMapper.getButtonsPermission2(); } + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void eamWorkPlanSave(EamWorkPlanInData inData) { + // 获得 site 和 bu + if (inData.getBu().split("_").length >= 2 ) { + inData.setSite(inData.getBu().split("_")[0]); + inData.setBuNo(inData.getBu().split("_")[1]); + } else { + throw new RuntimeException("工厂和部门有误!"); + } + // 检查该日期内是否已有该设备的计划 + for (EamObjectInData objectData : inData.getObjectList()) { + inData.setObjectID(objectData.getObjectID()); + List objectPlanList = eamMapper.checkObjectPlan(inData); + if (!objectPlanList.isEmpty()) { + throw new RuntimeException("设备 " + objectData.getObjectID() + " 已存在计划,请勿重复创建!"); + } + } + + // 生成计划编码 + if (inData.getFunctionType().equals("A")) { + List params = new ArrayList<>(); + params.add("*"); + params.add("workPlanForCheckNo"); + params.add(com.xujie.sys.common.utils.DateUtil.getStringDate(new Date(),"yyMMdd")); + params.add("-126"); + List> resultList = procedureDao.getProcedureData("getWorkPlanNo", params); + Map resultMap = resultList.get(0); + String planNo = String.valueOf(resultMap.get("serial_no")); + inData.setPlanID("DJ" + com.xujie.sys.common.utils.DateUtil.getStringDate(new Date(),"yyMMdd") + planNo); + } else if (inData.getFunctionType().equals("B")) { + List params = new ArrayList<>(); + params.add("*"); + params.add("workPlanForMaintenanceNo"); + params.add(com.xujie.sys.common.utils.DateUtil.getStringDate(new Date(),"yyMMdd")); + params.add("-127"); + List> resultList = procedureDao.getProcedureData("getWorkPlanNo", params); + Map resultMap = resultList.get(0); + String planNo = String.valueOf(resultMap.get("serial_no")); + inData.setPlanID("WB" + com.xujie.sys.common.utils.DateUtil.getStringDate(new Date(),"yyMMdd") + planNo); + } + // 新增点检计划 + eamMapper.saveWorkPlan(inData); + for (int i = 0; i < inData.getObjectList().size(); i++) { + // 调用存储过程 执行 + String site = inData.getSite(); + String buNo = inData.getBuNo(); + String planID = inData.getPlanID(); + String planDesc = inData.getPlanDesc(); + String objectID = inData.getObjectList().get(i).getObjectID(); + String functionType = inData.getFunctionType(); + String propertiesCode = inData.getPropertiesCode(); + String operator = inData.getOperator(); + String operatorName = inData.getOperatorName(); + String checker = inData.getChecker(); + String checkerName = inData.getCheckerName(); + Integer planPeriod = inData.getPlanPeriod(); + String planStartDate = com.xujie.sys.common.utils.DateUtil.getStringDate(inData.getPlanStartDate()); + String planEndDate = com.xujie.sys.common.utils.DateUtil.getStringDate(inData.getPlanEndDate()); + String taskStartDate = ""; + if (inData.getTaskStartDate() != null) { + taskStartDate = com.xujie.sys.common.utils.DateUtil.getStringDate(inData.getTaskStartDate()); + } + String userId = inData.getUserId(); + String remark = inData.getRemark(); + String planCycle = inData.getPlanCycle(); + String planHaltDate = ""; + if (inData.getPlanHaltDate() != null) { + planHaltDate = com.xujie.sys.common.utils.DateUtil.getStringDate(inData.getPlanHaltDate()); + } + String checkType = inData.getCheckType(); + List params = new ArrayList<>(); + params.add(site); + params.add(buNo); + params.add(planID); + params.add(planDesc); + params.add(objectID); + params.add(functionType); + params.add(propertiesCode); + params.add(operator); + params.add(operatorName); + params.add(checker); + params.add(checkerName); + params.add(planPeriod); + params.add(planStartDate); + params.add(planEndDate); + params.add(taskStartDate); + params.add(userId); + params.add(remark); + params.add(planCycle); + params.add(planHaltDate); + params.add(checkType); + //执行方法 + List> resultList = procedureDao.getProcedureData("eamWorkPlanSave", params); + //判断是否检验成功 + String code = String.valueOf(resultList.get(0).get("resultCode")); + if ("400".equalsIgnoreCase(code)) { + String msg = String.valueOf(resultList.get(0).get("resultMsg")); + throw new XJException(msg, Integer.parseInt(code)); + } + } + } + public void sendMailIQC(QcFAIRecordData data, String type) throws Exception { // 判断检验结论,不合格则发送邮件 if ("不合格".equals(data.getInspectionResult())) { diff --git a/src/main/java/com/xujie/sys/modules/pms/service/QcService.java b/src/main/java/com/xujie/sys/modules/pms/service/QcService.java index 8bb13857..4b1af74b 100644 --- a/src/main/java/com/xujie/sys/modules/pms/service/QcService.java +++ b/src/main/java/com/xujie/sys/modules/pms/service/QcService.java @@ -370,4 +370,6 @@ public interface QcService { List getButtonsPermission1(); List getButtonsPermission2(); + + void eamWorkPlanSave(EamWorkPlanInData inData); }