简易模式收货及上架;

This commit is contained in:
王奎兴
2026-07-13 15:17:16 +08:00
parent 444b6add0a
commit 35122c0fca
7 changed files with 276 additions and 17 deletions
@@ -544,23 +544,16 @@ public class StockInOrderApplicationService {
*/
public Boolean auditState(StockInOrderDO stockInOrderDO){
Boolean b = stockInOrderDomainService.auditState(stockInOrderDO);
// List<Long> inOrderIds = stockInOrderDO.getInOrderIds();
// if (inOrderIds != null && !inOrderIds.isEmpty()) {
// StockInOrder stockInOrder = stockInOrderService.getById(inOrderIds.get(0));
// Integer needCustomsDeclaration = stockInOrder.getNeedCustomsDeclaration();
// Integer auditStatus = stockInOrder.getAuditStatus();
// try {
// if (needCustomsDeclaration != null && needCustomsDeclaration == 1 && auditStatus != null && auditStatus == 3) {
// Long inOrderId = stockInOrder.getInOrderId();
// List<Long> idList = new ArrayList<>();
// idList.add(inOrderId);
// //batchPush(idList);
// }
// } catch (Exception e) {
// throw new ServiceException("推送关务系统失败!");
// }
// }
return b;
}
public Boolean receiptEasyMode(StockInOrderDO stockInOrderDO){
Boolean b = stockInOrderDomainService.receiptEasyMode(stockInOrderDO);
return b;
}
public Boolean shelfEasyMode(StockInOrderDO stockInOrderDO){
Boolean b = stockInOrderDomainService.shelfEasyMode(stockInOrderDO);
return b;
}
@@ -414,4 +414,8 @@ public class InMaterialDetail extends BaseVOEntity {
private BigDecimal erpPriceGw;
//申报总价
private BigDecimal amountGw;
//仓码简易模式收货上架
private BigDecimal collectQuantity;
private String shelfJson;
}
@@ -439,4 +439,8 @@ public class InMaterialDetailPO extends StockInOrderBasePO {
//申报总价
private BigDecimal amountGw;
private String khdm;
//仓码简易模式收货上架
private BigDecimal collectQuantity;
private String shelfJson;
}
@@ -404,4 +404,8 @@ public class InMaterialDetailDO extends StockInOrderBaseDO {
private BigDecimal erpPriceGw;
//申报总价
private BigDecimal amountGw;
//仓码简易模式收货上架
private BigDecimal collectQuantity;
private String shelfJson;
}
@@ -1,14 +1,17 @@
package com.mhd.wms.domain.stockInOrder.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.mhd.common.core.constant.SnowFlakeConstants;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.core.utils.OrderSequence;
import com.mhd.common.core.utils.StringUtils;
import com.mhd.common.core.utils.bean.BeanUtils;
import com.mhd.common.core.utils.uuid.IdGenerator;
import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.system.api.SystemServiceFeign;
@@ -27,9 +30,11 @@ import com.mhd.wms.domain.materialWarehouseControl.repository.facade.IMaterialWa
import com.mhd.wms.domain.materialWarehouseControl.repository.po.MaterialWarehouseControlPO;
import com.mhd.wms.domain.qualityInspection.repository.facade.IQualityInspectionService;
import com.mhd.wms.domain.qualityInspection.repository.todo.QualityInspectionDO;
import com.mhd.wms.domain.receiptMaterialDetail.entity.ReceiptMaterialDetail;
import com.mhd.wms.domain.receiptMaterialDetail.repository.facade.IReceiptMaterialDetailService;
import com.mhd.wms.domain.receiptMaterialDetail.repository.po.ReceiptMaterialDetailPO;
import com.mhd.wms.domain.receiptMaterialDetail.repository.todo.ReceiptMaterialDetailDO;
import com.mhd.wms.domain.shelfMaterialDetail.entity.ShelfMaterialDetail;
import com.mhd.wms.domain.shelfMaterialDetail.repository.facade.IShelfMaterialDetailService;
import com.mhd.wms.domain.shelfMaterialDetail.repository.po.ShelfMaterialDetailPO;
import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO;
@@ -37,9 +42,13 @@ import com.mhd.wms.domain.stockInOrder.entity.StockInOrder;
import com.mhd.wms.domain.stockInOrder.repository.facade.IStockInOrderService;
import com.mhd.wms.domain.stockInOrder.repository.po.StockInOrderPO;
import com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO;
import com.mhd.wms.domain.stockReceiptOrder.entity.StockReceiptOrder;
import com.mhd.wms.domain.stockReceiptOrder.repository.facade.IStockReceiptOrderService;
import com.mhd.wms.domain.stockReceiptOrder.repository.po.StockReceiptOrderPO;
import com.mhd.wms.domain.stockReceiptOrder.repository.todo.StockReceiptOrderDO;
import com.mhd.wms.domain.stockReceiptOrder.service.StockReceiptOrderDomainService;
import com.mhd.wms.domain.stockShelfOrder.entity.StockShelfOrder;
import com.mhd.wms.domain.stockShelfOrder.repository.facade.IStockShelfOrderService;
import com.mhd.wms.domain.stockShelfOrder.repository.po.StockShelfOrderPO;
import com.mhd.wms.domain.stockShelfOrder.repository.todo.StockShelfOrderDO;
import com.mhd.wms.domain.stockShelfOrder.service.StockShelfOrderDomainService;
@@ -50,6 +59,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.*;
@@ -81,12 +91,18 @@ public class StockInOrderDomainService {
private IMaterialGoodsRuleService materialGoodsRuleService;
@Autowired
private IMaterialWarehouseControlService materialWarehouseControlService;
@Autowired
@Resource
private SystemServiceFeign systemServiceFeign;
@Autowired
private IReceiptMaterialDetailService receiptMaterialDetailService;
@Autowired
private IShelfMaterialDetailService shelfMaterialDetailService;
@Autowired
private IStockReceiptOrderService stockReceiptOrderService;
@Autowired
private IStockShelfOrderService stockShelfOrderService;
@Autowired
private IdGenerator idGenerator;
/**
* 分页查询入库单列表
@@ -483,6 +499,220 @@ public class StockInOrderDomainService {
.in(StockInOrder::getInOrderId, stockInOrderDO.getInOrderIds()));
}
@Transactional(rollbackFor = Exception.class)
public Boolean receiptEasyMode(StockInOrderDO stockInOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
String userRealName = loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null
? loginUser.getUserPo().getUserName()
: (loginUser.getRealname() != null ? loginUser.getRealname() : loginUser.getUsername());
String inOrderNumber = stockInOrderDO.getInOrderNumber();
List<InMaterialDetailDO> materialDetailList = stockInOrderDO.getMaterialDetailList();
List<InMaterialDetailDO> receiptMaterialDetailList = materialDetailList.stream()
.filter(m -> m.getCollectQuantity() != null && m.getCollectQuantity().compareTo(BigDecimal.ZERO) != 0)
.collect(Collectors.toList());
if (receiptMaterialDetailList!=null && receiptMaterialDetailList.size()>0) {
for (InMaterialDetailDO inMaterialDetailDO : receiptMaterialDetailList) {
BigDecimal collectQuantity = inMaterialDetailDO.getCollectQuantity();
Long materialBaseInfoId = inMaterialDetailDO.getMaterialBaseInfoId();
Long uniqueId = inMaterialDetailDO.getUniqueId();
ReceiptMaterialDetail receiptMaterialDetail = receiptMaterialDetailService.getOne(new QueryWrapper<ReceiptMaterialDetail>().lambda()
.eq(ReceiptMaterialDetail::getMaterialBaseInfoId, materialBaseInfoId)
.eq(ReceiptMaterialDetail::getInUniqueId, uniqueId)
.eq(ReceiptMaterialDetail::getDelFlag, 1), false);
receiptMaterialDetail.setReceiptQuantity(collectQuantity);
BigDecimal quantity = receiptMaterialDetail.getQuantity();
if (quantity != null && quantity.compareTo(BigDecimal.ZERO) == 0) {
receiptMaterialDetail.setReceiptStatus(3);
}
receiptMaterialDetailService.updateById(receiptMaterialDetail);
StockReceiptOrder stockReceiptOrder = stockReceiptOrderService.getOne(new QueryWrapper<StockReceiptOrder>().lambda()
.eq(StockReceiptOrder::getInOrderNumber, inOrderNumber)
.eq(StockReceiptOrder::getDelFlag, 1), false);
if (stockReceiptOrder != null) {
stockReceiptOrder.setStatus(2);
stockReceiptOrder.setReceiptQuantity(stockReceiptOrder.getReceiptQuantity().add(collectQuantity));
stockReceiptOrderService.updateById(stockReceiptOrder);
}
StockInOrder stockInOrder = stockInOrderService.getOne(new QueryWrapper<StockInOrder>().lambda()
.eq(StockInOrder::getInOrderNumber, inOrderNumber)
.eq(StockInOrder::getDelFlag, 1), false);
if (stockInOrder != null) {
stockInOrder.setStatus(3);
stockInOrderService.updateById(stockInOrder);
}
List<StockShelfOrder> list = stockShelfOrderService.list(new QueryWrapper<StockShelfOrder>().lambda()
.eq(StockShelfOrder::getInOrderNumber, inOrderNumber)
.eq(StockShelfOrder::getDelFlag, 1));
StockShelfOrder stockShelfOrder = new StockShelfOrder();
if (list!=null && list.size()>0) {
stockShelfOrder = list.get(0);
} else {
BeanUtils.copyProperties(stockReceiptOrder, stockShelfOrder);
stockShelfOrder.setShelfOrderNumber(OrderSequence.getOrderCode("SJ"));
stockShelfOrderService.save(stockShelfOrder);
}
log.info("生成上架单成功,上架单编号:{}", stockShelfOrder.getShelfOrderNumber());
ShelfMaterialDetail shelfMaterialDetail = new ShelfMaterialDetail();
ShelfMaterialDetail one = shelfMaterialDetailService.getOne(new QueryWrapper<ShelfMaterialDetail>().lambda()
.eq(ShelfMaterialDetail::getMaterialBaseInfoId, materialBaseInfoId)
.eq(ShelfMaterialDetail::getInUniqueId, uniqueId)
.eq(ShelfMaterialDetail::getLevel, 1)
.eq(ShelfMaterialDetail::getDelFlag, 1), false);
if (one != null) {
one.setQuantity(collectQuantity);
shelfMaterialDetailService.updateById(one);
} else {
BeanUtils.copyProperties(inMaterialDetailDO, shelfMaterialDetail);
shelfMaterialDetail.setShelfOrderNumber(stockShelfOrder.getShelfOrderNumber());
shelfMaterialDetail.setQuantity(collectQuantity);
shelfMaterialDetail.setInUniqueId(uniqueId);
shelfMaterialDetail.setReceiptUniqueId(receiptMaterialDetail.getUniqueId());
shelfMaterialDetailService.save(shelfMaterialDetail);
}
log.info("生成上架单成功,上架单编号:{},上架单明细编号:{}", stockShelfOrder.getShelfOrderNumber(), shelfMaterialDetail.getShelfOrderNumber());
}
}
return stockInOrderService.update(null, new UpdateWrapper<StockInOrder>().lambda()
.set(StockInOrder::getAuditStatus, stockInOrderDO.getAuditStatus())
.in(StockInOrder::getInOrderId, stockInOrderDO.getInOrderIds()));
}
@Transactional(rollbackFor = Exception.class)
public Boolean shelfEasyMode(StockInOrderDO stockInOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
String userRealName = loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null
? loginUser.getUserPo().getUserName()
: (loginUser.getRealname() != null ? loginUser.getRealname() : loginUser.getUsername());
String inOrderNumber = stockInOrderDO.getInOrderNumber();
List<InMaterialDetailDO> materialDetailList = stockInOrderDO.getMaterialDetailList();
List<InMaterialDetailDO> receiptMaterialDetailList = materialDetailList.stream()
.filter(m -> StringUtils.isNotBlank(m.getShelfJson()))
.collect(Collectors.toList());
if (receiptMaterialDetailList!=null && receiptMaterialDetailList.size()>0) {
for (InMaterialDetailDO inMaterialDetailDO : receiptMaterialDetailList) {
Long materialDetailId1 = inMaterialDetailDO.getMaterialDetailId();
Long materialBaseInfoId = inMaterialDetailDO.getMaterialBaseInfoId();
Long uniqueId = inMaterialDetailDO.getUniqueId();
String shelfJson = inMaterialDetailDO.getShelfJson();
List<Map<String, Object>> shelfList = JSON.parseObject(shelfJson, new TypeReference<List<Map<String, Object>>>(){});
StockInOrder stockInOrder = stockInOrderService.getOne(new QueryWrapper<StockInOrder>().lambda()
.eq(StockInOrder::getInOrderNumber, inOrderNumber)
.eq(StockInOrder::getDelFlag, 1), false);
if (stockInOrder != null) {
stockInOrder.setStatus(4);
stockInOrderService.updateById(stockInOrder);
}
int index=0;
for (Map<String, Object> stringObjectMap : shelfList) {
BigDecimal shelvesQuantity = (BigDecimal) stringObjectMap.get("shelvesQuantity");
String shelfOrderNumber = (String) stringObjectMap.get("shelfOrderNumber");
String warehouseCode = (String) stringObjectMap.get("warehouseCode");
String warehouseName = (String) stringObjectMap.get("warehouseName");
String storageCode = (String) stringObjectMap.get("storageCode");
String storageName = (String) stringObjectMap.get("storageName");
String storageLocationCode = (String) stringObjectMap.get("storageLocationCode");
String storageLocationName = (String) stringObjectMap.get("storageLocationName");
Long warehouseId = (Long) stringObjectMap.get("warehouseId");
Long storageSectionId = (Long) stringObjectMap.get("storageSectionId");
Long storageLocationId = (Long) stringObjectMap.get("storageLocationId");
// Integer level = (Integer) stringObjectMap.get("level");
// 如果 materialDetailId 不为空则更新上架单明细
if (stringObjectMap.containsKey("materialDetailId")) {
Long materialDetailId = (Long) stringObjectMap.get("materialDetailId");
ShelfMaterialDetail detail = shelfMaterialDetailService.getById(materialDetailId);
detail.setShelvesQuantity(shelvesQuantity);
detail.setAlreadyShelvesQuantity(shelvesQuantity);
detail.setWarehouseId(warehouseId);
detail.setStorageSectionId(storageSectionId);
detail.setStorageLocationId(storageLocationId);
detail.setWarehouseCode(warehouseCode);
detail.setWarehouseName(warehouseName);
detail.setStorageCode(storageCode);
detail.setStorageName(storageName);
detail.setStorageLocationCode(storageLocationCode);
detail.setStorageLocationName(storageLocationName);
shelfMaterialDetailService.updateById(detail);
continue;
}
// 如果 materialDetailId 为空则创建上架单明细
List<StockShelfOrder> list = stockShelfOrderService.list(new QueryWrapper<StockShelfOrder>().lambda()
.eq(StockShelfOrder::getInOrderNumber, inOrderNumber)
.eq(StockShelfOrder::getDelFlag, 1));
StockShelfOrder stockShelfOrder = new StockShelfOrder();
if (list!=null && list.size()>0) {
stockShelfOrder = list.get(0);
stockShelfOrder.setStatus(2);
stockShelfOrderService.updateById(stockShelfOrder);
} else {
throw new RuntimeException("未找到上架单!");
}
ShelfMaterialDetail one = shelfMaterialDetailService.getOne(new QueryWrapper<ShelfMaterialDetail>().lambda()
.eq(ShelfMaterialDetail::getMaterialBaseInfoId, materialBaseInfoId)
.eq(ShelfMaterialDetail::getInUniqueId, uniqueId)
.eq(ShelfMaterialDetail::getDelFlag, 1), false);
if (one != null) {
if (index == 0) {
one.setShelvesQuantity(shelvesQuantity);
one.setAlreadyShelvesQuantity(shelvesQuantity);
one.setWarehouseId(warehouseId);
one.setStorageSectionId(storageSectionId);
one.setStorageLocationId(storageLocationId);
one.setShelfOrderNumber(shelfOrderNumber);
one.setWarehouseCode(warehouseCode);
one.setWarehouseName(warehouseName);
one.setStorageCode(storageCode);
one.setStorageName(storageName);
one.setStorageLocationCode(storageLocationCode);
one.setStorageLocationName(storageLocationName);
one.setLevel(1);
one.setParentUniqueId(0l);
one.setShelvesStatus(3);
shelfMaterialDetailService.updateById(one);
stringObjectMap.put("materialDetailId", one.getMaterialDetailId());
stringObjectMap.put("level",1);
} else {
ShelfMaterialDetail shelfMaterialDetail = new ShelfMaterialDetail();
BeanUtils.copyProperties(one, shelfMaterialDetail);
shelfMaterialDetail.setQuantity(BigDecimal.ZERO);
shelfMaterialDetail.setShelvesQuantity(shelvesQuantity);
shelfMaterialDetail.setAlreadyShelvesQuantity(shelvesQuantity);
shelfMaterialDetail.setShelfOrderNumber(shelfOrderNumber);
shelfMaterialDetail.setWarehouseCode(warehouseCode);
shelfMaterialDetail.setWarehouseName(warehouseName);
shelfMaterialDetail.setStorageCode(storageCode);
shelfMaterialDetail.setStorageName(storageName);
shelfMaterialDetail.setStorageLocationCode(storageLocationCode);
shelfMaterialDetail.setStorageLocationName(storageLocationName);
shelfMaterialDetail.setLevel(2);
shelfMaterialDetail.setParentUniqueId(one.getUniqueId());
shelfMaterialDetail.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
shelfMaterialDetail.setInUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
shelfMaterialDetail.setReceiptUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
shelfMaterialDetail.setShelvesStatus(3);
shelfMaterialDetailService.save(shelfMaterialDetail);
stringObjectMap.put("materialDetailId", shelfMaterialDetail.getMaterialDetailId());
stringObjectMap.put("level",2 );
}
} else {
throw new RuntimeException("未找到上架单明细!");
}
index++;
}
InMaterialDetail inMaterialDetail = materialDetailService.getById(materialDetailId1);
inMaterialDetail.setShelfJson(JSON.toJSONString(shelfList));
materialDetailService.updateById(inMaterialDetail);
}
}
return true;
}
/**
* @description 取消入库单
@@ -401,4 +401,8 @@ public class InMaterialDetailDTO extends BaseVOEntity {
private BigDecimal erpPriceGw;
//申报总价
private BigDecimal amountGw;
//仓码简易模式收货上架
private BigDecimal collectQuantity;
private String shelfJson;
}
@@ -192,6 +192,26 @@ public class StockInOrderApi extends BaseController {
return AjaxResult.success();
}
/**
* 审核入库单
*/
@ApiOperation("pda简易模式收货")
@PostMapping(value = "/receiptEasyMode")
public AjaxResult receiptEasyMode(@RequestBody StockInOrderDTO stockInOrderDTO) {
StockInOrderDO stockInOrderDO = stockInOrderAssembler.toDO(stockInOrderDTO);
return AjaxResult.success(stockInOrderApplicationService.receiptEasyMode(stockInOrderDO));
}
/**
* 审核入库单
*/
@ApiOperation("pda简易模式上架")
@PostMapping(value = "/shelfEasyMode")
public AjaxResult shelfEasyMode(@RequestBody StockInOrderDTO stockInOrderDTO) {
StockInOrderDO stockInOrderDO = stockInOrderAssembler.toDO(stockInOrderDTO);
return AjaxResult.success(stockInOrderApplicationService.shelfEasyMode(stockInOrderDO));
}
/**
* oms下发单明细保存
*/