sucheng 4 hónapja
szülő
commit
b312bffb92

+ 113 - 68
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationProcessEquServiceImpl.java

@@ -26,7 +26,11 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionDefinition;
+import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.DefaultTransactionDefinition;
 
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
@@ -89,6 +93,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     private AspCheckItemsService aspCheckItemsService;
     @Autowired
     private ApsScheduleConfigService apsScheduleConfigService;
+    @Autowired
+    private PlatformTransactionManager transactionManager;
 
 //    /**
 //     * 更新工序的待加工批次号信息
@@ -286,7 +292,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
      * @return
      */
     @Override
-    @Transactional(rollbackFor = Exception.class)
+//    @Transactional(rollbackFor = Exception.class)
     public R changingWires(List<ChangingWiresVo> changingWiresVos) {
 //        ApsUtils.checkScheduling(null);
         if (changingWiresVos.isEmpty()) {
@@ -602,28 +608,50 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 // 删除工序作业备份
                 ApsUtils.clearBackup(currentUser);
             }
+            // 定义事务属性
+            TransactionDefinition definition = new DefaultTransactionDefinition();
             if (!saveList.isEmpty()) {
-                this.saveOrUpdateBatch(saveList);
+                apsProcessOperationProcessEquService.saveOrUpdateBatch(saveList);
             }
             if (!updateConflictVoList.isEmpty()) {
                 updateConflictVoList.forEach(data -> {
-                    ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
-                    this.updateById(apsProcessOperationProcessEquDo);
-                    affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
-                            data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getOldEquId(), data.getCurrentProcessWay(), returnAboutIds));
-                    // 判断是否存在设备不可用
-                    apsProcessOperationProcessEquDo = this.getById(apsProcessOperationProcessEquDo.getId());
-                    inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
-                            apsProcessOperationProcessEquDo.getProcessdeviceid(),
-                            apsProcessOperationProcessEquDo.getPlanstartdate(),
-                            apsProcessOperationProcessEquDo.getPlanenddate(),
-                            affectedIdList);
+                    // 开始事务
+                    TransactionStatus status = transactionManager.getTransaction(definition);
+                    try {
+                        ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
+                        this.updateById(apsProcessOperationProcessEquDo);
+                        affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
+                                data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getOldEquId(), data.getCurrentProcessWay(), returnAboutIds));
+                        // 判断是否存在设备不可用
+                        apsProcessOperationProcessEquDo = this.getById(apsProcessOperationProcessEquDo.getId());
+                        inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
+                                apsProcessOperationProcessEquDo.getProcessdeviceid(),
+                                apsProcessOperationProcessEquDo.getPlanstartdate(),
+                                apsProcessOperationProcessEquDo.getPlanenddate(),
+                                affectedIdList);
+                        // 提交事务
+                        transactionManager.commit(status);
+                    } catch (Exception e) {
+                        // 捕获异常并回滚事务
+                        transactionManager.rollback(status);
+                        throw e;
+                    }
                 });
             }
             aboutIds = affectedIdList.stream().distinct().collect(Collectors.toList());
