|
@@ -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();
|