复核详情修改,复核确认,批量复核、取消BUG修改

This commit is contained in:
秦鸿展
2026-04-08 17:39:42 +08:00
parent 2d3b1dfd0e
commit 37644a72f3
9 changed files with 342 additions and 11 deletions
@@ -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<ReviewOrderPO> queryList(ReviewOrderDO query) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null && loginUser.getUserPo() != null) {
@@ -77,6 +102,7 @@ public class ReviewOrderApplicationService {
throw new ServiceException("复核单不存在或已删除");
}
List<ReviewMaterialDetailPO> details = reviewOrderMapper.queryDetailByReviewOrderId(reviewOrderId);
fillDisplayQtyFields(details);
Map<Long, List<BatchDetailFeignPO>> batchDetailMap = loadDisplayBatchDetailMap(details);
fillDynamicBatchDisplayFields(details, batchDetailMap);
buildReviewMaterialMoreDetailListLikeShelf(details, batchDetailMap);
@@ -93,6 +119,7 @@ public class ReviewOrderApplicationService {
throw new ServiceException("复核单不存在或已删除");
}
List<ReviewMaterialDetailPO> details = reviewOrderMapper.queryDetailByReviewOrderNumber(reviewOrderNumber);
fillDisplayQtyFields(details);
Map<Long, List<BatchDetailFeignPO>> 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<ReviewMaterialDetailPO> 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<OutMaterialDetail>()
.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<StockOutOrder>().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<HandoverTaskOrder>()
.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<Long> 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<ReviewOrderPO> reviewOrderPOList = reviewOrderMapper.queryList(query);
if (CollectionUtils.isEmpty(reviewOrderPOList)) {
throw new ServiceException("复核单不存在或已下发,请重新选择");
}
genDeliveTaskForReview(reviewOrderPOList, cmd, loginUser);
List<Long> toUpdateIds = reviewOrderPOList.stream()
.map(ReviewOrderPO::getReviewOrderId)
.collect(Collectors.toList());
Date now = new Date();
String updaterName = resolveLoginDisplayName(loginUser);
int rows = reviewOrderMapper.update(null, new UpdateWrapper<ReviewOrder>().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<ReviewOrderPO> reviewOrderPOList, ReviewOrderDO reviewOrderDO, LoginUser loginUser) {
if (loginUser.getUserPo() == null) {
throw new ServiceException("用户组织信息缺失,无法下发复核任务");
}
final String userRealName = resolveLoginDisplayName(loginUser);
List<DeliveTaskDO> 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<ReviewMaterialDetailPO> 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<ReviewMaterialDetailPO> 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;
@@ -41,7 +41,7 @@ public class DeliveTaskServiceFactory {
deliveTaskType = "stockOutTaskOrderImpl";
break;
case 4:
deliveTaskType = "stockOutOrderImpl";
deliveTaskType = "reviewOrderImpl";
break;
case 5:
deliveTaskType = "shiftManageImpl";
@@ -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;
@@ -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<ReviewOrder>().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;
}
}
@@ -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("备注")
@@ -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<Long> reviewOrderIds;
@ApiModelProperty("复核作业人用户ID(复核下发)")
private Long checkOperatorsBy;
@ApiModelProperty("复核作业人姓名")
private String checkOperatorsName;
@ApiModelProperty("复核明细列表(用于批量复核/取消复核)")
private List<ReviewMaterialDetailPO> details;
}
@@ -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-ddPDA 点击确定/接收的时间)")
private String receiveTimeStart;
@ApiModelProperty("接收时间止 yyyy-MM-dd")
@ApiModelProperty("下发确认时间止 yyyy-MM-ddPDA 点击确定/接收的时间)")
private String receiveTimeEnd;
@ApiModelProperty("复核单ID集合")
private List<Long> reviewOrderIds;
@ApiModelProperty("复核作业人用户ID(复核下发可选,未传则默认当前登录人)")
private Long checkOperatorsBy;
@ApiModelProperty("复核作业人姓名")
private String checkOperatorsName;
@ApiModelProperty("复核明细列表(用于批量复核/取消复核)")
@JsonAlias({"materialDetailList"})
private List<ReviewMaterialDetailPO> details;
}
@@ -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) {
@@ -128,6 +128,12 @@
<if test="warehouseId != null">
and a.warehouse_id = #{warehouseId}
</if>
<if test="reviewOrderIds != null and reviewOrderIds.size > 0 ">
and a.review_order_id in
<foreach collection="reviewOrderIds" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="customerName != null and customerName != ''">
and a.customer_name like concat('%', #{customerName}, '%')
</if>