|
@@ -27,15 +27,14 @@ import com.hys.app.model.goods.dos.GoodsGalleryDO;
|
|
|
import com.hys.app.service.erp.*;
|
|
|
import com.hys.app.service.goods.GoodsGalleryManager;
|
|
|
import com.hys.app.service.kuaidiniao.GaoDeUtil;
|
|
|
+import com.hys.app.service.kuaidiniao.entity.PreOrderModelDTO;
|
|
|
import com.hys.app.service.kuaidiniao.entity.resReturnBackBase;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Optional;
|
|
|
-import java.util.Set;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -58,10 +57,10 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
private ProductManager productManager;
|
|
|
private OrderSendManager orderSendManager;
|
|
|
private OrderSendItemManager orderSendItemManager;
|
|
|
- private GoodsGalleryManager goodsGalleryManager;
|
|
|
private WarehouseManager warehouseManager;
|
|
|
private ItemSnCodeManager itemSnCodeManager;
|
|
|
private GoodsSnManager goodsSnManager;
|
|
|
+ private LockedStockDetailManager lockedStockDetailManager;
|
|
|
|
|
|
@Override
|
|
|
public WebPage<OrderVO> list(OrderQueryParams queryParams) {
|
|
@@ -192,6 +191,8 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
List<Long> collect = dos2.stream().map(OrderItemDO::getProductStockId).collect(Collectors.toList());
|
|
|
List<ProductStockDO> list = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect));
|
|
|
List<StockDTO> arrayList = new ArrayList<>();
|
|
|
+ //保存凍結库存明细
|
|
|
+ List<LockedStockDetailDO> detailDOS = new ArrayList<>();
|
|
|
for (OrderItemDO orderItemDO : dos2) {
|
|
|
StockDTO stockDTO = new StockDTO();
|
|
|
ProductStockDO byId = list.stream().filter(item -> item.getId().equals(orderItemDO.getProductStockId())).findFirst().get();
|
|
@@ -203,7 +204,16 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
stockDTO.setId(byId.getId());
|
|
|
stockDTO.setNum(orderItemDO.getNum());
|
|
|
arrayList.add(stockDTO);
|
|
|
+ LockedStockDetailDO detailDO = new LockedStockDetailDO();
|
|
|
+ detailDO.setProductStockId(orderItemDO.getProductStockId());
|
|
|
+ detailDO.setOrderId(id);
|
|
|
+ detailDO.setOrderItemId(orderItemDO.getId());
|
|
|
+ detailDO.setOrderType(DetailOrderTypeEnum.ORDER);
|
|
|
+ detailDO.setLockedNum(orderItemDO.getNum());
|
|
|
+ detailDO.setLockedTime(new Date());
|
|
|
+ detailDOS.add(detailDO);
|
|
|
}
|
|
|
+ lockedStockDetailManager.saveBatch(detailDOS);
|
|
|
productStockManager.updateLockedStock(arrayList);
|
|
|
aDo.setStatus(SaleOrderStatusEnum.TO_BE_SEND);
|
|
|
updateById(aDo);
|
|
@@ -211,6 +221,10 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
|
|
|
private void savaSendOrder(OrderDO aDo, Long warehouseId, List<OrderItemDO> dos, Boolean subtractStock) {
|
|
|
OrderSendDO orderSendDO = new OrderSendDO();
|
|
|
+ if (OrderSendTypeEnum.SELF_PICKUP.equals(aDo.getSendType())) {
|
|
|
+ Random random = new Random();
|
|
|
+ orderSendDO.setSelfPickupNum(100000 + random.nextInt(900000));
|
|
|
+ }
|
|
|
orderSendDO.setOrderId(aDo.getId());
|
|
|
orderSendDO.setSubtractStock(subtractStock);
|
|
|
orderSendDO.setWarehouseId(warehouseId);
|
|
@@ -237,10 +251,10 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
.eq(StrUtil.isNotEmpty(queryParams.getSn()), OrderSendDO::getSn, queryParams.getSn());
|
|
|
switch (queryParams.getSelectType()) {
|
|
|
case "to_be_send":
|
|
|
- wrapper.in(OrderSendDO::getStatus, SaleOrderSendStatusEnum.TO_BE_SEND.getValue());
|
|
|
+ wrapper.in(OrderSendDO::getStatus, SaleOrderSendStatusEnum.TO_BE_SEND);
|
|
|
break;
|
|
|
case "sending":
|
|
|
- wrapper.ne(OrderSendDO::getStatus, SaleOrderSendStatusEnum.TO_BE_SEND.getValue());
|
|
|
+ wrapper.ne(OrderSendDO::getStatus, SaleOrderSendStatusEnum.TO_BE_SEND);
|
|
|
break;
|
|
|
}
|
|
|
Page<OrderSendDO> paged = orderSendManager.page(page, wrapper);
|
|
@@ -251,13 +265,14 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void orderSend(Long sendOrderId, OrderSendDO orderSendDO) {
|
|
|
+ public void orderSend(Long sendOrderId, PreOrderModelDTO orderSendDO) {
|
|
|
OrderSendDO aDo = orderSendManager.getById(sendOrderId);
|
|
|
OrderDO orderDO = getById(aDo.getOrderId());
|
|
|
+ converter.copyProperties(aDo, orderSendDO, orderSendDO.getReceiver(), orderSendDO.getSender());
|
|
|
//根据订单查找到这个订单的所有货物扣减库存
|
|
|
List<OrderSendItemVO> list = orderSendDO.getOrderItemVOS();
|
|
|
List<OrderSendItemDO> selectList = orderSendItemManager.list(new LambdaQueryWrapper<OrderSendItemDO>().eq(OrderSendItemDO::getSendOrderId, sendOrderId));
|
|
|
- if (list.size() != selectList.size()){
|
|
|
+ if (list.size() != selectList.size()) {
|
|
|
throw new ServiceException("发货商品不能修改");
|
|
|
}
|
|
|
for (OrderSendItemDO itemDO : selectList) {
|
|
@@ -273,13 +288,22 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
//查找这些商品在指定仓库的库存,减去对应数量
|
|
|
List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
|
|
|
.eq(ProductStockDO::getWarehouseId, aDo.getWarehouseId()).in(ProductStockDO::getProductId, productId));
|
|
|
+ List<StockDTO> arrayList = new ArrayList<>();
|
|
|
for (ProductStockDO stockDO : stockDOList) {
|
|
|
Integer num = list.stream().filter(item -> item.getProductId().equals(stockDO.getProductId())).findFirst().get().getNum();
|
|
|
- stockDO.setActualStock(stockDO.getActualStock() - num);
|
|
|
- if (OrderTypeEnum.TO_C.equals(aDo.getOrderType())) {
|
|
|
- //如果是出租商品增加在途库存
|
|
|
- stockDO.setTransitStock(stockDO.getTransitStock() + num);
|
|
|
- }
|
|
|
+ StockDTO dto = new StockDTO();
|
|
|
+ dto.setId(stockDO.getId());
|
|
|
+ dto.setNum(-num);
|
|
|
+ arrayList.add(dto);
|
|
|
+ }
|
|
|
+ //更爱可用库存实际库存冻结库存
|
|
|
+ productStockManager.updateActualStock(arrayList, null);
|
|
|
+ productStockManager.updateLockedStock(arrayList);
|
|
|
+ //更改在途库存
|
|
|
+ if (OrderTypeEnum.TO_C.equals(aDo.getOrderType())) {
|
|
|
+ //如果是出租商品增加在途库存
|
|
|
+ arrayList.forEach(item -> item.setNum(-item.getNum()));
|
|
|
+ productStockManager.updateTransitStock(arrayList);
|
|
|
}
|
|
|
productStockManager.updateBatchById(stockDOList);
|
|
|
//生成出库单
|
|
@@ -354,7 +378,10 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
}
|
|
|
});
|
|
|
warehouseOutItemManager.saveBatch(beanList);
|
|
|
-
|
|
|
+ //先删除序列号和子表的关系(发货单可能保存过)
|
|
|
+ itemSnCodeManager.remove(new LambdaQueryWrapper<ItemSnCodeDO>()
|
|
|
+ .eq(ItemSnCodeDO::getType, "send")
|
|
|
+ .eq(ItemSnCodeDO::getEntryOutHouseId, sendOrderId));
|
|
|
//保存序列号和子表的关系
|
|
|
itemSnCodeManager.saveBatch(itemSnCodeDOS);
|
|
|
//更改发货单状态
|
|
@@ -400,7 +427,7 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
|
|
|
if (SaleOrderStatusEnum.SALE_AFTER_ING.equals(orderDO.getStatus()) ||
|
|
|
SaleOrderStatusEnum.SALE_AFTER_END.equals(orderDO.getStatus()) ||
|
|
|
- SaleOrderStatusEnum.SALE_AFTER_CANCEL.equals(orderDO.getStatus()) ){
|
|
|
+ SaleOrderStatusEnum.SALE_AFTER_CANCEL.equals(orderDO.getStatus())) {
|
|
|
orderVO.setScanOrderType("saleAfter");
|
|
|
scanOrder(orderVO);
|
|
|
}
|
|
@@ -411,10 +438,11 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
}
|
|
|
return orderVO;
|
|
|
}
|
|
|
- private void scanOrder(OrderVO orderVO){
|
|
|
+
|
|
|
+ private void scanOrder(OrderVO orderVO) {
|
|
|
List<OrderItemDO> list = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>()
|
|
|
.eq(OrderItemDO::getOrderId, orderVO.getId())
|
|
|
- .eq(orderVO.getScanOrderType().equals("saleAfter"),OrderItemDO::getHasSaleAfter,true));
|
|
|
+ .eq(orderVO.getScanOrderType().equals("saleAfter"), OrderItemDO::getHasSaleAfter, true));
|
|
|
List<Long> goodIdlist = list.stream().map(OrderItemDO::getProductId).collect(Collectors.toList());
|
|
|
// 查询订单项
|
|
|
List<OrderItemDTO> itemList = BeanUtils.toBean(list, OrderItemDTO.class);
|
|
@@ -431,7 +459,6 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void extension(Long orderId, OrderDTO orderDTO) {
|
|
@@ -492,5 +519,32 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void saveOrderSend(Long orderSendId, PreOrderModelDTO orderSendDO) {
|
|
|
+ OrderSendDO aDo = orderSendManager.getById(orderSendId);
|
|
|
+ converter.copyProperties(aDo, orderSendDO, orderSendDO.getReceiver(), orderSendDO.getSender());
|
|
|
+ orderSendManager.updateById(aDo);
|
|
|
+ List<ItemSnCodeDO> itemSnCodeDOS = new ArrayList<>();
|
|
|
+ if (CollUtil.isNotEmpty(orderSendDO.getOrderItemVOS())) {
|
|
|
+ for (OrderSendItemVO orderItemVO : orderSendDO.getOrderItemVOS()) {
|
|
|
+ //判断发货数量是不是和明细数量一致,不一样不让保存
|
|
|
+ ProductDO byId = productManager.getById(orderItemVO.getProductId());
|
|
|
+ if (CollUtil.isNotEmpty(orderItemVO.getSnCodeList())) {
|
|
|
+ for (GoodsSnDO snDO : orderItemVO.getSnCodeList()) {
|
|
|
+ //出库明细和序列号的关系
|
|
|
+ ItemSnCodeDO itemSnCodeDO = new ItemSnCodeDO();
|
|
|
+ itemSnCodeDO.setItemId(orderItemVO.getId());
|
|
|
+ itemSnCodeDO.setEntryOutHouseId(orderSendId);
|
|
|
+ itemSnCodeDO.setType("send");
|
|
|
+ itemSnCodeDO.setSnCodeId(snDO.getId());
|
|
|
+ itemSnCodeDOS.add(itemSnCodeDO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //保存序列号和子表的关系
|
|
|
+ itemSnCodeManager.saveBatch(itemSnCodeDOS);
|
|
|
+ }
|
|
|
}
|
|
|
|