|
|
@@ -45,12 +45,14 @@ import org.springblade.salesPart.goods.mapper.GoodsTypeMapper;
|
|
|
import org.springblade.salesPart.history.mapper.HistoryMapper;
|
|
|
import org.springblade.salesPart.order.mapper.OrderMapper;
|
|
|
import org.springblade.salesPart.order.service.IOrderItemsService;
|
|
|
+import org.springblade.salesPart.order.service.IOrderRecordService;
|
|
|
import org.springblade.salesPart.productLaunch.service.IProductLaunchService;
|
|
|
import org.springblade.salesPart.ship.mapper.ShipMapper;
|
|
|
import org.springblade.salesPart.ship.service.IShipItemsService;
|
|
|
import org.springblade.salesPart.ship.service.IShipService;
|
|
|
import org.springblade.salesPart.stock.service.IStockDescService;
|
|
|
import org.springblade.salesPart.storage.mapper.StorageDescMapper;
|
|
|
+import org.springblade.salesPart.vo.OrderRecordVO;
|
|
|
import org.springblade.salesPart.vo.ShipVO;
|
|
|
import org.springblade.system.entity.Dept;
|
|
|
import org.springblade.system.feign.ISysClient;
|
|
|
@@ -91,6 +93,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
*/
|
|
|
private final ISerialClient serialClient;
|
|
|
private final IOrderItemsService orderItemsService;
|
|
|
+ private final IOrderRecordService orderRecordService;
|
|
|
private final IShipItemsService shipItemsService;
|
|
|
private final OrderMapper orderMapper;
|
|
|
private final ISysClient sysClient;
|
|
|
@@ -690,6 +693,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
if (goodsNum.compareTo(sendNum) == 0) {//数量等于发货数量修改销售订单状态
|
|
|
order.setStatus(OrderTypeEnum.SHIPED.getType());
|
|
|
order.setXcxStatus(OrderTypeEnum.GOODSRECEIVED.getType());
|
|
|
+ order.setDeliveryBusinesDate(new Date());
|
|
|
orderMapper.updateById(order);
|
|
|
} else {
|
|
|
order.setStorageId(ship.getStorageId());
|
|
|
@@ -820,6 +824,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
}
|
|
|
order.setStatus(OrderTypeEnum.XSDFH.getType());
|
|
|
order.setXcxStatus(OrderTypeEnum.XSDFH.getType());
|
|
|
+ order.setDeliveryBusinesDate(null);
|
|
|
orderMapper.updateById(order);
|
|
|
} else {
|
|
|
throw new RuntimeException("数据异常请联系管理员");
|
|
|
@@ -1152,10 +1157,6 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
stockDesc.setVersion(stockOne.getVersion());
|
|
|
pjStockDescArrayListUpdate.add(stockDesc);
|
|
|
}
|
|
|
- /*boolean count = iStockDescService.saveOrUpdate(stockDesc);
|
|
|
- if (!count) {
|
|
|
- throw new RuntimeException(stockOne.getCname() + "该产品库存正在操作,请稍后刷新在进行操作!");
|
|
|
- }*/
|
|
|
}
|
|
|
if (msg1.length() > 0) {
|
|
|
throw new RuntimeException("商品:" + msg1 + "正在盘点中,操作失败");
|
|
|
@@ -1183,29 +1184,18 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
if (ObjectUtil.isEmpty(goodsDesc)) {
|
|
|
throw new RuntimeException("商品数据异常");
|
|
|
}
|
|
|
- /* ----------------------修改上架库存---------------------- */
|
|
|
- /* List<PjStockDesc> stockDescList = pjStockDescList.stream().filter(e -> e.getGoodsId().equals(goodsDesc.getId())).collect(Collectors.toList());
|
|
|
-
|
|
|
- //库存总数量
|
|
|
- BigDecimal balanceQuantity = stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- balanceQuantity = balanceQuantity.add(item.getSendNum());
|
|
|
|
|
|
- List<PjProductLaunch> pjProductLaunches = productLaunch.stream().filter(e -> e.getGoodsId().equals(goodsDesc.getId())).collect(Collectors.toList());
|
|
|
- //修改上架数量
|
|
|
- if (!pjProductLaunches.isEmpty()) {
|
|
|
- for (PjProductLaunch e : pjProductLaunches) {
|
|
|
- e.setInventory(balanceQuantity);
|
|
|
- pjProductLaunchList.add(e);
|
|
|
- }
|
|
|
- }*/
|
|
|
PjProductLaunch pjProductLaunches = productLaunch.stream()
|
|
|
.filter(i -> i.getGoodsId().equals(goodsDesc.getId())).findFirst().orElse(null);
|
|
|
//修改上架数量
|
|
|
if (pjProductLaunches != null) {
|
|
|
- pjProductLaunches.setInventory(pjProductLaunches.getInventory().add(item.getSendNum()));
|
|
|
+ if (ObjectUtils.isNotNull(pjProductLaunches.getInventory())){
|
|
|
+ pjProductLaunches.setInventory(pjProductLaunches.getInventory().add(item.getSendNum()));
|
|
|
+ }else{
|
|
|
+ pjProductLaunches.setInventory(item.getSendNum());
|
|
|
+ }
|
|
|
pjProductLaunchList.add(pjProductLaunches);
|
|
|
}
|
|
|
- /* ----------------------修改上架库存---------------------- */
|
|
|
}
|
|
|
R res = productLaunchService.updateBatchById(pjProductLaunchList);
|
|
|
if (!res.isSuccess()) {
|
|
|
@@ -1252,6 +1242,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
if (goodsNum.compareTo(sendNum) == 0) {//数量等于发货数量修改销售订单状态
|
|
|
order.setStatus(OrderTypeEnum.RECEIVEDGOODS.getType());
|
|
|
order.setXcxStatus(OrderTypeEnum.RECEIVEDGOODS.getType());
|
|
|
+ order.setDeliveryBusinesDate(new Date());
|
|
|
orderMapper.updateById(order);
|
|
|
} else {
|
|
|
order.setStorageId(ship.getStorageId());
|
|
|
@@ -1621,6 +1612,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
if (ObjectUtil.isNotEmpty(order)) {
|
|
|
order.setStatus(OrderTypeEnum.GOODSRECEIVED.getType());
|
|
|
order.setXcxStatus(OrderTypeEnum.GOODSRECEIVED.getType());
|
|
|
+ order.setDeliveryBusinesDate(null);
|
|
|
orderMapper.updateById(order);
|
|
|
} else {
|
|
|
throw new RuntimeException("数据异常请联系管理员");
|
|
|
@@ -1992,4 +1984,1263 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
return R.data(list);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R outboundWorkOrderReturns(String ids) {
|
|
|
+ List<Long> shipIds = Func.toLongList(ids);
|
|
|
+ List<PjShip> pjShipList = baseMapper.selectList(new LambdaQueryWrapper<PjShip>()
|
|
|
+ .eq(PjShip::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjShip::getIsDeleted, 0)
|
|
|
+ .apply("find_in_set(id,'" + ids + "')"));
|
|
|
+ List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
|
|
|
+ List<PjShip> pjShips = new ArrayList<>();
|
|
|
+ if (!pjShipList.isEmpty()) {
|
|
|
+ List<Long> ordIds = pjShipList.stream().map(PjShip::getOrdId).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+ pjOrderItemsList = orderItemsService.list(new QueryWrapper<PjOrderItems>()
|
|
|
+ .in("pid", ordIds)
|
|
|
+ .eq("is_deleted", 0)
|
|
|
+ .apply("goods_num != send_num")
|
|
|
+ .eq("tenant_id", AuthUtil.getTenantId()));
|
|
|
+ }
|
|
|
+ List<OrderRecord> orderRecordList = new ArrayList<>();
|
|
|
+ for (Long id : shipIds) {
|
|
|
+ //获得出库任务数据
|
|
|
+ PjShip rwShip = pjShipList.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null);
|
|
|
+ if (rwShip == null) {
|
|
|
+ throw new RuntimeException("数据异常 请联系管理员");
|
|
|
+ }
|
|
|
+
|
|
|
+ //新建出库工单
|
|
|
+ PjShip gdShip = new PjShip();
|
|
|
+ // 获取系统编号
|
|
|
+ R billNo = serialClient.getBillNo(OrderTypeEnum.THSHGD.getType(), OrderTypeEnum.THSHGD.getType(), OrderTypeEnum.THSHGD.getType());
|
|
|
+ if (billNo.getCode() != 200) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return R.fail(500, "生成系统编号失败");
|
|
|
+ }
|
|
|
+ BeanUtil.copyProperties(rwShip, gdShip);
|
|
|
+
|
|
|
+ gdShip.setId(null);
|
|
|
+ gdShip.setBillno((String) billNo.getData());
|
|
|
+ gdShip.setStatusName(OrderTypeEnum.TREATWAREHOUSING.getType());
|
|
|
+ gdShip.setTenantId(AuthUtil.getTenantId());
|
|
|
+ gdShip.setBizTypeName(OrderTypeEnum.THSHGD.getType());
|
|
|
+ gdShip.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ gdShip.setCreateUser(AuthUtil.getUserId());
|
|
|
+ gdShip.setCreateTime(new Date());
|
|
|
+ gdShip.setTaskId(rwShip.getId());
|
|
|
+ gdShip.setSendTotalNum(new BigDecimal("0.00"));
|
|
|
+ pjShips.add(gdShip);
|
|
|
+
|
|
|
+ OrderRecord orderRecord = new OrderRecordVO();
|
|
|
+ orderRecord.setCreateTime(new Date());
|
|
|
+ orderRecord.setCreateUser(AuthUtil.getUserId());
|
|
|
+ orderRecord.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ orderRecord.setTenantId(AuthUtil.getTenantId());
|
|
|
+ orderRecord.setPid(rwShip.getOrdId());
|
|
|
+ orderRecord.setSrcNo(gdShip.getBillno());
|
|
|
+ orderRecord.setBsType(gdShip.getBizTypeName());
|
|
|
+ orderRecord.setStatus(gdShip.getStatusName());
|
|
|
+ orderRecordList.add(orderRecord);
|
|
|
+ }
|
|
|
+ orderRecordService.saveBatch(orderRecordList);
|
|
|
+ this.saveOrUpdateBatch(pjShips);
|
|
|
+ List<PjShipItems> shipItemsList = new ArrayList<>();
|
|
|
+ List<PjShip> rwShipList = new ArrayList<>();
|
|
|
+ for (PjShip item : pjShips) {
|
|
|
+ //获得出库任务数据
|
|
|
+ PjShip rwShip = pjShipList.stream().filter(e -> e.getId().equals(item.getTaskId())).findFirst().orElse(null);
|
|
|
+ if (rwShip == null) {
|
|
|
+ throw new RuntimeException("数据异常 请联系管理员");
|
|
|
+ }
|
|
|
+ StringBuilder goodsNames = new StringBuilder();
|
|
|
+
|
|
|
+ //根据销售id获得销售明细数据
|
|
|
+ List<PjOrderItems> list = pjOrderItemsList.stream().filter(e -> e.getPid().equals(item.getOrdId())).collect(Collectors.toList());
|
|
|
+ if (ObjectUtil.isNotEmpty(list)) {
|
|
|
+ for (PjOrderItems e : list) {
|
|
|
+ goodsNames.append(e.getGoodsName()).append(",");
|
|
|
+ //根据销售明细创建出库工单明细
|
|
|
+ PjShipItems shipItems = new PjShipItems();
|
|
|
+ BeanUtil.copyProperties(e, shipItems);
|
|
|
+
|
|
|
+ shipItems.setId(null);
|
|
|
+ shipItems.setPid(item.getId());
|
|
|
+ shipItems.setSrcItemId(e.getId());
|
|
|
+ shipItems.setCreateTime(new Date());
|
|
|
+ shipItems.setCreateUser(AuthUtil.getUserId());
|
|
|
+ shipItems.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ shipItems.setSendNum(e.getReturnsNumber().subtract(e.getSendNum()));
|
|
|
+ if (e.getGoodsNum().compareTo(e.getSendNum()) != 0) {
|
|
|
+ shipItemsList.add(shipItems);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item.setNumberRows(list.size());
|
|
|
+ }
|
|
|
+
|
|
|
+ //修改出库任务状态
|
|
|
+ rwShip.setStatusName(OrderTypeEnum.DISPATCHED.getType());
|
|
|
+ rwShipList.add(rwShip);
|
|
|
+
|
|
|
+ //生成出库工单历史记录
|
|
|
+ saveHistory(item.getId(), OrderTypeEnum.TREATWAREHOUSING.getType());
|
|
|
+
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String formatted = now.format(formatter);
|
|
|
+ //给角色为派工的人发送消息
|
|
|
+ if (ObjectUtils.isNotNull(rwShip.getStockClerkId())) {
|
|
|
+ Message sendMessage = new Message();
|
|
|
+ sendMessage.setParameter(item.getId() + "");
|
|
|
+ sendMessage.setUserName(AuthUtil.getUserName());
|
|
|
+ sendMessage.setUserId(null);
|
|
|
+ sendMessage.setToUserId(rwShip.getStockClerkId());
|
|
|
+ sendMessage.setToUserName(rwShip.getStockClerkName());
|
|
|
+ sendMessage.setMessageType(1);
|
|
|
+ sendMessage.setTenantId(AuthUtil.getTenantId());
|
|
|
+ sendMessage.setCreateUser(null);
|
|
|
+ sendMessage.setCreateTime(new Date());
|
|
|
+ sendMessage.setUrl("/tirePartsMall/salesManagement/outboundWorkOrder/index");
|
|
|
+ sendMessage.setPageLabel("出库工单");
|
|
|
+ sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
|
|
|
+ sendMessage.setMessageBody("您有新的出库工单请及时处理!单号:" + item.getBillno() + "时间:" + formatted);
|
|
|
+ R save = messageClient.save(sendMessage);
|
|
|
+ System.out.println("发送结果:" + save);
|
|
|
+ if (!save.isSuccess()) {
|
|
|
+ throw new SecurityException("发送消息失败");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //给角色为派工的人发送消息
|
|
|
+ R<String> clientDeptIds = sysClient.getRoleIds(AuthUtil.getTenantId(), "库管");
|
|
|
+ if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
|
|
|
+ R<List<User>> userList = userClient.listUserByRoleId(clientDeptIds.getData(), AuthUtil.getTenantId(), item.getSalesCompanyId() + "");
|
|
|
+ if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
|
|
|
+ for (User datum : userList.getData()) {
|
|
|
+ //循环发送消息
|
|
|
+ Message sendMessage = new Message();
|
|
|
+ sendMessage.setParameter(item.getId() + "");
|
|
|
+ sendMessage.setUserName(AuthUtil.getUserName());
|
|
|
+ sendMessage.setUserId(null);
|
|
|
+ sendMessage.setToUserId(datum.getId());
|
|
|
+ sendMessage.setToUserName(datum.getName());
|
|
|
+ sendMessage.setMessageType(1);
|
|
|
+ sendMessage.setTenantId(AuthUtil.getTenantId());
|
|
|
+ sendMessage.setCreateUser(null);
|
|
|
+ sendMessage.setCreateTime(new Date());
|
|
|
+ sendMessage.setUrl("/tirePartsMall/salesManagement/outboundWorkOrder/index");
|
|
|
+ sendMessage.setPageLabel("出库工单");
|
|
|
+ sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
|
|
|
+ sendMessage.setMessageBody("您有新的出库工单请及时处理!单号:" + item.getBillno() + "时间:" + formatted);
|
|
|
+ R save = messageClient.save(sendMessage);
|
|
|
+ System.out.println("发送结果:" + save);
|
|
|
+ if (!save.isSuccess()) {
|
|
|
+ throw new SecurityException("发送消息失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.saveOrUpdateBatch(rwShipList);
|
|
|
+ shipItemsService.saveOrUpdateBatch(shipItemsList);
|
|
|
+
|
|
|
+ return R.success("操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R outboundCompletedReturns(PjShip ship) {
|
|
|
+ ship.setStatusName(OrderTypeEnum.OURTBOUND.getType());
|
|
|
+ if (ObjectUtils.isNull(ship.getStorageId())) {
|
|
|
+ throw new RuntimeException("请先选择仓库");
|
|
|
+ }
|
|
|
+ ship.setGoodsTotalNum(ship.getShipItemsList().stream().map(PjShipItems::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ ship.setSendTotalNum(ship.getShipItemsList().stream().map(PjShipItems::getSendNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ if (ship.getId() == null) {
|
|
|
+ // 获取系统编号
|
|
|
+ R billNo = serialClient.getBillNo(OrderTypeEnum.TKFHGD.getType(), OrderTypeEnum.TKFHGD.getType(), OrderTypeEnum.TKFHGD.getType());
|
|
|
+ if (billNo.getCode() != 200) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return R.fail(500, "生成系统编号失败");
|
|
|
+ }
|
|
|
+ ship.setBillno((String) billNo.getData());
|
|
|
+ ship.setCreateTime(new Date());
|
|
|
+ ship.setCreateUser(AuthUtil.getUserId());
|
|
|
+ ship.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ ship.setTenantId(AuthUtil.getTenantId());
|
|
|
+ baseMapper.insert(ship);
|
|
|
+ } else {
|
|
|
+ ship.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ ship.setUpdateTime(new Date());
|
|
|
+ baseMapper.updateById(ship);
|
|
|
+ }
|
|
|
+ // 保存订单明细
|
|
|
+ if (CollectionUtils.isNotEmpty(ship.getShipItemsList())) {
|
|
|
+ List<PjShipItems> shipItemsList = new ArrayList<>();
|
|
|
+ List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
|
|
|
+ List<PjStockDesc> pjStockDescArrayList = new ArrayList<>();
|
|
|
+ List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
|
|
|
+ List<Long> goodIds = ship.getShipItemsList().stream().map(PjShipItems::getGoodsId).distinct().collect(Collectors.toList());
|
|
|
+ List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
|
|
|
+ .eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjGoodsDesc::getIsDeleted, 0)
|
|
|
+ .in(PjGoodsDesc::getId, goodIds));
|
|
|
+ //修改库存账
|
|
|
+ LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjStockDesc::getIsDeleted, 0)
|
|
|
+ .eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
|
|
|
+ .eq(PjStockDesc::getStorageId, ship.getStorageId())
|
|
|
+ .in(PjStockDesc::getGoodsId, goodIds);
|
|
|
+ List<PjStockDesc> pjStockDescList = iStockDescService.list(lambdaQueryWrapper);
|
|
|
+ List<Long> srcItemIds = ship.getShipItemsList().stream().map(PjShipItems::getSrcItemId).distinct().collect(Collectors.toList());
|
|
|
+ List<PjOrderItems> pjOrderItems = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
+ .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .in(PjOrderItems::getId, srcItemIds));
|
|
|
+ BigDecimal number = new BigDecimal("0.00");
|
|
|
+ String msg = "";
|
|
|
+ List<PjOrderItems> orderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
+ .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .eq(PjOrderItems::getBsType, "PD")
|
|
|
+ .ne(PjOrderItems::getStatus, "已确认")
|
|
|
+ .in(PjOrderItems::getGoodsId, goodIds)
|
|
|
+ );
|
|
|
+ StringBuilder msg1 = new StringBuilder();
|
|
|
+ for (PjShipItems item : ship.getShipItemsList()) {
|
|
|
+ number = number.add(item.getSendNum());
|
|
|
+ if (item.getId() == null) {
|
|
|
+ item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ item.setCreateTime(new Date());
|
|
|
+ item.setCreateUser(AuthUtil.getUserId());
|
|
|
+ item.setPid(ship.getId());
|
|
|
+ item.setTenantId(AuthUtil.getTenantId());
|
|
|
+ } else {
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setPid(ship.getId());
|
|
|
+ }
|
|
|
+ shipItemsList.add(item);
|
|
|
+ //获得商品
|
|
|
+ List<PjOrderItems> pjOrderItemsList1 = orderItemsList.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId())).collect(Collectors.toList());
|
|
|
+ if (!pjOrderItemsList1.isEmpty()) {
|
|
|
+ msg1.append(item.getGoodsName()).append(",");
|
|
|
+ }
|
|
|
+ PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
|
|
|
+ if (ObjectUtil.isEmpty(goodsDesc)) {
|
|
|
+ throw new RuntimeException("商品数据异常");
|
|
|
+ }
|
|
|
+ if ("1".equals(goodsDesc.getWhether()) && ObjectUtils.isNull(item.getDot())) {
|
|
|
+ throw new RuntimeException("商品:" + goodsDesc.getCname() + ",请求选择批次号");
|
|
|
+ }
|
|
|
+
|
|
|
+ PjOrderItems orderItems = pjOrderItems.stream().filter(e -> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
|
|
|
+ if (orderItems != null) {
|
|
|
+ if (orderItems.getReturnsNumber().compareTo(orderItems.getSendNum().add(item.getSendNum())) < 0) {
|
|
|
+ throw new RuntimeException(orderItems.getGoodsName() + "剩余应发货数量" + orderItems.getReturnsNumber().subtract(orderItems.getSendNum()));
|
|
|
+ } else {
|
|
|
+ orderItems.setSendNum(orderItems.getSendNum().add(item.getSendNum()));
|
|
|
+ }
|
|
|
+ pjOrderItemsList.add(orderItems);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("数据异常请联系管理员");
|
|
|
+ }
|
|
|
+ //管理批次号
|
|
|
+ PjStockDesc stockOne = null;
|
|
|
+ if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
|
|
|
+ stockOne = pjStockDescList.stream()
|
|
|
+ .filter(e -> e.getGoodsId().equals(item.getGoodsId())
|
|
|
+ && e.getDot().equals(item.getDot())).findFirst().orElse(null);
|
|
|
+ } else {
|
|
|
+ stockOne = pjStockDescList.stream()
|
|
|
+ .filter(e -> e.getGoodsId().equals(item.getGoodsId())
|
|
|
+ && ObjectUtils.isNull(e.getDot())).findFirst().orElse(null);
|
|
|
+ }
|
|
|
+ if (stockOne != null) {
|
|
|
+ if (stockOne.getBalanceQuantity().compareTo(item.getSendNum()) < 0) {
|
|
|
+ System.err.println("商品:" + goodsDesc.getCname());
|
|
|
+ msg += goodsDesc.getCname() + ",";
|
|
|
+ }
|
|
|
+ stockOne.setBalanceQuantity(stockOne.getBalanceQuantity().subtract(item.getSendNum()));
|
|
|
+ stockOne.setStoreInventory(stockOne.getBalanceQuantity());
|
|
|
+ stockOne.setInventoryAmount(stockOne.getInventoryAmount().subtract(item.getSendNum().multiply(stockOne.getInventoryCostPrice())));
|
|
|
+ stockOne.setVersion(stockOne.getVersion());
|
|
|
+ /*R res = iStockDescService.updateByIdNew(stockOne);
|
|
|
+ if (!res.isSuccess()) {
|
|
|
+ throw new RuntimeException(res.getMsg());
|
|
|
+ }*/
|
|
|
+ pjStockDescArrayList.add(stockOne);
|
|
|
+ } else {
|
|
|
+ System.err.println("商品:" + goodsDesc.getCname());
|
|
|
+ throw new RuntimeException("商品:" + goodsDesc.getCname() + "未查到库存账");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!msg.isEmpty()) {
|
|
|
+ throw new RuntimeException("商品:" + msg + "库存不足,出库失败");
|
|
|
+ }
|
|
|
+ if (msg1.length() > 0) {
|
|
|
+ throw new RuntimeException("商品:" + msg1 + "正在盘点中,操作失败");
|
|
|
+ }
|
|
|
+ R res = iStockDescService.updateBatchByIdNew(pjStockDescArrayList);
|
|
|
+ if (!res.isSuccess()) {
|
|
|
+ throw new RuntimeException(res.getMsg());
|
|
|
+ }
|
|
|
+ shipItemsService.saveOrUpdateBatch(shipItemsList);
|
|
|
+ orderItemsService.updateBatchById(pjOrderItemsList);
|
|
|
+ //查询所有上架商品
|
|
|
+ LambdaQueryWrapper<PjProductLaunch> productLaunchQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ productLaunchQueryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjProductLaunch::getIsDeleted, 0)
|
|
|
+ .isNull(PjProductLaunch::getSourceId)
|
|
|
+ .eq(PjProductLaunch::getSalesCompanyId, ship.getSalesCompanyId())
|
|
|
+ .in(PjProductLaunch::getGoodsId, goodIds);
|
|
|
+ List<PjProductLaunch> productLaunch = productLaunchService.list(productLaunchQueryWrapper);
|
|
|
+ for (PjShipItems item : ship.getShipItemsList()) {
|
|
|
+ //获得商品
|
|
|
+ PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
|
|
|
+ if (ObjectUtil.isEmpty(goodsDesc)) {
|
|
|
+ throw new RuntimeException("商品数据异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ PjProductLaunch pjProductLaunches = productLaunch.stream()
|
|
|
+ .filter(i -> i.getGoodsId().equals(goodsDesc.getId())).findFirst().orElse(null);
|
|
|
+ //修改上架数量
|
|
|
+ if (pjProductLaunches != null) {
|
|
|
+ pjProductLaunches.setInventory(pjProductLaunches.getInventory().subtract(item.getSendNum()));
|
|
|
+ pjProductLaunchList.add(pjProductLaunches);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ R res1 = productLaunchService.updateBatchById(pjProductLaunchList);
|
|
|
+ if (!res1.isSuccess()) {
|
|
|
+ throw new RuntimeException(res1.getMsg());
|
|
|
+ }
|
|
|
+ ship.setShipItemsList(ship.getShipItemsList());
|
|
|
+ ship.setNumberRows(ship.getShipItemsList().size());
|
|
|
+ //修改任务发货数量
|
|
|
+ PjShip rwShip = baseMapper.selectById(ship.getTaskId());
|
|
|
+ if (ObjectUtils.isNotNull(rwShip)) {
|
|
|
+ if (ObjectUtils.isNotNull(rwShip.getSendTotalNum())) {
|
|
|
+ rwShip.setSendTotalNum(rwShip.getSendTotalNum().add(number));
|
|
|
+ } else {
|
|
|
+ rwShip.setSendTotalNum(number);
|
|
|
+ }
|
|
|
+ if (rwShip.getSendTotalNum().compareTo(rwShip.getGoodsTotalNum()) == 0) {
|
|
|
+ rwShip.setStatusName("已完成");
|
|
|
+ } else {
|
|
|
+ rwShip.setStatusName("未完成");
|
|
|
+ }
|
|
|
+ rwShip.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ rwShip.setUpdateTime(new Date());
|
|
|
+ baseMapper.updateById(rwShip);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //获得销售订单明细
|
|
|
+ LambdaQueryWrapper<PjOrderItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ itemsLambdaQueryWrapper.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .eq(PjOrderItems::getPid, ship.getOrdId());
|
|
|
+ List<PjOrderItems> itemsList = orderItemsService.list(itemsLambdaQueryWrapper);
|
|
|
+ //数量和
|
|
|
+ BigDecimal goodsNum = itemsList.stream().map(PjOrderItems::getGoodsNum).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ //发货数量和
|
|
|
+ BigDecimal sendNum = itemsList.stream().map(PjOrderItems::getSendNum).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ PjOrder order = orderMapper.selectById(ship.getOrdId());
|
|
|
+ if (ObjectUtil.isNotEmpty(order)) {
|
|
|
+ order.setShipType(ship.getShipType());
|
|
|
+ order.setLogisticsCorpId(ship.getLogisticsCorpId());
|
|
|
+ order.setLogisticsCorpName(ship.getLogisticsCorpName());
|
|
|
+ order.setExpressNo(ship.getExpressNo());
|
|
|
+ if (goodsNum.compareTo(sendNum) == 0) {//数量等于发货数量修改销售订单状态
|
|
|
+ order.setStatus("已完成");
|
|
|
+ order.setXcxStatus("已完成");
|
|
|
+ order.setDeliveryBusinesDate(new Date());
|
|
|
+ orderMapper.updateById(order);
|
|
|
+ } else {
|
|
|
+ order.setStorageId(ship.getStorageId());
|
|
|
+ orderMapper.updateById(order);
|
|
|
+ }
|
|
|
+ OrderRecord orderRecord = new OrderRecordVO();
|
|
|
+ orderRecord.setCreateTime(new Date());
|
|
|
+ orderRecord.setCreateUser(AuthUtil.getUserId());
|
|
|
+ orderRecord.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ orderRecord.setTenantId(AuthUtil.getTenantId());
|
|
|
+ orderRecord.setPid(order.getId());
|
|
|
+ orderRecord.setSrcNo(ship.getBillno());
|
|
|
+ orderRecord.setBsType(ship.getBizTypeName());
|
|
|
+ orderRecord.setStatus(ship.getStatusName());
|
|
|
+ orderRecordService.save(orderRecord);
|
|
|
+ }
|
|
|
+ //生成出库工单历史记录
|
|
|
+ saveHistory(ship.getId(), OrderTypeEnum.OURTBOUND.getType());
|
|
|
+ return R.data(ship);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R revokeOutboundCompletedReturns(PjShip ship) {
|
|
|
+ ship.setStatusName(OrderTypeEnum.TOBESHIPPEDOUT.getType());
|
|
|
+ ship.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ ship.setUpdateTime(new Date());
|
|
|
+ baseMapper.updateById(ship);
|
|
|
+
|
|
|
+ // 保存订单明细
|
|
|
+ if (CollectionUtils.isNotEmpty(ship.getShipItemsList())) {
|
|
|
+ List<PjShipItems> itemsList = new ArrayList<>();
|
|
|
+ List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
|
|
|
+ List<PjStockDesc> pjStockDescArrayList = new ArrayList<>();
|
|
|
+ List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
|
|
|
+ List<Long> goodIds = ship.getShipItemsList().stream().map(PjShipItems::getGoodsId).distinct().collect(Collectors.toList());
|
|
|
+ List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
|
|
|
+ .eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjGoodsDesc::getIsDeleted, 0)
|
|
|
+ .in(PjGoodsDesc::getId, goodIds));
|
|
|
+ //修改库存账
|
|
|
+ LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjStockDesc::getIsDeleted, 0)
|
|
|
+ .eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
|
|
|
+ .eq(PjStockDesc::getStorageId, ship.getStorageId())
|
|
|
+ .in(PjStockDesc::getGoodsId, goodIds);
|
|
|
+ List<PjStockDesc> pjStockDescList = iStockDescService.list(lambdaQueryWrapper);
|
|
|
+ List<Long> srcItemIds = ship.getShipItemsList().stream().map(PjShipItems::getSrcItemId).distinct().collect(Collectors.toList());
|
|
|
+ List<PjOrderItems> pjOrderItems = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
+ .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .in(PjOrderItems::getId, srcItemIds));
|
|
|
+ List<PjOrderItems> orderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
+ .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .eq(PjOrderItems::getBsType, "PD")
|
|
|
+ .ne(PjOrderItems::getStatus, "已确认")
|
|
|
+ .in(PjOrderItems::getGoodsId, goodIds)
|
|
|
+ );
|
|
|
+ StringBuilder msg1 = new StringBuilder();
|
|
|
+ BigDecimal number = new BigDecimal("0.00");
|
|
|
+ for (PjShipItems item : ship.getShipItemsList()) {
|
|
|
+ number = number.add(item.getSendNum());
|
|
|
+ PjOrderItems orderItems = pjOrderItems.stream().filter(e -> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
|
|
|
+ if (orderItems != null) {
|
|
|
+ orderItems.setSendNum(orderItems.getSendNum().subtract(item.getSendNum()));
|
|
|
+ pjOrderItemsList.add(orderItems);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("数据异常请联系管理员");
|
|
|
+ }
|
|
|
+ List<PjOrderItems> pjOrderItemsList1 = orderItemsList.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId())).collect(Collectors.toList());
|
|
|
+ if (!pjOrderItemsList1.isEmpty()) {
|
|
|
+ msg1.append(item.getGoodsName()).append(",");
|
|
|
+ }
|
|
|
+ //获得商品
|
|
|
+ PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
|
|
|
+ if (ObjectUtil.isEmpty(goodsDesc)) {
|
|
|
+ throw new RuntimeException("商品数据异常");
|
|
|
+ }
|
|
|
+ //管理批次号
|
|
|
+ PjStockDesc stockOne = null;
|
|
|
+ if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
|
|
|
+ stockOne = pjStockDescList.stream()
|
|
|
+ .filter(e -> e.getGoodsId().equals(item.getGoodsId())
|
|
|
+ && e.getDot().equals(item.getDot())).findFirst().orElse(null);
|
|
|
+ } else {
|
|
|
+ stockOne = pjStockDescList.stream()
|
|
|
+ .filter(e -> e.getGoodsId().equals(item.getGoodsId())
|
|
|
+ && ObjectUtils.isNull(e.getDot())).findFirst().orElse(null);
|
|
|
+ }
|
|
|
+ if (stockOne != null) {
|
|
|
+ stockOne.setBalanceQuantity(stockOne.getBalanceQuantity().add(item.getSendNum()));
|
|
|
+ stockOne.setStoreInventory(stockOne.getBalanceQuantity());
|
|
|
+ stockOne.setInventoryAmount(stockOne.getInventoryAmount().add(item.getSendNum().multiply(stockOne.getInventoryCostPrice())));
|
|
|
+ stockOne.setVersion(stockOne.getVersion());
|
|
|
+ pjStockDescArrayList.add(stockOne);
|
|
|
+ /*R res = iStockDescService.updateByIdNew(stockOne);
|
|
|
+ if (!res.isSuccess()) {
|
|
|
+ throw new RuntimeException(res.getMsg());
|
|
|
+ }*/
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("未查到库存账");
|
|
|
+ }
|
|
|
+ itemsList.add(item);
|
|
|
+ }
|
|
|
+ if (msg1.length() > 0) {
|
|
|
+ throw new RuntimeException("商品:" + msg1 + "正在盘点中,操作失败");
|
|
|
+ }
|
|
|
+ R res = iStockDescService.updateBatchByIdNew(pjStockDescArrayList);
|
|
|
+ if (!res.isSuccess()) {
|
|
|
+ throw new RuntimeException(res.getMsg());
|
|
|
+ }
|
|
|
+ shipItemsService.updateBatchById(itemsList);
|
|
|
+ orderItemsService.updateBatchById(pjOrderItemsList);
|
|
|
+ ship.setShipItemsList(ship.getShipItemsList());
|
|
|
+ ship.setNumberRows(ship.getShipItemsList().size());
|
|
|
+//查询所有上架商品
|
|
|
+ LambdaQueryWrapper<PjProductLaunch> productLaunchQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ productLaunchQueryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjProductLaunch::getIsDeleted, 0)
|
|
|
+ .isNull(PjProductLaunch::getSourceId)
|
|
|
+ .eq(PjProductLaunch::getSalesCompanyId, ship.getSalesCompanyId())
|
|
|
+ .in(PjProductLaunch::getGoodsId, goodIds);
|
|
|
+ List<PjProductLaunch> productLaunch = productLaunchService.list(productLaunchQueryWrapper);
|
|
|
+ for (PjShipItems item : ship.getShipItemsList()) {
|
|
|
+ //获得商品
|
|
|
+ PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
|
|
|
+ if (ObjectUtil.isEmpty(goodsDesc)) {
|
|
|
+ throw new RuntimeException("商品数据异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ PjProductLaunch pjProductLaunches = productLaunch.stream()
|
|
|
+ .filter(i -> i.getGoodsId().equals(goodsDesc.getId())).findFirst().orElse(null);
|
|
|
+ //修改上架数量
|
|
|
+ if (pjProductLaunches != null) {
|
|
|
+ pjProductLaunches.setInventory(pjProductLaunches.getInventory().add(item.getSendNum()));
|
|
|
+ pjProductLaunchList.add(pjProductLaunches);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ R res1 = productLaunchService.updateBatchById(pjProductLaunchList);
|
|
|
+ if (!res1.isSuccess()) {
|
|
|
+ throw new RuntimeException(res1.getMsg());
|
|
|
+ }
|
|
|
+ //修改任务发货数量
|
|
|
+ PjShip rwShip = baseMapper.selectById(ship.getTaskId());
|
|
|
+ if (ObjectUtils.isNotNull(rwShip)) {
|
|
|
+ rwShip.setSendTotalNum(rwShip.getSendTotalNum().subtract(number));
|
|
|
+ if (rwShip.getSendTotalNum().compareTo(rwShip.getGoodsTotalNum()) == 0) {
|
|
|
+ rwShip.setStatusName("已完成");
|
|
|
+ } else {
|
|
|
+ rwShip.setStatusName("未完成");
|
|
|
+ }
|
|
|
+ rwShip.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ rwShip.setUpdateTime(new Date());
|
|
|
+ baseMapper.updateById(rwShip);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ PjOrder order = orderMapper.selectById(ship.getOrdId());
|
|
|
+ if (ObjectUtil.isNotEmpty(order)) {
|
|
|
+ order.setStatus("待出库");
|
|
|
+ order.setXcxStatus("待出库");
|
|
|
+ order.setDeliveryBusinesDate(null);
|
|
|
+ orderMapper.updateById(order);
|
|
|
+ OrderRecord orderRecord = new OrderRecordVO();
|
|
|
+ orderRecord.setCreateTime(new Date());
|
|
|
+ orderRecord.setCreateUser(AuthUtil.getUserId());
|
|
|
+ orderRecord.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ orderRecord.setTenantId(AuthUtil.getTenantId());
|
|
|
+ orderRecord.setPid(order.getId());
|
|
|
+ orderRecord.setSrcNo(ship.getBillno());
|
|
|
+ orderRecord.setBsType(ship.getBizTypeName());
|
|
|
+ orderRecord.setStatus(ship.getStatusName());
|
|
|
+ orderRecordService.save(orderRecord);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("数据异常请联系管理员");
|
|
|
+ }
|
|
|
+
|
|
|
+ //生成出库工单历史记录
|
|
|
+ saveHistory(ship.getId(), OrderTypeEnum.TOBESHIPPEDOUT.getType());
|
|
|
+
|
|
|
+ return R.data(ship);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R generateWarehousingReturns(String ids) {
|
|
|
+ List<Long> shipIds = Func.toLongList(ids);
|
|
|
+ List<PjShip> pjShipList = baseMapper.selectList(new LambdaQueryWrapper<PjShip>()
|
|
|
+ .eq(PjShip::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjShip::getIsDeleted, 0)
|
|
|
+ .apply("find_in_set(id,'" + ids + "')"));
|
|
|
+ List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
|
|
|
+ List<PjShip> pjShips = new ArrayList<>();
|
|
|
+ if (!pjShipList.isEmpty()) {
|
|
|
+ List<Long> ordIds = pjShipList.stream().map(PjShip::getOrdId).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+ pjOrderItemsList = orderItemsService.list(new QueryWrapper<PjOrderItems>()
|
|
|
+ .in("pid", ordIds)
|
|
|
+ .eq("is_deleted", 0)
|
|
|
+ .apply("goods_num != send_num")
|
|
|
+ .eq("tenant_id", AuthUtil.getTenantId()));
|
|
|
+ }
|
|
|
+ List<OrderRecord> orderRecordList = new ArrayList<>();
|
|
|
+ for (Long id : shipIds) {
|
|
|
+ //获得出库任务数据
|
|
|
+ PjShip rwShip = pjShipList.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null);
|
|
|
+ if (ObjectUtil.isEmpty(rwShip)) {
|
|
|
+ throw new RuntimeException("数据异常 请联系管理员");
|
|
|
+ }
|
|
|
+
|
|
|
+ //新建入库工单
|
|
|
+ PjShip gdShip = new PjShip();
|
|
|
+ // 获取系统编号
|
|
|
+ R billNo = serialClient.getBillNo(OrderTypeEnum.TKFHGD.getType(), OrderTypeEnum.TKFHGD.getType(), OrderTypeEnum.TKFHGD.getType());
|
|
|
+ if (billNo.getCode() != 200) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return R.fail(500, "生成系统编号失败");
|
|
|
+ }
|
|
|
+ BeanUtil.copyProperties(rwShip, gdShip);
|
|
|
+
|
|
|
+ gdShip.setId(null);
|
|
|
+ gdShip.setBillno((String) billNo.getData());
|
|
|
+ gdShip.setStatusName(OrderTypeEnum.TOBESHIPPEDOUT.getType());
|
|
|
+ gdShip.setTenantId(AuthUtil.getTenantId());
|
|
|
+ gdShip.setBizTypeName(OrderTypeEnum.TKFHGD.getType());
|
|
|
+ gdShip.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ gdShip.setCreateUser(AuthUtil.getUserId());
|
|
|
+ gdShip.setCreateTime(new Date());
|
|
|
+ gdShip.setTaskId(rwShip.getId());
|
|
|
+ pjShips.add(gdShip);
|
|
|
+ OrderRecord orderRecord = new OrderRecordVO();
|
|
|
+ orderRecord.setCreateTime(new Date());
|
|
|
+ orderRecord.setCreateUser(AuthUtil.getUserId());
|
|
|
+ orderRecord.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ orderRecord.setTenantId(AuthUtil.getTenantId());
|
|
|
+ orderRecord.setPid(rwShip.getOrdId());
|
|
|
+ orderRecord.setSrcNo(gdShip.getBillno());
|
|
|
+ orderRecord.setBsType(gdShip.getBizTypeName());
|
|
|
+ orderRecord.setStatus(gdShip.getStatusName());
|
|
|
+ orderRecordList.add(orderRecord);
|
|
|
+ }
|
|
|
+ orderRecordService.saveBatch(orderRecordList);
|
|
|
+ this.saveOrUpdateBatch(pjShips);
|
|
|
+ List<PjShipItems> shipItemsList = new ArrayList<>();
|
|
|
+ List<PjShip> rwShipList = new ArrayList<>();
|
|
|
+ for (PjShip item : pjShips) {
|
|
|
+ //获得出库任务数据
|
|
|
+ PjShip rwShip = pjShipList.stream().filter(e -> e.getId().equals(item.getTaskId())).findFirst().orElse(null);
|
|
|
+ if (ObjectUtil.isEmpty(rwShip)) {
|
|
|
+ throw new RuntimeException("数据异常 请联系管理员");
|
|
|
+ }
|
|
|
+ //根据采购id获得采购明细数据
|
|
|
+ List<PjOrderItems> list = pjOrderItemsList.stream().filter(e -> e.getPid().equals(item.getOrdId())).collect(Collectors.toList());
|
|
|
+ if (ObjectUtil.isNotEmpty(list)) {
|
|
|
+ for (PjOrderItems e : list) {
|
|
|
+ //根据采购明细创建入库工单明细
|
|
|
+ PjShipItems shipItems = new PjShipItems();
|
|
|
+ BeanUtil.copyProperties(e, shipItems);
|
|
|
+
|
|
|
+ shipItems.setId(null);
|
|
|
+ shipItems.setPid(item.getId());
|
|
|
+ shipItems.setSrcItemId(e.getId());
|
|
|
+ shipItems.setCreateTime(new Date());
|
|
|
+ shipItems.setCreateUser(AuthUtil.getUserId());
|
|
|
+ shipItems.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ shipItems.setSendNum(e.getReturnsNumber().subtract(e.getSendNum()));
|
|
|
+ shipItemsList.add(shipItems);
|
|
|
+ }
|
|
|
+ item.setNumberRows(list.size());
|
|
|
+ }
|
|
|
+
|
|
|
+ //修改入库任务状态
|
|
|
+ rwShip.setStatusName(OrderTypeEnum.DISPATCHED.getType());
|
|
|
+ baseMapper.updateById(rwShip);
|
|
|
+
|
|
|
+ //生成入库工单历史记录
|
|
|
+ saveHistory(item.getId(), OrderTypeEnum.TOBESHIPPEDOUT.getType());
|
|
|
+
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String formatted = now.format(formatter);
|
|
|
+ //给角色为派工的人发送消息
|
|
|
+ if (ObjectUtils.isNotNull(rwShip.getStockClerkId())) {
|
|
|
+ Message sendMessage = new Message();
|
|
|
+ sendMessage.setParameter(item.getId() + "");
|
|
|
+ sendMessage.setUserName(AuthUtil.getUserName());
|
|
|
+ sendMessage.setUserId(null);
|
|
|
+ sendMessage.setToUserId(rwShip.getStockClerkId());
|
|
|
+ sendMessage.setToUserName(rwShip.getStockClerkName());
|
|
|
+ sendMessage.setMessageType(1);
|
|
|
+ sendMessage.setTenantId(AuthUtil.getTenantId());
|
|
|
+ sendMessage.setCreateUser(null);
|
|
|
+ sendMessage.setCreateTime(new Date());
|
|
|
+ sendMessage.setUrl("/tirePartsMall/purchasingManagement/warehouseEntryOrder/index");
|
|
|
+ sendMessage.setPageLabel("采购入库");
|
|
|
+ sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
|
|
|
+ sendMessage.setMessageBody("您有新的采购入库请及时处理!单号:" + item.getBillno() + "时间:" + formatted);
|
|
|
+ R save = messageClient.save(sendMessage);
|
|
|
+ System.out.println("发送结果:" + save);
|
|
|
+ if (!save.isSuccess()) {
|
|
|
+ throw new SecurityException("发送消息失败");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //给角色为派工的人发送消息
|
|
|
+ R<String> clientDeptIds = sysClient.getRoleIds(AuthUtil.getTenantId(), "库管");
|
|
|
+ if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
|
|
|
+ R<List<User>> userList = userClient.listUserByRoleId(clientDeptIds.getData(), AuthUtil.getTenantId(), item.getSalesCompanyId() + "");
|
|
|
+ if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
|
|
|
+ for (User datum : userList.getData()) {
|
|
|
+ //循环发送消息
|
|
|
+ Message sendMessage = new Message();
|
|
|
+ sendMessage.setParameter(item.getId() + "");
|
|
|
+ sendMessage.setUserName(AuthUtil.getUserName());
|
|
|
+ sendMessage.setUserId(null);
|
|
|
+ sendMessage.setToUserId(datum.getId());
|
|
|
+ sendMessage.setToUserName(datum.getName());
|
|
|
+ sendMessage.setMessageType(1);
|
|
|
+ sendMessage.setTenantId(AuthUtil.getTenantId());
|
|
|
+ sendMessage.setCreateUser(null);
|
|
|
+ sendMessage.setCreateTime(new Date());
|
|
|
+ sendMessage.setUrl("/tirePartsMall/purchasingManagement/warehouseEntryOrder/index");
|
|
|
+ sendMessage.setPageLabel("采购入库");
|
|
|
+ sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
|
|
|
+ sendMessage.setMessageBody("您有新的采购入库请及时处理!单号:" + item.getBillno() + "时间:" + formatted);
|
|
|
+ R save = messageClient.save(sendMessage);
|
|
|
+ System.out.println("发送结果:" + save);
|
|
|
+ if (!save.isSuccess()) {
|
|
|
+ throw new SecurityException("发送消息失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.saveOrUpdateBatch(rwShipList);
|
|
|
+ shipItemsService.saveOrUpdateBatch(shipItemsList);
|
|
|
+ return R.success("操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R warehousingCompleteReturns(PjShip ship) {
|
|
|
+ if (ship.getId() == null) {
|
|
|
+ // 获取系统编号
|
|
|
+ R billNo = serialClient.getBillNo(OrderTypeEnum.THSHGD.getType(), OrderTypeEnum.THSHGD.getType(), OrderTypeEnum.THSHGD.getType());
|
|
|
+ if (billNo.getCode() != 200) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return R.fail(500, "生成系统编号失败");
|
|
|
+ }
|
|
|
+ ship.setBillno((String) billNo.getData());
|
|
|
+ ship.setCreateTime(new Date());
|
|
|
+ ship.setCreateUser(AuthUtil.getUserId());
|
|
|
+ ship.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ ship.setTenantId(AuthUtil.getTenantId());
|
|
|
+ baseMapper.insert(ship);
|
|
|
+ } else {
|
|
|
+ ship.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ ship.setUpdateTime(new Date());
|
|
|
+ baseMapper.updateById(ship);
|
|
|
+ }
|
|
|
+ BigDecimal number = new BigDecimal("0.00");
|
|
|
+ // 保存订单明细
|
|
|
+ if (CollectionUtils.isNotEmpty(ship.getShipItemsList())) {
|
|
|
+ List<PjShipItems> shipItemsList = new ArrayList<>();
|
|
|
+ List<PjStockDesc> pjStockDescArrayListSave = new ArrayList<>();
|
|
|
+ List<PjStockDesc> pjStockDescArrayListUpdate = new ArrayList<>();
|
|
|
+ List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
|
|
|
+ List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
|
|
|
+ List<Long> goodIds = ship.getShipItemsList().stream().map(PjShipItems::getGoodsId).distinct().collect(Collectors.toList());
|
|
|
+ List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
|
|
|
+ .eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjGoodsDesc::getIsDeleted, 0)
|
|
|
+ .in(PjGoodsDesc::getId, goodIds));
|
|
|
+ //修改库存账
|
|
|
+ List<PjStockDesc> pjStockDescList = iStockDescService.list(new LambdaQueryWrapper<PjStockDesc>().eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjStockDesc::getIsDeleted, 0)
|
|
|
+ .eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
|
|
|
+ .in(PjStockDesc::getGoodsId, goodIds));
|
|
|
+ List<PjGoodsType> pjGoodsTypeList = goodsTypeMapper.selectList(new LambdaQueryWrapper<PjGoodsType>()
|
|
|
+ .eq(PjGoodsType::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjGoodsType::getIsDeleted, 0)
|
|
|
+ .in(PjGoodsType::getId, goodIds)
|
|
|
+ );
|
|
|
+ List<Long> srcItemIds = ship.getShipItemsList().stream().map(PjShipItems::getSrcItemId).distinct().collect(Collectors.toList());
|
|
|
+ List<PjOrderItems> pjOrderItems = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
+ .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .in(PjOrderItems::getId, srcItemIds));
|
|
|
+ List<PjOrderItems> orderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
+ .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .eq(PjOrderItems::getBsType, "PD")
|
|
|
+ .ne(PjOrderItems::getStatus, "已确认")
|
|
|
+ .in(PjOrderItems::getGoodsId, goodIds)
|
|
|
+ );
|
|
|
+ StringBuilder msg1 = new StringBuilder();
|
|
|
+ //获得仓库
|
|
|
+ PjStorageDesc storageDesc = storageDescMapper.selectById(ship.getStorageId());
|
|
|
+ for (PjShipItems item : ship.getShipItemsList()) {
|
|
|
+ if (item.getId() == null) {
|
|
|
+ item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ item.setCreateTime(new Date());
|
|
|
+ item.setCreateUser(AuthUtil.getUserId());
|
|
|
+ item.setPid(ship.getId());
|
|
|
+ item.setTenantId(AuthUtil.getTenantId());
|
|
|
+ } else {
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setPid(ship.getId());
|
|
|
+ }
|
|
|
+ shipItemsList.add(item);
|
|
|
+ List<PjOrderItems> pjOrderItemsList1 = orderItemsList.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId())).collect(Collectors.toList());
|
|
|
+ if (!pjOrderItemsList1.isEmpty()) {
|
|
|
+ msg1.append(item.getGoodsName()).append(",");
|
|
|
+ }
|
|
|
+ //获得商品
|
|
|
+ PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
|
|
|
+ if (ObjectUtil.isEmpty(goodsDesc)) {
|
|
|
+ throw new RuntimeException("商品数据异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ PjOrderItems orderItems = pjOrderItems.stream().filter(e -> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
|
|
|
+ if (orderItems != null) {
|
|
|
+ if (ship.getBillno().contains("TK")) {
|
|
|
+ orderItems.setSendNum(orderItems.getSendNum().subtract(item.getSendNum()));
|
|
|
+ } else {
|
|
|
+ orderItems.setSendNum(orderItems.getSendNum().add(item.getSendNum()));
|
|
|
+ }
|
|
|
+ pjOrderItemsList.add(orderItems);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("数据异常请联系管理员");
|
|
|
+ }
|
|
|
+ //生成库存账
|
|
|
+ PjStockDesc stockDesc = new PjStockDesc();
|
|
|
+ stockDesc.setSalesCompanyId(ship.getSalesCompanyId());
|
|
|
+ stockDesc.setSalesCompanyName(ship.getSalesCompanyName());
|
|
|
+ stockDesc.setGoodsTypeId(goodsDesc.getGoodsTypeId());
|
|
|
+ if (ObjectUtils.isNotNull(goodsDesc.getGoodsTypeId())) {
|
|
|
+
|
|
|
+ PjGoodsType goodsType = pjGoodsTypeList.stream().filter(e -> (e.getId() + "").equals(goodsDesc.getGoodsTypeId())).findFirst().orElse(null);
|
|
|
+ if (goodsType != null) {
|
|
|
+ stockDesc.setGoodsTypeName(goodsType.getCname());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ stockDesc.setGoodsId(goodsDesc.getId());
|
|
|
+ stockDesc.setCode(item.getGoodsNo());
|
|
|
+ stockDesc.setCname(goodsDesc.getCname());
|
|
|
+ stockDesc.setInventoryAlert(goodsDesc.getInventoryAlert());
|
|
|
+ stockDesc.setBrandId(item.getBrandId());
|
|
|
+ stockDesc.setBrandName(item.getBrandName());
|
|
|
+ stockDesc.setTypeno(item.getPropertyName());
|
|
|
+ stockDesc.setBrandItem(item.getPattern());
|
|
|
+ stockDesc.setProductDescription(item.getGoodsDescription());
|
|
|
+ stockDesc.setDot(item.getDot());
|
|
|
+ stockDesc.setTenantId(AuthUtil.getTenantId());
|
|
|
+
|
|
|
+ //管理批次号
|
|
|
+ PjStockDesc stockOne;
|
|
|
+ if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
|
|
|
+ stockOne = pjStockDescList.stream()
|
|
|
+ .filter(e -> e.getGoodsId().equals(item.getGoodsId())
|
|
|
+ && e.getStorageId().equals(ship.getStorageId())
|
|
|
+ && e.getDot().equals(item.getDot())).findFirst().orElse(null);
|
|
|
+ } else {
|
|
|
+ stockOne = pjStockDescList.stream()
|
|
|
+ .filter(e -> e.getGoodsId().equals(item.getGoodsId())
|
|
|
+ && e.getStorageId().equals(ship.getStorageId())
|
|
|
+ && ObjectUtils.isNull(e.getDot())).findFirst().orElse(null);
|
|
|
+ }
|
|
|
+ if (stockOne == null) {
|
|
|
+ if (ObjectUtil.isNotEmpty(storageDesc)) {
|
|
|
+ stockDesc.setStorageId(storageDesc.getId());
|
|
|
+ stockDesc.setStorageName(storageDesc.getCname());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("仓库数据异常");
|
|
|
+ }
|
|
|
+ stockDesc.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ stockDesc.setCreateTime(new Date());
|
|
|
+ stockDesc.setCreateUser(AuthUtil.getUserId());
|
|
|
+ stockDesc.setBalanceQuantity(item.getSendNum());
|
|
|
+ stockDesc.setStoreInventory(item.getSendNum());
|
|
|
+ stockDesc.setInventoryAmount(item.getSendNum().multiply(item.getPrice()));
|
|
|
+ if (stockDesc.getBalanceQuantity().compareTo(new BigDecimal("0")) != 0) {
|
|
|
+ stockDesc.setInventoryCostPrice(stockDesc.getInventoryAmount().divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ } else {
|
|
|
+ stockDesc.setInventoryCostPrice(item.getPrice());
|
|
|
+ }
|
|
|
+ pjStockDescArrayListSave.add(stockDesc);
|
|
|
+ } else {
|
|
|
+ stockDesc.setId(stockOne.getId());
|
|
|
+ stockDesc.setUpdateTime(new Date());
|
|
|
+ stockDesc.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ stockDesc.setBalanceQuantity(stockOne.getBalanceQuantity().add(item.getSendNum()));
|
|
|
+ stockDesc.setStoreInventory(stockDesc.getBalanceQuantity());
|
|
|
+ stockDesc.setInventoryAmount(item.getSendNum().multiply(item.getPrice()));
|
|
|
+ stockDesc.setInventoryAmount(stockDesc.getInventoryAmount().add(stockOne.getInventoryAmount()));
|
|
|
+ if (stockDesc.getBalanceQuantity().compareTo(new BigDecimal("0")) != 0) {
|
|
|
+ stockDesc.setInventoryCostPrice(stockDesc.getInventoryAmount().divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+ stockDesc.setVersion(stockOne.getVersion());
|
|
|
+ pjStockDescArrayListUpdate.add(stockDesc);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (msg1.length() > 0) {
|
|
|
+ throw new RuntimeException("商品:" + msg1 + "正在盘点中,操作失败");
|
|
|
+ }
|
|
|
+ shipItemsService.saveOrUpdateBatch(shipItemsList);
|
|
|
+ if (!pjStockDescArrayListSave.isEmpty()) {
|
|
|
+ iStockDescService.saveBatch(pjStockDescArrayListSave);
|
|
|
+ }
|
|
|
+ if (!pjStockDescArrayListUpdate.isEmpty()) {
|
|
|
+ iStockDescService.updateBatchById(pjStockDescArrayListUpdate);
|
|
|
+ }
|
|
|
+ orderItemsService.updateBatchById(pjOrderItemsList);
|
|
|
+ //查询所有上架商品
|
|
|
+ LambdaQueryWrapper<PjProductLaunch> productLaunchQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ productLaunchQueryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjProductLaunch::getIsDeleted, 0)
|
|
|
+ .isNull(PjProductLaunch::getSourceId)
|
|
|
+ .eq(PjProductLaunch::getSalesCompanyId, ship.getSalesCompanyId())
|
|
|
+ .in(PjProductLaunch::getGoodsId, goodIds);
|
|
|
+ List<PjProductLaunch> productLaunch = productLaunchService.list(productLaunchQueryWrapper);
|
|
|
+ for (PjShipItems item : ship.getShipItemsList()) {
|
|
|
+ number = number.add(item.getSendNum());
|
|
|
+ //获得商品
|
|
|
+ PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
|
|
|
+ if (ObjectUtil.isEmpty(goodsDesc)) {
|
|
|
+ throw new RuntimeException("商品数据异常");
|
|
|
+ }
|
|
|
+ PjProductLaunch pjProductLaunches = productLaunch.stream()
|
|
|
+ .filter(i -> i.getGoodsId().equals(goodsDesc.getId())).findFirst().orElse(null);
|
|
|
+ //修改上架数量
|
|
|
+ if (pjProductLaunches != null) {
|
|
|
+ pjProductLaunches.setInventory(pjProductLaunches.getInventory().add(item.getSendNum()));
|
|
|
+ pjProductLaunchList.add(pjProductLaunches);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ R res = productLaunchService.updateBatchById(pjProductLaunchList);
|
|
|
+ if (!res.isSuccess()) {
|
|
|
+ throw new RuntimeException(res.getMsg());
|
|
|
+ }
|
|
|
+ ship.setShipItemsList(ship.getShipItemsList());
|
|
|
+ ship.setNumberRows(ship.getShipItemsList().size());
|
|
|
+ ship.setGoodsTotalNum(ship.getShipItemsList().stream().map(PjShipItems::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ ship.setSendTotalNum(ship.getShipItemsList().stream().map(PjShipItems::getSendNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ }
|
|
|
+
|
|
|
+ //生成出库工单历史记录
|
|
|
+ saveHistory(ship.getId(), OrderTypeEnum.RECEIVED.getType());
|
|
|
+
|
|
|
+ ship.setStatusName(OrderTypeEnum.RECEIVED.getType());
|
|
|
+ baseMapper.updateById(ship);
|
|
|
+ //修改任务发货数量
|
|
|
+ PjShip rwShip = baseMapper.selectById(ship.getTaskId());
|
|
|
+ if (ObjectUtils.isNotNull(rwShip)) {
|
|
|
+ if (ObjectUtils.isNotNull(rwShip.getSendTotalNum())) {
|
|
|
+ rwShip.setSendTotalNum(rwShip.getSendTotalNum().add(number));
|
|
|
+ } else {
|
|
|
+ rwShip.setSendTotalNum(number);
|
|
|
+ }
|
|
|
+ if (rwShip.getSendTotalNum().compareTo(rwShip.getGoodsTotalNum()) == 0) {
|
|
|
+ rwShip.setStatusName("已完成");
|
|
|
+ } else {
|
|
|
+ rwShip.setStatusName("未完成");
|
|
|
+ }
|
|
|
+ rwShip.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ rwShip.setUpdateTime(new Date());
|
|
|
+ baseMapper.updateById(rwShip);
|
|
|
+ }
|
|
|
+ //获得销售订单明细
|
|
|
+ LambdaQueryWrapper<PjOrderItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ itemsLambdaQueryWrapper.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .eq(PjOrderItems::getPid, ship.getOrdId());
|
|
|
+ List<PjOrderItems> itemsList = orderItemsService.list(itemsLambdaQueryWrapper);
|
|
|
+ //数量和
|
|
|
+ BigDecimal goodsNum = itemsList.stream().map(PjOrderItems::getGoodsNum).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ //发货数量和
|
|
|
+ BigDecimal sendNum = itemsList.stream().map(PjOrderItems::getSendNum).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ PjOrder order = orderMapper.selectById(ship.getOrdId());
|
|
|
+ if (ObjectUtil.isNotEmpty(order)) {
|
|
|
+ if (goodsNum.compareTo(sendNum) == 0) {//数量等于发货数量修改销售订单状态
|
|
|
+ order.setStatus("已完成");
|
|
|
+ order.setXcxStatus("已完成");
|
|
|
+ order.setDeliveryBusinesDate(new Date());
|
|
|
+ orderMapper.updateById(order);
|
|
|
+ } else {
|
|
|
+ order.setStorageId(ship.getStorageId());
|
|
|
+ orderMapper.updateById(order);
|
|
|
+ }
|
|
|
+ OrderRecord orderRecord = new OrderRecordVO();
|
|
|
+ orderRecord.setCreateTime(new Date());
|
|
|
+ orderRecord.setCreateUser(AuthUtil.getUserId());
|
|
|
+ orderRecord.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ orderRecord.setTenantId(AuthUtil.getTenantId());
|
|
|
+ orderRecord.setPid(order.getId());
|
|
|
+ orderRecord.setSrcNo(ship.getBillno());
|
|
|
+ orderRecord.setBsType(ship.getBizTypeName());
|
|
|
+ orderRecord.setStatus(ship.getStatusName());
|
|
|
+ orderRecordService.save(orderRecord);
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.data(ship);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R revokeWarehousingReturns(PjShip ship) {
|
|
|
+ // 保存订单明细
|
|
|
+ BigDecimal number = new BigDecimal("0.00");
|
|
|
+ if (CollectionUtils.isNotEmpty(ship.getShipItemsList())) {
|
|
|
+ List<Long> goodIds = ship.getShipItemsList().stream().map(PjShipItems::getGoodsId).distinct().collect(Collectors.toList());
|
|
|
+ List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
|
|
|
+ .eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjGoodsDesc::getIsDeleted, 0)
|
|
|
+ .in(PjGoodsDesc::getId, goodIds));
|
|
|
+ //修改库存账
|
|
|
+ List<PjStockDesc> pjStockDescList = iStockDescService.list(new LambdaQueryWrapper<PjStockDesc>().eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjStockDesc::getIsDeleted, 0)
|
|
|
+ .eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
|
|
|
+ .in(PjStockDesc::getGoodsId, goodIds));
|
|
|
+ List<Long> srcItemIds = ship.getShipItemsList().stream().map(PjShipItems::getSrcItemId).distinct().collect(Collectors.toList());
|
|
|
+ List<PjOrderItems> pjOrderItems = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
+ .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .in(PjOrderItems::getId, srcItemIds));
|
|
|
+ List<PjStockDesc> pjStockDescArrayList = new ArrayList<>();
|
|
|
+ List<PjOrderItems> orderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
+ .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .eq(PjOrderItems::getBsType, "PD")
|
|
|
+ .ne(PjOrderItems::getStatus, "已确认")
|
|
|
+ .in(PjOrderItems::getGoodsId, goodIds)
|
|
|
+ );
|
|
|
+ StringBuilder msg1 = new StringBuilder();
|
|
|
+ for (PjShipItems item : ship.getShipItemsList()) {
|
|
|
+ number = number.add(item.getSendNum());
|
|
|
+ //获得商品
|
|
|
+ PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
|
|
|
+ if (ObjectUtil.isEmpty(goodsDesc)) {
|
|
|
+ throw new RuntimeException("商品数据异常");
|
|
|
+ }
|
|
|
+ List<PjOrderItems> pjOrderItemsList1 = orderItemsList.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId())).collect(Collectors.toList());
|
|
|
+ if (!pjOrderItemsList1.isEmpty()) {
|
|
|
+ msg1.append(item.getGoodsName()).append(",");
|
|
|
+ }
|
|
|
+ //管理批次号
|
|
|
+ PjStockDesc stockOne;
|
|
|
+ if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
|
|
|
+ stockOne = pjStockDescList.stream()
|
|
|
+ .filter(e -> e.getGoodsId().equals(item.getGoodsId())
|
|
|
+ && e.getStorageId().equals(ship.getStorageId())
|
|
|
+ && e.getDot().equals(item.getDot())).findFirst().orElse(null);
|
|
|
+ } else {
|
|
|
+ stockOne = pjStockDescList.stream()
|
|
|
+ .filter(e -> e.getGoodsId().equals(item.getGoodsId())
|
|
|
+ && e.getStorageId().equals(ship.getStorageId())
|
|
|
+ && ObjectUtils.isNull(e.getDot())).findFirst().orElse(null);
|
|
|
+ }
|
|
|
+ if (stockOne != null) {
|
|
|
+ if (stockOne.getBalanceQuantity().compareTo(item.getSendNum()) < 0) {
|
|
|
+ throw new RuntimeException(goodsDesc.getCname() + "库存不足,禁止撤销");
|
|
|
+ }
|
|
|
+ stockOne.setUpdateTime(new Date());
|
|
|
+ stockOne.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ stockOne.setBalanceQuantity(stockOne.getBalanceQuantity().subtract(item.getSendNum()));
|
|
|
+ stockOne.setStoreInventory(stockOne.getBalanceQuantity());
|
|
|
+ stockOne.setInventoryAmount(stockOne.getInventoryAmount().subtract(item.getSendNum().multiply(item.getPrice())));
|
|
|
+ if (new BigDecimal("0.00").compareTo(stockOne.getInventoryAmount()) == 0 && new BigDecimal("0.00").compareTo(stockOne.getBalanceQuantity()) == 0) {
|
|
|
+ stockOne.setInventoryCostPrice(new BigDecimal("0.00"));
|
|
|
+ } else {
|
|
|
+ stockOne.setInventoryCostPrice(stockOne.getInventoryAmount().divide(stockOne.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+ stockOne.setVersion(stockOne.getVersion());
|
|
|
+ /*R res = iStockDescService.updateByIdNew(stockOne);
|
|
|
+ if (!res.isSuccess()) {
|
|
|
+ throw new RuntimeException(res.getMsg());
|
|
|
+ }*/
|
|
|
+ pjStockDescArrayList.add(stockOne);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("未查到库存数据");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (msg1.length() > 0) {
|
|
|
+ throw new RuntimeException("商品:" + msg1 + "正在盘点中,操作失败");
|
|
|
+ }
|
|
|
+ iStockDescService.updateBatchByIdNew(pjStockDescArrayList);
|
|
|
+ List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
|
|
|
+ List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
|
|
|
+ //查询所有上架商品
|
|
|
+ LambdaQueryWrapper<PjProductLaunch> productLaunchQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ productLaunchQueryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjProductLaunch::getIsDeleted, 0)
|
|
|
+ .isNull(PjProductLaunch::getSourceId)
|
|
|
+ .eq(PjProductLaunch::getSalesCompanyId, ship.getSalesCompanyId())
|
|
|
+ .in(PjProductLaunch::getGoodsId, goodIds);
|
|
|
+ List<PjProductLaunch> productLaunch = productLaunchService.list(productLaunchQueryWrapper);
|
|
|
+
|
|
|
+ for (PjShipItems item : ship.getShipItemsList()) {
|
|
|
+ /* ----------------------修改上架库存---------------------- */
|
|
|
+// List<PjStockDesc> stockDescList = pjStockDescList.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId())).collect(Collectors.toList());
|
|
|
+ PjOrderItems orderItems = pjOrderItems.stream().filter(e -> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
|
|
|
+ if (orderItems != null) {
|
|
|
+ orderItems.setSendNum(orderItems.getSendNum().subtract(item.getSendNum()));
|
|
|
+ pjOrderItemsList.add(orderItems);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("数据异常请联系管理员");
|
|
|
+ }
|
|
|
+
|
|
|
+ /*//库存总数量
|
|
|
+ BigDecimal balanceQuantity = stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ List<PjProductLaunch> pjProductLaunches = productLaunch.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId())).collect(Collectors.toList());
|
|
|
+ //修改上架数量
|
|
|
+ if (!pjProductLaunches.isEmpty()) {
|
|
|
+ for (PjProductLaunch e : pjProductLaunches) {
|
|
|
+ e.setInventory(balanceQuantity);
|
|
|
+ pjProductLaunchList.add(e);
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+ PjProductLaunch pjProductLaunches = productLaunch.stream()
|
|
|
+ .filter(i -> i.getGoodsId().equals(item.getGoodsId())).findFirst().orElse(null);
|
|
|
+ //修改上架数量
|
|
|
+ if (pjProductLaunches != null) {
|
|
|
+ pjProductLaunches.setInventory(pjProductLaunches.getInventory().subtract(item.getSendNum()));
|
|
|
+ pjProductLaunchList.add(pjProductLaunches);
|
|
|
+ }
|
|
|
+ /* ----------------------修改上架库存---------------------- */
|
|
|
+ }
|
|
|
+ orderItemsService.updateBatchById(pjOrderItemsList);
|
|
|
+ R res = productLaunchService.updateBatchById(pjProductLaunchList);
|
|
|
+ if (!res.isSuccess()) {
|
|
|
+ throw new RuntimeException(res.getMsg());
|
|
|
+ }
|
|
|
+ ship.setShipItemsList(ship.getShipItemsList());
|
|
|
+ ship.setNumberRows(ship.getShipItemsList().size());
|
|
|
+ }
|
|
|
+ //生成出库工单历史记录
|
|
|
+ saveHistory(ship.getId(), OrderTypeEnum.TREATWAREHOUSING.getType());
|
|
|
+
|
|
|
+ ship.setStatusName(OrderTypeEnum.TREATWAREHOUSING.getType());
|
|
|
+ baseMapper.updateById(ship);
|
|
|
+ //修改任务发货数量
|
|
|
+ PjShip rwShip = baseMapper.selectById(ship.getTaskId());
|
|
|
+ if (ObjectUtils.isNotNull(rwShip)) {
|
|
|
+ rwShip.setSendTotalNum(rwShip.getSendTotalNum().subtract(number));
|
|
|
+ if (rwShip.getSendTotalNum().compareTo(rwShip.getGoodsTotalNum()) == 0) {
|
|
|
+ rwShip.setStatusName("已完成");
|
|
|
+ } else {
|
|
|
+ rwShip.setStatusName("未完成");
|
|
|
+ }
|
|
|
+ rwShip.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ rwShip.setUpdateTime(new Date());
|
|
|
+ baseMapper.updateById(rwShip);
|
|
|
+ }
|
|
|
+ PjOrder order = orderMapper.selectById(ship.getOrdId());
|
|
|
+ if (ObjectUtil.isNotEmpty(order)) {
|
|
|
+ order.setStatus("待入库");
|
|
|
+ order.setXcxStatus("待入库");
|
|
|
+ order.setDeliveryBusinesDate(null);
|
|
|
+ orderMapper.updateById(order);
|
|
|
+ OrderRecord orderRecord = new OrderRecordVO();
|
|
|
+ orderRecord.setCreateTime(new Date());
|
|
|
+ orderRecord.setCreateUser(AuthUtil.getUserId());
|
|
|
+ orderRecord.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ orderRecord.setTenantId(AuthUtil.getTenantId());
|
|
|
+ orderRecord.setPid(order.getId());
|
|
|
+ orderRecord.setSrcNo(ship.getBillno());
|
|
|
+ orderRecord.setBsType(ship.getBizTypeName());
|
|
|
+ orderRecord.setStatus(ship.getStatusName());
|
|
|
+ orderRecordService.save(orderRecord);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("数据异常请联系管理员");
|
|
|
+ }
|
|
|
+ return R.data(ship);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R revokeWorkOrderReturns(String ids) {
|
|
|
+ List<Long> shipIds = Func.toLongList(ids);
|
|
|
+ for (Long id : shipIds) {
|
|
|
+ //获得出库任务数据
|
|
|
+ List<PjShip> pjShipList = baseMapper.selectList(new LambdaQueryWrapper<PjShip>()
|
|
|
+ .eq(PjShip::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjShip::getIsDeleted, 0)
|
|
|
+ .eq(PjShip::getTaskId, id)
|
|
|
+ .and(i -> i.eq(PjShip::getStatusName, OrderTypeEnum.TOBESHIPPEDOUT.getType())
|
|
|
+ .or().eq(PjShip::getStatusName, OrderTypeEnum.TREATWAREHOUSING.getType())));
|
|
|
+ if (ObjectUtil.isEmpty(pjShipList)) {
|
|
|
+ throw new RuntimeException("数据异常 请联系管理员");
|
|
|
+ }
|
|
|
+ List<Long> itemId = pjShipList.stream().map(PjShip::getId).collect(Collectors.toList());
|
|
|
+ baseMapper.deleteBatchIds(itemId);
|
|
|
+ PjShip rwShip = new PjShip();
|
|
|
+ //修改出库任务状态
|
|
|
+ rwShip.setStatusName("未完成");
|
|
|
+ rwShip.setId(id);
|
|
|
+ baseMapper.updateById(rwShip);
|
|
|
+ }
|
|
|
+ return R.success("操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R submitReturns(PjShip ship) {
|
|
|
+ //获得所属公司
|
|
|
+ R<Dept> dept = sysClient.getDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ if (ObjectUtil.isNotEmpty(dept)) {
|
|
|
+ ship.setSalesCompanyId(dept.getData().getId());
|
|
|
+ ship.setSalesCompanyName(dept.getData().getFullName());
|
|
|
+ } else {
|
|
|
+ throw new SecurityException("请选择所属公司");
|
|
|
+ }
|
|
|
+
|
|
|
+ //库管员名称
|
|
|
+ if (ObjectUtils.isNotNull(ship.getStockClerkId())) {
|
|
|
+ ship.setStockClerkName(userClient.userInfoById(ship.getStockClerkId()).getData().getRealName());
|
|
|
+ }
|
|
|
+ ship.setStorageName(storageDescMapper.selectById(ship.getStorageId()).getCname());
|
|
|
+
|
|
|
+ if (ship.getId() == null) {
|
|
|
+ // 获取系统编号
|
|
|
+ R billNo = serialClient.getBillNo(ship.getBizTypeName(), ship.getBizTypeName(), ship.getBizTypeName());
|
|
|
+ if (billNo.getCode() != 200) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return R.fail(500, "生成系统编号失败");
|
|
|
+ }
|
|
|
+ if (ship.getBizTypeName().equals(OrderTypeEnum.SHGD.getType())) {
|
|
|
+ ship.setStatusName(OrderTypeEnum.TREATWAREHOUSING.getType());
|
|
|
+ } else {
|
|
|
+ ship.setStatusName(OrderTypeEnum.TOBESHIPPEDOUT.getType());
|
|
|
+ }
|
|
|
+ ship.setBillno((String) billNo.getData());
|
|
|
+ ship.setOrdNo((String) billNo.getData());
|
|
|
+ ship.setCreateTime(new Date());
|
|
|
+ ship.setCreateUser(AuthUtil.getUserId());
|
|
|
+ ship.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ ship.setTenantId(AuthUtil.getTenantId());
|
|
|
+ baseMapper.insert(ship);
|
|
|
+ } else {
|
|
|
+ ship.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ ship.setUpdateTime(new Date());
|
|
|
+ baseMapper.updateById(ship);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存订单明细
|
|
|
+ if (CollectionUtils.isNotEmpty(ship.getShipItemsList())) {
|
|
|
+ List<PjShipItems> shipItemsList = new ArrayList<>();
|
|
|
+ ship.getShipItemsList().forEach(item -> {
|
|
|
+ if (item.getId() == null) {
|
|
|
+ item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ item.setCreateTime(new Date());
|
|
|
+ item.setCreateUser(AuthUtil.getUserId());
|
|
|
+ item.setPid(ship.getId());
|
|
|
+ item.setTenantId(AuthUtil.getTenantId());
|
|
|
+ } else {
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setPid(ship.getId());
|
|
|
+ }
|
|
|
+ shipItemsList.add(item);
|
|
|
+ });
|
|
|
+ shipItemsService.saveOrUpdateBatch(shipItemsList);
|
|
|
+ ship.setShipItemsList(ship.getShipItemsList());
|
|
|
+ ship.setNumberRows(ship.getShipItemsList().size());
|
|
|
+ ship.setGoodsTotalNum(ship.getShipItemsList().stream().map(PjShipItems::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ ship.setSendTotalNum(ship.getShipItemsList().stream().map(PjShipItems::getSendNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ }
|
|
|
+ baseMapper.updateById(ship);
|
|
|
+
|
|
|
+ // 保存附件
|
|
|
+ if (CollectionUtils.isNotEmpty(ship.getFilesList())) {
|
|
|
+ List<PjpfFiles> filesList = new ArrayList<>();
|
|
|
+ ship.getFilesList().forEach(item -> {
|
|
|
+ if (item.getId() == null) {
|
|
|
+ item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ item.setCreateTime(new Date());
|
|
|
+ item.setCreateUser(AuthUtil.getUserId());
|
|
|
+ item.setPid(ship.getId());
|
|
|
+ item.setTenantId(AuthUtil.getTenantId());
|
|
|
+ item.setType(ship.getBsType());
|
|
|
+ } else {
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setPid(ship.getId());
|
|
|
+ }
|
|
|
+ filesList.add(item);
|
|
|
+ });
|
|
|
+ pjpfFilesService.saveOrUpdateBatch(filesList);
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.data(ship);
|
|
|
+ }
|
|
|
+
|
|
|
}
|