diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java index 5a3dfffeb..3fb7b31f0 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java @@ -2,8 +2,11 @@ package com.mhd.wms.application.service.reviewOrder; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mhd.common.core.exception.ServiceException; import com.mhd.common.core.utils.DateUtils; +import com.mhd.common.core.utils.OrderSequence; import com.mhd.common.core.utils.StringUtils; import com.mhd.common.security.utils.SecurityUtils; import com.mhd.common.core.web.domain.AjaxResult; @@ -13,6 +16,13 @@ import com.mhd.system.api.model.LoginUser; import com.mhd.wms.domain.materialMoreDetail.repository.po.MaterialMoreDetailPO; import com.mhd.wms.domain.materialMoreDetail.repository.todo.MaterialMoreDetailDO; import com.mhd.wms.domain.materialMoreDetail.service.MaterialMoreDetailDomainService; +import com.mhd.wms.domain.deliveTask.repository.facade.IDeliveTaskService; +import com.mhd.wms.domain.deliveTask.repository.todo.DeliveTaskDO; +import com.mhd.wms.domain.handoverTaskOrder.entity.HandoverTaskOrder; +import com.mhd.wms.domain.handoverTaskOrder.repository.facade.IHandoverTaskOrderService; +import com.mhd.wms.domain.handoverTaskOrder.repository.todo.HandoverTaskOrderDO; +import com.mhd.wms.domain.outMaterialDetail.entity.OutMaterialDetail; +import com.mhd.wms.domain.outMaterialDetail.repository.mapper.OutMaterialDetailMapper; import com.mhd.wms.domain.reviewOrder.entity.ReviewMaterialDetail; import com.mhd.wms.domain.reviewOrder.entity.ReviewOrder; import com.mhd.wms.domain.reviewOrder.repository.mapper.ReviewMaterialDetailMapper; @@ -20,6 +30,9 @@ import com.mhd.wms.domain.reviewOrder.repository.mapper.ReviewOrderMapper; import com.mhd.wms.domain.reviewOrder.repository.po.ReviewMaterialDetailPO; import com.mhd.wms.domain.reviewOrder.repository.po.ReviewOrderPO; import com.mhd.wms.domain.reviewOrder.repository.todo.ReviewOrderDO; +import com.mhd.wms.domain.stockOutOrder.entity.StockOutOrder; +import com.mhd.wms.domain.stockOutOrder.repository.facade.IStockOutOrderService; +import com.mhd.wms.domain.stockOutOrder.repository.po.StockOutOrderPO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -57,6 +70,18 @@ public class ReviewOrderApplicationService { @Autowired private ReviewMaterialDetailMapper reviewMaterialDetailMapper; + @Autowired + private IDeliveTaskService deliveTaskService; + + @Autowired + private IStockOutOrderService stockOutOrderService; + + @Autowired + private IHandoverTaskOrderService handoverTaskOrderService; + + @Autowired + private OutMaterialDetailMapper outMaterialDetailMapper; + public List queryList(ReviewOrderDO query) { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null) { @@ -77,6 +102,7 @@ public class ReviewOrderApplicationService { throw new ServiceException("复核单不存在或已删除"); } List details = reviewOrderMapper.queryDetailByReviewOrderId(reviewOrderId); + fillDisplayQtyFields(details); Map> batchDetailMap = loadDisplayBatchDetailMap(details); fillDynamicBatchDisplayFields(details, batchDetailMap); buildReviewMaterialMoreDetailListLikeShelf(details, batchDetailMap); @@ -93,6 +119,7 @@ public class ReviewOrderApplicationService { throw new ServiceException("复核单不存在或已删除"); } List details = reviewOrderMapper.queryDetailByReviewOrderNumber(reviewOrderNumber); + fillDisplayQtyFields(details); Map> batchDetailMap = loadDisplayBatchDetailMap(details); fillDynamicBatchDisplayFields(details, batchDetailMap); buildReviewMaterialMoreDetailListLikeShelf(details, batchDetailMap); @@ -123,6 +150,7 @@ public class ReviewOrderApplicationService { BigDecimal pending = nz(db.getPendingReviewQty()); BigDecimal reviewed = nz(db.getReviewedQty()); + // 以页面传入复核数量为准;未传时兜底为待复核数量 BigDecimal qty = i.getReviewQtyEa() != null ? i.getReviewQtyEa() : (i.getReviewedQty() != null ? i.getReviewedQty() : pending); if (qty.compareTo(BigDecimal.ZERO) <= 0) { @@ -133,6 +161,19 @@ public class ReviewOrderApplicationService { } db.setPendingReviewQty(pending.subtract(qty)); db.setReviewedQty(reviewed.add(qty)); + // 同步页面传入的重量/体积/面积 + if (i.getNetWeightKg() != null) { + db.setNetWeightKg(i.getNetWeightKg()); + } + if (i.getGrossWeightKg() != null) { + db.setGrossWeightKg(i.getGrossWeightKg()); + } + if (i.getVolumeCbm() != null) { + db.setVolumeCbm(i.getVolumeCbm()); + } + if (i.getAreaSqm() != null) { + db.setAreaSqm(i.getAreaSqm()); + } fillOperator(db); reviewMaterialDetailMapper.updateById(db); } @@ -164,8 +205,9 @@ public class ReviewOrderApplicationService { BigDecimal reviewed = nz(db.getReviewedQty()); BigDecimal pending = nz(db.getPendingReviewQty()); BigDecimal cancel = nz(db.getCancelQty()); - BigDecimal qty = i.getReviewQtyEa() != null ? i.getReviewQtyEa() : - (i.getCancelQty() != null ? i.getCancelQty() : reviewed); + // 以页面传入取消数量为准;未传时兜底为已复核数量 + BigDecimal qty = i.getCancelQty() != null ? i.getCancelQty() : + (i.getReviewQtyEa() != null ? i.getReviewQtyEa() : reviewed); if (qty.compareTo(BigDecimal.ZERO) <= 0) { continue; } @@ -175,6 +217,19 @@ public class ReviewOrderApplicationService { db.setReviewedQty(reviewed.subtract(qty)); db.setPendingReviewQty(pending.add(qty)); db.setCancelQty(cancel.add(qty)); + // 同步页面传入的重量/体积/面积 + if (i.getNetWeightKg() != null) { + db.setNetWeightKg(i.getNetWeightKg()); + } + if (i.getGrossWeightKg() != null) { + db.setGrossWeightKg(i.getGrossWeightKg()); + } + if (i.getVolumeCbm() != null) { + db.setVolumeCbm(i.getVolumeCbm()); + } + if (i.getAreaSqm() != null) { + db.setAreaSqm(i.getAreaSqm()); + } fillOperator(db); reviewMaterialDetailMapper.updateById(db); } @@ -197,6 +252,7 @@ public class ReviewOrderApplicationService { if (CollectionUtils.isEmpty(ids)) { throw new ServiceException("复核单ID不能为空"); } + LoginUser loginUser = SecurityUtils.getLoginUser(); for (Long reviewOrderId : ids) { if (reviewOrderId == null) { continue; @@ -206,6 +262,8 @@ public class ReviewOrderApplicationService { if (hasPending) { throw new ServiceException("存在待复核数量,无法确认"); } + // 复核确认时将复核结果同步到出库明细/出库单,供出库交接读取数量 + syncOutOrderCheckQtyByReviewConfirm(reviewOrderId, loginUser); ReviewOrder order = reviewOrderMapper.selectById(reviewOrderId); if (order == null) { continue; @@ -213,15 +271,196 @@ public class ReviewOrderApplicationService { order.setReviewStatus(3); fillOperator(order); reviewOrderMapper.updateById(order); + // 复核确认后,按本次确认数据生成出库交接单 + genHandoverTaskOrderByReviewConfirm(reviewOrderId, loginUser); } return true; } + /** + * 将复核单已复核数量同步到出库明细 checkQuantity,并汇总回写出库单 checkQuantity。 + */ + private void syncOutOrderCheckQtyByReviewConfirm(Long reviewOrderId, LoginUser loginUser) { + if (reviewOrderId == null) { + return; + } + ReviewOrderPO reviewOrderPO = reviewOrderMapper.selectHeaderByReviewOrderId(reviewOrderId); + if (reviewOrderPO == null) { + return; + } + List reviewDetails = reviewOrderMapper.queryDetailByReviewOrderId(reviewOrderId); + if (CollectionUtils.isEmpty(reviewDetails)) { + return; + } + BigDecimal totalCheckQty = BigDecimal.ZERO; + String userRealName = resolveLoginDisplayName(loginUser); + for (ReviewMaterialDetailPO detail : reviewDetails) { + if (detail == null || detail.getOutUniqueId() == null) { + continue; + } + OutMaterialDetail outDb = outMaterialDetailMapper.selectOne(new LambdaQueryWrapper() + .eq(OutMaterialDetail::getUniqueId, detail.getOutUniqueId()) + .eq(OutMaterialDetail::getDelFlag, 1L)); + if (outDb == null) { + continue; + } + BigDecimal checkQty = nz(detail.getReviewedQty()); + outDb.setCheckQuantity(checkQty); + if (loginUser != null) { + outDb.setUpdateBy(loginUser.getUserid()); + } + outDb.setUpdateByName(userRealName); + outDb.setUpdateTime(new Date()); + outMaterialDetailMapper.updateById(outDb); + totalCheckQty = totalCheckQty.add(checkQty); + } + if (reviewOrderPO.getOutOrderId() != null) { + stockOutOrderService.update(null, new UpdateWrapper().lambda() + .set(StockOutOrder::getCheckQuantity, totalCheckQty) + .eq(StockOutOrder::getOutOrderId, reviewOrderPO.getOutOrderId())); + } + } + + /** + * 按复核确认后的复核单信息生成出库交接单(同来源单号防重)。 + */ + private void genHandoverTaskOrderByReviewConfirm(Long reviewOrderId, LoginUser loginUser) { + if (reviewOrderId == null) { + return; + } + ReviewOrderPO reviewOrderPO = reviewOrderMapper.selectHeaderByReviewOrderId(reviewOrderId); + if (reviewOrderPO == null || reviewOrderPO.getOutOrderId() == null) { + return; + } + StockOutOrderPO stockOutOrderPO = stockOutOrderService.getInfo(reviewOrderPO.getOutOrderId()); + if (stockOutOrderPO == null || StringUtils.isBlank(stockOutOrderPO.getOutOrderNumber())) { + return; + } + Long exists = (long) handoverTaskOrderService.count(new LambdaQueryWrapper() + .eq(HandoverTaskOrder::getOrderNumber, stockOutOrderPO.getOutOrderNumber()) + .eq(HandoverTaskOrder::getDelFlag, 1)); + if (exists != null && exists > 0) { + return; + } + String userRealName = resolveLoginDisplayName(loginUser); + HandoverTaskOrderDO handoverTaskOrderDO = new HandoverTaskOrderDO(); + handoverTaskOrderDO.setOrganizationId(stockOutOrderPO.getOrganizationId()); + handoverTaskOrderDO.setOrganizationName(stockOutOrderPO.getOrganizationName()); + handoverTaskOrderDO.setTopOrganizationId(stockOutOrderPO.getTopOrganizationId()); + handoverTaskOrderDO.setWarehouseId(stockOutOrderPO.getWarehouseId()); + handoverTaskOrderDO.setWarehouseCode(stockOutOrderPO.getWarehouseCode()); + handoverTaskOrderDO.setWarehouseName(stockOutOrderPO.getWarehouseName()); + handoverTaskOrderDO.setShipperId(stockOutOrderPO.getShipperId()); + handoverTaskOrderDO.setShipperName(stockOutOrderPO.getShipperName()); + handoverTaskOrderDO.setSerialNumber(OrderSequence.getOrderCode("JJZYLS")); + handoverTaskOrderDO.setTaskNumber(OrderSequence.getOrderCode("JJZY")); + handoverTaskOrderDO.setStatus(1); + handoverTaskOrderDO.setOrderTypeCode(stockOutOrderPO.getOrderTypeCode()); + handoverTaskOrderDO.setOrderTypeName(stockOutOrderPO.getOrderTypeName()); + handoverTaskOrderDO.setExpectTime(stockOutOrderPO.getExpectTime()); + handoverTaskOrderDO.setOrderNumber(stockOutOrderPO.getOutOrderNumber()); + if (loginUser != null) { + handoverTaskOrderDO.setCreateBy(loginUser.getUserid()); + } + handoverTaskOrderDO.setCreateByName(userRealName); + handoverTaskOrderDO.setCreateTime(new Date()); + handoverTaskOrderService.insert(handoverTaskOrderDO); + } + + /** + * 复核下发:未下发的复核单生成 PDA 复核任务(delive_task),并标记复核单已下发。 + * 逻辑对齐 {@link com.mhd.wms.domain.stockOutOrder.service.StockOutOrderDomainService#checkTaskDistribution} + */ + @Transactional(rollbackFor = Exception.class) + public Boolean checkTaskDistribution(ReviewOrderDO cmd) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser == null) { + throw new ServiceException("登录信息失效"); + } + List reviewOrderIds = cmd != null ? cmd.getReviewOrderIds() : null; + if (CollectionUtils.isEmpty(reviewOrderIds) && cmd != null && cmd.getReviewOrderId() != null) { + reviewOrderIds = new ArrayList<>(); + reviewOrderIds.add(cmd.getReviewOrderId()); + } + if (CollectionUtils.isEmpty(reviewOrderIds)) { + throw new ServiceException("未选择复核单,或复核单不存在"); + } + ReviewOrderDO query = new ReviewOrderDO(); + query.setReviewOrderIds(reviewOrderIds); + query.setIssuedFlag("0"); + if (loginUser.getUserPo() != null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1L) { + query.setTopOrganizationId(topOrganizationId); + } + } + List reviewOrderPOList = reviewOrderMapper.queryList(query); + if (CollectionUtils.isEmpty(reviewOrderPOList)) { + throw new ServiceException("复核单不存在或已下发,请重新选择"); + } + genDeliveTaskForReview(reviewOrderPOList, cmd, loginUser); + List toUpdateIds = reviewOrderPOList.stream() + .map(ReviewOrderPO::getReviewOrderId) + .collect(Collectors.toList()); + Date now = new Date(); + String updaterName = resolveLoginDisplayName(loginUser); + int rows = reviewOrderMapper.update(null, new UpdateWrapper().lambda() + .set(ReviewOrder::getIssuedFlag, "1") + .set(ReviewOrder::getIssuedTime, now) + .set(ReviewOrder::getUpdateBy, loginUser.getUserid()) + .set(ReviewOrder::getUpdateByName, updaterName != null ? updaterName : loginUser.getUsername()) + .set(ReviewOrder::getUpdateTime, now) + .in(ReviewOrder::getReviewOrderId, toUpdateIds)); + return rows > 0; + } + + /** + * 复核下发任务写入 delive_task(对齐收货任务下发:trackingNumber 使用本单号 reviewOrderNumber) + */ + private void genDeliveTaskForReview(List reviewOrderPOList, ReviewOrderDO reviewOrderDO, LoginUser loginUser) { + if (loginUser.getUserPo() == null) { + throw new ServiceException("用户组织信息缺失,无法下发复核任务"); + } + final String userRealName = resolveLoginDisplayName(loginUser); + List deliveTaskDOList = new ArrayList<>(); + for (ReviewOrderPO reviewOrderPO : reviewOrderPOList) { + DeliveTaskDO deliveTaskDO = new DeliveTaskDO(); + deliveTaskDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); + deliveTaskDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); + deliveTaskDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + deliveTaskDO.setTaskNumber(OrderSequence.getOrderCode("RW")); + deliveTaskDO.setTrackingNumber(reviewOrderPO.getReviewOrderNumber()); + deliveTaskDO.setWarehouseId(reviewOrderPO.getWarehouseId()); + deliveTaskDO.setWarehouseCode(reviewOrderPO.getWarehouseCode()); + deliveTaskDO.setWarehouseName(reviewOrderPO.getWarehouseName()); + deliveTaskDO.setTaskType(4); + deliveTaskDO.setTaskDistribution(1); + deliveTaskDO.setTaskDistributionId(loginUser.getUserid()); + deliveTaskDO.setTaskDistributionName(userRealName); + deliveTaskDO.setTaskDistributionTime(new Date()); + Long operatorsBy = reviewOrderDO != null ? reviewOrderDO.getCheckOperatorsBy() : null; + String operatorsName = reviewOrderDO != null ? reviewOrderDO.getCheckOperatorsName() : null; + if (operatorsBy == null || operatorsBy == 0) { + operatorsBy = loginUser.getUserid(); + operatorsName = (operatorsName != null && !operatorsName.isEmpty()) ? operatorsName : userRealName; + } + deliveTaskDO.setOperatorsBy(operatorsBy); + deliveTaskDO.setOperatorsName(operatorsName); + deliveTaskDO.setCreateBy(loginUser.getUserid()); + deliveTaskDO.setCreateByName(userRealName); + deliveTaskDO.setCreateTime(new Date()); + deliveTaskDOList.add(deliveTaskDO); + } + deliveTaskService.batchInsert(deliveTaskDOList); + } + private void refreshReviewOrderStatus(Long reviewOrderId) { List rows = reviewOrderMapper.queryDetailByReviewOrderId(reviewOrderId); - boolean allReviewed = rows.stream().allMatch(r -> nz(r.getPendingReviewQty()).compareTo(BigDecimal.ZERO) == 0); - boolean noneReviewed = rows.stream().allMatch(r -> nz(r.getReviewedQty()).compareTo(BigDecimal.ZERO) == 0); - Integer targetStatus = allReviewed ? 3 : (noneReviewed ? 1 : 2); + // 业务口径:只有全部明细待复核=0 时,状态才置为 2;部分复核仍保持 1。 + // 状态 3 仅在 checkConfirm 中设置。 + boolean allReviewed = !CollectionUtils.isEmpty(rows) + && rows.stream().allMatch(r -> nz(r.getPendingReviewQty()).compareTo(BigDecimal.ZERO) == 0); + Integer targetStatus = allReviewed ? 2 : 1; ReviewOrder order = reviewOrderMapper.selectById(reviewOrderId); if (order == null) { @@ -236,6 +475,23 @@ public class ReviewOrderApplicationService { return v == null ? BigDecimal.ZERO : v; } + /** + * 详情展示口径: + * reviewQtyEa 展示待复核数量,cancelQty 展示已复核数量。 + */ + private void fillDisplayQtyFields(List details) { + if (CollectionUtils.isEmpty(details)) { + return; + } + for (ReviewMaterialDetailPO row : details) { + if (row == null) { + continue; + } + row.setReviewQtyEa(nz(row.getPendingReviewQty())); + row.setCancelQty(nz(row.getReviewedQty())); + } + } + private static String resolveLoginDisplayName(LoginUser loginUser) { if (loginUser == null) { return null; diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/deliveTask/factorys/DeliveTaskServiceFactory.java b/mhd_wms/src/main/java/com/mhd/wms/domain/deliveTask/factorys/DeliveTaskServiceFactory.java index f80415ea9..fc309ec7a 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/deliveTask/factorys/DeliveTaskServiceFactory.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/deliveTask/factorys/DeliveTaskServiceFactory.java @@ -41,7 +41,7 @@ public class DeliveTaskServiceFactory { deliveTaskType = "stockOutTaskOrderImpl"; break; case 4: - deliveTaskType = "stockOutOrderImpl"; + deliveTaskType = "reviewOrderImpl"; break; case 5: deliveTaskType = "shiftManageImpl"; diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/entity/ReviewMaterialDetail.java b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/entity/ReviewMaterialDetail.java index b3d1f3a7a..91cc15d6b 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/entity/ReviewMaterialDetail.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/entity/ReviewMaterialDetail.java @@ -1,6 +1,7 @@ package com.mhd.wms.domain.reviewOrder.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.mhd.common.core.web.domain.BaseVOEntity; @@ -65,12 +66,16 @@ public class ReviewMaterialDetail extends BaseVOEntity { private String boxPalletNo; + @TableField("ext_attr_1") private String extAttr1; + @TableField("ext_attr_2") private String extAttr2; + @TableField("ext_attr_3") private Date extAttr3; + @TableField("ext_attr_4") private Date extAttr4; private BigDecimal reviewQtyEa; diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/persistence/ReviewOrderImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/persistence/ReviewOrderImpl.java new file mode 100644 index 000000000..a8ff450d3 --- /dev/null +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/persistence/ReviewOrderImpl.java @@ -0,0 +1,38 @@ +package com.mhd.wms.domain.reviewOrder.repository.persistence; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.system.api.model.LoginUser; +import com.mhd.wms.domain.deliveTask.repository.facade.IDeliveTaskTypeService; +import com.mhd.wms.domain.deliveTask.repository.todo.DeliveTaskDO; +import com.mhd.wms.domain.reviewOrder.entity.ReviewOrder; +import com.mhd.wms.domain.reviewOrder.repository.mapper.ReviewOrderMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; + +/** + * 复核单任务接收回写(delive_task taskType=4) + */ +@Service +public class ReviewOrderImpl implements IDeliveTaskTypeService { + + @Autowired + private ReviewOrderMapper reviewOrderMapper; + + /** + * PDA 接收复核任务后,按复核单号回写复核单接收时间 + */ + @Override + public Boolean handleDeliveTask(DeliveTaskDO deliveTaskDO) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + return reviewOrderMapper.update(null, new UpdateWrapper().lambda() + .set(ReviewOrder::getReceiveTime, new Date()) + .set(loginUser != null, ReviewOrder::getUpdateBy, loginUser != null ? loginUser.getUserid() : null) + .set(loginUser != null, ReviewOrder::getUpdateByName, loginUser != null ? loginUser.getUsername() : null) + .set(ReviewOrder::getUpdateTime, new Date()) + .eq(ReviewOrder::getReviewOrderNumber, deliveTaskDO.getTrackingNumber()) + .eq(ReviewOrder::getDelFlag, 1)) > 0; + } +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/po/ReviewOrderPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/po/ReviewOrderPO.java index 5d767bd25..5cc84a142 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/po/ReviewOrderPO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/po/ReviewOrderPO.java @@ -69,7 +69,7 @@ public class ReviewOrderPO extends BaseVOEntity { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @ApiModelProperty("任务接收时间") + @ApiModelProperty("下发确认时间(PDA 点击确定/接收的时间)") private Date receiveTime; @ApiModelProperty("备注") diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/todo/ReviewOrderDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/todo/ReviewOrderDO.java index 5eca41f66..c19c9c884 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/todo/ReviewOrderDO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/todo/ReviewOrderDO.java @@ -46,15 +46,21 @@ public class ReviewOrderDO extends BaseVOEntity { @ApiModelProperty("创建时间止") private String createTimeEnd; - @ApiModelProperty("接收时间起") + @ApiModelProperty("下发确认时间起(PDA 点击确定/接收的时间)") private String receiveTimeStart; - @ApiModelProperty("接收时间止") + @ApiModelProperty("下发确认时间止(PDA 点击确定/接收的时间)") private String receiveTimeEnd; @ApiModelProperty("复核单ID集合") private List reviewOrderIds; + @ApiModelProperty("复核作业人用户ID(复核下发)") + private Long checkOperatorsBy; + + @ApiModelProperty("复核作业人姓名") + private String checkOperatorsName; + @ApiModelProperty("复核明细列表(用于批量复核/取消复核)") private List details; } diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/reviewOrder/ReviewOrderDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/reviewOrder/ReviewOrderDTO.java index ce0797e31..39406b200 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/reviewOrder/ReviewOrderDTO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/reviewOrder/ReviewOrderDTO.java @@ -2,6 +2,7 @@ package com.mhd.wms.interfaces.dto.reviewOrder; import com.mhd.common.core.web.domain.BaseVOEntity; import com.mhd.wms.domain.reviewOrder.repository.po.ReviewMaterialDetailPO; +import com.fasterxml.jackson.annotation.JsonAlias; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -46,15 +47,22 @@ public class ReviewOrderDTO extends BaseVOEntity { @ApiModelProperty("创建时间止 yyyy-MM-dd") private String createTimeEnd; - @ApiModelProperty("接收时间起 yyyy-MM-dd") + @ApiModelProperty("下发确认时间起 yyyy-MM-dd(PDA 点击确定/接收的时间)") private String receiveTimeStart; - @ApiModelProperty("接收时间止 yyyy-MM-dd") + @ApiModelProperty("下发确认时间止 yyyy-MM-dd(PDA 点击确定/接收的时间)") private String receiveTimeEnd; @ApiModelProperty("复核单ID集合") private List reviewOrderIds; + @ApiModelProperty("复核作业人用户ID(复核下发可选,未传则默认当前登录人)") + private Long checkOperatorsBy; + + @ApiModelProperty("复核作业人姓名") + private String checkOperatorsName; + @ApiModelProperty("复核明细列表(用于批量复核/取消复核)") + @JsonAlias({"materialDetailList"}) private List details; } diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/reviewOrder/ReviewOrderApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/reviewOrder/ReviewOrderApi.java index d1ec460ee..2c4e97188 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/reviewOrder/ReviewOrderApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/reviewOrder/ReviewOrderApi.java @@ -1,5 +1,6 @@ package com.mhd.wms.interfaces.facadeApi.reviewOrder; +import cn.hutool.json.JSONUtil; import com.mhd.common.core.web.controller.BaseController; import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.core.web.page.TableDataInfo; @@ -9,6 +10,7 @@ import com.mhd.wms.domain.reviewOrder.repository.todo.ReviewOrderDO; import com.mhd.wms.interfaces.assember.reviewOrder.ReviewOrderAssembler; import com.mhd.wms.interfaces.dto.reviewOrder.ReviewOrderDTO; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -24,6 +26,7 @@ import java.util.List; /** * PC 复核单接口:列表、详情(头+明细) */ +@Slf4j @RestController @RequestMapping("/reviewOrderApi") public class ReviewOrderApi extends BaseController { @@ -55,6 +58,15 @@ public class ReviewOrderApi extends BaseController { return AjaxResult.success(reviewOrderApplicationService.getDetailByReviewOrderNumber(reviewOrderNumber)); } + @ApiOperation("复核下发") + @PostMapping("/checkTaskDistribution") + public AjaxResult checkTaskDistribution(@RequestBody ReviewOrderDTO reviewOrderDTO) { + log.debug("复核单复核下发入参 checkOperatorsBy={}, checkOperatorsName={}, reviewOrderIds={}", + reviewOrderDTO.getCheckOperatorsBy(), reviewOrderDTO.getCheckOperatorsName(), reviewOrderDTO.getReviewOrderIds()); + ReviewOrderDO reviewOrderDO = JSONUtil.toBean(JSONUtil.toJsonStr(reviewOrderDTO), ReviewOrderDO.class); + return AjaxResult.success(reviewOrderApplicationService.checkTaskDistribution(reviewOrderDO)); + } + @ApiOperation("批量复核") @PostMapping("/batchCheck") public AjaxResult batchCheck(@RequestBody ReviewOrderDTO reviewOrderDTO) { diff --git a/mhd_wms/src/main/resources/mapper/reviewOrder/ReviewOrderMapper.xml b/mhd_wms/src/main/resources/mapper/reviewOrder/ReviewOrderMapper.xml index 0f9fca7aa..a45fe1215 100644 --- a/mhd_wms/src/main/resources/mapper/reviewOrder/ReviewOrderMapper.xml +++ b/mhd_wms/src/main/resources/mapper/reviewOrder/ReviewOrderMapper.xml @@ -128,6 +128,12 @@ and a.warehouse_id = #{warehouseId} + + and a.review_order_id in + + #{item} + + and a.customer_name like concat('%', #{customerName}, '%')