复核详情修改,复核确认,批量复核、取消BUG修改
This commit is contained in:
+261
-5
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+38
@@ -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;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -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("备注")
|
||||
|
||||
+8
-2
@@ -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-dd(PDA 点击确定/接收的时间)")
|
||||
private String receiveTimeStart;
|
||||
|
||||
@ApiModelProperty("接收时间止 yyyy-MM-dd")
|
||||
@ApiModelProperty("下发确认时间止 yyyy-MM-dd(PDA 点击确定/接收的时间)")
|
||||
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;
|
||||
}
|
||||
|
||||
+12
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user