|
|
@@ -39,11 +39,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.UUID;
|
|
|
-import java.util.stream.Collectors;
|
|
|
+import java.util.*;
|
|
|
|
|
|
@Service
|
|
|
@Transactional
|
|
|
@@ -151,16 +147,16 @@ public class OutReturnService extends BaseService<OutReturn> {
|
|
|
|
|
|
// 明细保存
|
|
|
if (outReturnVO.getItemList() != null && outReturnVO.getItemList().size() > 0) {
|
|
|
- double sumReturnQty = 0; // 合计已出库退货数量
|
|
|
- double sumReturnAmt = 0; // 合计已出库退货金额
|
|
|
OrderItem orderItemForUpdate;
|
|
|
OutboundItem outboundItemForUpdate;
|
|
|
+ String outId = "";
|
|
|
for (OutReturnItemVO outReturnItemVO : outReturnVO.getItemList()) {
|
|
|
+ outId = outReturnItemVO.getOutId();
|
|
|
OutReturnItem outReturnItem = outReturnItemConvert.convertToPo(outReturnItemVO);
|
|
|
outReturnItem.setReturnId(outReturn.getReturnId()).setCpId(outReturn.getCpId()).setIntoStatus(Constant.IntoStatus.DAIRUKU.getName());
|
|
|
outReturnItemMapper.insert(outReturnItem);
|
|
|
|
|
|
- /********************* 反写出库已出库退货数量、金额 begin **********************/
|
|
|
+ /********************* 反写出库明细退货数量、金额 begin **********************/
|
|
|
outboundItemForUpdate = outboundItemMapper.selectByIdForUpdate(outReturnItem.getOutItemId());
|
|
|
// 如果出库数量小于订单上已退货+本次退货数量
|
|
|
if (outboundItemForUpdate.getOutQty().compareTo(outboundItemForUpdate.getReturnQty().add(outReturnItem.getItemQty())) == -1) {
|
|
|
@@ -171,17 +167,10 @@ public class OutReturnService extends BaseService<OutReturn> {
|
|
|
.setReturnAmt(outboundItemForUpdate.getReturnAmt().add(outReturnItem.getItemAmt()))
|
|
|
.setItemId(outboundItemForUpdate.getItemId());
|
|
|
outboundItemService.updateByUuid(outboundItemUpdate);
|
|
|
+ /********************* 反写出库明细退货数量、金额 end **********************/
|
|
|
|
|
|
- // 更新出库单上的退货数量,金额
|
|
|
- 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 **********************/
|
|
|
+ /********************* 反写订单明细退货数量、金额 begin **********************/
|
|
|
orderItemForUpdate = orderItemMapper.selectByIdForUpdate(outReturnItem.getOrderItemId());
|
|
|
// 如果出库数量小于订单上已退货+本次退货数量
|
|
|
if (orderItemForUpdate.getOutQty().compareTo(orderItemForUpdate.getReturnQty().add(outReturnItem.getItemQty())) == -1) {
|
|
|
@@ -192,33 +181,102 @@ public class OutReturnService extends BaseService<OutReturn> {
|
|
|
.setReturnAmt(orderItemForUpdate.getReturnAmt().add(outReturnItem.getItemAmt()))
|
|
|
.setItemId(orderItemForUpdate.getItemId());
|
|
|
orderItemService.updateByUuid(orderItemUpdate);
|
|
|
- // 累加退货数量,金额
|
|
|
- sumReturnQty += outReturnItem.getItemQty().doubleValue();
|
|
|
- sumReturnAmt += outReturnItem.getItemAmt().doubleValue();
|
|
|
- /********************* 反写订单明细已出库退货数量、金额 end **********************/
|
|
|
+ /********************* 反写订单明细退货数量、金额 end **********************/
|
|
|
}
|
|
|
+
|
|
|
+ // 计算出库明细的退货数量,金额合计
|
|
|
+ List<OutboundItem> outboundItemList = outboundItemMapper.selectByZIdForUpdate(outId);
|
|
|
+ OutboundItem outboundItem = outboundItemList.stream().reduce((x, y) -> {
|
|
|
+ OutboundItem item = new OutboundItem();
|
|
|
+ item.setReturnQty(x.getReturnQty().add(y.getReturnQty()));
|
|
|
+ item.setReturnAmt(x.getReturnAmt().add(y.getReturnAmt()));
|
|
|
+ return item;
|
|
|
+ }).get();
|
|
|
+ // 更新出库单上的退货数量,金额
|
|
|
+ Outbound outboundUpdate = new Outbound();
|
|
|
+ outboundUpdate.setReturnQty(outboundItem.getReturnQty()).setReturnAmt(outboundItem.getReturnAmt()).setOutId(outId);
|
|
|
+ outboundService.updateByUuid(outboundUpdate);
|
|
|
+
|
|
|
+ // 计算订单明细的退货数量,金额合计
|
|
|
+ List<OrderItem> orderItemList = orderItemMapper.selectByZIdForUpdate(outReturnVO.getOrderId());
|
|
|
+ OrderItem orderItem = orderItemList.stream().reduce((x, y) -> {
|
|
|
+ OrderItem item = new OrderItem();
|
|
|
+ item.setReturnQty(x.getReturnQty().add(y.getReturnQty()));
|
|
|
+ item.setReturnAmt(x.getReturnAmt().add(y.getReturnAmt()));
|
|
|
+ return item;
|
|
|
+ }).get();
|
|
|
// 更新订单上的退货数量,金额
|
|
|
- Order orderForUpdate = orderMapper.selectByIdForUpdate(outReturnVO.getOrderId());
|
|
|
Order orderUpdate = new Order();
|
|
|
- orderUpdate.setReturnQty(orderForUpdate.getReturnQty().add(new BigDecimal(sumReturnQty)))
|
|
|
- .setReturnAmt(orderForUpdate.getReturnAmt().add(new BigDecimal(sumReturnAmt)))
|
|
|
- .setOrderId(outReturnVO.getOrderId());
|
|
|
+ orderUpdate.setReturnQty(orderItem.getReturnQty()).setReturnAmt(orderItem.getReturnAmt()).setOrderId(outReturnVO.getOrderId());
|
|
|
orderService.updateByUuid(orderUpdate);
|
|
|
}
|
|
|
return ResponseResultUtil.success();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @desc : 作废
|
|
|
+ * @desc : 作废
|
|
|
* @author : 付斌
|
|
|
- * @date : 2024-03-08 16:38
|
|
|
+ * @date : 2024-03-08 16:38
|
|
|
*/
|
|
|
public ResponseResultVO<?> invalid(String id) {
|
|
|
OutReturn outReturnForUpdate = outReturnMapper.selectByIdForUpdate(id);
|
|
|
- // 如果数量不是0,不能作废
|
|
|
+ // 如果入库数量不是0,不能作废
|
|
|
if (outReturnForUpdate.getIntoQty().compareTo(BigDecimal.ZERO) != 0) {
|
|
|
throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISEXISTS_AFTER_OPERATE.getMessage());
|
|
|
}
|
|
|
+
|
|
|
+ // 查出并锁定所有的退货明细
|
|
|
+ List<OutReturnItem> outReturnItemList = outReturnItemMapper.selectByZIdForUpdate(id);
|
|
|
+ OutboundItem outboundItemForUpdate;
|
|
|
+ OrderItem orderItemForUpdate;
|
|
|
+ String outId = "";
|
|
|
+ String orderId = "";
|
|
|
+ for (OutReturnItem outReturnItemForUpdate : outReturnItemList) {
|
|
|
+ outId = outReturnItemForUpdate.getOutId();
|
|
|
+ orderId = outReturnItemForUpdate.getOrderId();
|
|
|
+ outboundItemForUpdate = outboundItemMapper.selectByIdForUpdate(outReturnItemForUpdate.getOutItemId());
|
|
|
+ // 更新出库明细退货数量
|
|
|
+ OutboundItem outboundItemUpdate = new OutboundItem();
|
|
|
+ outboundItemUpdate.setReturnQty(outboundItemForUpdate.getReturnQty().subtract(outReturnItemForUpdate.getItemQty()))
|
|
|
+ .setReturnAmt(outboundItemForUpdate.getReturnAmt().subtract(outReturnItemForUpdate.getItemAmt()))
|
|
|
+ .setItemId(outboundItemForUpdate.getItemId());
|
|
|
+ outboundItemService.updateByUuid(outboundItemUpdate);
|
|
|
+
|
|
|
+ orderItemForUpdate = orderItemMapper.selectByIdForUpdate(outReturnItemForUpdate.getOrderItemId());
|
|
|
+ // 更新订单明细退货数量
|
|
|
+ OrderItem orderItemUpdate = new OrderItem();
|
|
|
+ orderItemUpdate.setReturnQty(orderItemForUpdate.getReturnQty().subtract(outReturnItemForUpdate.getItemQty()))
|
|
|
+ .setReturnAmt(orderItemForUpdate.getReturnAmt().subtract(outReturnItemForUpdate.getItemAmt()))
|
|
|
+ .setItemId(orderItemForUpdate.getItemId());
|
|
|
+ orderItemService.updateByUuid(orderItemUpdate);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计算出库明细的退货数量,金额合计
|
|
|
+ List<OutboundItem> outboundItemList = outboundItemMapper.selectByZIdForUpdate(outId);
|
|
|
+ OutboundItem outboundItem = outboundItemList.stream().reduce((x, y) -> {
|
|
|
+ OutboundItem item = new OutboundItem();
|
|
|
+ item.setReturnQty(x.getReturnQty().add(y.getReturnQty()));
|
|
|
+ item.setReturnAmt(x.getReturnAmt().add(y.getReturnAmt()));
|
|
|
+ return item;
|
|
|
+ }).get();
|
|
|
+ // 更新出库单上的退货数量,金额
|
|
|
+ Outbound outboundUpdate = new Outbound();
|
|
|
+ outboundUpdate.setReturnQty(outboundItem.getReturnQty()).setReturnAmt(outboundItem.getReturnAmt()).setOutId(outId);
|
|
|
+ outboundService.updateByUuid(outboundUpdate);
|
|
|
+
|
|
|
+ // 计算订单明细的退货数量,金额合计
|
|
|
+ List<OrderItem> orderItemList = orderItemMapper.selectByZIdForUpdate(orderId);
|
|
|
+ OrderItem orderItem = orderItemList.stream().reduce((x, y) -> {
|
|
|
+ OrderItem item = new OrderItem();
|
|
|
+ item.setReturnQty(x.getReturnQty().add(y.getReturnQty()));
|
|
|
+ item.setReturnAmt(x.getReturnAmt().add(y.getReturnAmt()));
|
|
|
+ return item;
|
|
|
+ }).get();
|
|
|
+ // 更新订单上的退货数量,金额
|
|
|
+ Order orderUpdate = new Order();
|
|
|
+ orderUpdate.setReturnQty(orderItem.getReturnQty()).setReturnAmt(orderItem.getReturnAmt()).setOrderId(orderId);
|
|
|
+ orderService.updateByUuid(orderUpdate);
|
|
|
+
|
|
|
// 作废
|
|
|
OutReturn outReturnUpdate = new OutReturn();
|
|
|
outReturnUpdate.setFlgValid(false).setReturnId(id);
|