Просмотр исходного кода

Merge branch 'master' of http://git.dongkesoft.com:9001/iBOSS-2.0-Mini/iboss-server-mdm

# Conflicts:
#	src/main/java/com/dk/mdm/controller/common/CommonController.java
#	src/main/java/com/dk/mdm/mapper/common/CommonMapper.java
#	src/main/java/com/dk/mdm/mapper/common/CommonMapper.xml
#	src/main/java/com/dk/mdm/service/common/CommonService.java
于继渤 2 лет назад
Родитель
Сommit
c19312b3be

+ 0 - 11
src/main/java/com/dk/mdm/controller/sale/OutReturnController.java

@@ -60,17 +60,6 @@ public class OutReturnController{
     }
 
     /**
-     * @desc : 编辑退货
-     * @author : 付斌
-     * @date : 2023/1/9 10:49
-     */
-    @ApiOperation(value = "编辑退货", notes = "编辑退货")
-    @PostMapping({"update"})
-    public ResponseResultVO<?> update(@RequestBody OutReturnVO outReturnVO) {
-        return outReturnService.update(outReturnVO);
-    }
-
-    /**
      * @desc : 作废
      * @author : 付斌
      * @date : 2024-03-08 16:36

+ 216 - 215
src/main/java/com/dk/mdm/service/ivt/OutboundService.java

@@ -48,220 +48,221 @@ import java.util.stream.Collectors;
 @Transactional
 public class OutboundService extends BaseService<Outbound> {
 
-	@Override
-	public String getPrimaryKey() {
-		return "out_id";
-	}
-
-	@Override
-	public BaseMapper<Outbound> getRepository() {
-		return outboundMapper;
-	}
-
-	@Autowired
-	private OutboundMapper outboundMapper;
-
-	@Autowired
-	private OutboundItemService outboundItemService;
-
-	@Autowired
-	private OutboundItemMapper outboundItemMapper;
-
-	@Autowired
-	private OrderService orderService;
-
-	@Autowired
-	private OrderMapper orderMapper;
-
-	@Autowired
-	private OrderItemService orderItemService;
-
-	@Autowired
-	private OrderItemMapper orderItemMapper;
-
-	@Autowired
-	private CommonService commonService;
-
-	@Autowired
-	private OutboundConvert outboundConvert;
-
-	@Autowired
-	private OutboundItemConvert outboundItemConvert;
-
-	@Autowired
-	private PurchaseItemMapper purchaseItemMapper;
-
-	/**
-	 * @desc : 条件查询
-	 * @author : 付斌
-	 * @date : 2023/1/9 10:40
-	 */
-	@Pagination
-	public ResponseResultVO<PageList<OutboundResponse>> selectByCond(OutboundQuery outboundQuery) {
-		return super.mergeListWithCount(outboundQuery, outboundMapper.selectByCond(outboundQuery),
-				outboundMapper.countByCond(outboundQuery));
-	}
-
-	/**
-	 * @desc : 查询订单明细(货物、收款、附件)
-	 * @author : 付斌
-	 * @date : 2024-02-28 13:25
-	 */
-	@Pagination
-	public ResponseResultVO<Map<String, Object>> selectOutboundInfoById(String id) {
-		Map<String, Object> result = new HashMap<>();
-		// 商品明细
-		List<OutboundItemResponse> outboundItem = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(id));
-		result.put("outboundItem", outboundItem);
-
-		// 收款
-
-		// 附件
-		return ResponseResultUtil.success(result);
-	}
-	
-	/**
-	 * @desc : 新建方法
-	 * @author : 付斌
-	 * @date : 2023/1/9 10:49
-	 */
-	@Transactional(
-			rollbackFor = {Exception.class}
-	)
-	public ResponseResultVO<?> insert(OutboundVO outboundVO) {
-
-		// 获取单号
-		Map<String , Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.OUTBOUND.getName(),false);
-		outboundVO.setOutId(codeMap.get("outId").toString()).setOutNo(codeMap.get("outNote").toString())
-				.setOutType(Constant.OutType.SALE.getName());
-		// 转化实体
-		Outbound outbound = outboundConvert.convertToPo(outboundVO);
-		// 总单保存
-		super.insert(outbound);
-
-		// 明细保存
-		if (outboundVO.getItemList() != null && outboundVO.getItemList().size() > 0) {
-			double sumOutingQty = 0;	// 合计出库中数量
-			double sumOutingAmt = 0;	// 合计出库中金额
-			for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
-				OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
-				outboundItem.setOutId(outbound.getOutId()).setCpId(outbound.getCpId()).setOutStatus(Constant.OutStatus.CHUKUZHONG.getName())
-					.setOutType(Constant.OutType.SALE.getName());
-				outboundItemMapper.insert(outboundItem);
-
-				// 反写订单出库中数量、金额
-				OrderItem orderItem = orderItemMapper.selectById(outboundItem.getFromItemId());
-				// 如果商品数量小于订单+本次出库单上的出库中数量
-				if(orderItem.getItemQty().compareTo(orderItem.getOutingQty().add(outboundItem.getOutingQty())) == -1){
-					throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ITEMQTY_NO_LESS_OUTQTY.getMessage());
-				}else{
-					OrderItem orderItemUpdate = new OrderItem();
-					orderItemUpdate.setOutingQty(orderItem.getOutingQty().add(outboundItem.getOutingQty()))
-							.setOutingAmt(orderItem.getOutingAmt().add(outboundItem.getOutingAmt()))
-							.setItemId(orderItem.getItemId());
-					orderItemService.updateByUuid(orderItemUpdate);
-					// 累加出库中数量,金额
-					sumOutingQty += outboundItem.getOutingQty().doubleValue();
-					sumOutingAmt += outboundItem.getOutingAmt().doubleValue();
-				}
-			}
-			// 更新订单上的出库中数量,金额,状态
-			OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
-			Order orderUpdate = new Order();
-			orderUpdate.setOutingQty(orderResponse.getOutingQty().add(new BigDecimal(sumOutingQty)))
-					.setOutingAmt(orderResponse.getOutingAmt().add(new BigDecimal(sumOutingAmt)))
-					.setOutStatus(Constant.OutStatus.CHUKUZHONG.getName())
-					.setOrderId(outboundVO.getFromId());
-			orderService.updateByUuid(orderUpdate);
-		}
-		return ResponseResultUtil.success();
-	}
-
-	/**
-	 * @desc   : 获取订单信息(编辑用)
-	 * @author : 付斌
-	 * @date   : 2024-03-02 17:27
-	 */
-	public ResponseResultVO<?> getOutboundForUpdate(String id) {
-		Map<String, Object> outboundInfo = new HashMap<>();
-		OutboundResponse outboundResponse = outboundMapper.selectById(id);
-		outboundInfo.put("outbound", outboundResponse);
-
-		// 商品明细
-		List<OutboundItemResponse> outboundItemResponse = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(id));
-		outboundInfo.put("outboundItem", outboundItemResponse);
-		return ResponseResultUtil.success(outboundInfo);
-	}
-
-	/**
-	 * @desc : 编辑方法
-	 * @author : 付斌
-	 * @date : 2023/1/9 10:49
-	 */
-	@Transactional(
-			rollbackFor = {Exception.class}
-	)
-	public ResponseResultVO<Boolean> update(OutboundVO outboundVO) {
-		// 转化实体
-		Outbound outbound = outboundConvert.convertToPo(outboundVO);
-
-		// 编辑的
-		List<OutboundItemVO> editOutboundItemVOList = outboundVO.getItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
-		for (OutboundItemVO outboundItemVO : editOutboundItemVOList) {
-			// 出库中数量不能小于出库数量
-			if(outboundItemVO.getOutingQty().compareTo(outboundItemVO.getOutQty()) == -1){
-				throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.OUTINGQTY_NO_LESS_OUTQTY.getMessage());
-			} else {
-				OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
-				outboundItemService.updateByUuid(outboundItem);
-			}
-		}
-
-		return ResponseResultUtil.success(super.update(outbound, new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId,
-				UUID.fromString(outbound.getOutId()))));
-	}
-
-	/**
-	 * @desc   : 作废
-	 * @author : 付斌
-	 * @date   : 2024-03-08 16:38
-	 */
-	public ResponseResultVO<?> invalid(String id) {
-		return ResponseResultUtil.success();
-	}
-
-	/**
-	 * @desc : 采购退货出库
-	 * @author : 于继渤
-	 * @date : 2023/1/9 10:49
-	 */
-	@Transactional(
-			rollbackFor = {Exception.class}
-	)
-	public ResponseResultVO<?> insertOutBound(OutboundVO outboundVO) {
-
-		// 获取单号
-		Map<String , Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.OUTBOUND.getName(),false);
-		outboundVO.setOutId(codeMap.get("outId").toString()).setOutNo(codeMap.get("outNote").toString())
-				.setOutType(Constant.OutType.PURRETURN.getName());
-		// 转化实体
-		Outbound outbound = outboundConvert.convertToPo(outboundVO);
-		// 总单保存
-		super.insert(outbound);
-
-		// 明细保存
-		if (outboundVO.getItemList() != null && outboundVO.getItemList().size() > 0) {
-			double sumOutingQty = 0;	// 合计出库中数量
-			double sumOutingAmt = 0;	// 合计出库中金额
-			for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
-				OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
-				outboundItem.setOutId(outbound.getOutId()).setCpId(outbound.getCpId()).setOutStatus(Constant.OutStatus.CHUKUZHONG.getName())
-						.setOutType(Constant.OutType.PURRETURN.getName());
-				outboundItemMapper.insert(outboundItem);
+    @Override
+    public String getPrimaryKey() {
+        return "out_id";
+    }
+
+    @Override
+    public BaseMapper<Outbound> getRepository() {
+        return outboundMapper;
+    }
+
+    @Autowired
+    private OutboundMapper outboundMapper;
+
+    @Autowired
+    private OutboundItemService outboundItemService;
+
+    @Autowired
+    private OutboundItemMapper outboundItemMapper;
+
+    @Autowired
+    private OrderService orderService;
+
+    @Autowired
+    private OrderMapper orderMapper;
+
+    @Autowired
+    private OrderItemService orderItemService;
+
+    @Autowired
+    private OrderItemMapper orderItemMapper;
+
+    @Autowired
+    private CommonService commonService;
+
+    @Autowired
+    private OutboundConvert outboundConvert;
+
+    @Autowired
+    private OutboundItemConvert outboundItemConvert;
+
+    @Autowired
+    private PurchaseItemMapper purchaseItemMapper;
+
+    /**
+     * @desc : 条件查询
+     * @author : 付斌
+     * @date : 2023/1/9 10:40
+     */
+    @Pagination
+    public ResponseResultVO<PageList<OutboundResponse>> selectByCond(OutboundQuery outboundQuery) {
+        return super.mergeListWithCount(outboundQuery, outboundMapper.selectByCond(outboundQuery),
+                outboundMapper.countByCond(outboundQuery));
+    }
+
+    /**
+     * @desc : 查询订单明细(货物、收款、附件)
+     * @author : 付斌
+     * @date : 2024-02-28 13:25
+     */
+    @Pagination
+    public ResponseResultVO<Map<String, Object>> selectOutboundInfoById(String id) {
+        Map<String, Object> result = new HashMap<>();
+        // 商品明细
+        List<OutboundItemResponse> outboundItem = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(id));
+        result.put("outboundItem", outboundItem);
+
+        // 收款
+
+        // 附件
+        return ResponseResultUtil.success(result);
+    }
+
+    /**
+     * @desc : 新建方法
+     * @author : 付斌
+     * @date : 2023/1/9 10:49
+     */
+    @Transactional(
+            rollbackFor = {Exception.class}
+    )
+    public ResponseResultVO<?> insert(OutboundVO outboundVO) {
+
+        // 获取单号
+        Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.OUTBOUND.getName(), false);
+        outboundVO.setOutId(codeMap.get("outId").toString()).setOutNo(codeMap.get("outNote").toString())
+                .setOutType(Constant.OutType.SALE.getName());
+        // 转化实体
+        Outbound outbound = outboundConvert.convertToPo(outboundVO);
+        // 总单保存
+        super.insert(outbound);
+
+        // 明细保存
+        if (outboundVO.getItemList() != null && outboundVO.getItemList().size() > 0) {
+            double sumOutingQty = 0;    // 合计出库中数量
+            double sumOutingAmt = 0;    // 合计出库中金额
+            OrderItem orderItemForUpdate;
+            for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
+                OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                outboundItem.setOutId(outbound.getOutId()).setCpId(outbound.getCpId()).setOutStatus(Constant.OutStatus.CHUKUZHONG.getName())
+                        .setOutType(Constant.OutType.SALE.getName());
+                outboundItemMapper.insert(outboundItem);
+
+                // 反写订单出库中数量、金额
+                orderItemForUpdate = orderItemMapper.selectByIdForUpdate(outboundItem.getFromItemId());
+                // 如果商品数量小于订单+本次出库单上的出库中数量
+                if (orderItemForUpdate.getItemQty().compareTo(orderItemForUpdate.getOutingQty().add(outboundItem.getOutingQty())) == -1) {
+                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ITEMQTY_NO_LESS_OUTQTY.getMessage());
+                }
+                OrderItem orderItemUpdate = new OrderItem();
+                orderItemUpdate.setOutingQty(orderItemForUpdate.getOutingQty().add(outboundItem.getOutingQty()))
+                        .setOutingAmt(orderItemForUpdate.getOutingAmt().add(outboundItem.getOutingAmt()))
+                        .setItemId(orderItemForUpdate.getItemId());
+                orderItemService.updateByUuid(orderItemUpdate);
+                // 累加出库中数量,金额
+                sumOutingQty += outboundItem.getOutingQty().doubleValue();
+                sumOutingAmt += outboundItem.getOutingAmt().doubleValue();
+
+            }
+            // 更新订单上的出库中数量,金额,状态
+            Order orderForUpdate = orderMapper.selectByIdForUpdate(outboundVO.getFromId());
+            Order orderUpdate = new Order();
+            orderUpdate.setOutingQty(orderForUpdate.getOutingQty().add(new BigDecimal(sumOutingQty)))
+                    .setOutingAmt(orderForUpdate.getOutingAmt().add(new BigDecimal(sumOutingAmt)))
+                    .setOutStatus(Constant.OutStatus.CHUKUZHONG.getName())
+                    .setOrderId(outboundVO.getFromId());
+            orderService.updateByUuid(orderUpdate);
+        }
+        return ResponseResultUtil.success();
+    }
+
+    /**
+     * @desc : 编辑方法
+     * @author : 付斌
+     * @date : 2023/1/9 10:49
+     */
+    @Transactional(
+            rollbackFor = {Exception.class}
+    )
+    public ResponseResultVO<Boolean> update(OutboundVO outboundVO) {
+        // 转化实体
+        Outbound outbound = outboundConvert.convertToPo(outboundVO);
+
+        // 编辑的
+        List<OutboundItemVO> editOutboundItemVOList = outboundVO.getItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
+        for (OutboundItemVO outboundItemVO : editOutboundItemVOList) {
+            // 出库中数量不能小于出库数量
+            if (outboundItemVO.getOutingQty().compareTo(outboundItemVO.getOutQty()) == -1) {
+                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.OUTINGQTY_NO_LESS_OUTQTY.getMessage());
+            } else {
+                OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                outboundItemService.updateByUuid(outboundItem);
+            }
+        }
+
+        return ResponseResultUtil.success(super.update(outbound, new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId,
+                UUID.fromString(outbound.getOutId()))));
+    }
+
+    /**
+     * @desc : 作废
+     * @author : 付斌
+     * @date : 2024-03-08 16:38
+     */
+    public ResponseResultVO<?> invalid(String id) {
+        return ResponseResultUtil.success();
+    }
+
+    /**
+     * @desc : 获取订单信息(编辑用)
+     * @author : 付斌
+     * @date : 2024-03-02 17:27
+     */
+    public ResponseResultVO<?> getOutboundForUpdate(String id) {
+        Map<String, Object> outboundInfo = new HashMap<>();
+        OutboundResponse outboundResponse = outboundMapper.selectById(id);
+        outboundInfo.put("outbound", outboundResponse);
+
+        // 商品明细
+        List<OutboundItemResponse> outboundItemResponse = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(id));
+        outboundInfo.put("outboundItem", outboundItemResponse);
+        return ResponseResultUtil.success(outboundInfo);
+    }
+
+    /**
+     * @desc : 采购退货出库
+     * @author : 于继渤
+     * @date : 2023/1/9 10:49
+     */
+    @Transactional(
+            rollbackFor = {Exception.class}
+    )
+    public ResponseResultVO<?> insertOutBound(OutboundVO outboundVO) {
+
+        // 获取单号
+        Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.OUTBOUND.getName(), false);
+        outboundVO.setOutId(codeMap.get("outId").toString()).setOutNo(codeMap.get("outNote").toString())
+                .setOutType(Constant.OutType.PURRETURN.getName());
+        // 转化实体
+        Outbound outbound = outboundConvert.convertToPo(outboundVO);
+        // 总单保存
+        super.insert(outbound);
+
+        // 明细保存
+        if (outboundVO.getItemList() != null && outboundVO.getItemList().size() > 0) {
+            double sumOutingQty = 0;    // 合计出库中数量
+            double sumOutingAmt = 0;    // 合计出库中金额
+            for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
+                OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                outboundItem.setOutId(outbound.getOutId()).setCpId(outbound.getCpId()).setOutStatus(Constant.OutStatus.CHUKUZHONG.getName())
+                        .setOutType(Constant.OutType.PURRETURN.getName());
+                outboundItemMapper.insert(outboundItem);
 
 //				PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(outboundItem.getFromItemId());
 
-				// 如果商品数量小于订单+本次出库单上的出库中数量
+                // 如果商品数量小于订单+本次出库单上的出库中数量
 //				if(orderItem.getItemQty().compareTo(orderItem.getOutingQty().add(outboundItem.getOutingQty())) == -1){
 //					throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ITEMQTY_NO_LESS_OUTQTY.getMessage());
 //				}else{
@@ -274,7 +275,7 @@ public class OutboundService extends BaseService<Outbound> {
 //					sumOutingQty += outboundItem.getOutingQty().doubleValue();
 //					sumOutingAmt += outboundItem.getOutingAmt().doubleValue();
 //				}
-			}
+            }
 //			// 更新订单上的出库中数量,金额,状态
 //			OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
 //			Order orderUpdate = new Order();
