|
|
@@ -25,6 +25,7 @@ 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.query.ivt.InboundItemQuery;
|
|
|
import com.dk.mdm.model.query.ivt.InventoryQuery;
|
|
|
import com.dk.mdm.model.query.ivt.OutboundItemQuery;
|
|
|
import com.dk.mdm.model.query.ivt.OutboundQuery;
|
|
|
@@ -1891,6 +1892,173 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc : 销售出库一键作废
|
|
|
+ * @date : 2024/7/1 13:29
|
|
|
+ * @author : 寇珊珊
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = {Exception.class})
|
|
|
+ public ResponseResultVO<?> oneKeySaleOutboundRepeal(String orderId) {
|
|
|
+ List<OutboundItemResponse> outboundItemResponses = outboundItemMapper.selectByCond(new OutboundItemQuery().setFromId(orderId));
|
|
|
+ if (outboundItemResponses != null && outboundItemResponses.size() > 0) {
|
|
|
+ Map<String, List<OutboundItemResponse>> outboundItemVOMap = outboundItemResponses.stream().collect(Collectors.groupingBy(OutboundItemResponse::getOutId));
|
|
|
+ for (String str : outboundItemVOMap.keySet()) {
|
|
|
+ //region 查询总单 查询明细
|
|
|
+ //根据id查询 此条出库单的数据还未更改前的数据
|
|
|
+ OutboundResponse outboundResponse = outboundMapper.selectById(str);
|
|
|
+ //根据总单id查询
|
|
|
+ List<OutboundItemResponse> outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(outboundResponse.getOutId()));
|
|
|
+
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 已出库状态作废
|
|
|
+ if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
|
|
|
+ //region 应收反记账
|
|
|
+ if (outboundResponse.getReceivableId() != null) {
|
|
|
+ accountService.reverseReceivable(outboundResponse.getOutId(), Constant.InventoryDocCode.OUTBOUND.getTableName());
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 修改明细
|
|
|
+ for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) {
|
|
|
+ //region 将库存需要的参数赋值
|
|
|
+ outboundItemResponse.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
|
|
|
+ outboundItemResponse.setInventoryDocCode(Constant.InventoryDocCode.SALE_ORDER.getValue());
|
|
|
+ outboundItemResponse.setOutQty(outboundItemResponse.getOutQty());
|
|
|
+ outboundItemResponse.setOutAmt(outboundItemResponse.getOutAmt());
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //赋值 防止作废的单据查不到明细 故注掉下面代码
|
|
|
+// OutboundItem outboundItem = new OutboundItem();
|
|
|
+// outboundItem.setItemId(outboundItemResponse.getItemId());
|
|
|
+// outboundItem.setFlgValid(false);
|
|
|
+// //修改
|
|
|
+// outboundItemMapper.update(outboundItem,
|
|
|
+// new UpdateWrapper<OutboundItem>().lambda()
|
|
|
+// .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
|
|
|
+// );
|
|
|
+
|
|
|
+ //region 销售明细
|
|
|
+ if (outboundItemResponse.getFromItemId() != null) {
|
|
|
+ //根据id查询
|
|
|
+ OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemResponse.getFromItemId());
|
|
|
+ OrderItem orderItem = new OrderItem();
|
|
|
+ orderItem.setItemId(outboundItemResponse.getFromItemId());
|
|
|
+ orderItem.setOutQty(outboundItemResponse.getOutQty().negate());
|
|
|
+ orderItem.setOutAmt(outboundItemResponse.getOutAmt().negate());
|
|
|
+ //出库状态
|
|
|
+ String orderOutStatus = this.setOutStatus(orderItemResponse.getOutingQty(),
|
|
|
+ orderItemResponse.getOutQty().add(orderItem.getOutQty()), orderItemResponse.getItemQty());
|
|
|
+ orderItem.setOutStatus(orderOutStatus);
|
|
|
+ int countRow = orderItemMapper.updateById(orderItem);
|
|
|
+ //数量超出
|
|
|
+ if (countRow == 0) {
|
|
|
+ throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 修改出库总单
|
|
|
+ Outbound outbound = new Outbound();
|
|
|
+ outbound.setOutId(outboundResponse.getOutId());
|
|
|
+ outbound.setFlgValid(false);
|
|
|
+ //修改
|
|
|
+ outboundMapper.update(outbound,
|
|
|
+ new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
|
|
|
+ );
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 修改销售总单
|
|
|
+ this.updateOrderMessageByRepeal(outboundResponse, outboundItemResponseList);
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 外协品新建外协入库单
|
|
|
+ //筛选出skuId为空的 走外协品逻辑
|
|
|
+ OutboundVO outboundVO = outboundConvert.convertResToVO(outboundResponse);
|
|
|
+ List<OutboundItemResponse> outsideGoods = outboundItemResponseList.stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
|
|
|
+ List<OutboundItemVO> outsideGoodsVOList = outboundItemConvert.convertResListToVOList(outsideGoods);
|
|
|
+ //删除外协品生产外协入库单
|
|
|
+ this.deleteOutsideGoodsInto(outboundVO, outsideGoodsVOList);
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 修改库存
|
|
|
+ //筛选出skuId不为空的 走库存
|
|
|
+ List<OutboundItemResponse> invList = outboundItemResponseList.stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
|
|
|
+ if (invList != null && invList.size() > 0) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("delOutDetail", invList);
|
|
|
+ inventoryService.operatingInventoryInformation(map);
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 出库中、待出库状态作废
|
|
|
+ if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus()) ||
|
|
|
+ Constant.OutStatus.DAICHUKU.getName().equals(outboundResponse.getOutStatus())) {
|
|
|
+ //region 修改明细
|
|
|
+ for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) {
|
|
|
+ //region 修改明细
|
|
|
+ //赋值
|
|
|
+ OutboundItem outboundItem = new OutboundItem();
|
|
|
+ outboundItem.setItemId(outboundItemResponse.getItemId());
|
|
|
+ outboundItem.setOutingQty(BigDecimal.ZERO);
|
|
|
+ outboundItem.setOutingAmt(BigDecimal.ZERO);
|
|
|
+// outboundItem.setFlgValid(false);
|
|
|
+ //修改
|
|
|
+ outboundItemMapper.update(outboundItem,
|
|
|
+ new UpdateWrapper<OutboundItem>().lambda()
|
|
|
+ .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
|
|
|
+ );
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 销售明细
|
|
|
+ if (outboundItemResponse.getFromItemId() != null) {
|
|
|
+ //根据id查询
|
|
|
+ OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemResponse.getFromItemId());
|
|
|
+ OrderItem orderItem = new OrderItem();
|
|
|
+ orderItem.setItemId(outboundItemResponse.getFromItemId());
|
|
|
+ orderItem.setOutingQty(outboundItemResponse.getOutingQty().negate());
|
|
|
+ orderItem.setOutingAmt(outboundItemResponse.getOutingAmt().negate());
|
|
|
+ //出库状态
|
|
|
+ String orderOutStatus = this.setOutStatus(orderItemResponse.getOutingQty().add(orderItem.getOutingQty()),
|
|
|
+ orderItemResponse.getOutQty(), orderItemResponse.getItemQty());
|
|
|
+ orderItem.setOutStatus(orderOutStatus);
|
|
|
+ int countRow = orderItemMapper.updateById(orderItem);
|
|
|
+ //数量超出
|
|
|
+ if (countRow == 0) {
|
|
|
+ throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 修改出库总单
|
|
|
+ Outbound outbound = new Outbound();
|
|
|
+ outbound.setOutId(outboundResponse.getOutId());
|
|
|
+ outbound.setOutingQty(BigDecimal.ZERO);
|
|
|
+ outbound.setOutingAmt(BigDecimal.ZERO);
|
|
|
+ outbound.setFlgValid(false);
|
|
|
+ //修改
|
|
|
+ outboundMapper.update(outbound,
|
|
|
+ new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
|
|
|
+ );
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 修改销售总单
|
|
|
+ this.updateOrderMessageByRepeal(outboundResponse, outboundItemResponseList);
|
|
|
+ //endregion
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ResponseResultUtil.success();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @desc : 出库状态通用(目前本页面)
|
|
|
* @date : 2024/3/9 8:59
|