|
|
@@ -17,38 +17,30 @@ import com.dk.mdm.infrastructure.convert.ivt.OutboundConvert;
|
|
|
import com.dk.mdm.infrastructure.convert.ivt.OutboundItemConvert;
|
|
|
import com.dk.mdm.mapper.common.CommonMapper;
|
|
|
import com.dk.mdm.mapper.ivt.*;
|
|
|
-import com.dk.mdm.mapper.mst.CustomerMapper;
|
|
|
-import com.dk.mdm.mapper.sale.MultiOwnerMapper;
|
|
|
import com.dk.mdm.mapper.sale.OrderItemMapper;
|
|
|
import com.dk.mdm.mapper.sale.OrderMapper;
|
|
|
import com.dk.mdm.model.pojo.ivt.Inbound;
|
|
|
import com.dk.mdm.model.pojo.ivt.InboundItem;
|
|
|
import com.dk.mdm.model.pojo.ivt.Outbound;
|
|
|
import com.dk.mdm.model.pojo.ivt.OutboundItem;
|
|
|
-import com.dk.mdm.model.pojo.mst.Customer;
|
|
|
-import com.dk.mdm.model.pojo.pur.Purchase;
|
|
|
-import com.dk.mdm.model.pojo.pur.PurchaseItem;
|
|
|
-import com.dk.mdm.model.pojo.sale.MultiOwner;
|
|
|
import com.dk.mdm.model.pojo.sale.Order;
|
|
|
import com.dk.mdm.model.pojo.sale.OrderItem;
|
|
|
import com.dk.mdm.model.query.ivt.InventoryQuery;
|
|
|
import com.dk.mdm.model.query.ivt.OutboundItemQuery;
|
|
|
import com.dk.mdm.model.query.ivt.OutboundQuery;
|
|
|
-import com.dk.mdm.model.query.sale.OrderQuery;
|
|
|
import com.dk.mdm.model.response.ivt.InboundResponse;
|
|
|
import com.dk.mdm.model.response.ivt.InventoryResponse;
|
|
|
import com.dk.mdm.model.response.ivt.OutboundItemResponse;
|
|
|
import com.dk.mdm.model.response.ivt.OutboundResponse;
|
|
|
-import com.dk.mdm.model.response.pur.PurchaseItemResponse;
|
|
|
-import com.dk.mdm.model.response.pur.PurchaseResponse;
|
|
|
import com.dk.mdm.model.response.sale.OrderItemResponse;
|
|
|
import com.dk.mdm.model.response.sale.OrderResponse;
|
|
|
-import com.dk.mdm.model.vo.ivt.*;
|
|
|
-import com.dk.mdm.model.vo.mac.RecPayVO;
|
|
|
+import com.dk.mdm.model.vo.ivt.InboundItemVO;
|
|
|
+import com.dk.mdm.model.vo.ivt.InboundVO;
|
|
|
+import com.dk.mdm.model.vo.ivt.OutboundItemVO;
|
|
|
+import com.dk.mdm.model.vo.ivt.OutboundVO;
|
|
|
import com.dk.mdm.service.common.CommonService;
|
|
|
import com.dk.mdm.service.ivt.inventory.InventoryService;
|
|
|
import com.dk.mdm.service.mac.AccountService;
|
|
|
-import com.dk.mdm.service.mac.ReceiptService;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
@@ -122,9 +114,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
private InboundItemConvert inboundItemConvert;
|
|
|
|
|
|
@Autowired
|
|
|
- private ReceiptService receiptService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
private InventoryMapper inventoryMapper;
|
|
|
|
|
|
|
|
|
@@ -132,8 +121,8 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * @desc : 校验库存是否存在
|
|
|
- * @date : 2024/6/11 10:55
|
|
|
+ * @desc : 校验库存是否存在
|
|
|
+ * @date : 2024/6/11 10:55
|
|
|
* @author : 寇珊珊
|
|
|
*/
|
|
|
@Transactional(
|
|
|
@@ -151,10 +140,10 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
}
|
|
|
return inventoryResponse;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
- * @desc : 先查库存后出库
|
|
|
- * @date : 2024/6/11 9:30
|
|
|
+ * @desc : 先查库存后出库
|
|
|
+ * @date : 2024/6/11 9:30
|
|
|
* @author : 寇珊珊
|
|
|
*/
|
|
|
@Transactional(rollbackFor = {Exception.class})
|
|
|
@@ -178,14 +167,14 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
outboundItemVO.setMakeStaff(outboundVO.getMakeStaff());
|
|
|
}
|
|
|
//销售出库新建
|
|
|
- this.saleOrderOutboundInsert(outboundVO,true);
|
|
|
+ this.saleOrderOutboundInsert(outboundVO, true);
|
|
|
}
|
|
|
//先查库存锁表看能出库的数量有多少 可出库数量建一张已出库的单子并扣减库存,剩下的数量建一张出库中的单子
|
|
|
else {
|
|
|
//过滤外协品
|
|
|
for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
|
|
|
//商品id不为空才校验库存 因为为空是外协品
|
|
|
- if(outboundItemVO.getSkuId()!=null){
|
|
|
+ if (outboundItemVO.getSkuId() != null) {
|
|
|
//查询库存是否存在
|
|
|
InventoryResponse inventoryResponse = this.checkInventoryExist(outboundItemVO);
|
|
|
if (inventoryResponse != null) {
|
|
|
@@ -204,36 +193,36 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
}
|
|
|
}
|
|
|
//过滤出库存量足够的数据
|
|
|
- List<OutboundItemVO> itemList = outboundVO.getItemList().stream().filter(it -> it.getNotEnoughInventoryQty()==null ).collect(Collectors.toList());
|
|
|
+ List<OutboundItemVO> itemList = outboundVO.getItemList().stream().filter(it -> it.getNotEnoughInventoryQty() == null).collect(Collectors.toList());
|
|
|
|
|
|
//region 过滤出不够出库的每条明细数量 ------新建出库中数据
|
|
|
- List<OutboundItemVO> outboundIngList = outboundVO.getItemList().stream().filter(it -> it.getNotEnoughInventoryQty()!=null && it.getNotEnoughInventoryQty().compareTo(BigDecimal.ZERO)>0).collect(Collectors.toList());
|
|
|
- if(outboundIngList != null && outboundIngList.size()>0){
|
|
|
+ List<OutboundItemVO> outboundIngList = outboundVO.getItemList().stream().filter(it -> it.getNotEnoughInventoryQty() != null && it.getNotEnoughInventoryQty().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
|
|
|
+ if (outboundIngList != null && outboundIngList.size() > 0) {
|
|
|
//赋值箱片
|
|
|
for (OutboundItemVO outboundItemVO : outboundIngList) {
|
|
|
//箱
|
|
|
- outboundItemVO.setOutingBox(Integer.valueOf(outboundItemVO.getOutingQty().divide(outboundItemVO.getPackBox(),RoundingMode.DOWN).toString()) );
|
|
|
+ outboundItemVO.setOutingBox(Integer.valueOf(outboundItemVO.getOutingQty().divide(outboundItemVO.getPackBox(),0,RoundingMode.DOWN).toString()) );
|
|
|
//片
|
|
|
outboundItemVO.setOutingPiece(outboundItemVO.getOutingQty().remainder(outboundItemVO.getPackBox()));
|
|
|
}
|
|
|
outboundVO.setFlgAutoHandle(false);
|
|
|
outboundVO.setItemList(outboundIngList);
|
|
|
//销售出库新建
|
|
|
- this.saleOrderOutboundInsert(outboundVO,true);
|
|
|
+ this.saleOrderOutboundInsert(outboundVO, true);
|
|
|
}
|
|
|
//endregion
|
|
|
|
|
|
//region 库存够扣减的明细 -----------新建已出库数据并扣减库存
|
|
|
//销售出库新建
|
|
|
- if (itemList!=null && itemList.size() > 0) {
|
|
|
+ if (itemList != null && itemList.size() > 0) {
|
|
|
for (OutboundItemVO outboundItemVO : itemList) {
|
|
|
- if(outboundItemVO.getSkuId()!=null){ //过滤外协品 外协品没有箱片
|
|
|
+ if (outboundItemVO.getSkuId() != null) { //过滤外协品 外协品没有箱片
|
|
|
//箱
|
|
|
- outboundItemVO.setOutBox(Integer.valueOf(outboundItemVO.getOutingQty().divide(outboundItemVO.getPackBox(),RoundingMode.DOWN).toString()) );
|
|
|
+ outboundItemVO.setOutBox(Integer.valueOf(outboundItemVO.getOutingQty().divide(outboundItemVO.getPackBox(),0,RoundingMode.DOWN).toString()) );
|
|
|
//片
|
|
|
outboundItemVO.setOutPiece(outboundItemVO.getOutingQty().remainder(outboundItemVO.getPackBox()));
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
outboundVO.setFlgAutoHandle(true);
|
|
|
outboundVO.setItemList(itemList);
|
|
|
this.saleOrderOutboundInsert(outboundVO, true);
|
|
|
@@ -393,13 +382,13 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
* @author : 寇珊珊
|
|
|
*/
|
|
|
@Transactional(rollbackFor = {Exception.class})
|
|
|
- public ResponseResultVO<?> saleOrderOutboundInsert(OutboundVO outboundVO,Boolean orderTransmitFlag) {
|
|
|
+ public ResponseResultVO<?> saleOrderOutboundInsert(OutboundVO outboundVO, Boolean orderTransmitFlag) {
|
|
|
//region 如果没有客户id,要新建
|
|
|
// outboundVO = outCommon.insertCustomer(outboundVO);
|
|
|
//endregion
|
|
|
|
|
|
//region 查询当前公司的系统参数 自动办理信息 并赋值
|
|
|
- if(!orderTransmitFlag){
|
|
|
+ if (!orderTransmitFlag) {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
map.put("cpId", outboundVO.getCpId());
|
|
|
map.put("code", Constant.SystemConstant.IVT_001.getValue());
|
|
|
@@ -418,7 +407,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
BigDecimal sumIntoQty = BigDecimal.ZERO;
|
|
|
//出库金额
|
|
|
BigDecimal sumIntoPriceAmt = BigDecimal.ZERO;
|
|
|
- if(orderTransmitFlag){
|
|
|
+ if (orderTransmitFlag) {
|
|
|
sumIntoQty = outboundVO.getItemList().stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
sumIntoPriceAmt = outboundVO.getItemList().stream().map(OutboundItemVO::getPriceOut).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
}
|
|
|
@@ -504,7 +493,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage());
|
|
|
}
|
|
|
for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
|
|
|
- outboundItemVO.setItemId(null );
|
|
|
+ outboundItemVO.setItemId(null);
|
|
|
//region 将库存需要的参数赋值
|
|
|
outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
|
|
|
outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.SALE_ORDER.getValue());
|
|
|
@@ -587,9 +576,9 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//region 外协品新建外协入库单
|
|
|
//筛选出skuId为空的 走外协品逻辑
|
|
|
List<OutboundItemVO> outsideGoods = outboundVO.getItemList().stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
|
|
|
- for(int i=0;i<outsideGoods.size();i++){
|
|
|
- outsideGoods.get(i).setPriceOut( outsideGoods.get(i).getCostPrice()==null?BigDecimal.ZERO:outsideGoods.get(i).getCostPrice());
|
|
|
- }
|
|
|
+ for (int i = 0; i < outsideGoods.size(); i++) {
|
|
|
+ outsideGoods.get(i).setPriceOut(outsideGoods.get(i).getCostPrice() == null ? BigDecimal.ZERO : outsideGoods.get(i).getCostPrice());
|
|
|
+ }
|
|
|
//删除外协品生产外协入库单
|
|
|
this.deleteOutsideGoodsInto(outboundVO, outsideGoods);
|
|
|
//新建外协品生产外协入库单
|
|
|
@@ -599,7 +588,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//region 库存
|
|
|
//筛选出skuId不为空的 走库存
|
|
|
List<OutboundItemVO> invList = outboundVO.getItemList().stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
|
|
|
- if(invList!=null && invList.size() > 0){
|
|
|
+ if (invList != null && invList.size() > 0) {
|
|
|
Map<String, Object> invMap = new HashMap<>();
|
|
|
invMap.put("outDetail", invList);
|
|
|
inventoryService.operatingInventoryInformation(invMap);
|
|
|
@@ -646,11 +635,13 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//region 大编辑
|
|
|
else {
|
|
|
// region 更新客户信息
|
|
|
- outboundVO = outCommon.insertCustomer(outboundVO);
|
|
|
+// outboundVO = outCommon.insertCustomer(outboundVO);
|
|
|
// endregion
|
|
|
|
|
|
//region 根据id查询 并且明细数量金额 求和
|
|
|
OutboundResponse outboundResponse = outboundMapper.selectById(outboundVO.getOutId());
|
|
|
+ //根据总单id查询
|
|
|
+ List<OutboundItemResponse> outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(outboundResponse.getOutId()));
|
|
|
BigDecimal sumQty = outboundVO.getItemList().stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
BigDecimal sumAmt = outboundVO.getItemList().stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
//endregion
|
|
|
@@ -669,6 +660,11 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//根据id查询
|
|
|
OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
|
|
|
|
|
|
+ //region 反写订单总单 数据需要 把查出来的已出库数量用别的变量存起来
|
|
|
+ outboundItemVO.setUpdateOrderOutQty(outboundItemResponse.getOutQty());
|
|
|
+ outboundItemVO.setUpdateOrderOutAmt(outboundItemResponse.getOutAmt());
|
|
|
+ //endregion
|
|
|
+
|
|
|
//region 编辑明细
|
|
|
if (outboundItemVO.getItemId() != null) {
|
|
|
|
|
|
@@ -747,15 +743,12 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
}
|
|
|
}
|
|
|
//endregion
|
|
|
+
|
|
|
}
|
|
|
//endregion
|
|
|
|
|
|
//region 删除明细
|
|
|
- BigDecimal delOutQty = BigDecimal.ZERO;
|
|
|
- BigDecimal delOutAmt = BigDecimal.ZERO;
|
|
|
if (outboundVO.getDeleteItemList() != null && outboundVO.getDeleteItemList().size() > 0) {
|
|
|
- delOutQty = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
- delOutAmt = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) {
|
|
|
if (outboundItemVO.getItemId() != null) {
|
|
|
//region 将库存需要的参数赋值
|
|
|
@@ -807,26 +800,8 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//endregion
|
|
|
|
|
|
//region 修改销售总单
|
|
|
- if (outboundVO.getFromId() != null) {
|
|
|
- //根据id查询
|
|
|
- OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
|
|
|
- Order order = new Order();
|
|
|
- order.setOrderId(outboundVO.getFromId());
|
|
|
- order.setOutQty(outboundResponse.getOutQty().negate().add(sumQty).subtract(delOutQty));
|
|
|
- order.setOutAmt(outboundResponse.getOutAmt().negate().add(sumAmt).subtract(delOutAmt));
|
|
|
- order.setOutingQty(delOutQty);
|
|
|
- order.setOutingAmt(delOutAmt);
|
|
|
- //出库状态
|
|
|
- String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
|
|
|
- orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
|
|
|
- order.setOutStatus(outStatus);
|
|
|
- //修改
|
|
|
- int countRow = orderMapper.updateById(order);
|
|
|
- //数量超出
|
|
|
- if (countRow == 0) {
|
|
|
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+ this.updateOrderMessageByEdit(outboundResponse, outboundVO.getItemList(), outboundVO.getDeleteItemList());
|
|
|
//endregion
|
|
|
|
|
|
//region 应收记账
|
|
|
@@ -842,7 +817,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
this.deleteOutsideGoodsInto(outboundVO, outsideGoods);
|
|
|
//新建外协品生产外协入库单
|
|
|
this.insertOutsideGoodsInto(outboundVO, outsideGoods);
|
|
|
- if(outboundVO.getDeleteItemList() != null){
|
|
|
+ if (outboundVO.getDeleteItemList() != null) {
|
|
|
List<OutboundItemVO> delOutsideGoods = outboundVO.getDeleteItemList().stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
|
|
|
//删除外协品生产外协入库单
|
|
|
this.deleteOutsideGoodsInto(outboundVO, delOutsideGoods);
|
|
|
@@ -853,7 +828,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//筛选出skuId不为空的 走库存
|
|
|
List<OutboundItemVO> invList = outboundVO.getItemList().stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
|
|
|
List<OutboundItemVO> invDelList = null;
|
|
|
- if(outboundVO.getDeleteItemList() != null){
|
|
|
+ if (outboundVO.getDeleteItemList() != null) {
|
|
|
invDelList = outboundVO.getDeleteItemList().stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
|
|
|
}
|
|
|
if ((invList != null && invList.size() > 0) || (invDelList != null && invDelList.size() > 0)) {
|
|
|
@@ -878,6 +853,12 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
|
|
|
//region 编辑明细
|
|
|
if (outboundItemVO.getItemId() != null) {
|
|
|
+
|
|
|
+ //region 反写订单总单 数据需要 把查出来的出库中数量用别的变量存起来
|
|
|
+ outboundItemVO.setUpdateOrderOutingQty(outboundItemResponse.getOutingQty());
|
|
|
+ outboundItemVO.setUpdateOrderOutingAmt(outboundItemResponse.getOutingAmt());
|
|
|
+ //endregion
|
|
|
+
|
|
|
OutboundItem outboundItem = new OutboundItem();
|
|
|
outboundItem.setItemId(outboundItemResponse.getItemId());
|
|
|
outboundItem.setOutingQty(outboundItemResponse.getOutingQty());
|
|
|
@@ -892,6 +873,11 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
|
|
|
//region 新建明细
|
|
|
else {
|
|
|
+ //region 反写订单总单 数据需要 把查出来的出库中数量用别的变量存起来
|
|
|
+ outboundItemVO.setUpdateOrderOutingQty(outboundItemVO.getOutingQty());
|
|
|
+ outboundItemVO.setUpdateOrderOutingAmt(outboundItemVO.getOutingAmt());
|
|
|
+ //endregion
|
|
|
+
|
|
|
outboundItemVO
|
|
|
.setOutId(outboundItemVO.getOutId())
|
|
|
.setOutQty(BigDecimal.ZERO)
|
|
|
@@ -934,11 +920,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//endregion
|
|
|
|
|
|
//region 删除明细
|
|
|
- BigDecimal delOutQty = BigDecimal.ZERO;
|
|
|
- BigDecimal delOutAmt = BigDecimal.ZERO;
|
|
|
if (outboundVO.getDeleteItemList() != null && outboundVO.getDeleteItemList().size() > 0) {
|
|
|
- delOutQty = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
- delOutAmt = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) {
|
|
|
if (outboundItemVO.getItemId() != null) {
|
|
|
OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
|
|
|
@@ -983,32 +965,108 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
);
|
|
|
//endregion
|
|
|
|
|
|
- //region 修改采购总单
|
|
|
- if (outboundVO.getFromId() != null) {
|
|
|
+ //region 修改销售总单
|
|
|
+ this.updateOrderMessageByEdit(outboundResponse, outboundVO.getItemList(), outboundVO.getDeleteItemList());
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ return ResponseResultUtil.success(outboundVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc : 编辑销售出库修改销售订单信息
|
|
|
+ * @date : 2024/6/21 10:34
|
|
|
+ * @author : 寇珊珊
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = {Exception.class})
|
|
|
+ public void updateOrderMessageByEdit(OutboundResponse outboundResponse, List<OutboundItemVO> itemList, List<OutboundItemVO> deleteItemList) {
|
|
|
+ //出库明细汇总
|
|
|
+ Map<String, List<OutboundItemVO>> orderOutItemVOListMap = itemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getFromId));
|
|
|
+ //出库明细删除汇总
|
|
|
+ Map<String, List<OutboundItemVO>> delOrderOutItemVOListMap = deleteItemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getFromId));
|
|
|
+ //出库明细汇总循环
|
|
|
+ for (String fromId : orderOutItemVOListMap.keySet()) {
|
|
|
+ //出库明细删除汇总循环
|
|
|
+ for (String delFromId : delOrderOutItemVOListMap.keySet()) {
|
|
|
+ //新建出库明细来源Id = 删除出库明细来源Id
|
|
|
+ if (fromId.equals(delFromId)) {
|
|
|
+ //region 提取新建分组后的明细
|
|
|
+ List<OutboundItemVO> orderOutItemVOListGroup = orderOutItemVOListMap.get(fromId);
|
|
|
+ //分组后的明细 出库数量和金额总和
|
|
|
+ BigDecimal orderSumQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal orderSumAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ //分组后的明细 原出库数量和金额总和
|
|
|
+ BigDecimal updateOrderOutQty = BigDecimal.ZERO;
|
|
|
+ BigDecimal updateOrderOutAmt = BigDecimal.ZERO;
|
|
|
+ BigDecimal updateOrderOutingQty = BigDecimal.ZERO;
|
|
|
+ BigDecimal updateOrderOutingAmt = BigDecimal.ZERO;
|
|
|
+ //已出库
|
|
|
+ if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
|
|
|
+ updateOrderOutQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ updateOrderOutAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ //出库中
|
|
|
+ else {
|
|
|
+ updateOrderOutingQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ updateOrderOutingAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 提取删除分组后的明细
|
|
|
+ List<OutboundItemVO> delOrderOutItemVOListGroup = delOrderOutItemVOListMap.get(delFromId);
|
|
|
+ BigDecimal orderDelOutQty = BigDecimal.ZERO;
|
|
|
+ BigDecimal orderDelOutAmt = BigDecimal.ZERO;
|
|
|
+ //已出库
|
|
|
+ if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
|
|
|
+ orderDelOutQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ orderDelOutAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ //出库中
|
|
|
+ else if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus())) {
|
|
|
+ orderDelOutQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ orderDelOutAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 反写订单数据
|
|
|
//根据id查询
|
|
|
- OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
|
|
|
+ OrderResponse orderResponse = orderMapper.selectById(fromId);
|
|
|
Order order = new Order();
|
|
|
- order.setOrderId(outboundVO.getFromId());
|
|
|
- order.setOutingQty(outboundResponse.getOutingQty().negate().add(sumQty).subtract(delOutQty));
|
|
|
- order.setOutingAmt(outboundResponse.getOutingAmt().negate().add(sumAmt).subtract(delOutAmt));
|
|
|
- //出库状态
|
|
|
- String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
|
|
|
- orderResponse.getOutQty(), orderResponse.getSumQuantity());
|
|
|
- order.setOutStatus(outStatus);
|
|
|
+ order.setOrderId(fromId);
|
|
|
+ //已出库
|
|
|
+ if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
|
|
|
+ order.setOutQty(updateOrderOutQty.negate().add(orderSumQty).subtract(orderDelOutQty));
|
|
|
+ order.setOutAmt(updateOrderOutAmt.negate().add(orderSumAmt).subtract(orderDelOutAmt));
|
|
|
+ order.setOutingQty(orderDelOutQty);
|
|
|
+ order.setOutingAmt(orderDelOutAmt);
|
|
|
+ //出库状态
|
|
|
+ String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
|
|
|
+ orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
|
|
|
+ order.setOutStatus(outStatus);
|
|
|
+ }
|
|
|
+ //出库中
|
|
|
+ else if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus())) {
|
|
|
+ order.setOutingQty(updateOrderOutingQty.negate().add(orderSumQty).subtract(orderDelOutQty));
|
|
|
+ order.setOutingAmt(updateOrderOutingAmt.negate().add(orderSumQty).subtract(orderDelOutAmt));
|
|
|
+ //出库状态
|
|
|
+ String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
|
|
|
+ orderResponse.getOutQty(), orderResponse.getSumQuantity());
|
|
|
+ order.setOutStatus(outStatus);
|
|
|
+ }
|
|
|
//修改
|
|
|
int countRow = orderMapper.updateById(order);
|
|
|
//数量超出
|
|
|
if (countRow == 0) {
|
|
|
throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
|
|
|
}
|
|
|
+ //endregion
|
|
|
}
|
|
|
- //endregion
|
|
|
}
|
|
|
- //endregion
|
|
|
}
|
|
|
- //endregion
|
|
|
-
|
|
|
- return ResponseResultUtil.success(outboundVO);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1075,7 +1133,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
}
|
|
|
//endregion
|
|
|
|
|
|
- //region 修改入库总单
|
|
|
+ //region 修改出库总单
|
|
|
Outbound outbound = new Outbound();
|
|
|
outbound.setOutId(outboundResponse.getOutId());
|
|
|
outbound.setFlgValid(false);
|
|
|
@@ -1086,28 +1144,9 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//endregion
|
|
|
|
|
|
//region 修改销售总单
|
|
|
- if (outboundResponse.getFromId() != null) {
|
|
|
- //根据id查询
|
|
|
- OrderResponse orderResponse = orderMapper.selectById(outboundResponse.getFromId());
|
|
|
- Order order = new Order();
|
|
|
- order.setOrderId(outboundResponse.getFromId());
|
|
|
- order.setOutQty(outboundResponse.getOutQty().negate());
|
|
|
- order.setOutAmt(outboundResponse.getOutAmt().negate());
|
|
|
- //出库状态
|
|
|
- String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty(),
|
|
|
- orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
|
|
|
- order.setOutStatus(orderOutStatus);
|
|
|
- //修改
|
|
|
- int countRow = orderMapper.updateById(order);
|
|
|
- //数量超出
|
|
|
- if (countRow == 0) {
|
|
|
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ this.updateOrderMessageByRepeal(outboundResponse, outboundItemResponseList);
|
|
|
//endregion
|
|
|
|
|
|
-
|
|
|
//region 外协品新建外协入库单
|
|
|
//筛选出skuId为空的 走外协品逻辑
|
|
|
OutboundVO outboundVO = outboundConvert.convertResToVO(outboundResponse);
|
|
|
@@ -1120,7 +1159,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//region 修改库存
|
|
|
//筛选出skuId不为空的 走库存
|
|
|
List<OutboundItemResponse> invList = outboundItemResponseList.stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
|
|
|
- if(invList!=null && invList.size()>0) {
|
|
|
+ if (invList != null && invList.size() > 0) {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
map.put("delOutDetail", invList);
|
|
|
inventoryService.operatingInventoryInformation(map);
|
|
|
@@ -1183,32 +1222,77 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//endregion
|
|
|
|
|
|
//region 修改销售总单
|
|
|
- if (outboundResponse.getFromId() != null) {
|
|
|
- //根据id查询
|
|
|
- OrderResponse orderResponse = orderMapper.selectById(outboundResponse.getFromId());
|
|
|
- Order order = new Order();
|
|
|
- order.setOrderId(outboundResponse.getFromId());
|
|
|
- order.setOutingQty(outboundResponse.getOutingQty().negate());
|
|
|
- order.setOutingAmt(outboundResponse.getOutingAmt().negate());
|
|
|
+ this.updateOrderMessageByRepeal(outboundResponse, outboundItemResponseList);
|
|
|
+ //endregion
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ return ResponseResultUtil.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc : 作废销售出库修改销售订单信息
|
|
|
+ * @date : 2024/6/21 10:34
|
|
|
+ * @author : 寇珊珊
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = {Exception.class})
|
|
|
+ public void updateOrderMessageByRepeal(OutboundResponse outboundResponse, List<OutboundItemResponse> itemList) {
|
|
|
+ //出库明细汇总
|
|
|
+ Map<String, List<OutboundItemResponse>> orderOutItemListMap = itemList.stream().collect(Collectors.groupingBy(OutboundItemResponse::getFromId));
|
|
|
+ //出库明细汇总循环
|
|
|
+ for (String fromId : orderOutItemListMap.keySet()) {
|
|
|
+ //region 提取新建分组后的明细
|
|
|
+ //分组后的明细 原出库数量和金额总和
|
|
|
+ List<OutboundItemResponse> orderOutItemListGroup = orderOutItemListMap.get(fromId);
|
|
|
+ BigDecimal updateOrderOutQty = BigDecimal.ZERO;
|
|
|
+ BigDecimal updateOrderOutAmt = BigDecimal.ZERO;
|
|
|
+ BigDecimal updateOrderOutingQty = BigDecimal.ZERO;
|
|
|
+ BigDecimal updateOrderOutingAmt = BigDecimal.ZERO;
|
|
|
+ //已出库
|
|
|
+ if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
|
|
|
+ updateOrderOutQty = orderOutItemListGroup.stream().map(OutboundItemResponse::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ updateOrderOutAmt = orderOutItemListGroup.stream().map(OutboundItemResponse::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ //出库中
|
|
|
+ else {
|
|
|
+ updateOrderOutingQty = orderOutItemListGroup.stream().map(OutboundItemResponse::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ updateOrderOutingAmt = orderOutItemListGroup.stream().map(OutboundItemResponse::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 反写订单数据
|
|
|
+ //根据id查询
|
|
|
+ OrderResponse orderResponse = orderMapper.selectById(fromId);
|
|
|
+ Order order = new Order();
|
|
|
+ order.setOrderId(fromId);
|
|
|
+ //已出库
|
|
|
+ if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
|
|
|
+ order.setOutQty(updateOrderOutQty.negate());
|
|
|
+ order.setOutAmt(updateOrderOutAmt.negate());
|
|
|
+ //出库状态
|
|
|
+ String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty(),
|
|
|
+ orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
|
|
|
+ order.setOutStatus(orderOutStatus);
|
|
|
+ }
|
|
|
+ //出库中
|
|
|
+ else if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus())) {
|
|
|
+ order.setOutingQty(updateOrderOutingQty.negate());
|
|
|
+ order.setOutingAmt(updateOrderOutingAmt.negate());
|
|
|
//出库状态
|
|
|
String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
|
|
|
orderResponse.getOutQty(), orderResponse.getSumQuantity());
|
|
|
order.setOutStatus(orderOutStatus);
|
|
|
- //修改
|
|
|
- int countRow = orderMapper.updateById(order);
|
|
|
- //数量超出
|
|
|
- if (countRow == 0) {
|
|
|
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
|
|
|
- }
|
|
|
+ }
|
|
|
+ //修改
|
|
|
+ int countRow = orderMapper.updateById(order);
|
|
|
+ //数量超出
|
|
|
+ if (countRow == 0) {
|
|
|
+ throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
|
|
|
}
|
|
|
//endregion
|
|
|
}
|
|
|
- //endregion
|
|
|
-
|
|
|
- return ResponseResultUtil.success();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* @desc : 销售出库办理
|
|
|
* @date : 2024/3/7 15:47
|
|
|
@@ -1244,6 +1328,11 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
}
|
|
|
//endregion
|
|
|
|
|
|
+ //region 反写订单总单 数据需要 把查出来的出库中数量用别的变量存起来
|
|
|
+ outboundItemVO.setUpdateOrderOutingQty(outboundItemResponse.getOutingQty());
|
|
|
+ outboundItemVO.setUpdateOrderOutingAmt(outboundItemResponse.getOutingAmt());
|
|
|
+ //endregion
|
|
|
+
|
|
|
//region 编辑明细
|
|
|
if (outboundItemVO.getItemId() != null) {
|
|
|
outboundItemVO
|
|
|
@@ -1338,15 +1427,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//endregion
|
|
|
|
|
|
//region 删除明细
|
|
|
- BigDecimal delOutingQty = BigDecimal.ZERO;
|
|
|
- BigDecimal delOutingAmt = BigDecimal.ZERO;
|
|
|
- BigDecimal delOutQty = BigDecimal.ZERO;
|
|
|
- BigDecimal delOutAmt = BigDecimal.ZERO;
|
|
|
if (outboundVO.getDeleteItemList() != null && outboundVO.getDeleteItemList().size() > 0) {
|
|
|
- delOutingQty = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
- delOutingAmt = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
- delOutQty = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
- delOutAmt = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) {
|
|
|
if (outboundItemVO.getItemId() != null) {
|
|
|
|
|
|
@@ -1410,27 +1491,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//endregion
|
|
|
|
|
|
//region 修改销售订单订单
|
|
|
- if (outboundVO.getFromId() != null) {
|
|
|
- //根据id查询
|
|
|
- OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
|
|
|
- //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
|
|
|
- Order order = new Order();
|
|
|
- order.setOrderId(outboundVO.getFromId());
|
|
|
- order.setOutQty(sumOutQty.subtract(delOutQty));
|
|
|
- order.setOutAmt(sumOutAmt.subtract(delOutAmt));
|
|
|
- order.setOutingQty((outboundResponse.getOutingQty().add(delOutingQty)).negate());
|
|
|
- order.setOutingAmt((outboundResponse.getOutingAmt().add(delOutingAmt)).negate());
|
|
|
- //出库状态
|
|
|
- String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty().subtract(sumOutQty).add(delOutQty),
|
|
|
- orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
|
|
|
- order.setOutStatus(orderOutStatus);
|
|
|
- //修改
|
|
|
- int countRow = orderMapper.updateById(order);
|
|
|
- //数量超出
|
|
|
- if (countRow == 0) {
|
|
|
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
+ this.updateOrderMessageByHandle(outboundVO.getItemList(), outboundVO.getDeleteItemList());
|
|
|
//endregion
|
|
|
|
|
|
//region 应收记账
|
|
|
@@ -1438,10 +1499,10 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//endregion
|
|
|
|
|
|
//region 库存明细处理
|
|
|
- if(outboundVO.getItemList()!=null && outboundVO.getItemList().size()>0){
|
|
|
+ if (outboundVO.getItemList() != null && outboundVO.getItemList().size() > 0) {
|
|
|
Map<String, Object> map = new HashMap<>(); // 定义map值 修改库存用
|
|
|
// 获取外协数据
|
|
|
- List<OutboundItemVO> outsideGoods = outboundVO.getItemList().stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
|
|
|
+ List<OutboundItemVO> outsideGoods = outboundVO.getItemList().stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
|
|
|
//新建外协品生产外协入库单
|
|
|
this.insertOutsideGoodsInto(outboundVO, outsideGoods);
|
|
|
// 获取商品明细数据
|
|
|
@@ -1450,7 +1511,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
// 赋值修改明细
|
|
|
map.put("outDetail", invList);
|
|
|
// 删除的商品
|
|
|
- if(outboundVO.getDeleteItemList()!=null && outboundVO.getDeleteItemList().size()>0){
|
|
|
+ if (outboundVO.getDeleteItemList() != null && outboundVO.getDeleteItemList().size() > 0) {
|
|
|
// 获取外协删除数据
|
|
|
List<OutboundItemVO> invsideDelList = outboundVO.getDeleteItemList().stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
|
|
|
//删除外协品生产外协入库单
|
|
|
@@ -1468,6 +1529,66 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
return ResponseResultUtil.success(outboundVO);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @desc : 办理销售出库修改销售订单信息
|
|
|
+ * @date : 2024/6/21 15:13
|
|
|
+ * @author : 寇珊珊
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = {Exception.class})
|
|
|
+ public void updateOrderMessageByHandle(List<OutboundItemVO> itemList, List<OutboundItemVO> deleteItemList) {
|
|
|
+ //出库明细汇总
|
|
|
+ Map<String, List<OutboundItemVO>> orderOutItemVOListMap = itemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getFromId));
|
|
|
+ //出库明细删除汇总
|
|
|
+ Map<String, List<OutboundItemVO>> delOrderOutItemVOListMap = deleteItemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getFromId));
|
|
|
+ //出库明细汇总循环
|
|
|
+ for (String fromId : orderOutItemVOListMap.keySet()) {
|
|
|
+ //出库明细删除汇总循环
|
|
|
+ for (String delFromId : delOrderOutItemVOListMap.keySet()) {
|
|
|
+ //新建出库明细来源Id = 删除出库明细来源Id
|
|
|
+ if (fromId.equals(delFromId)) {
|
|
|
+ //region 提取新建分组后的明细
|
|
|
+ List<OutboundItemVO> orderOutItemVOListGroup = orderOutItemVOListMap.get(fromId);
|
|
|
+ //分组后的明细 出库数量和金额总和
|
|
|
+ BigDecimal orderSumQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal orderSumAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ //分组后的明细 原出库数量和金额总和
|
|
|
+ BigDecimal updateOrderOutingQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal updateOrderOutingAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 提取删除分组后的明细
|
|
|
+ List<OutboundItemVO> delOrderOutItemVOListGroup = delOrderOutItemVOListMap.get(delFromId);
|
|
|
+ BigDecimal orderDelOutingQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal orderDelOutingAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal orderDelOutQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal orderDelOutAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 反写订单数据
|
|
|
+ //根据id查询
|
|
|
+ OrderResponse orderResponse = orderMapper.selectById(fromId);
|
|
|
+ //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
|
|
|
+ Order order = new Order();
|
|
|
+ order.setOrderId(fromId);
|
|
|
+ order.setOutQty(orderSumQty.subtract(orderDelOutQty));
|
|
|
+ order.setOutAmt(orderSumAmt.subtract(orderDelOutAmt));
|
|
|
+ order.setOutingQty((updateOrderOutingQty.add(orderDelOutingQty)).negate());
|
|
|
+ order.setOutingAmt((updateOrderOutingAmt.add(orderDelOutingAmt)).negate());
|
|
|
+ //出库状态
|
|
|
+ String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty().subtract(orderSumQty).add(orderDelOutQty),
|
|
|
+ orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
|
|
|
+ order.setOutStatus(orderOutStatus);
|
|
|
+ //修改
|
|
|
+ int countRow = orderMapper.updateById(order);
|
|
|
+ //数量超出
|
|
|
+ if (countRow == 0) {
|
|
|
+ throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* @desc : 销售出库撤销
|
|
|
@@ -1480,6 +1601,10 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
OutboundResponse outboundResponse = outboundMapper.selectById(outboundVO.getOutId());
|
|
|
//endregion
|
|
|
|
|
|
+ //region根据总单id查明细
|
|
|
+ List<OutboundItemResponse> outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(outboundResponse.getOutId()));
|
|
|
+ //endregion
|
|
|
+
|
|
|
//region 应收反记账
|
|
|
if (outboundResponse.getReceivableId() != null) {
|
|
|
accountService.reverseReceivable(outboundResponse.getOutId(), Constant.InventoryDocCode.OUTBOUND.getTableName());
|
|
|
@@ -1487,28 +1612,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//endregion
|
|
|
|
|
|
//region 修改订单数据信息
|
|
|
- if (outboundResponse.getFromId() != null) {
|
|
|
- //赋值 (这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
|
|
|
- Order order = new Order();
|
|
|
- order.setOrderId(outboundResponse.getFromId());
|
|
|
- order.setOutingQty(outboundResponse.getOutQty());
|
|
|
- order.setOutingAmt(outboundResponse.getOutAmt());
|
|
|
- order.setOutQty(outboundResponse.getOutQty().negate());
|
|
|
- order.setOutAmt(outboundResponse.getOutAmt().negate());
|
|
|
- //根据id查询
|
|
|
- OrderResponse orderResponse = orderMapper.selectById(outboundResponse.getFromId());
|
|
|
- //出库状态
|
|
|
- String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
|
|
|
- orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
|
|
|
- order.setOutStatus(outStatus);
|
|
|
- //修改
|
|
|
- int countRow = orderMapper.updateById(order);
|
|
|
- //数量超出
|
|
|
- if (countRow == 0) {
|
|
|
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+ this.updateOrderMessageByCancel(outboundItemResponseList);
|
|
|
//endregion
|
|
|
|
|
|
//region 修改总单数据信息
|
|
|
@@ -1528,8 +1632,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//endregion
|
|
|
|
|
|
//region 明细数据
|
|
|
- //根据总单id查明细
|
|
|
- List<OutboundItemResponse> outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(outboundResponse.getOutId()));
|
|
|
for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) {
|
|
|
//region 修改销售订单明细数据信息
|
|
|
if (outboundItemResponse.getFromItemId() != null) {
|
|
|
@@ -1596,16 +1698,59 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
//region 调用库存
|
|
|
//筛选出skuId不为空的 走库存
|
|
|
List<OutboundItemResponse> invList = outboundItemResponseList.stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
|
|
|
- if(invList!=null && invList.size()>0) {
|
|
|
+ if (invList != null && invList.size() > 0) {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
map.put("delOutDetail", invList);
|
|
|
inventoryService.operatingInventoryInformation(map);
|
|
|
}
|
|
|
//endregion
|
|
|
+
|
|
|
return ResponseResultUtil.success();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * @desc : 撤销销售出库修改销售订单信息
|
|
|
+ * @date : 2024/6/21 16:00
|
|
|
+ * @author : 寇珊珊
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = {Exception.class})
|
|
|
+ public void updateOrderMessageByCancel(List<OutboundItemResponse> itemList) {
|
|
|
+ //出库明细汇总
|
|
|
+ Map<String, List<OutboundItemResponse>> orderOutItemListMap = itemList.stream().collect(Collectors.groupingBy(OutboundItemResponse::getFromId));
|
|
|
+ //出库明细汇总循环
|
|
|
+ for (String fromId : orderOutItemListMap.keySet()) {
|
|
|
+
|
|
|
+ //region 提取新建分组后的明细
|
|
|
+ List<OutboundItemResponse> orderOutItemListGroup = orderOutItemListMap.get(fromId);
|
|
|
+ //分组后的明细 出库数量和金额总和
|
|
|
+ BigDecimal orderSumQty = orderOutItemListGroup.stream().map(OutboundItemResponse::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal orderSumAmt = orderOutItemListGroup.stream().map(OutboundItemResponse::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ //endregion
|
|
|
+
|
|
|
+ //region 反写订单数据
|
|
|
+ //根据id查询
|
|
|
+ OrderResponse orderResponse = orderMapper.selectById(fromId);
|
|
|
+ Order order = new Order();
|
|
|
+ order.setOrderId(fromId);
|
|
|
+ order.setOutingQty(orderSumQty);
|
|
|
+ order.setOutingAmt(orderSumAmt);
|
|
|
+ order.setOutQty(orderSumAmt.negate());
|
|
|
+ order.setOutAmt(orderSumAmt.negate());
|
|
|
+ //出库状态
|
|
|
+ String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
|
|
|
+ orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
|
|
|
+ order.setOutStatus(outStatus);
|
|
|
+ //修改
|
|
|
+ int countRow = orderMapper.updateById(order);
|
|
|
+ //数量超出
|
|
|
+ if (countRow == 0) {
|
|
|
+ throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
|
|
|
+ }
|
|
|
+ //endregion
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* @desc : 出库状态通用(目前本页面)
|
|
|
* @date : 2024/3/9 8:59
|
|
|
* @author : 寇珊珊
|
|
|
@@ -1632,7 +1777,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
return outStatus;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* @desc : 上游单据入库状态通用(目前本页面)
|
|
|
* @date : 2024/4/1 17:14
|
|
|
@@ -1660,7 +1804,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
|
|
|
return outStatus;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* @desc : 获取单据信息(编辑用)
|
|
|
* @date : 2024/3/16 16:28
|