Browse Source

解决点检计划自动生成因为一条数据有误,导致全部得新增都回滚的问题

master
赵宏斌 3 days ago
parent
commit
08d5cafe50
  1. 17
      src/main/java/com/xujie/sys/modules/pms/service/Impl/EamServiceImpl.java
  2. 107
      src/main/java/com/xujie/sys/modules/pms/service/Impl/QcServiceImpl.java
  3. 2
      src/main/java/com/xujie/sys/modules/pms/service/QcService.java

17
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<String, Object> 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<EamObjectInData> 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);
}
}
}
}

107
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<EamWorkPlanInData> objectPlanList = eamMapper.checkObjectPlan(inData);
if (!objectPlanList.isEmpty()) {
throw new RuntimeException("设备 " + objectData.getObjectID() + " 已存在计划,请勿重复创建!");
}
}
// 生成计划编码
if (inData.getFunctionType().equals("A")) {
List<Object> params = new ArrayList<>();
params.add("*");
params.add("workPlanForCheckNo");
params.add(com.xujie.sys.common.utils.DateUtil.getStringDate(new Date(),"yyMMdd"));
params.add("-126");
List<Map<String, Object>> resultList = procedureDao.getProcedureData("getWorkPlanNo", params);
Map<String, Object> 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<Object> params = new ArrayList<>();
params.add("*");
params.add("workPlanForMaintenanceNo");
params.add(com.xujie.sys.common.utils.DateUtil.getStringDate(new Date(),"yyMMdd"));
params.add("-127");
List<Map<String, Object>> resultList = procedureDao.getProcedureData("getWorkPlanNo", params);
Map<String, Object> 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<Object> 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<Map<String, Object>> 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())) {

2
src/main/java/com/xujie/sys/modules/pms/service/QcService.java

@ -370,4 +370,6 @@ public interface QcService {
List<EamAdminData> getButtonsPermission1();
List<EamAdminData> getButtonsPermission2();
void eamWorkPlanSave(EamWorkPlanInData inData);
}
Loading…
Cancel
Save