|
@@ -41,7 +41,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.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
@@ -173,6 +177,10 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
|
|
|
private ApsCustomerManagementService apsCustomerManagementService;
|
|
|
@Autowired
|
|
|
private ApsReportRecordsService apsReportRecordsService;
|
|
|
+ @Autowired
|
|
|
+ private PlatformTransactionManager transactionManager;
|
|
|
+ @Autowired
|
|
|
+ private ApsProductionOrderService apsProductionOrderService;
|
|
|
|
|
|
|
|
|
public static final String ERROR_MSG = "%s上诉订单的排程交货期大于承诺交货期";
|
|
@@ -251,7 +259,6 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- @Transactional
|
|
|
public R checkAndSaveOrUpdateOrder(CheckAndSaveOrUpdateOrderReq req) {
|
|
|
//订单信息
|
|
|
ApsProductionOrderDo apsProductionOrderDo = req.getApsProductionOrderDo();
|
|
@@ -269,6 +276,10 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
|
|
|
log.error("校验-该订单已被:{}提交", existingUser);
|
|
|
return R.error("该订单已被提交,请刷新页面后重新操作");
|
|
|
}
|
|
|
+ // 定义事务属性
|
|
|
+ TransactionDefinition definition = new DefaultTransactionDefinition();
|
|
|
+ // 开始事务
|
|
|
+ TransactionStatus status = transactionManager.getTransaction(definition);
|
|
|
try {
|
|
|
//数据库中的订单数据
|
|
|
ApsProductionOrderDo nowApsProductionOrderDo = this.getById(id);
|
|
@@ -535,11 +546,6 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
|
|
|
}
|
|
|
apsProductionMergeOrderService.saveOrUpdateBatch(apsProductionMergeOrderDoList);
|
|
|
}
|
|
|
-
|
|
|
- //根据订单和产品明细,及其合并订单,重新赋值 坯料计划和输出成品的冗余字段
|
|
|
- List<ApsProductDetailDo> apsProductDetailDos = BeanUtil.copyToList(apsProductDetailVoList, ApsProductDetailDo.class);
|
|
|
- Thread thread = new Thread(() -> setBlankColumn(apsProductionOrderDo, apsBlankOrderDoList, apsProductDetailDos, apsProductionMergeOrderDoList));
|
|
|
- thread.start();
|
|
|
}
|
|
|
|
|
|
if (req.getIsNeedPublish()) {
|
|
@@ -588,13 +594,20 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
|
|
|
throw new RuntimeException("执行流程失败,请刷新页面后重试");
|
|
|
}
|
|
|
}
|
|
|
+ // 提交事务
|
|
|
+ transactionManager.commit(status);
|
|
|
} catch (Exception e) {
|
|
|
log.error("异常信息:", e);
|
|
|
+ // 捕获异常并回滚事务
|
|
|
+ transactionManager.rollback(status);
|
|
|
throw e;
|
|
|
} finally {
|
|
|
log.debug("校验-订单提交完毕,从map中清空当前订单锁,订单ID:{}", id);
|
|
|
productOrderLock.remove(id);
|
|
|
}
|
|
|
+ //订单更新完后,更新坯料计划对应的字段
|
|
|
+ Thread thread = new Thread(() -> updateNeedUpdateColumnAll(id));
|
|
|
+ thread.start();
|
|
|
|
|
|
return R.ok();
|
|
|
}
|
|
@@ -1142,7 +1155,6 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- @Transactional
|
|
|
public R generalMsUpdate(OrderSaveOrUpdateVo req) {
|
|
|
MasterSlaveUpdateVo masterSlaveUpdate = req.getMasterSlaveUpdate();
|
|
|
String id = masterSlaveUpdate.getMasterUpdate().getColumnQueryTypes().get(0).getColumns().get(0).getValue();
|
|
@@ -1158,6 +1170,10 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
|
|
|
log.error("修改-该订单已被:{}提交", existingUser);
|
|
|
return R.error("该订单已被提交");
|
|
|
}
|
|
|
+ // 定义事务属性
|
|
|
+ TransactionDefinition definition = new DefaultTransactionDefinition();
|
|
|
+ // 开始事务
|
|
|
+ TransactionStatus status = transactionManager.getTransaction(definition);
|
|
|
try {
|
|
|
//数据库中的订单数据
|
|
|
ApsProductionOrderDo nowApsProductionOrderDo = this.getById(id);
|
|
@@ -1172,16 +1188,9 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
|
|
|
} catch (Exception e) {
|
|
|
throw new RuntimeException("更新订单信息错误,请刷新页面后重试");
|
|
|
}
|
|
|
- //订单更新完后,更新坯料计划对应的字段
|
|
|
//查询坯料计划
|
|
|
List<ApsBlankOrderDo> apsBlankOrderDoList = apsBlankOrderService.list(new LambdaQueryWrapper<ApsBlankOrderDo>().eq(ApsBlankOrderDo::getProductionorderid, id));
|
|
|
- //查询产品明细
|
|
|
- List<ApsProductDetailDo> apsProductDetailVoList = apsProductDetailService.list(new LambdaQueryWrapper<ApsProductDetailDo>().eq(ApsProductDetailDo::getMainid, id));
|
|
|
- //查询合并订单
|
|
|
- List<ApsProductionMergeOrderDo> apsProductionMergeOrderDoList = apsProductionMergeOrderService.list(new LambdaQueryWrapper<ApsProductionMergeOrderDo>().eq(ApsProductionMergeOrderDo::getMainid, id));
|
|
|
- oldOrder.setId(id);
|
|
|
- Thread thread = new Thread(() -> setBlankColumn(oldOrder, apsBlankOrderDoList, apsProductDetailVoList, apsProductionMergeOrderDoList));
|
|
|
- thread.start();
|
|
|
+
|
|
|
//更新订单的生产状态
|
|
|
if (!apsBlankOrderDoList.isEmpty()) {
|
|
|
CommonUpdateProductionStatusReq commonUpdateProductionStatusReq = new CommonUpdateProductionStatusReq();
|
|
@@ -1251,14 +1260,36 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
|
|
|
throw new RuntimeException("执行创建流程失败,请刷新页面后重试");
|
|
|
}
|
|
|
}
|
|
|
- } finally {
|
|
|
+ // 提交事务
|
|
|
+ transactionManager.commit(status);
|
|
|
+ }catch (Exception e){
|
|
|
+ // 捕获异常并回滚事务
|
|
|
+ transactionManager.rollback(status);
|
|
|
+ throw e;
|
|
|
+ }finally {
|
|
|
log.debug("修改-订单提交完毕,从map中清空当前订单锁,订单ID:{}", id);
|
|
|
productOrderLock.remove(id);
|
|
|
}
|
|
|
+ //订单更新完后,更新坯料计划对应的字段
|
|
|
+ Thread thread = new Thread(() -> updateNeedUpdateColumnAll(id));
|
|
|
+ thread.start();
|
|
|
return R.ok();
|
|
|
}
|
|
|
|
|
|
- private void setBlankColumn(ApsProductionOrderDo orderDo, List<ApsBlankOrderDo> apsBlankOrderDoList, List<ApsProductDetailDo> apsProductDetailVoList, List<ApsProductionMergeOrderDo> apsProductionMergeOrderDoList) {
|
|
|
+ private void updateNeedUpdateColumnAll(String orderId) {
|
|
|
+ //查询订单详情
|
|
|
+ ApsProductionOrderDo apsProductionOrderDo = this.getById(orderId);
|
|
|
+ //查询产品明细
|
|
|
+ List<ApsProductDetailDo> apsProductDetailVoList = apsProductDetailService.list(new LambdaQueryWrapper<ApsProductDetailDo>().eq(ApsProductDetailDo::getMainid, orderId));
|
|
|
+ //查询合并订单
|
|
|
+ List<ApsProductionMergeOrderDo> apsProductionMergeOrderDoList = apsProductionMergeOrderService.list(new LambdaQueryWrapper<ApsProductionMergeOrderDo>().eq(ApsProductionMergeOrderDo::getMainid, orderId));
|
|
|
+ //查询坯料计划列表
|
|
|
+ List<ApsBlankOrderDo> apsBlankOrderDoList = apsBlankOrderService.list(new LambdaQueryWrapper<ApsBlankOrderDo>().eq(ApsBlankOrderDo::getProductionorderid, orderId));
|
|
|
+ apsProductionOrderService.setBlankColumn(apsProductionOrderDo, apsBlankOrderDoList, apsProductDetailVoList, apsProductionMergeOrderDoList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ public void setBlankColumn(ApsProductionOrderDo orderDo, List<ApsBlankOrderDo> apsBlankOrderDoList, List<ApsProductDetailDo> apsProductDetailVoList, List<ApsProductionMergeOrderDo> apsProductionMergeOrderDoList) {
|
|
|
//根据订单和产品明细,及其合并订单,重新赋值 坯料计划和输出成品的冗余字段
|
|
|
String orderno = StringUtils.isNotBlank(orderDo.getOrderno()) ? orderDo.getOrderno() : "";
|
|
|
String customorderno = StringUtils.isNotBlank(orderDo.getCustomorderno()) ? orderDo.getCustomorderno() : "";
|