-            for (String data : blankIds) {
-                // 更新坯料交货期
-                aboutIds.addAll(apsBlankOrderService.updateBlankDeliveryDate(null, data));
+            // 开始事务
+            TransactionStatus status = transactionManager.getTransaction(definition);
+            try {
+                for (String data : blankIds) {
+                    // 更新坯料交货期
+                    aboutIds.addAll(apsBlankOrderService.updateBlankDeliveryDate(null, data));
+                }
+                // 提交事务
+                transactionManager.commit(status);
+            } catch (Exception e) {
+                // 捕获异常并回滚事务
+                transactionManager.rollback(status);
+                throw e;
             }
         } finally {
             for (String equId : detailIds) {
@@ -996,9 +1024,9 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     .set(ApsProcessOperationProcessEquDo::getPlanenddate, changeStartTimeVo.getPlanEndTime())
                     .set(StringUtils.isNotBlank(changeStartTimeVo.getEquId()), ApsProcessOperationProcessEquDo::getProcessdeviceid, changeStartTimeVo.getEquId())
                     .set(StringUtils.isNotBlank(changeStartTimeVo.getEquName()), ApsProcessOperationProcessEquDo::getProcessdevice, changeStartTimeVo.getEquName())
-                    .set(ApsProcessOperationProcessEquDo::getModifydate,DateUtil.date())
-                    .set(ApsProcessOperationProcessEquDo::getModifyuserid,currentUser.getId())
-                    .set(ApsProcessOperationProcessEquDo::getModifyusername,currentUser.getName())
+                    .set(ApsProcessOperationProcessEquDo::getModifydate, DateUtil.date())
+                    .set(ApsProcessOperationProcessEquDo::getModifyuserid, currentUser.getId())
+                    .set(ApsProcessOperationProcessEquDo::getModifyusername, currentUser.getName())
             );
         }
         updateConflictVos.forEach(data -> {
@@ -2110,7 +2138,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     }
 
     @Override
-    @Transactional
+//    @Transactional
     public R scheduling(ChangingScheduleVo req) {
 //        ApsUtils.checkScheduling(null);
 
@@ -2122,68 +2150,85 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         //作业明细集合
         List<String> processEquIdList = req.getProcessEquIdList();
         List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = apsProcessOperationProcessEquService.listByIds(processEquIdList).stream().collect(Collectors.toList());
-        //作业ID集合
-        List<String> processIdList = apsProcessOperationProcessEquDos.stream().map(ApsProcessOperationProcessEquDo::getProcessid).distinct().collect(Collectors.toList());
-        //可选设备
-        List<ApsProcessOperationEquDo> processOperationEquDos = apsProcessOperationEquService.list(new LambdaQueryWrapper<ApsProcessOperationEquDo>().in(ApsProcessOperationEquDo::getMainid, processIdList));
-
         List<String> blankIdList = apsProcessOperationProcessEquDos.stream().map(ApsProcessOperationProcessEquDo::getBlankid).distinct().collect(Collectors.toList());
         apsProcessOperationProcessEquDos.sort(Comparator.comparing(ApsProcessOperationProcessEquDo::getPlanstartdate));
         //需要更新的集合
 //        List<ApsProcessOperationProcessEquDo> needUpdateList = new LinkedList<>();
         //下一道明细的开始时间
         Date nextStartDate = req.getProcessingTime();
+        // 定义事务属性
+        TransactionDefinition definition = new DefaultTransactionDefinition();
         for (ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo : apsProcessOperationProcessEquDos) {
-            Date planstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
-            Date planenddate = apsProcessOperationProcessEquDo.getPlanenddate();
-            String processdeviceid = apsProcessOperationProcessEquDo.getProcessdeviceid();
-            ApsProcessOperationProcessEquDo needUpdate = new ApsProcessOperationProcessEquDo();
-            needUpdate.setId(apsProcessOperationProcessEquDo.getId());
-            needUpdate.setProcessdeviceid(req.getEquId());
-            needUpdate.setProcessdevice(req.getEquName());
-            if (ObjectUtil.isNotEmpty(req.getIsZhaji()) && ObjectUtil.isNotEmpty(req.getOldDeviceId())) {
-                //如果是轧机工序类别,并且(加工设备换了,或者加工设备没换并且辊类型不为空),则辊类型=所选辊类型
-                if (req.getIsZhaji()) {
-                    //设备没换
-                    if (req.getOldDeviceId().equals(req.getEquId())) {
-                        if (ObjectUtil.isNotEmpty(req.getRollerId())) {
-                            needUpdate.setRollerid(req.getRollerId());
-                        }
-                    } else {
-                        if (ObjectUtil.isNotEmpty(req.getRollerId())) {
-                            needUpdate.setRollerid(req.getRollerId());
+            // 开始事务
+            TransactionStatus status = transactionManager.getTransaction(definition);
+            try {
+                Date planstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
+                Date planenddate = apsProcessOperationProcessEquDo.getPlanenddate();
+                String processdeviceid = apsProcessOperationProcessEquDo.getProcessdeviceid();
+                ApsProcessOperationProcessEquDo needUpdate = new ApsProcessOperationProcessEquDo();
+                needUpdate.setId(apsProcessOperationProcessEquDo.getId());
+                needUpdate.setProcessdeviceid(req.getEquId());
+                needUpdate.setProcessdevice(req.getEquName());
+                if (ObjectUtil.isNotEmpty(req.getIsZhaji()) && ObjectUtil.isNotEmpty(req.getOldDeviceId())) {
+                    //如果是轧机工序类别,并且(加工设备换了,或者加工设备没换并且辊类型不为空),则辊类型=所选辊类型
+                    if (req.getIsZhaji()) {
+                        //设备没换
+                        if (req.getOldDeviceId().equals(req.getEquId())) {
+                            if (ObjectUtil.isNotEmpty(req.getRollerId())) {
+                                needUpdate.setRollerid(req.getRollerId());
+                            }
                         } else {
-                            throw new CustomException("换设备后轧机工序必须选择辊类型");
+                            if (ObjectUtil.isNotEmpty(req.getRollerId())) {
+                                needUpdate.setRollerid(req.getRollerId());
+                            } else {
+                                throw new CustomException("换设备后轧机工序必须选择辊类型");
+                            }
                         }
                     }
                 }
-            }
 
-            needUpdate.setProcessworkshopid(req.getWorkshopId());
-            needUpdate.setProcessworkshop(req.getWorkshopName());
-            needUpdate.setPlanstartdate(nextStartDate);
-            needUpdate.setPlanenddate(DateUtil.offsetSecond(nextStartDate, (int) DateUtil.between(planstartdate, planenddate, DateUnit.SECOND)));
-            nextStartDate = needUpdate.getPlanenddate();
+                needUpdate.setProcessworkshopid(req.getWorkshopId());
+                needUpdate.setProcessworkshop(req.getWorkshopName());
+                needUpdate.setPlanstartdate(nextStartDate);
+                needUpdate.setPlanenddate(DateUtil.offsetSecond(nextStartDate, (int) DateUtil.between(planstartdate, planenddate, DateUnit.SECOND)));
+                nextStartDate = needUpdate.getPlanenddate();
 //            needUpdateList.add(needUpdate);
-            apsProcessOperationProcessEquService.updateById(needUpdate);
-            apsProcessOperationProcessEquDo.setProcessdeviceid(needUpdate.getProcessdeviceid());
-            apsProcessOperationProcessEquDo.setProcessdevice(needUpdate.getProcessdevice());
-            apsProcessOperationProcessEquDo.setRollerid(needUpdate.getRollerid());
-            apsProcessOperationProcessEquDo.setProcessworkshopid(needUpdate.getProcessworkshopid());
-            apsProcessOperationProcessEquDo.setProcessworkshop(needUpdate.getProcessworkshop());
-            apsProcessOperationProcessEquDo.setPlanstartdate(needUpdate.getPlanstartdate());
-            apsProcessOperationProcessEquDo.setPlanenddate(needUpdate.getPlanenddate());
-            checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
-                    planstartdate, planenddate, processdeviceid, "非合并加工", new LinkedList<>());
-            // 判断是否存在设备不可用
-            apsProcessOperationProcessEquDo = this.getById(apsProcessOperationProcessEquDo.getId());
-            inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
-                    apsProcessOperationProcessEquDo.getProcessdeviceid(),
-                    apsProcessOperationProcessEquDo.getPlanstartdate(),
-                    apsProcessOperationProcessEquDo.getPlanenddate(),
-                    new LinkedList<>());
+                apsProcessOperationProcessEquService.updateById(needUpdate);
+                apsProcessOperationProcessEquDo.setProcessdeviceid(needUpdate.getProcessdeviceid());
+                apsProcessOperationProcessEquDo.setProcessdevice(needUpdate.getProcessdevice());
+                apsProcessOperationProcessEquDo.setRollerid(needUpdate.getRollerid());
+                apsProcessOperationProcessEquDo.setProcessworkshopid(needUpdate.getProcessworkshopid());
+                apsProcessOperationProcessEquDo.setProcessworkshop(needUpdate.getProcessworkshop());
+                apsProcessOperationProcessEquDo.setPlanstartdate(needUpdate.getPlanstartdate());
+                apsProcessOperationProcessEquDo.setPlanenddate(needUpdate.getPlanenddate());
+                checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
+                        planstartdate, planenddate, processdeviceid, "非合并加工", new LinkedList<>());
+                // 判断是否存在设备不可用
+                apsProcessOperationProcessEquDo = this.getById(apsProcessOperationProcessEquDo.getId());
+                inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
+                        apsProcessOperationProcessEquDo.getProcessdeviceid(),
+                        apsProcessOperationProcessEquDo.getPlanstartdate(),
+                        apsProcessOperationProcessEquDo.getPlanenddate(),
+                        new LinkedList<>());
+                // 提交事务
+                transactionManager.commit(status);
+            } catch (Exception e) {
+                // 捕获异常并回滚事务
+                transactionManager.rollback(status);
+                throw e;
+            }
+        }
+        // 开始事务
+        TransactionStatus status = transactionManager.getTransaction(definition);
+        try {
+            blankIdList.forEach(item -> apsBlankOrderService.updateBlankDeliveryDate(null, item));
+            // 提交事务
+            transactionManager.commit(status);
+        } catch (Exception e) {
+            // 捕获异常并回滚事务
+            transactionManager.rollback(status);
+            throw e;
         }
-        blankIdList.forEach(item -> apsBlankOrderService.updateBlankDeliveryDate(null, item));
 
 
         return R.ok();

+ 1 - 1
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsProcessOperationProcessEquController.java

@@ -64,7 +64,7 @@ public class ApsProcessOperationProcessEquController {
      */
     @PostMapping("/changing-wires2")
     public R changingWires2(@RequestBody @Validated List<ChangingWiresVo> changingWiresVos) {
-        log.info("开始进行换线作业");
+        log.info("开始进行换线作业2");
         return apsProcessOperationProcessEquService.changingWires(changingWiresVos);
     }
     /**