|
@@ -1,13 +1,14 @@
|
|
package com.hys.app.service.erp.impl;
|
|
package com.hys.app.service.erp.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
-import cn.hutool.core.collection.ListUtil;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.hys.app.converter.erp.OrderConverter;
|
|
import com.hys.app.converter.erp.OrderConverter;
|
|
|
|
+import com.hys.app.framework.database.BaseQueryParam;
|
|
import com.hys.app.framework.database.WebPage;
|
|
import com.hys.app.framework.database.WebPage;
|
|
import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
|
|
import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
|
|
import com.hys.app.framework.exception.ServiceException;
|
|
import com.hys.app.framework.exception.ServiceException;
|
|
@@ -21,18 +22,22 @@ import com.hys.app.model.erp.dto.OrderItemDTO;
|
|
import com.hys.app.model.erp.dto.OrderQueryParams;
|
|
import com.hys.app.model.erp.dto.OrderQueryParams;
|
|
import com.hys.app.model.erp.dto.WarehouseOutShipDTO;
|
|
import com.hys.app.model.erp.dto.WarehouseOutShipDTO;
|
|
import com.hys.app.model.erp.enums.*;
|
|
import com.hys.app.model.erp.enums.*;
|
|
-import com.hys.app.model.erp.vo.*;
|
|
|
|
|
|
+import com.hys.app.model.erp.vo.GoodsVO;
|
|
|
|
+import com.hys.app.model.erp.vo.OrderSendItemVO;
|
|
|
|
+import com.hys.app.model.erp.vo.OrderVO;
|
|
|
|
+import com.hys.app.model.erp.vo.ProductVO;
|
|
|
|
+import com.hys.app.model.goods.dos.GoodsGalleryDO;
|
|
import com.hys.app.service.erp.*;
|
|
import com.hys.app.service.erp.*;
|
|
-import com.hys.app.service.kuaidiniao.KuaiDiNiaoService;
|
|
|
|
-import com.hys.app.service.kuaidiniao.entity.AddressDTO;
|
|
|
|
-import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
|
|
|
|
|
|
+import com.hys.app.service.goods.GoodsGalleryManager;
|
|
|
|
+import com.hys.app.service.kuaidiniao.GaoDeUtil;
|
|
|
|
+import com.hys.app.service.kuaidiniao.entity.resReturnBackBase;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.Optional;
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -56,6 +61,10 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
private ProductManager productManager;
|
|
private ProductManager productManager;
|
|
private OrderSendManager orderSendManager;
|
|
private OrderSendManager orderSendManager;
|
|
private OrderSendItemManager orderSendItemManager;
|
|
private OrderSendItemManager orderSendItemManager;
|
|
|
|
+ private GoodsGalleryManager goodsGalleryManager;
|
|
|
|
+ private WarehouseManager warehouseManager;
|
|
|
|
+ private ItemSnCodeManager itemSnCodeManager;
|
|
|
|
+ private GoodsSnManager goodsSnManager;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public WebPage<OrderVO> list(OrderQueryParams queryParams) {
|
|
public WebPage<OrderVO> list(OrderQueryParams queryParams) {
|
|
@@ -71,6 +80,7 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
throw new ServiceException("租用时间不能为空");
|
|
throw new ServiceException("租用时间不能为空");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ GaoDeUtil.getLongitudeLatitude(orderDTO.getProvinceCityAreaAddress());
|
|
OrderDO orderDO = BeanUtil.copyProperties(orderDTO, OrderDO.class);
|
|
OrderDO orderDO = BeanUtil.copyProperties(orderDTO, OrderDO.class);
|
|
orderDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.Order, orderDO.getDeptId()));
|
|
orderDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.Order, orderDO.getDeptId()));
|
|
// 保存订单
|
|
// 保存订单
|
|
@@ -84,21 +94,6 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
return orderDO.getId();
|
|
return orderDO.getId();
|
|
}
|
|
}
|
|
|
|
|
|
- private void checkStock(OrderDO orderDO, List<OrderItemDO> itemList) {
|
|
|
|
-
|
|
|
|
- for (OrderItemDO aDo : itemList) {
|
|
|
|
- ProductStockDO byId = productStockManager.getById(aDo.getProductStockId());
|
|
|
|
- if (!orderDO.getSubtractStock()) {
|
|
|
|
- if (aDo.getNum() > byId.getUsableStock()) {
|
|
|
|
- throw new ServiceException(aDo.getProductId() + "的可用库存数量不足");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- byId.setUsableStock(byId.getUsableStock() - aDo.getNum());
|
|
|
|
- productStockManager.updateById(byId);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public void edit(OrderDTO orderDTO) {
|
|
public void edit(OrderDTO orderDTO) {
|
|
@@ -107,6 +102,7 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
throw new ServiceException("租用时间不能为空");
|
|
throw new ServiceException("租用时间不能为空");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ GaoDeUtil.getLongitudeLatitude(orderDTO.getProvinceCityAreaAddress());
|
|
OrderDO orderDO = BeanUtil.copyProperties(orderDTO, OrderDO.class);
|
|
OrderDO orderDO = BeanUtil.copyProperties(orderDTO, OrderDO.class);
|
|
// 更新订单
|
|
// 更新订单
|
|
updateById(orderDO);
|
|
updateById(orderDO);
|
|
@@ -132,8 +128,12 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
ProductVO productVO = BeanUtil.copyProperties(productDOList.stream().filter(item -> item.getId().equals(dto.getProductId())).findFirst().get(), ProductVO.class);
|
|
ProductVO productVO = BeanUtil.copyProperties(productDOList.stream().filter(item -> item.getId().equals(dto.getProductId())).findFirst().get(), ProductVO.class);
|
|
dto.setProductVO(productVO);
|
|
dto.setProductVO(productVO);
|
|
GoodsVO goodsVO = BeanUtil.copyProperties(goodsMapper.selectById(productVO.getGoodsId()), GoodsVO.class);
|
|
GoodsVO goodsVO = BeanUtil.copyProperties(goodsMapper.selectById(productVO.getGoodsId()), GoodsVO.class);
|
|
|
|
+ // 商品图标
|
|
|
|
+ List<GoodsGalleryDO> gallerySmallList = goodsGalleryManager.list(id + 99);
|
|
|
|
+ goodsVO.setImageSmallList(gallerySmallList);
|
|
dto.setGoodsVO(goodsVO);
|
|
dto.setGoodsVO(goodsVO);
|
|
dto.setUsableStock(productStockManager.getById(dto.getProductStockId()).getUsableStock());
|
|
dto.setUsableStock(productStockManager.getById(dto.getProductStockId()).getUsableStock());
|
|
|
|
+
|
|
}
|
|
}
|
|
orderVO.setItemList(itemList);
|
|
orderVO.setItemList(itemList);
|
|
return orderVO;
|
|
return orderVO;
|
|
@@ -168,29 +168,67 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
throw new ServiceException("该订单已确认");
|
|
throw new ServiceException("该订单已确认");
|
|
}
|
|
}
|
|
List<OrderItemDO> dos = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, id));
|
|
List<OrderItemDO> dos = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, id));
|
|
- //校验库存
|
|
|
|
- checkStock(aDo, dos);
|
|
|
|
|
|
+
|
|
Set<Long> set = dos.stream().map(OrderItemDO::getWarehouseId).collect(Collectors.toSet());
|
|
Set<Long> set = dos.stream().map(OrderItemDO::getWarehouseId).collect(Collectors.toSet());
|
|
for (Long warehouseId : set) {
|
|
for (Long warehouseId : set) {
|
|
- OrderSendDO orderSendDO = new OrderSendDO();
|
|
|
|
- orderSendDO.setOrderId(id);
|
|
|
|
- orderSendDO.setWarehouseId(warehouseId);
|
|
|
|
- orderSendDO.setOrderType(aDo.getType());
|
|
|
|
- orderSendDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.OrderSend, 86L));
|
|
|
|
- orderSendManager.save(orderSendDO);
|
|
|
|
|
|
+ //如果允许负库存 把所有不够库存的做成一个发货单打上标记,剩下的做成一个发货单
|
|
List<OrderItemDO> collect = dos.stream().filter(item -> item.getWarehouseId().equals(warehouseId)).collect(Collectors.toList());
|
|
List<OrderItemDO> collect = dos.stream().filter(item -> item.getWarehouseId().equals(warehouseId)).collect(Collectors.toList());
|
|
- List<OrderSendItemDO> itemList = BeanUtils.toBean(collect, OrderSendItemDO.class);
|
|
|
|
- itemList.forEach(item ->{
|
|
|
|
- item.setOrderId(id);
|
|
|
|
- item.setSendOrderId(orderSendDO.getId());
|
|
|
|
- } );
|
|
|
|
- orderSendItemManager.saveBatch(itemList);
|
|
|
|
|
|
+ List<Long> stockIds = collect.stream().map(OrderItemDO::getProductStockId).collect(Collectors.toList());
|
|
|
|
+ List<ProductStockDO> list = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, stockIds));
|
|
|
|
+ List<OrderItemDO> arrayList = new ArrayList<>();
|
|
|
|
+ if (aDo.getSubtractStock()) {
|
|
|
|
+ for (OrderItemDO itemDO : collect) {
|
|
|
|
+ ProductStockDO stockDO = list.stream().filter(item -> item.getId().equals(itemDO.getProductStockId())).findFirst().get();
|
|
|
|
+ if (itemDO.getNum() - stockDO.getUsableStock() > 0) {
|
|
|
|
+ OrderItemDO orderItemDO = new OrderItemDO();
|
|
|
|
+ BeanUtil.copyProperties(itemDO, orderItemDO);
|
|
|
|
+ orderItemDO.setNum(itemDO.getNum() - stockDO.getUsableStock());
|
|
|
|
+ arrayList.add(orderItemDO);
|
|
|
|
+ itemDO.setNum(stockDO.getUsableStock());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ savaSendOrder(aDo, warehouseId, dos, false);
|
|
|
|
+ if (CollUtil.isNotEmpty(arrayList)) {
|
|
|
|
+ savaSendOrder(aDo, warehouseId, arrayList, true);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //校验库存
|
|
|
|
+ List<OrderItemDO> dos2 = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, id));
|
|
|
|
+ for (OrderItemDO orderItemDO : dos2) {
|
|
|
|
+ ProductStockDO byId = productStockManager.getById(orderItemDO.getProductStockId());
|
|
|
|
+ if (!aDo.getSubtractStock()) {
|
|
|
|
+ if (orderItemDO.getNum() > byId.getUsableStock()) {
|
|
|
|
+ throw new ServiceException(orderItemDO.getProductId() + "的可用库存数量不足");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ byId.setUsableStock(byId.getUsableStock() - orderItemDO.getNum());
|
|
|
|
+ productStockManager.updateById(byId);
|
|
}
|
|
}
|
|
-
|
|
|
|
aDo.setStatus(SaleOrderStatusEnum.TO_BE_SEND);
|
|
aDo.setStatus(SaleOrderStatusEnum.TO_BE_SEND);
|
|
updateById(aDo);
|
|
updateById(aDo);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private void savaSendOrder(OrderDO aDo, Long warehouseId, List<OrderItemDO> dos, Boolean subtractStock) {
|
|
|
|
+ OrderSendDO orderSendDO = new OrderSendDO();
|
|
|
|
+ orderSendDO.setOrderId(aDo.getId());
|
|
|
|
+ orderSendDO.setSubtractStock(subtractStock);
|
|
|
|
+ orderSendDO.setWarehouseId(warehouseId);
|
|
|
|
+ orderSendDO.setOrderType(aDo.getType());
|
|
|
|
+ orderSendDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.OrderSend, 86L));
|
|
|
|
+ orderSendManager.save(orderSendDO);
|
|
|
|
+ List<OrderItemDO> collect = dos.stream().filter(item -> item.getWarehouseId().equals(warehouseId)).collect(Collectors.toList());
|
|
|
|
+ List<OrderSendItemDO> itemList = BeanUtils.toBean(collect, OrderSendItemDO.class);
|
|
|
|
+ itemList.forEach(item -> {
|
|
|
|
+ item.setId(null);
|
|
|
|
+ item.setOrderId(aDo.getId());
|
|
|
|
+ item.setSendOrderId(orderSendDO.getId());
|
|
|
|
+ item.setOrderType(orderSendDO.getOrderType());
|
|
|
|
+ //如果是租赁订单把租赁表计和租赁返回时间塞入到发货列表详细里面,出库的时候统计在途库存会用到
|
|
|
|
+ });
|
|
|
|
+ orderSendItemManager.saveBatch(itemList);
|
|
|
|
+ }
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public IPage<OrderSendDO> hasSendOrder(OrderQueryParams queryParams) {
|
|
public IPage<OrderSendDO> hasSendOrder(OrderQueryParams queryParams) {
|
|
Page<OrderSendDO> page = new Page<>(queryParams.getPageNo(), queryParams.getPageSize());
|
|
Page<OrderSendDO> page = new Page<>(queryParams.getPageNo(), queryParams.getPageSize());
|
|
@@ -213,68 +251,125 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
- public void orderSend(Long sendOrderId) {
|
|
|
|
|
|
+ public void orderSend(Long sendOrderId, OrderSendDO orderSendDO) {
|
|
OrderSendDO aDo = orderSendManager.getById(sendOrderId);
|
|
OrderSendDO aDo = orderSendManager.getById(sendOrderId);
|
|
|
|
+ OrderDO orderDO = getById(aDo.getOrderId());
|
|
//根据订单查找到这个订单的所有货物扣减库存
|
|
//根据订单查找到这个订单的所有货物扣减库存
|
|
- List<OrderItemDO> orderItemDOS = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderSendId, sendOrderId));
|
|
|
|
-// List<Long> productId = orderItemDOS.stream().map(OrderItemDO::getProductId).collect(Collectors.toList());
|
|
|
|
-// //查找这些商品在指定仓库的库存,减去对应数量
|
|
|
|
-// List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
|
|
|
|
-// .eq(ProductStockDO::getWarehouseId, aDo.getWarehouseId()).in(ProductStockDO::getProductId, productId));
|
|
|
|
-// for (ProductStockDO stockDO : stockDOList) {
|
|
|
|
-// Integer num = orderItemDOS.stream().filter(item -> item.getProductId().equals(stockDO.getProductId())).findFirst().get().getNum();
|
|
|
|
-//
|
|
|
|
-// if (num < stockDO.getUsableStock()) {
|
|
|
|
-// if (OrderTypeEnum.TO_B.equals(aDo.getOrderType())) {
|
|
|
|
-// //扣减可用库存
|
|
|
|
-//// stockDO.setUsableStock(stockDO.getUsableStock() - num);
|
|
|
|
-// //扣减实际库存
|
|
|
|
-// stockDO.setActualStock(stockDO.getActualStock() - num);
|
|
|
|
-// } else if (OrderTypeEnum.TO_C.equals(aDo.getOrderType())) {
|
|
|
|
-// //扣减可用库存
|
|
|
|
-// stockDO.setActualStock(stockDO.getUsableStock() - num);
|
|
|
|
-// //增加在途库存
|
|
|
|
-// stockDO.setTransitStock(stockDO.getTransitStock() + num);
|
|
|
|
-// }
|
|
|
|
-// } else {
|
|
|
|
-// throw new ServiceException(stockDO.getProductId() + "的库存不够");
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-// productStockManager.updateBatchById(stockDOList);
|
|
|
|
|
|
+ List<OrderSendItemVO> list = orderSendDO.getOrderItemVOS();
|
|
|
|
+ List<OrderSendItemDO> selectList = orderSendItemManager.list(new LambdaQueryWrapper<OrderSendItemDO>().eq(OrderSendItemDO::getSendOrderId, sendOrderId));
|
|
|
|
+ for (OrderSendItemDO itemDO : selectList) {
|
|
|
|
+ Optional<OrderSendItemVO> first = list.stream().filter(item -> item.getId().equals(itemDO.getId())).findFirst();
|
|
|
|
+ if (!first.isPresent()) {
|
|
|
|
+ throw new ServiceException("发货商品不能修改");
|
|
|
|
+ }
|
|
|
|
+ if (first.get().getNum() != itemDO.getNum()) {
|
|
|
|
+ throw new ServiceException("发货数量不能修改");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ List<Long> productId = selectList.stream().map(OrderSendItemDO::getProductId).collect(Collectors.toList());
|
|
|
|
+ //查找这些商品在指定仓库的库存,减去对应数量
|
|
|
|
+ List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
|
|
|
|
+ .eq(ProductStockDO::getWarehouseId, aDo.getWarehouseId()).in(ProductStockDO::getProductId, productId));
|
|
|
|
+ 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);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ productStockManager.updateBatchById(stockDOList);
|
|
//生成出库单
|
|
//生成出库单
|
|
WarehouseOutDO outDO = new WarehouseOutDO();
|
|
WarehouseOutDO outDO = new WarehouseOutDO();
|
|
- outDO.setType(WarehouseOutTypeEnum.SALE_OUT);
|
|
|
|
|
|
+ if (OrderTypeEnum.TO_C.equals(orderDO.getType())) {
|
|
|
|
+ outDO.setType(WarehouseOutTypeEnum.HAIL_OUT);
|
|
|
|
+ } else if (OrderTypeEnum.TO_B.equals(orderDO.getType())) {
|
|
|
|
+ outDO.setType(WarehouseOutTypeEnum.SALE_OUT);
|
|
|
|
+ }
|
|
outDO.setOrderIdList(sendOrderId);
|
|
outDO.setOrderIdList(sendOrderId);
|
|
outDO.setOrderId(aDo.getOrderId());
|
|
outDO.setOrderId(aDo.getOrderId());
|
|
|
|
+ outDO.setHasSubmit("Y");
|
|
outDO.setWarehouseId(aDo.getWarehouseId());
|
|
outDO.setWarehouseId(aDo.getWarehouseId());
|
|
outDO.setNotes("发货单生成的出货单");
|
|
outDO.setNotes("发货单生成的出货单");
|
|
outDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.WarehouseOut, 66L));
|
|
outDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.WarehouseOut, 66L));
|
|
warehouseOutMapper.insert(outDO);
|
|
warehouseOutMapper.insert(outDO);
|
|
|
|
+ List<ItemSnCodeDO> itemSnCodeDOS = new ArrayList<>();
|
|
//保存出库单明细
|
|
//保存出库单明细
|
|
- List<WarehouseOutItemDO> beanList = BeanUtils.toBean(orderItemDOS, WarehouseOutItemDO.class);
|
|
|
|
|
|
+ List<WarehouseOutItemDO> beanList = BeanUtils.toBean(list, WarehouseOutItemDO.class);
|
|
|
|
+ //保存发货单明细和序列号的关系
|
|
|
|
+ for (OrderSendItemVO sendItemVO : list) {
|
|
|
|
+ //判断发货数量是不是和明细数量一致,不一样不让保存
|
|
|
|
+ ProductDO byId = productManager.getById(sendItemVO.getProductId());
|
|
|
|
+ if (byId.getHaveSn()) {
|
|
|
|
+ if (CollUtil.isEmpty(sendItemVO.getSnCodeList())) {
|
|
|
|
+ throw new ServiceException("有序列号的商品出库必须录入序列号");
|
|
|
|
+ }
|
|
|
|
+ if (sendItemVO.getSnCodeList().size() != sendItemVO.getNum()) {
|
|
|
|
+ throw new ServiceException("录入的序列号数量和发货数量必须一样多");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (CollUtil.isNotEmpty(sendItemVO.getSnCodeList())) {
|
|
|
|
+ for (GoodsSnDO snDO : sendItemVO.getSnCodeList()) {
|
|
|
|
+ //出库明细和序列号的关系
|
|
|
|
+ ItemSnCodeDO itemSnCodeDO = new ItemSnCodeDO();
|
|
|
|
+ itemSnCodeDO.setItemId(sendItemVO.getId());
|
|
|
|
+ itemSnCodeDO.setEntryOutHouseId(sendOrderId);
|
|
|
|
+ itemSnCodeDO.setType("send");
|
|
|
|
+ itemSnCodeDO.setSnCodeId(snDO.getId());
|
|
|
|
+ itemSnCodeDOS.add(itemSnCodeDO);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //保存出库单明细和序列号的关系
|
|
beanList.forEach(item -> {
|
|
beanList.forEach(item -> {
|
|
item.setWarehouseOutId(outDO.getId());
|
|
item.setWarehouseOutId(outDO.getId());
|
|
- Integer num = orderItemDOS.stream().filter(it -> it.getProductId().equals(item.getProductId())).findFirst().get().getNum();
|
|
|
|
|
|
+ Integer num = list.stream().filter(it -> it.getProductId().equals(item.getProductId())).findFirst().get().getNum();
|
|
item.setOutNum(num);
|
|
item.setOutNum(num);
|
|
|
|
+ //发货明细和sncode做关联
|
|
|
|
+ if (CollUtil.isNotEmpty(item.getSnCodeList())) {
|
|
|
|
+ for (GoodsSnDO snDO : item.getSnCodeList()) {
|
|
|
|
+ //出库明细和序列号的关系
|
|
|
|
+ ItemSnCodeDO itemSnCodeDO = new ItemSnCodeDO();
|
|
|
|
+ itemSnCodeDO.setItemId(item.getId());
|
|
|
|
+ itemSnCodeDO.setEntryOutHouseId(outDO.getId());
|
|
|
|
+ itemSnCodeDO.setType("out");
|
|
|
|
+ itemSnCodeDO.setSnCodeId(snDO.getId());
|
|
|
|
+ itemSnCodeDOS.add(itemSnCodeDO);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
});
|
|
});
|
|
warehouseOutItemManager.saveBatch(beanList);
|
|
warehouseOutItemManager.saveBatch(beanList);
|
|
- //更改订单状态56789=m+
|
|
|
|
|
|
|
|
|
|
+ //保存序列号和子表的关系
|
|
|
|
+ itemSnCodeManager.saveBatch(itemSnCodeDOS);
|
|
|
|
+ //更改发货单状态
|
|
aDo.setStatus(SaleOrderSendStatusEnum.SENDING);
|
|
aDo.setStatus(SaleOrderSendStatusEnum.SENDING);
|
|
aDo.setWarehouseOutId(outDO.getId());
|
|
aDo.setWarehouseOutId(outDO.getId());
|
|
orderSendManager.updateById(aDo);
|
|
orderSendManager.updateById(aDo);
|
|
|
|
+ //更改订单状态
|
|
|
|
+ orderDO.setStatus(SaleOrderStatusEnum.SENDING);
|
|
|
|
+ updateById(orderDO);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public OrderSendDO getSendOrderDetail(String id) {
|
|
public OrderSendDO getSendOrderDetail(String id) {
|
|
OrderSendDO byId = orderSendManager.getById(id);
|
|
OrderSendDO byId = orderSendManager.getById(id);
|
|
OrderDO aDo = getById(byId.getOrderId());
|
|
OrderDO aDo = getById(byId.getOrderId());
|
|
|
|
+ byId.setWarehouseVO(warehouseManager.getById(byId.getWarehouseId()));
|
|
List<OrderSendItemDO> list = orderSendItemManager.list(new LambdaQueryWrapper<OrderSendItemDO>().eq(OrderSendItemDO::getSendOrderId, id));
|
|
List<OrderSendItemDO> list = orderSendItemManager.list(new LambdaQueryWrapper<OrderSendItemDO>().eq(OrderSendItemDO::getSendOrderId, id));
|
|
List<OrderSendItemVO> bean = BeanUtils.toBean(list, OrderSendItemVO.class);
|
|
List<OrderSendItemVO> bean = BeanUtils.toBean(list, OrderSendItemVO.class);
|
|
for (OrderSendItemVO itemDO : bean) {
|
|
for (OrderSendItemVO itemDO : bean) {
|
|
itemDO.setProductVO(productManager.getById(itemDO.getProductId()));
|
|
itemDO.setProductVO(productManager.getById(itemDO.getProductId()));
|
|
itemDO.setGoodsVO(BeanUtil.copyProperties(goodsMapper.selectById(itemDO.getGoodsId()), GoodsVO.class));
|
|
itemDO.setGoodsVO(BeanUtil.copyProperties(goodsMapper.selectById(itemDO.getGoodsId()), GoodsVO.class));
|
|
- itemDO.setUseAbleStock(productStockManager.getById(itemDO.getProductStockId()).getUsableStock());
|
|
|
|
|
|
+ ProductStockDO productStockDO = productStockManager.getById(itemDO.getProductStockId());
|
|
|
|
+ itemDO.setUseAbleStock(productStockDO.getUsableStock());
|
|
|
|
+ itemDO.setActualStock(productStockDO.getActualStock());
|
|
|
|
+ List<ItemSnCodeDO> list2 = itemSnCodeManager.list(new LambdaQueryWrapper<ItemSnCodeDO>().eq(ItemSnCodeDO::getItemId, itemDO.getId()));
|
|
|
|
+ if (CollUtil.isNotEmpty(list2)) {
|
|
|
|
+ List<Long> collected = list2.stream().map(ItemSnCodeDO::getSnCodeId).collect(Collectors.toList());
|
|
|
|
+ itemDO.setSnCodeList(goodsSnManager.list(new LambdaQueryWrapper<GoodsSnDO>().in(GoodsSnDO::getId, collected)));
|
|
|
|
+ }
|
|
}
|
|
}
|
|
byId.setOrderVo(aDo);
|
|
byId.setOrderVo(aDo);
|
|
byId.setOrderItemVOS(bean);
|
|
byId.setOrderItemVOS(bean);
|
|
@@ -287,6 +382,10 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
if (ObjectUtil.isNull(orderDO)) {
|
|
if (ObjectUtil.isNull(orderDO)) {
|
|
throw new ServiceException("请录入正确的订单号");
|
|
throw new ServiceException("请录入正确的订单号");
|
|
}
|
|
}
|
|
|
|
+ if (!OrderTypeEnum.TO_C.equals(orderDO.getType())) {
|
|
|
|
+ throw new ServiceException("只有租赁订单才可做入库单");
|
|
|
|
+ }
|
|
|
|
+
|
|
OrderVO orderVO = BeanUtil.copyProperties(orderDO, OrderVO.class);
|
|
OrderVO orderVO = BeanUtil.copyProperties(orderDO, OrderVO.class);
|
|
List<OrderItemDO> list = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDO.getId()));
|
|
List<OrderItemDO> list = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDO.getId()));
|
|
List<Long> goodIdlist = list.stream().map(OrderItemDO::getProductId).collect(Collectors.toList());
|
|
List<Long> goodIdlist = list.stream().map(OrderItemDO::getProductId).collect(Collectors.toList());
|
|
@@ -346,11 +445,11 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
orderSendManager.save(orderSendDO);
|
|
orderSendManager.save(orderSendDO);
|
|
List<OrderItemDO> collect = sendNewList.stream().filter(item -> item.getWarehouseId().equals(warehouseId)).collect(Collectors.toList());
|
|
List<OrderItemDO> collect = sendNewList.stream().filter(item -> item.getWarehouseId().equals(warehouseId)).collect(Collectors.toList());
|
|
List<OrderSendItemDO> itemList = BeanUtils.toBean(collect, OrderSendItemDO.class);
|
|
List<OrderSendItemDO> itemList = BeanUtils.toBean(collect, OrderSendItemDO.class);
|
|
- itemList.forEach(item ->{
|
|
|
|
|
|
+ itemList.forEach(item -> {
|
|
item.setId(null);
|
|
item.setId(null);
|
|
item.setOrderId(orderId);
|
|
item.setOrderId(orderId);
|
|
item.setSendOrderId(orderSendDO.getId());
|
|
item.setSendOrderId(orderSendDO.getId());
|
|
- } );
|
|
|
|
|
|
+ });
|
|
orderSendItemManager.saveBatch(itemList);
|
|
orderSendItemManager.saveBatch(itemList);
|
|
}
|
|
}
|
|
List<OrderItemDO> itemList = BeanUtils.toBean(orderDTO.getItemList(), OrderItemDO.class);
|
|
List<OrderItemDO> itemList = BeanUtils.toBean(orderDTO.getItemList(), OrderItemDO.class);
|
|
@@ -358,5 +457,12 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
|
|
orderItemManager.remove(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderId));
|
|
orderItemManager.remove(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderId));
|
|
orderItemManager.saveBatch(itemList);
|
|
orderItemManager.saveBatch(itemList);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public resReturnBackBase toBeSendOrder(BaseQueryParam queryParam) {
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|