PDA上架,复核拣货查询修改

This commit is contained in:
秦鸿展
2026-03-13 13:37:00 +08:00
parent 3029e9fee1
commit f9497f7c15
7 changed files with 95 additions and 15 deletions
@@ -461,11 +461,13 @@ public class InvestigationManageApplicationService {
}
/**
* 按物料盘点 获取盘点单详细信息(动态返回物料绑定的批次属性)
* 按物料盘点 获取盘点单详细信息(动态返回物料绑定的批次属性、监盘人、盘点进度
*/
public InvestigationManagePO getInfoByMaterial(Long investigationManageId) {
InvestigationManagePO po = investigationManageDomainService.getInfoByMaterial(investigationManageId);
enrichInvestigationWithBatchAttributes(po);
enrichInvestigationManName(po);
enrichInvestigationProgress(po);
return po;
}
@@ -519,6 +521,63 @@ public class InvestigationManageApplicationService {
setMaterialMoreDetailListFromInventory(detailList, batchDetailMap);
}
/**
* 填充监盘人姓名(investigationManName为空时根据investigationManBy从用户服务获取)
*/
private void enrichInvestigationManName(InvestigationManagePO po) {
if (po == null) {
return;
}
if (StringUtils.isBlank(po.getInvestigationManName()) && po.getInvestigationManBy() != null) {
try {
AjaxResult ajaxResult = userServiceFeign.getInfo(po.getInvestigationManBy());
if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) {
UserPo userPo = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
if (userPo != null && StringUtils.isNotBlank(userPo.getUserName())) {
po.setInvestigationManName(userPo.getUserName());
}
}
} catch (Exception e) {
log.warn("获取监盘人姓名失败,investigationManBy={},错误:{}", po.getInvestigationManBy(), e.getMessage());
}
}
}
/**
* 填充盘点进度(investigationProgress=已盘点状态的库存数量/盘点单库存总数量)
*/
private void enrichInvestigationProgress(InvestigationManagePO po) {
if (po == null || StringUtils.isBlank(po.getInvestigationNumber())) {
return;
}
InvestigetionManageDetailDO queryDO = new InvestigetionManageDetailDO();
queryDO.setInvestigationNumber(po.getInvestigationNumber());
List<InvestigetionManageDetailPO> detailList = investigetionManageDetailDomainService.queryList(queryDO);
if (CollectionUtils.isEmpty(detailList)) {
po.setTotalInventoryQuantity(BigDecimal.ZERO);
po.setInvestigatedInventoryQuantity(BigDecimal.ZERO);
po.setInvestigationProgress(BigDecimal.ZERO);
return;
}
BigDecimal totalQuantity = BigDecimal.ZERO;
BigDecimal investigatedQuantity = BigDecimal.ZERO;
for (InvestigetionManageDetailPO detail : detailList) {
if (detail.getInventoryQuantity() != null) {
totalQuantity = totalQuantity.add(detail.getInventoryQuantity());
if (Integer.valueOf(4).equals(detail.getInvestigationStatus())) {
investigatedQuantity = investigatedQuantity.add(detail.getInventoryQuantity());
}
}
}
po.setTotalInventoryQuantity(totalQuantity);
po.setInvestigatedInventoryQuantity(investigatedQuantity);
if (totalQuantity.compareTo(BigDecimal.ZERO) > 0) {
po.setInvestigationProgress(investigatedQuantity.divide(totalQuantity, 4, RoundingMode.HALF_UP));
} else {
po.setInvestigationProgress(BigDecimal.ZERO);
}
}
/**
* @description 按物料分组 盘点
* @author ZhouGY
@@ -1046,6 +1046,7 @@ public class StockReceiptOrderApplicationService {
public Boolean receivingGoods(StockReceiptOrderDO stockReceiptOrderDO){
//收货装配参数
StockReceiptOrderDO assembleStockReceiptOrderDO = assembleParamByReceipt(stockReceiptOrderDO);
assembleStockReceiptOrderDO.setFromPda(false); // PC收货完成,上架单是否下发=否
return stockReceiptOrderDomainService.receivingGoods(assembleStockReceiptOrderDO);
}
@@ -1073,6 +1074,7 @@ public class StockReceiptOrderApplicationService {
if (CollectionUtils.isEmpty(assembleStockReceiptOrderDO.getMaterialDetailList())) {
throw new ServiceException("无有效收货数据,请确认已填写收货数量(收货数量不能全部为0)");
}
assembleStockReceiptOrderDO.setFromPda(true); // PDA收货完成,上架单是否下发=是
return stockReceiptOrderDomainService.receivingGoods(assembleStockReceiptOrderDO);
}
@@ -1154,14 +1156,25 @@ public class StockReceiptOrderApplicationService {
}
/**
* @description 完成收货
* @description 完成收货PC端)
* @author ZhouGY
* @date 2024/5/22 16:20
* @param receiptOrderId
* @return Boolean
*/
public Boolean completeReceipt(Long receiptOrderId){
return stockReceiptOrderDomainService.completeReceipt(receiptOrderId);
return stockReceiptOrderDomainService.completeReceipt(receiptOrderId, false);
}
/**
* @description 完成收货(PDA端,上架单是否下发=是)
* @author ZhouGY
* @date 2024/5/22 16:20
* @param receiptOrderId
* @return Boolean
*/
public Boolean completeReceiptByApp(Long receiptOrderId){
return stockReceiptOrderDomainService.completeReceipt(receiptOrderId, true);
}
public Boolean genStockShelfOrder(Long receiptOrderId){
@@ -166,4 +166,7 @@ public class StockReceiptOrderDO extends StockInOrderBaseDO {
@ApiModelProperty(name = "创建时间查询条件结束日期")
private String createTimeEnd;
@ApiModelProperty("是否来自PDA收货:true-PDA收货完成,false-PC收货完成(用于上架单是否下发:PDA=是,PC=否)")
private Boolean fromPda;
}
@@ -624,7 +624,7 @@ public class StockReceiptOrderDomainService {
long receiptMaterialQuantity = stockReceiptOrderDO.getMaterialDetailList().stream().filter(receiptMaterialDetailDO -> receiptMaterialDetailDO.getReceiptStatus() < 3).count();
//收货数量大于等于计划数量 直接完成收货
if (stockReceiptOrder.getReceiptQuantity().compareTo(stockReceiptOrderPO.getQuantity()) >= 0 && receiptMaterialQuantity == 0){
completeReceipt(stockReceiptOrderPO.getReceiptOrderId());
completeReceipt(stockReceiptOrderPO.getReceiptOrderId(), stockReceiptOrderDO.getFromPda());
}
return true;
}
@@ -650,14 +650,15 @@ public class StockReceiptOrderDomainService {
}
/**
* @param receiptOrderId
* @param receiptOrderId 收货单ID
* @param fromPda 是否来自PDAtrue-PDA收货完成(上架单是否下发=是),false/null-PC收货完成(上架单是否下发=否)
* @return Boolean
* @description 完成收货
* @author ZhouGY
* @date 2024/5/22 16:20
*/
@Transactional(rollbackFor = Exception.class)
public Boolean completeReceipt(Long receiptOrderId) {
public Boolean completeReceipt(Long receiptOrderId, Boolean fromPda) {
StockReceiptOrderPO stockReceiptOrderPO = stockReceiptOrderService.getInfo(receiptOrderId);
if (stockReceiptOrderPO == null) {
throw new ServiceException("收货单不存在");
@@ -677,8 +678,8 @@ public class StockReceiptOrderDomainService {
if (stockReceiptOrderPO.getReceiptQuantity().compareTo(stockReceiptOrderPO.getQuantity()) != 0){
abnormal = 1;
}
//根据收货数量生成上架
genStockShelfOrder(stockReceiptOrderPO);
//根据收货数量生成上架(PDA=是否下发是,PC=是否下发否)
genStockShelfOrder(stockReceiptOrderPO, fromPda);
//生成上架单后,更新入库单状态为4(上架中)
if (StringUtils.isNotBlank(stockReceiptOrderPO.getInOrderNumber())) {
@@ -725,8 +726,8 @@ public class StockReceiptOrderDomainService {
if (stockReceiptOrderPO == null) {
throw new ServiceException("收货单不存在");
}
return genStockShelfOrder(stockReceiptOrderPO);
// 手动生成上架单:仅App(PDA)调用,是否下发=是
return genStockShelfOrder(stockReceiptOrderPO, true);
}
/**
@@ -953,14 +954,15 @@ public class StockReceiptOrderDomainService {
}
/**
* @param stockReceiptOrderPO
* @param stockReceiptOrderPO 收货单
* @param fromPda 是否来自PDAtrue-是否下发=是(1)false/null-是否下发=否(2)
* @return Boolean
* @description 生成上架单
* @author ZhouGY
* @date 2024/5/24 15:47
*/
@Transactional(rollbackFor = Exception.class)
public Boolean genStockShelfOrder(StockReceiptOrderPO stockReceiptOrderPO) {
public Boolean genStockShelfOrder(StockReceiptOrderPO stockReceiptOrderPO, Boolean fromPda) {
//构造上架单信息
List<StockShelfOrderDO> stockShelfOrderDOList = new ArrayList<>();
StockShelfOrderDO stockShelfOrderDO = new StockShelfOrderDO();
@@ -1093,6 +1095,8 @@ public class StockReceiptOrderDomainService {
stockShelfOrderDO.setReceiptQuantity(receiptQuantity);
stockShelfOrderDO.setMaterialDetailList(shelfMaterialDetailDOList);
stockShelfOrderDO.setMaterialQuantity(shelfMaterialDetailDOList.size());
// PDA收货完成=是否下发是(1),PC收货完成=是否下发否(2)
stockShelfOrderDO.setTaskDistribution(fromPda != null && fromPda ? 1 : 2);
stockShelfOrderDOList.add(stockShelfOrderDO);
return stockShelfOrderDomainService.genStockShelfOrder(stockShelfOrderDOList);
}
@@ -162,8 +162,8 @@ public class StockShelfOrderDomainService {
if (StringUtils.isBlank(stockShelfOrder.getShelfOrderNumber())){
stockShelfOrder.setShelfOrderNumber(OrderSequence.getOrderCode("SJ"));
}
// 收货完成生成上架任务时任务下发默认值为否2-未下发强制覆盖避免从收货单复制到错误值
stockShelfOrder.setTaskDistribution(2);
// PDA收货完成=是否下发是(1)PC收货完成/无单收货/整单收货=是否下发否(2)DO未设置时默认2
stockShelfOrder.setTaskDistribution(stockShelfOrderDO.getTaskDistribution() != null ? stockShelfOrderDO.getTaskDistribution() : 2);
stockShelfOrder.setCreateBy(loginUser.getUserid());
stockShelfOrder.setCreateByName(userRealName);
stockShelfOrder.setCreateTime(new Date());
@@ -71,7 +71,7 @@ public class StockReceiptOrderAppApi extends BaseController {
@ApiOperation("完成收货")
@PostMapping("/completeReceipt")
public AjaxResult completeReceipt(@RequestBody StockReceiptOrderDTO stockReceiptOrderDTO) {
return toAjax(stockReceiptOrderApplicationService.completeReceipt(stockReceiptOrderDTO.getReceiptOrderId()));
return toAjax(stockReceiptOrderApplicationService.completeReceiptByApp(stockReceiptOrderDTO.getReceiptOrderId()));
}
@ApiOperation("生成上架单")
@@ -29,6 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="unitName" column="unit_name" />
<result property="materialWarehouseControlId" column="material_warehouse_control_id" />
<result property="serialNumberManage" column="serial_number_manage" />
<result property="materialInventoryId" column="material_inventory_id" />
<result property="warehouseId" column="warehouse_id" />
<result property="warehouseCode" column="warehouse_code" />
<result property="warehouseName" column="warehouse_name" />