Browse Source

完善代码处理并发的情况

cxd 7 months ago
parent
commit
8575e30df3

+ 41 - 39
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderManagerImpl.java

@@ -116,49 +116,51 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void edit(OrderDTO orderDTO) {
-        //修改把原先订单所有的东西都置空在新增
-        orderSendManager.remove(new LambdaQueryWrapper<OrderSendDO>().eq(OrderSendDO::getOrderId, orderDTO.getId()));
-
-        //解冻库存
-        List<OrderItemDO> itemDOS = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDTO.getId()));
-        List<StockDTO> stockDTOS = new ArrayList<>();
-        for (OrderItemDO itemDO : itemDOS) {
-            StockDTO stockDTO = new StockDTO();
-            stockDTO.setId(itemDO.getProductStockId());
-            stockDTO.setNum(-itemDO.getNum());
-            stockDTOS.add(stockDTO);
-        }
-        productStockManager.updateLockedStock(stockDTOS);
-        orderItemManager.remove(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDTO.getId()));
-        List<LockedStockDetailDO> list = lockedStockDetailManager.list(new LambdaQueryWrapper<LockedStockDetailDO>().eq(LockedStockDetailDO::getOrderId, orderDTO.getId()));
-        //删除冻结明细
-        lockedStockDetailManager.remove(new LambdaQueryWrapper<LockedStockDetailDO>().eq(LockedStockDetailDO::getOrderId, orderDTO.getId()));
-        List<StockDTO> arrayList = new ArrayList<>();
-        list.forEach(item -> {
-            StockDTO dto = new StockDTO();
-            dto.setId(item.getProductStockId());
-            dto.setNum(-item.getLockedNum());
-            arrayList.add(dto);
-        });
-        //productStockManager.updateLockedStock(arrayList);
+        synchronized (orderDTO.getId().toString().intern()) {
+            //修改把原先订单所有的东西都置空在新增
+            orderSendManager.remove(new LambdaQueryWrapper<OrderSendDO>().eq(OrderSendDO::getOrderId, orderDTO.getId()));
+
+            //解冻库存
+            List<OrderItemDO> itemDOS = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDTO.getId()));
+            List<StockDTO> stockDTOS = new ArrayList<>();
+            for (OrderItemDO itemDO : itemDOS) {
+                StockDTO stockDTO = new StockDTO();
+                stockDTO.setId(itemDO.getProductStockId());
+                stockDTO.setNum(-itemDO.getNum());
+                stockDTOS.add(stockDTO);
+            }
+            productStockManager.updateLockedStock(stockDTOS);
+            orderItemManager.remove(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDTO.getId()));
+            List<LockedStockDetailDO> list = lockedStockDetailManager.list(new LambdaQueryWrapper<LockedStockDetailDO>().eq(LockedStockDetailDO::getOrderId, orderDTO.getId()));
+            //删除冻结明细
+            lockedStockDetailManager.remove(new LambdaQueryWrapper<LockedStockDetailDO>().eq(LockedStockDetailDO::getOrderId, orderDTO.getId()));
+            List<StockDTO> arrayList = new ArrayList<>();
+            list.forEach(item -> {
+                StockDTO dto = new StockDTO();
+                dto.setId(item.getProductStockId());
+                dto.setNum(-item.getLockedNum());
+                arrayList.add(dto);
+            });
+            //productStockManager.updateLockedStock(arrayList);
 
 
-        if (OrderTypeEnum.TO_C.equals(orderDTO.getType())) {
-            if (ObjectUtil.isNull(orderDTO.getStartTime())) {
-                throw new ServiceException("租用时间不能为空");
+            if (OrderTypeEnum.TO_C.equals(orderDTO.getType())) {
+                if (ObjectUtil.isNull(orderDTO.getStartTime())) {
+                    throw new ServiceException("租用时间不能为空");
+                }
             }
+            GaoDeUtil.getLongitudeLatitude(orderDTO.getProvinceCityAreaAddress());
+            OrderDO orderDO = BeanUtil.copyProperties(orderDTO, OrderDO.class);
+            orderDO.setUpdateTime(System.currentTimeMillis() / 1000);
+            // 更新订单
+            updateById(orderDO);
+            // 更新订单项
+            List<OrderItemDO> itemList = BeanUtils.toBean(orderDTO.getItemList(), OrderItemDO.class);
+
+            itemList.forEach(item -> item.setOrderId(orderDO.getId()));
+            orderItemManager.remove(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDTO.getId()));
+            orderItemManager.saveBatch(itemList);
         }
-        GaoDeUtil.getLongitudeLatitude(orderDTO.getProvinceCityAreaAddress());
-        OrderDO orderDO = BeanUtil.copyProperties(orderDTO, OrderDO.class);
-        orderDO.setUpdateTime(System.currentTimeMillis() / 1000);
-        // 更新订单
-        updateById(orderDO);
-        // 更新订单项
-        List<OrderItemDO> itemList = BeanUtils.toBean(orderDTO.getItemList(), OrderItemDO.class);
-
-        itemList.forEach(item -> item.setOrderId(orderDO.getId()));
-        orderItemManager.remove(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDTO.getId()));
-        orderItemManager.saveBatch(itemList);
     }
 
     @Override