@@ -283,8 +284,8 @@ public class OutboundService extends BaseService<Outbound> {
 //					.setOutStatus(Constant.OutStatus.CHUKUZHONG.getName())
 //					.setOrderId(outboundVO.getFromId());
 //			orderService.updateByUuid(orderUpdate);
-		}
-		return ResponseResultUtil.success();
-	}
+        }
+        return ResponseResultUtil.success();
+    }
 
 }

+ 6 - 3
src/main/java/com/dk/mdm/service/sale/OrderService.java

@@ -163,21 +163,23 @@ public class OrderService extends BaseService<Order> {
             rollbackFor = {Exception.class}
     )
     public ResponseResultVO<?> update(OrderVO orderVO) {
+        // 明细实体(避免并发,需要再查一遍)
+        OrderItem orderItemForUpdate;
         // 转化实体
         Order order = orderConvert.convertToPo(orderVO);
         //删除的
         List<OrderItemVO> deleteOrderItemVOList = orderVO.getDeleteItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
         if (deleteOrderItemVOList.size() > 0) {
             for (OrderItemVO orderItemVO : deleteOrderItemVOList) {
+                orderItemForUpdate = orderItemMapper.selectByIdForUpdate(orderItemVO.getItemId());
                 // 非待出库单据不能删除
-                if (!Constant.OutStatus.DAICHUKU.getName().equals(orderItemVO.getOutStatus())) {
+                if (!Constant.OutStatus.DAICHUKU.getName().equals(orderItemForUpdate.getOutStatus())) {
                     throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.NO_WAIT_INTO.getMessage());
                 } else {
                     orderItemMapper.deleteById(orderItemVO.getItemId());
                 }
             }
         }
-        // 编辑的(包括新增的)
         // 新增的
         List<OrderItemVO> insertOrderItemVOList = orderVO.getItemList().stream().filter(it -> it.getItemId() == null).collect(Collectors.toList());
         for (OrderItemVO orderItemVO : insertOrderItemVOList) {
@@ -188,8 +190,9 @@ public class OrderService extends BaseService<Order> {
         // 编辑的
         List<OrderItemVO> editOrderItemVOList = orderVO.getItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
         for (OrderItemVO orderItemVO : editOrderItemVOList) {
+            orderItemForUpdate = orderItemMapper.selectByIdForUpdate(orderItemVO.getItemId());
             // 商品数量不能小于出库中数量
-            if (orderItemVO.getItemQty().compareTo(orderItemVO.getOutingQty()) == -1) {
+            if (orderItemVO.getItemQty().compareTo(orderItemForUpdate.getOutingQty()) == -1) {
                 throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ITEMQTY_NO_LESS_OUTQTY.getMessage());
             } else {
                 OrderItem orderItem = orderItemConvert.convertToPo(orderItemVO);

+ 51 - 38
src/main/java/com/dk/mdm/service/sale/OutReturnService.java

@@ -11,9 +11,13 @@ import com.dk.common.response.ResponseResultUtil;
 import com.dk.common.response.ResponseResultVO;
 import com.dk.mdm.infrastructure.convert.sale.OutReturnConvert;
 import com.dk.mdm.infrastructure.convert.sale.OutReturnItemConvert;
+import com.dk.mdm.mapper.ivt.OutboundItemMapper;
+import com.dk.mdm.mapper.ivt.OutboundMapper;
 import com.dk.mdm.mapper.sale.OrderItemMapper;
 import com.dk.mdm.mapper.sale.OrderMapper;
 import com.dk.mdm.mapper.sale.OutReturnItemMapper;
+import com.dk.mdm.model.pojo.ivt.Outbound;
+import com.dk.mdm.model.pojo.ivt.OutboundItem;
 import com.dk.mdm.model.pojo.sale.Order;
 import com.dk.mdm.model.pojo.sale.OrderItem;
 import com.dk.mdm.model.pojo.sale.OutReturn;
@@ -23,12 +27,13 @@ import com.dk.common.service.BaseService;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.query.sale.OutReturnItemQuery;
 import com.dk.mdm.model.query.sale.OutReturnQuery;
-import com.dk.mdm.model.response.sale.OrderResponse;
 import com.dk.mdm.model.response.sale.OutReturnItemResponse;
 import com.dk.mdm.model.response.sale.OutReturnResponse;
 import com.dk.mdm.model.vo.sale.OutReturnItemVO;
 import com.dk.mdm.model.vo.sale.OutReturnVO;
 import com.dk.mdm.service.common.CommonService;
+import com.dk.mdm.service.ivt.OutboundItemService;
+import com.dk.mdm.service.ivt.OutboundService;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -76,6 +81,18 @@ public class OutReturnService extends BaseService<OutReturn> {
     private OrderItemMapper orderItemMapper;
 
     @Autowired
+    private OutboundService outboundService;
+
+    @Autowired
+    private OutboundMapper outboundMapper;
+
+    @Autowired
+    private OutboundItemService outboundItemService;
+
+    @Autowired
+    private OutboundItemMapper outboundItemMapper;
+
+    @Autowired
     private CommonService commonService;
 
     @Autowired
@@ -136,31 +153,55 @@ public class OutReturnService extends BaseService<OutReturn> {
         if (outReturnVO.getItemList() != null && outReturnVO.getItemList().size() > 0) {
             double sumReturnQty = 0;    // 合计已出库退货数量
             double sumReturnAmt = 0;    // 合计已出库退货金额
+            OrderItem orderItemForUpdate;
+            OutboundItem outboundItemForUpdate;
             for (OutReturnItemVO outReturnItemVO : outReturnVO.getItemList()) {
                 OutReturnItem outReturnItem = outReturnItemConvert.convertToPo(outReturnItemVO);
                 outReturnItem.setReturnId(outReturn.getReturnId()).setCpId(outReturn.getCpId()).setIntoStatus(Constant.IntoStatus.DAIRUKU.getName());
                 outReturnItemMapper.insert(outReturnItem);
 
-                // 反写订单已出库退货数量、金额
-                OrderItem orderItem = orderItemMapper.selectById(outReturnItem.getOrderItemId());
+                /*********************  反写出库已出库退货数量、金额 begin **********************/
+                outboundItemForUpdate = outboundItemMapper.selectByIdForUpdate(outReturnItem.getOutItemId());
+                // 如果出库数量小于订单上已退货+本次退货数量
+                if (outboundItemForUpdate.getOutQty().compareTo(outboundItemForUpdate.getReturnQty().add(outReturnItem.getItemQty())) == -1) {
+                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.OUTQTY_NO_LESS_RETURNQTY.getMessage());
+                }
+                OutboundItem outboundItemUpdate = new OutboundItem();
+                outboundItemUpdate.setReturnQty(outboundItemForUpdate.getReturnQty().add(outReturnItem.getItemQty()))
+                        .setReturnAmt(outboundItemForUpdate.getReturnAmt().add(outReturnItem.getItemAmt()))
+                        .setItemId(outboundItemForUpdate.getItemId());
+                outboundItemService.updateByUuid(outboundItemUpdate);
+
+                // 更新出库单上的退货数量,金额
+                Outbound outboundForUpdate = outboundMapper.selectByIdForUpdate(outReturnItem.getOutId());
+                Outbound outboundUpdate = new Outbound();
+                outboundUpdate.setReturnQty(outboundForUpdate.getReturnQty().add(outReturnItem.getItemQty()))
+                        .setReturnAmt(outboundForUpdate.getReturnAmt().add(outReturnItem.getItemAmt()))
+                        .setOutId(outReturnItem.getOutId());
+                outboundService.updateByUuid(outboundUpdate);
+                /*********************  反写出库已出库退货数量、金额 end **********************/
+
+                /*********************  反写订单明细已出库退货数量、金额 begin **********************/
+                orderItemForUpdate = orderItemMapper.selectByIdForUpdate(outReturnItem.getOrderItemId());
                 // 如果出库数量小于订单上已退货+本次退货数量
-                if (orderItem.getOutQty().compareTo(orderItem.getReturnQty().add(outReturnItem.getItemQty())) == -1) {
+                if (orderItemForUpdate.getOutQty().compareTo(orderItemForUpdate.getReturnQty().add(outReturnItem.getItemQty())) == -1) {
                     throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.OUTQTY_NO_LESS_RETURNQTY.getMessage());
                 }
                 OrderItem orderItemUpdate = new OrderItem();
-                orderItemUpdate.setReturnQty(orderItem.getReturnQty().add(outReturnItem.getItemQty()))
-                        .setReturnAmt(orderItem.getReturnAmt().add(outReturnItem.getItemAmt()))
-                        .setItemId(orderItem.getItemId());
+                orderItemUpdate.setReturnQty(orderItemForUpdate.getReturnQty().add(outReturnItem.getItemQty()))
+                        .setReturnAmt(orderItemForUpdate.getReturnAmt().add(outReturnItem.getItemAmt()))
+                        .setItemId(orderItemForUpdate.getItemId());
                 orderItemService.updateByUuid(orderItemUpdate);
                 // 累加退货数量,金额
                 sumReturnQty += outReturnItem.getItemQty().doubleValue();
                 sumReturnAmt += outReturnItem.getItemAmt().doubleValue();
+                /*********************  反写订单明细已出库退货数量、金额 end **********************/
             }
             // 更新订单上的退货数量,金额
-            OrderResponse orderResponse = orderMapper.selectById(outReturnVO.getOrderId());
+            Order orderForUpdate = orderMapper.selectByIdForUpdate(outReturnVO.getOrderId());
             Order orderUpdate = new Order();
-            orderUpdate.setReturnQty(orderResponse.getReturnQty().add(new BigDecimal(sumReturnQty)))
-                    .setReturnAmt(orderResponse.getReturnAmt().add(new BigDecimal(sumReturnAmt)))
+            orderUpdate.setReturnQty(orderForUpdate.getReturnQty().add(new BigDecimal(sumReturnQty)))
+                    .setReturnAmt(orderForUpdate.getReturnAmt().add(new BigDecimal(sumReturnAmt)))
                     .setOrderId(outReturnVO.getOrderId());
             orderService.updateByUuid(orderUpdate);
         }
@@ -168,34 +209,6 @@ public class OutReturnService extends BaseService<OutReturn> {
     }
 
     /**
-     * @desc : 编辑方法
-     * @author : 付斌
-     * @date : 2023/1/9 10:49
-     */
-    @Transactional(
-            rollbackFor = {Exception.class}
-    )
-    public ResponseResultVO<?> update(OutReturnVO outReturnVO) {
-        // 转化实体
-        OutReturn outReturn = outReturnConvert.convertToPo(outReturnVO);
-
-        // 编辑的
-        List<OutReturnItemVO> editOutReturnItemVOList = outReturnVO.getItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
-        for (OutReturnItemVO outReturnItemVO : editOutReturnItemVOList) {
-            // 入库中数量不能小于入库数量
-            if (outReturnItemVO.getIntoingQty().compareTo(outReturnItemVO.getIntoQty()) == -1) {
-                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INTOINGQTY_NO_LESS_INTOQTY.getMessage());
-            } else {
-                OutReturnItem outReturnItem = outReturnItemConvert.convertToPo(outReturnItemVO);
-                outReturnItemService.updateByUuid(outReturnItem);
-            }
-        }
-
-        return ResponseResultUtil.success(super.update(outReturn, new UpdateWrapper<OutReturn>().lambda().eq(OutReturn::getReturnId,
-                UUID.fromString(outReturn.getReturnId()))));
-    }
-
-    /**
      * @desc   : 作废
      * @author : 付斌
      * @date   : 2024-03-08 16:38