入库出库作业单调整
This commit is contained in:
+65
-3
@@ -50,6 +50,7 @@ import java.lang.reflect.Field;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
@@ -244,6 +245,7 @@ public class ReviewOrderApplicationService {
|
||||
reviewMaterialDetailMapper.updateById(db);
|
||||
}
|
||||
refreshReviewOrderStatus(cmd.getReviewOrderId());
|
||||
syncStockOutTaskOrderWithReviewState(cmd.getReviewOrderId());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -297,6 +299,7 @@ public class ReviewOrderApplicationService {
|
||||
reviewMaterialDetailMapper.updateById(db);
|
||||
}
|
||||
refreshReviewOrderStatus(cmd.getReviewOrderId());
|
||||
syncStockOutTaskOrderWithReviewState(cmd.getReviewOrderId());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -334,6 +337,7 @@ public class ReviewOrderApplicationService {
|
||||
order.setReviewStatus(3);
|
||||
fillOperator(order);
|
||||
reviewOrderMapper.updateById(order);
|
||||
syncStockOutTaskOrderWithReviewState(reviewOrderId);
|
||||
// 复核确认后,按本次确认数据生成出库交接单
|
||||
genHandoverTaskOrderByReviewConfirm(reviewOrderId, loginUser);
|
||||
}
|
||||
@@ -494,7 +498,40 @@ public class ReviewOrderApplicationService {
|
||||
if (CollectionUtils.isEmpty(reviewOrderPOList)) {
|
||||
throw new ServiceException("复核单不存在或已下发,请重新选择");
|
||||
}
|
||||
// 复核下发时同步生成作业单(与拣货同表结构),避免下发后无作业单可做
|
||||
int rows = applyReviewTaskDistribution(reviewOrderPOList, cmd, loginUser);
|
||||
return rows > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 拣货完成后已生成复核单时调用:自动执行与 PC「复核下发」相同逻辑(delive_task 复核任务 + stock_out_task_order),并置复核单已下发。
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void autoDistributeReviewAfterPickingComplete(Long reviewOrderId) {
|
||||
if (reviewOrderId == null) {
|
||||
return;
|
||||
}
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser == null || loginUser.getUserPo() == null) {
|
||||
log.warn("拣货完成后自动复核下发跳过:未登录或缺少组织信息 reviewOrderId={}", reviewOrderId);
|
||||
return;
|
||||
}
|
||||
ReviewOrderPO header = reviewOrderMapper.selectHeaderByReviewOrderId(reviewOrderId);
|
||||
if (header == null || !"0".equals(header.getIssuedFlag())) {
|
||||
return;
|
||||
}
|
||||
ReviewOrderDO cmd = new ReviewOrderDO();
|
||||
cmd.setCheckOperatorsBy(loginUser.getUserid());
|
||||
cmd.setCheckOperatorsName(resolveLoginDisplayName(loginUser));
|
||||
applyReviewTaskDistribution(Collections.singletonList(header), cmd, loginUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* 复核任务下发:生成 stock_out_task_order、写入 delive_task,并标记复核单已下发。
|
||||
*/
|
||||
private int applyReviewTaskDistribution(List<ReviewOrderPO> reviewOrderPOList, ReviewOrderDO cmd, LoginUser loginUser) {
|
||||
if (CollectionUtils.isEmpty(reviewOrderPOList) || loginUser == null) {
|
||||
return 0;
|
||||
}
|
||||
genStockOutTaskOrderForReviewDistribution(reviewOrderPOList, loginUser);
|
||||
genDeliveTaskForReview(reviewOrderPOList, cmd, loginUser);
|
||||
List<Long> toUpdateIds = reviewOrderPOList.stream()
|
||||
@@ -502,14 +539,13 @@ public class ReviewOrderApplicationService {
|
||||
.collect(Collectors.toList());
|
||||
Date now = new Date();
|
||||
String updaterName = resolveLoginDisplayName(loginUser);
|
||||
int rows = reviewOrderMapper.update(null, new UpdateWrapper<ReviewOrder>().lambda()
|
||||
return 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;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -752,6 +788,32 @@ public class ReviewOrderApplicationService {
|
||||
reviewOrderMapper.updateById(order);
|
||||
}
|
||||
|
||||
/**
|
||||
* 复核单状态变更后同步出库作业单 stock_out_task_order:复核类作业单(任务号 FHZY*)与复核单 review_status 一致
|
||||
* (1 待复核 / 2 复核中 / 3 已复核,见 {@link com.mhd.wms.domain.stockOutTaskOrder.service.StockOutTaskOrderDomainService#mapReviewStatusName})。
|
||||
*/
|
||||
private void syncStockOutTaskOrderWithReviewState(Long reviewOrderId) {
|
||||
if (reviewOrderId == null) {
|
||||
return;
|
||||
}
|
||||
ReviewOrder order = reviewOrderMapper.selectById(reviewOrderId);
|
||||
if (order == null || StringUtils.isEmpty(order.getReviewOrderNumber()) || order.getReviewStatus() == null) {
|
||||
return;
|
||||
}
|
||||
Date now = new Date();
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
boolean finished = Integer.valueOf(3).equals(order.getReviewStatus());
|
||||
stockOutTaskOrderService.update(null, new UpdateWrapper<StockOutTaskOrder>().lambda()
|
||||
.set(StockOutTaskOrder::getStatus, order.getReviewStatus())
|
||||
.set(StockOutTaskOrder::getUpdateTime, now)
|
||||
.set(finished, StockOutTaskOrder::getOperatorsEndTime, now)
|
||||
.set(loginUser != null, StockOutTaskOrder::getUpdateBy, loginUser != null ? loginUser.getUserid() : null)
|
||||
.set(loginUser != null, StockOutTaskOrder::getUpdateByName, loginUser != null ? resolveLoginDisplayName(loginUser) : null)
|
||||
.eq(StockOutTaskOrder::getPickingOrderNumber, order.getReviewOrderNumber())
|
||||
.likeRight(StockOutTaskOrder::getTaskNumber, "FHZY")
|
||||
.eq(StockOutTaskOrder::getDelFlag, 1));
|
||||
}
|
||||
|
||||
private static BigDecimal nz(BigDecimal v) {
|
||||
return v == null ? BigDecimal.ZERO : v;
|
||||
}
|
||||
|
||||
+12
-3
@@ -46,6 +46,7 @@ import com.mhd.wms.domain.pickingOrder.entity.PickingOrder;
|
||||
import com.mhd.wms.domain.pickingOrder.repository.facade.IPickingOrderService;
|
||||
import com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO;
|
||||
import com.mhd.wms.domain.pickingOrder.repository.todo.PickingOrderDO;
|
||||
import com.mhd.wms.application.service.reviewOrder.ReviewOrderApplicationService;
|
||||
import com.mhd.wms.domain.pushSyncBms.PushSyncBmsDomainService;
|
||||
import com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO;
|
||||
import com.mhd.wms.domain.stockInOrder.service.StockInOrderDomainService;
|
||||
@@ -99,6 +100,8 @@ public class PickingOrderDomainService {
|
||||
@Autowired
|
||||
private ReviewOrderDomainService reviewOrderDomainService;
|
||||
@Autowired
|
||||
private ReviewOrderApplicationService reviewOrderApplicationService;
|
||||
@Autowired
|
||||
private IHandoverTaskOrderService handoverTaskOrderService;
|
||||
@Autowired
|
||||
private IOutOrderAbnormalService outOrderAbnormalService;
|
||||
@@ -342,7 +345,10 @@ public class PickingOrderDomainService {
|
||||
StockOutOrder stockOutOrder = stockOutOrderService.getOne(new LambdaQueryWrapper<StockOutOrder>()
|
||||
.eq(StockOutOrder::getOutOrderNumber, pickingOrderPODb.getOrderNumber()));
|
||||
if (stockOutOrder != null) {
|
||||
reviewOrderDomainService.tryGenerateReviewOrderAfterPickingComplete(pickingOrderPODb, stockOutOrder);
|
||||
Long newReviewId = reviewOrderDomainService.tryGenerateReviewOrderAfterPickingComplete(pickingOrderPODb, stockOutOrder);
|
||||
if (newReviewId != null) {
|
||||
reviewOrderApplicationService.autoDistributeReviewAfterPickingComplete(newReviewId);
|
||||
}
|
||||
}
|
||||
}
|
||||
return updated;
|
||||
@@ -716,8 +722,11 @@ public class PickingOrderDomainService {
|
||||
if (pickingOrderPO.getReview() != null && pickingOrderPO.getReview() == 2) {
|
||||
genHandoverTaskOrder(pickingOrderPO);
|
||||
}
|
||||
// 需要复核且本出库下拣货全部完成时生成复核单,并将出库单置为复核中(8)
|
||||
reviewOrderDomainService.tryGenerateReviewOrderAfterPickingComplete(pickingOrderPO, stockOutOrder);
|
||||
// 需要复核且本出库下拣货全部完成时生成复核单,并将出库单置为复核中(8);并自动下发 PDA 复核任务与 stock_out_task_order
|
||||
Long newReviewId = reviewOrderDomainService.tryGenerateReviewOrderAfterPickingComplete(pickingOrderPO, stockOutOrder);
|
||||
if (newReviewId != null) {
|
||||
reviewOrderApplicationService.autoDistributeReviewAfterPickingComplete(newReviewId);
|
||||
}
|
||||
}
|
||||
//同步BMS结算系统,生成业务单据
|
||||
//这里只有不需要复核的时候才推送,需要复核的在复核流程推送
|
||||
|
||||
+14
-93
@@ -16,11 +16,8 @@ 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;
|
||||
import com.mhd.wms.domain.reviewOrder.repository.mapper.ReviewOrderMapper;
|
||||
import com.mhd.wms.domain.stockOutTaskOrder.repository.facade.IStockOutTaskOrderService;
|
||||
import com.mhd.wms.domain.stockOutTaskOrder.repository.todo.StockOutTaskOrderDO;
|
||||
import com.mhd.wms.domain.stockOutOrder.entity.StockOutOrder;
|
||||
import com.mhd.wms.domain.stockOutOrder.repository.facade.IStockOutOrderService;
|
||||
import com.mhd.wms.domain.taskPickingMaterialDetail.repository.todo.TaskPickingMaterialDetailDO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -55,21 +52,21 @@ public class ReviewOrderDomainService {
|
||||
|
||||
@Autowired
|
||||
private IStockOutOrderService stockOutOrderService;
|
||||
@Autowired
|
||||
private IStockOutTaskOrderService stockOutTaskOrderService;
|
||||
|
||||
/**
|
||||
* 拣货全部完成后,若出库单需要复核,则生成复核单头+明细,并将出库单状态置为「复核中」(8)。
|
||||
* 仅处理普通拣货单(type=1);波次拣货(type=2)暂不生成,避免一单多出库口径不一致。
|
||||
*
|
||||
* @return 新生成的复核单主键;未生成时返回 null(调用方用于自动 PDA 复核下发与 stock_out_task_order)
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void tryGenerateReviewOrderAfterPickingComplete(PickingOrderPO pickingOrderPO, StockOutOrder stockOutOrder) {
|
||||
public Long tryGenerateReviewOrderAfterPickingComplete(PickingOrderPO pickingOrderPO, StockOutOrder stockOutOrder) {
|
||||
if (pickingOrderPO == null || stockOutOrder == null) {
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
String outOrderNumber = pickingOrderPO.getOrderNumber();
|
||||
if (outOrderNumber == null) {
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
// 是否复核以出库单为准:1-是 2-否(与 StockOutOrder 一致);拣货单 PO 上 review 可能未映射或为 null
|
||||
Integer needReview = stockOutOrder.getReview();
|
||||
@@ -79,11 +76,11 @@ public class ReviewOrderDomainService {
|
||||
if (!Integer.valueOf(1).equals(needReview)) {
|
||||
log.info("跳过生成复核单:出库单未勾选需要复核(出库单 review 须为 1) outOrderNumber={} stockOutReview={} pickingReview={}",
|
||||
outOrderNumber, stockOutOrder.getReview(), pickingOrderPO.getReview());
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
if (!Integer.valueOf(1).equals(pickingOrderPO.getType())) {
|
||||
log.info("跳过生成复核单:仅普通拣货单(type=1)生成,当前 type={} outOrderNumber={}", pickingOrderPO.getType(), outOrderNumber);
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
List<PickingOrder> pickingOrders = pickingOrderService.list(new LambdaQueryWrapper<PickingOrder>()
|
||||
@@ -92,13 +89,13 @@ public class ReviewOrderDomainService {
|
||||
.eq(PickingOrder::getDelFlag, 1));
|
||||
if (pickingOrders.isEmpty()) {
|
||||
log.warn("跳过生成复核单:未找到普通拣货单记录 outOrderNumber={}", outOrderNumber);
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
boolean allPickingFinished = pickingOrders.stream()
|
||||
.allMatch(p -> p.getStatus() != null && p.getStatus() == 3);
|
||||
if (!allPickingFinished) {
|
||||
log.info("跳过生成复核单:同一出库单下尚未全部完成拣货(需全部拣货单 status=3) outOrderNumber={}", outOrderNumber);
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
long exists = reviewOrderMapper.selectCount(new LambdaQueryWrapper<ReviewOrder>()
|
||||
@@ -106,7 +103,7 @@ public class ReviewOrderDomainService {
|
||||
.eq(ReviewOrder::getDelFlag, 1));
|
||||
if (exists > 0) {
|
||||
log.info("跳过生成复核单:该出库单已存在复核单 outOrderNumber={}", outOrderNumber);
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
@@ -186,10 +183,9 @@ public class ReviewOrderDomainService {
|
||||
if (detailInserted == 0) {
|
||||
reviewOrderMapper.deleteById(reviewOrderId);
|
||||
log.info("跳过生成复核单:拣货明细无已拣货数量>0 的行 outOrderNumber={}", outOrderNumber);
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
// 复核也生成作业单(同拣货作业单表结构),用于作业任务跟踪;货主须来自出库单,不能误用客户字段
|
||||
genStockOutTaskOrderForReview(header, stockOutOrder, loginUser, now);
|
||||
// stock_out_task_order 与 PDA 复核任务下发由调用方在应用层自动触发(与 PC 复核下发同一套逻辑)
|
||||
|
||||
StockOutOrder statusUpdate = new StockOutOrder();
|
||||
statusUpdate.setStatus(8);
|
||||
@@ -199,7 +195,8 @@ public class ReviewOrderDomainService {
|
||||
stockOutOrderService.update(statusUpdate, new LambdaQueryWrapper<StockOutOrder>()
|
||||
.eq(StockOutOrder::getOutOrderNumber, outOrderNumber));
|
||||
|
||||
log.info("拣货完成已生成复核单 reviewOrderNumber={} outOrderNumber={}", reviewOrderNumber, outOrderNumber);
|
||||
log.info("拣货完成已生成复核单 reviewOrderNumber={} outOrderNumber={} reviewOrderId={}", reviewOrderNumber, outOrderNumber, reviewOrderId);
|
||||
return reviewOrderId;
|
||||
}
|
||||
|
||||
private ReviewMaterialDetail buildDetailFromPicking(PickingMaterialDetail line, Long reviewOrderId, String reviewOrderNumber,
|
||||
@@ -314,82 +311,6 @@ public class ReviewOrderDomainService {
|
||||
return d;
|
||||
}
|
||||
|
||||
/**
|
||||
* 复核单生成后,同步生成一张作业单到 stock_out_task_order(结构与拣货作业单一致)。
|
||||
*/
|
||||
private void genStockOutTaskOrderForReview(ReviewOrder header, StockOutOrder stockOutOrder, LoginUser loginUser, Date now) {
|
||||
if (header == null || header.getReviewOrderNumber() == null) {
|
||||
return;
|
||||
}
|
||||
// 防重复:同一个复核单号只生成一张作业单
|
||||
long exists = stockOutTaskOrderService.count(new LambdaQueryWrapper<com.mhd.wms.domain.stockOutTaskOrder.entity.StockOutTaskOrder>()
|
||||
.eq(com.mhd.wms.domain.stockOutTaskOrder.entity.StockOutTaskOrder::getPickingOrderNumber, header.getReviewOrderNumber())
|
||||
.eq(com.mhd.wms.domain.stockOutTaskOrder.entity.StockOutTaskOrder::getDelFlag, 1));
|
||||
if (exists > 0) {
|
||||
return;
|
||||
}
|
||||
List<ReviewMaterialDetail> reviewRows = reviewMaterialDetailMapper.selectList(new LambdaQueryWrapper<ReviewMaterialDetail>()
|
||||
.eq(ReviewMaterialDetail::getReviewOrderId, header.getReviewOrderId())
|
||||
.eq(ReviewMaterialDetail::getDelFlag, 1));
|
||||
if (reviewRows == null || reviewRows.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
StockOutTaskOrderDO taskDO = new StockOutTaskOrderDO();
|
||||
taskDO.setOrganizationId(header.getOrganizationId());
|
||||
taskDO.setOrganizationName(header.getOrganizationName());
|
||||
taskDO.setTopOrganizationId(header.getTopOrganizationId());
|
||||
taskDO.setWarehouseId(header.getWarehouseId());
|
||||
taskDO.setWarehouseCode(header.getWarehouseCode());
|
||||
taskDO.setWarehouseName(header.getWarehouseName());
|
||||
taskDO.setShipperId(stockOutOrder != null ? stockOutOrder.getShipperId() : null);
|
||||
taskDO.setShipperName(stockOutOrder != null ? stockOutOrder.getShipperName() : null);
|
||||
taskDO.setOrderNumber(header.getOutOrderNumber());
|
||||
taskDO.setPickingOrderNumber(header.getReviewOrderNumber());
|
||||
taskDO.setSerialNumber(OrderSequence.getOrderCode("FHZYLS"));
|
||||
taskDO.setTaskNumber(OrderSequence.getOrderCode("FHZY"));
|
||||
taskDO.setStatus(1);
|
||||
// 复用字段:type=1 代表按单作业(与拣货任务一致口径)
|
||||
taskDO.setType(1);
|
||||
taskDO.setOperatorsBy(loginUser != null ? loginUser.getUserid() : null);
|
||||
taskDO.setOperatorsName(resolveLoginDisplayName(loginUser));
|
||||
taskDO.setCreateBy(loginUser != null ? loginUser.getUserid() : null);
|
||||
taskDO.setCreateByName(resolveLoginDisplayName(loginUser));
|
||||
taskDO.setCreateTime(now);
|
||||
taskDO.setUpdateBy(loginUser != null ? loginUser.getUserid() : null);
|
||||
taskDO.setUpdateByName(resolveLoginDisplayName(loginUser));
|
||||
taskDO.setUpdateTime(now);
|
||||
|
||||
List<TaskPickingMaterialDetailDO> detailDOList = reviewRows.stream().map(r -> {
|
||||
TaskPickingMaterialDetailDO d = new TaskPickingMaterialDetailDO();
|
||||
d.setMaterialDetailId(r.getMaterialDetailId());
|
||||
d.setOrganizationId(header.getOrganizationId());
|
||||
d.setOrganizationName(header.getOrganizationName());
|
||||
d.setTopOrganizationId(header.getTopOrganizationId());
|
||||
d.setMaterialBaseInfoId(r.getMaterialBaseInfoId());
|
||||
d.setMaterialCode(r.getMaterialCode());
|
||||
d.setMaterialName(r.getMaterialName());
|
||||
d.setBarCode(r.getBarCode());
|
||||
d.setQuantity(r.getPendingReviewQty());
|
||||
d.setActualQuantity(r.getPendingReviewQty());
|
||||
d.setPickingQuantity(BigDecimal.ZERO);
|
||||
d.setPickingStatus(1);
|
||||
d.setUnitCode(r.getUnitCode());
|
||||
d.setUnitName(r.getUnitName());
|
||||
d.setBatchNumber(r.getBatchNumber());
|
||||
d.setRemark(r.getRemark());
|
||||
d.setTotalNetWeight(r.getNetWeightKg());
|
||||
d.setTotalGrossWeight(r.getGrossWeightKg());
|
||||
d.setTotalVolume(r.getVolumeCbm());
|
||||
d.setTotalArea(r.getAreaSqm());
|
||||
d.setPickingUniqueId(r.getOutUniqueId());
|
||||
return d;
|
||||
}).collect(java.util.stream.Collectors.toList());
|
||||
taskDO.setTaskPickingMaterialDetailList(detailDOList);
|
||||
|
||||
stockOutTaskOrderService.genStockPickingTaskOrder(java.util.Collections.singletonList(taskDO));
|
||||
}
|
||||
|
||||
/** 与拣货领域一致:优先 userPo.userName(姓名),其次 LoginUser.realname,最后 username(账号兜底) */
|
||||
private static String resolveLoginDisplayName(LoginUser loginUser) {
|
||||
if (loginUser == null) {
|
||||
|
||||
+9
@@ -41,6 +41,15 @@ public class ReviewOrderDO extends BaseVOEntity {
|
||||
@ApiModelProperty("客户名称(模糊)")
|
||||
private String customerName;
|
||||
|
||||
@ApiModelProperty("货主名称")
|
||||
private String shipperName;
|
||||
|
||||
@ApiModelProperty("货主ID")
|
||||
private Long shipperId;
|
||||
|
||||
@ApiModelProperty("货主代码")
|
||||
private String shipperCode;
|
||||
|
||||
@ApiModelProperty("创建时间起(字符串,格式与库一致即可,如 yyyy-MM-dd)")
|
||||
private String createTimeStart;
|
||||
|
||||
|
||||
+1
-13
@@ -517,19 +517,7 @@ public class StockInOrderDomainService {
|
||||
if (!batchInsertResult) {
|
||||
throw new ServiceException("生成收货单失败");
|
||||
}
|
||||
//生成收货任务:根据入库单号查询刚生成的收货单
|
||||
List<StockReceiptOrderPO> stockReceiptOrderPOList = new ArrayList<>();
|
||||
for (String inOrderNumber : inOrderNumberList) {
|
||||
StockReceiptOrderDO stockReceiptOrderDOQuery = new StockReceiptOrderDO();
|
||||
stockReceiptOrderDOQuery.setInOrderNumber(inOrderNumber);
|
||||
List<StockReceiptOrderPO> receiptOrderList = stockReceiptOrderDomainService.queryList(stockReceiptOrderDOQuery);
|
||||
if (!CollectionUtils.isEmpty(receiptOrderList)) {
|
||||
stockReceiptOrderPOList.addAll(receiptOrderList);
|
||||
}
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(stockReceiptOrderPOList)) {
|
||||
stockReceiptOrderDomainService.genStockReceiptTaskOrder(stockReceiptOrderPOList);
|
||||
}
|
||||
// 入库作业单(收货 type=1)在「收货任务下发」时生成,审核通过仅生成收货单与质检等,此处不再落 stock_in_task_order
|
||||
return batchInsertResult;
|
||||
}
|
||||
|
||||
|
||||
+7
-1
@@ -34,6 +34,7 @@ import com.mhd.wms.domain.pickingOrder.entity.PickingOrder;
|
||||
import com.mhd.wms.domain.pickingOrder.repository.facade.IPickingOrderService;
|
||||
import com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO;
|
||||
import com.mhd.wms.domain.pickingOrder.repository.todo.PickingOrderDO;
|
||||
import com.mhd.wms.application.service.reviewOrder.ReviewOrderApplicationService;
|
||||
import com.mhd.wms.domain.pickingOrder.service.ReviewOrderDomainService;
|
||||
import com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO;
|
||||
import com.mhd.wms.domain.stockInOrder.service.StockInOrderDomainService;
|
||||
@@ -110,6 +111,8 @@ public class StockOutTaskOrderDomainService {
|
||||
private CopyCodeReferenceDomainService copyCodeReferenceDomainService;
|
||||
@Autowired
|
||||
private ReviewOrderDomainService reviewOrderDomainService;
|
||||
@Autowired
|
||||
private ReviewOrderApplicationService reviewOrderApplicationService;
|
||||
@Resource
|
||||
private OutMaterialDetailMapper outMaterialDetailMapper;
|
||||
|
||||
@@ -892,7 +895,10 @@ public class StockOutTaskOrderDomainService {
|
||||
StockOutOrder so = stockOutOrderService.getOne(new LambdaQueryWrapper<StockOutOrder>()
|
||||
.eq(StockOutOrder::getOutOrderNumber, pickingOrderPODb.getOrderNumber()));
|
||||
if (so != null) {
|
||||
reviewOrderDomainService.tryGenerateReviewOrderAfterPickingComplete(pickingOrderPODb, so);
|
||||
Long newReviewId = reviewOrderDomainService.tryGenerateReviewOrderAfterPickingComplete(pickingOrderPODb, so);
|
||||
if (newReviewId != null) {
|
||||
reviewOrderApplicationService.autoDistributeReviewAfterPickingComplete(newReviewId);
|
||||
}
|
||||
}
|
||||
}
|
||||
return stockOutUpdated;
|
||||
|
||||
+51
-15
@@ -55,6 +55,7 @@ import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetai
|
||||
import com.mhd.wms.domain.stockInOrder.entity.StockInOrder;
|
||||
import com.mhd.wms.domain.stockInOrder.repository.facade.IStockInOrderService;
|
||||
import com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO;
|
||||
import com.mhd.wms.domain.stockInTaskOrder.entity.StockInTaskOrder;
|
||||
import com.mhd.wms.domain.stockInTaskOrder.repository.facade.IStockInTaskOrderService;
|
||||
import com.mhd.wms.domain.stockInTaskOrder.repository.todo.StockInTaskOrderDO;
|
||||
import com.mhd.wms.domain.stockReceiptOrder.entity.StockReceiptOrder;
|
||||
@@ -396,6 +397,8 @@ public class StockReceiptOrderDomainService {
|
||||
}
|
||||
//收货生成任务下发
|
||||
genDeliveTask(stockReceiptOrderPOList, stockReceiptOrderDO);
|
||||
// 下发时生成「收货」入库作业单 type=1;作业人/完成时间在 PDA/PC 实际完成收货时回写
|
||||
genStockReceiptTaskOrder(stockReceiptOrderPOList);
|
||||
//标记收货单任务已下发
|
||||
return stockReceiptOrderService.update(null, new UpdateWrapper<StockReceiptOrder>().lambda()
|
||||
.set(StockReceiptOrder::getTaskDistribution, 1)
|
||||
@@ -444,8 +447,7 @@ public class StockReceiptOrderDomainService {
|
||||
receiptMaterialDetailService.batchReceiptUpdate(stockReceiptOrderDO);
|
||||
// 同步更新入库单明细的收货数量(入库单 totalNetWeight/totalGrossWeight/totalVolume/totalArea 不因收货改库,见 sync 内注释)
|
||||
syncUpdateInMaterialDetailFromReceipt(stockReceiptOrderDO, stockReceiptOrderPO);
|
||||
//生成 收货作业单
|
||||
genStockReceiptTaskOrderByReceivingGoods(stockReceiptOrderPO,stockReceiptOrderDO);
|
||||
// 收货类入库作业单在「任务下发」时生成,此处不再生成 type=1 作业单
|
||||
//收货后上架前 生成质检
|
||||
genQualityInspectionByReceivingGoods(stockReceiptOrderDO);
|
||||
//saveAmount(stockReceiptOrderDO);
|
||||
@@ -856,6 +858,10 @@ public class StockReceiptOrderDomainService {
|
||||
}
|
||||
//根据收货数量生成上架(PDA=是否下发是,PC=是否下发否)
|
||||
genStockShelfOrder(stockReceiptOrderPO, fromPda);
|
||||
// PDA 收货完成时生成「上架」入库作业单 type=2;PC 仍在上架作业时按单生成
|
||||
if (Boolean.TRUE.equals(fromPda)) {
|
||||
stockShelfOrderDomainService.tryGenStockShelfInTaskOrderAfterPdaReceiptComplete(stockReceiptOrderPO.getReceiptOrderNumber());
|
||||
}
|
||||
|
||||
//生成上架单后,更新入库单状态为4(上架中)
|
||||
if (StringUtils.isNotBlank(stockReceiptOrderPO.getInOrderNumber())) {
|
||||
@@ -889,11 +895,34 @@ public class StockReceiptOrderDomainService {
|
||||
.set(StockReceiptOrder::getUpdateByName, loginUser.getUsername())
|
||||
.set(StockReceiptOrder::getUpdateTime, new Date())
|
||||
.eq(StockReceiptOrder::getReceiptOrderId, receiptOrderId));
|
||||
if (update) {
|
||||
markReceiptTypeStockInTaskOrderOnComplete(stockReceiptOrderPO.getReceiptOrderNumber(), loginUser, userRealName);
|
||||
}
|
||||
//推送bms
|
||||
//wholeRentSynchronizationZXF(receiptOrderId);
|
||||
return update;
|
||||
}
|
||||
|
||||
/**
|
||||
* 收货实际完成时回写「收货」类入库作业单(type=1)的作业人、作业完成时间(下发/生成时不下发填写)。
|
||||
*/
|
||||
private void markReceiptTypeStockInTaskOrderOnComplete(String receiptOrderNumber, LoginUser loginUser, String userRealName) {
|
||||
if (StringUtils.isBlank(receiptOrderNumber) || loginUser == null) {
|
||||
return;
|
||||
}
|
||||
Date now = new Date();
|
||||
stockInTaskOrderService.update(null, new UpdateWrapper<StockInTaskOrder>().lambda()
|
||||
.set(StockInTaskOrder::getOperatorsBy, loginUser.getUserid())
|
||||
.set(StockInTaskOrder::getOperatorsName, userRealName)
|
||||
.set(StockInTaskOrder::getOperatorsEndTime, now)
|
||||
.set(StockInTaskOrder::getUpdateBy, loginUser.getUserid())
|
||||
.set(StockInTaskOrder::getUpdateByName, userRealName)
|
||||
.set(StockInTaskOrder::getUpdateTime, now)
|
||||
.eq(StockInTaskOrder::getReceiptOrderNumber, receiptOrderNumber)
|
||||
.eq(StockInTaskOrder::getType, 1)
|
||||
.eq(StockInTaskOrder::getDelFlag, 1));
|
||||
}
|
||||
|
||||
public void updateInOrder(StockReceiptOrderDTO stockReceiptOrderDTO) {
|
||||
String inOrderNumber = stockReceiptOrderDTO.getInOrderNumber();
|
||||
Long receiptOrderId = stockReceiptOrderDTO.getReceiptOrderId();
|
||||
@@ -1072,8 +1101,19 @@ public class StockReceiptOrderDomainService {
|
||||
receiptMaterialUpdateWrapper.setSql("already_receipt_quantity = quantity ");
|
||||
receiptMaterialUpdateWrapper.setSql("receipt_quantity = quantity ");
|
||||
receiptMaterialDetailService.update(receiptMaterialUpdateWrapper);
|
||||
//整单收获生成 收获作业单
|
||||
genStockReceiptTaskOrder(stockReceiptOrderPOList);
|
||||
// 整单收货完成:回写收货类入库作业单 type=1 的作业人/完成时间
|
||||
final String userRealNameEntire = (loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null
|
||||
&& !loginUser.getUserPo().getUserName().trim().isEmpty())
|
||||
? loginUser.getUserPo().getUserName()
|
||||
: (loginUser.getRealname() != null && !loginUser.getRealname().trim().isEmpty())
|
||||
? loginUser.getRealname()
|
||||
: loginUser.getUsername();
|
||||
for (StockReceiptOrderPO p : stockReceiptOrderPOList) {
|
||||
if (p != null && StringUtils.isNotBlank(p.getReceiptOrderNumber())) {
|
||||
markReceiptTypeStockInTaskOrderOnComplete(p.getReceiptOrderNumber(), loginUser, userRealNameEntire);
|
||||
}
|
||||
}
|
||||
// 整单收货不再在此处生成收货入库作业单;由后续「任务下发」生成 type=1 作业单
|
||||
//完成收货 生成上架单
|
||||
return genStockShelfOrderByEntireReceipt(stockReceiptOrderPOList);
|
||||
}
|
||||
@@ -1124,8 +1164,7 @@ public class StockReceiptOrderDomainService {
|
||||
public Boolean saveReceiptOrder(StockReceiptOrderDO stockReceiptOrderDO) {
|
||||
//保存收货单及物料明细信息
|
||||
receiptMaterialDetailService.noOrderReceiptInsert(stockReceiptOrderDO);
|
||||
//生成 收货作业单
|
||||
genStockReceiptTaskOrderByReceivingGoods(null, stockReceiptOrderDO);
|
||||
// 无单收货的收货类入库作业单在「任务下发」时统一生成
|
||||
//收货后上架前 生成质检
|
||||
genQualityInspectionByReceivingGoods(stockReceiptOrderDO);
|
||||
//根据收货数量生成上架
|
||||
@@ -1572,14 +1611,9 @@ public class StockReceiptOrderDomainService {
|
||||
stockInTaskOrderDO.setSerialNumber(OrderSequence.getOrderCode("SHZYLS"));
|
||||
stockInTaskOrderDO.setTaskNumber(OrderSequence.getOrderCode("SHZY"));
|
||||
stockInTaskOrderDO.setType(1);//收货
|
||||
if (ObjectUtil.isNotNull(stockReceiptOrderPO)){
|
||||
stockInTaskOrderDO.setOperatorsBy(stockReceiptOrderPO.getOperatorsBy());
|
||||
stockInTaskOrderDO.setOperatorsName(stockReceiptOrderPO.getOperatorsName());
|
||||
}else {
|
||||
stockInTaskOrderDO.setOperatorsBy(SecurityUtils.getLoginUser().getUserPo().getUserId());
|
||||
stockInTaskOrderDO.setOperatorsName(SecurityUtils.getLoginUser().getUserPo().getUserName());
|
||||
}
|
||||
stockInTaskOrderDO.setOperatorsEndTime(new Date());
|
||||
stockInTaskOrderDO.setOperatorsBy(null);
|
||||
stockInTaskOrderDO.setOperatorsName(null);
|
||||
stockInTaskOrderDO.setOperatorsEndTime(null);
|
||||
BigDecimal actualQuantity = BigDecimal.ZERO;
|
||||
List<TaskReceiptMaterialDetailDO> taskReceiptMaterialDetailDOList = new ArrayList<>();
|
||||
for (ReceiptMaterialDetailDO receiptMaterialDetailDO : stockReceiptOrderDO.getMaterialDetailList()){
|
||||
@@ -1632,7 +1666,9 @@ public class StockReceiptOrderDomainService {
|
||||
stockInTaskOrderDO.setTaskNumber(OrderSequence.getOrderCode("SHZY"));
|
||||
stockInTaskOrderDO.setType(1);//收货
|
||||
stockInTaskOrderDO.setActualQuantity(stockReceiptOrderPO.getQuantity());
|
||||
stockInTaskOrderDO.setOperatorsEndTime(new Date());
|
||||
stockInTaskOrderDO.setOperatorsBy(null);
|
||||
stockInTaskOrderDO.setOperatorsName(null);
|
||||
stockInTaskOrderDO.setOperatorsEndTime(null);
|
||||
List<ReceiptMaterialDetailPO> receiptMaterialDetailPODbs = receiptMaterialDetailPOListMap.get(stockReceiptOrderPO.getReceiptOrderNumber());
|
||||
if (!CollectionUtils.isEmpty(receiptMaterialDetailPODbs)) {
|
||||
List<TaskReceiptMaterialDetailDO> taskReceiptMaterialDetailDOList = JSONUtil.toList(JSONUtil.parseArray(receiptMaterialDetailPODbs), TaskReceiptMaterialDetailDO.class);
|
||||
|
||||
+118
-2
@@ -6,6 +6,7 @@ import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
@@ -67,6 +68,7 @@ import com.mhd.wms.domain.shelfMaterialDetail.repository.po.ShelfMaterialDetailP
|
||||
import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO;
|
||||
import com.mhd.wms.domain.stockInOrder.entity.StockInOrder;
|
||||
import com.mhd.wms.domain.stockInOrder.repository.facade.IStockInOrderService;
|
||||
import com.mhd.wms.domain.stockInTaskOrder.entity.StockInTaskOrder;
|
||||
import com.mhd.wms.domain.stockInTaskOrder.repository.facade.IStockInTaskOrderService;
|
||||
import com.mhd.wms.domain.stockInTaskOrder.repository.todo.StockInTaskOrderDO;
|
||||
import com.mhd.wms.domain.stockShelfOrder.entity.StockShelfOrder;
|
||||
@@ -357,8 +359,10 @@ public class StockShelfOrderDomainService {
|
||||
userRealNameUpShelf);
|
||||
//同步更新入库单明细的上架数量/上架状态
|
||||
syncShelvesQuantityToInMaterialDetail(stockShelfOrderDO);
|
||||
//生成 上架作业单
|
||||
genStockShelfTaskOrderByUpShelf(stockShelfOrderDO);
|
||||
// 上架类入库作业单 type=2:PDA 已在收货完成时生成;若尚未生成(如 PC 路径)则在本环节补生成
|
||||
if (countShelfTypeInTaskOrder(stockShelfOrderPO.getShelfOrderNumber()) == 0) {
|
||||
genStockShelfTaskOrderByUpShelf(stockShelfOrderDO);
|
||||
}
|
||||
//修改入库单状态: 1-已创建 2-已审核 3-收货中 4-上架中 5-已入库
|
||||
updateStockInOrder(stockShelfOrderPO, 4);
|
||||
//保存库存序列号数据
|
||||
@@ -696,6 +700,7 @@ public class StockShelfOrderDomainService {
|
||||
}
|
||||
String userRealNameComplete = resolveUserRealNameForShelf(loginUser);
|
||||
updateShelfMaterialDetailShelvesStatusWhenOrderCompleted(stockShelfOrderPO, loginUser, userRealNameComplete);
|
||||
markShelfTypeStockInTaskOrderOnComplete(stockShelfOrderPO.getShelfOrderNumber(), loginUser, userRealNameComplete);
|
||||
//推送业务数据到BMS系统
|
||||
// pushSyncBmsDomainService.pushInShelfOrder(stockShelfOrderPO.getInOrderNumber());
|
||||
stockShelfOrderService.updateOmsOrder(stockShelfOrderPO.getInOrderNumber(), 4,
|
||||
@@ -915,6 +920,26 @@ public class StockShelfOrderDomainService {
|
||||
return loginUser.getUsername() != null ? loginUser.getUsername() : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 上架实际完成时回写「上架」类入库作业单(type=2)的作业人、作业完成时间(下发/生成时不下发填写)。
|
||||
*/
|
||||
private void markShelfTypeStockInTaskOrderOnComplete(String shelfOrderNumber, LoginUser loginUser, String userRealName) {
|
||||
if (StringUtils.isBlank(shelfOrderNumber) || loginUser == null) {
|
||||
return;
|
||||
}
|
||||
Date now = new Date();
|
||||
stockInTaskOrderService.update(null, new UpdateWrapper<StockInTaskOrder>().lambda()
|
||||
.set(StockInTaskOrder::getOperatorsBy, loginUser.getUserid())
|
||||
.set(StockInTaskOrder::getOperatorsName, userRealName)
|
||||
.set(StockInTaskOrder::getOperatorsEndTime, now)
|
||||
.set(StockInTaskOrder::getUpdateBy, loginUser.getUserid())
|
||||
.set(StockInTaskOrder::getUpdateByName, userRealName)
|
||||
.set(StockInTaskOrder::getUpdateTime, now)
|
||||
.eq(StockInTaskOrder::getShelfOrderNumber, shelfOrderNumber)
|
||||
.eq(StockInTaskOrder::getType, 2)
|
||||
.eq(StockInTaskOrder::getDelFlag, 1));
|
||||
}
|
||||
|
||||
private synchronized void stockIn(List<ShelfMaterialDetail> shelfMaterialDetailDOList, StockShelfOrderDO stockReceiptOrderDO) {
|
||||
for (ShelfMaterialDetail shelfMaterialDetail : shelfMaterialDetailDOList) {
|
||||
Long materialBaseInfoId = shelfMaterialDetail.getMaterialBaseInfoId();
|
||||
@@ -1430,13 +1455,104 @@ public class StockShelfOrderDomainService {
|
||||
stockInTaskOrderDO.setSerialNumber(OrderSequence.getOrderCode("SHZYLS"));
|
||||
stockInTaskOrderDO.setTaskNumber(OrderSequence.getOrderCode("SHZY"));
|
||||
stockInTaskOrderDO.setType(2);//上架
|
||||
stockInTaskOrderDO.setOperatorsBy(null);
|
||||
stockInTaskOrderDO.setOperatorsName(null);
|
||||
stockInTaskOrderDO.setOperatorsEndTime(null);
|
||||
// 作业单「作业数量」对应 stock_in_task_order.actual_quantity;上架单汇总在 receipt_quantity,字段名不一致不会从 copyProperties 带入,需按实际收货量赋值
|
||||
BigDecimal workQty = stockInTaskOrderDO.getActualQuantity();
|
||||
if (workQty == null || workQty.compareTo(BigDecimal.ZERO) == 0) {
|
||||
workQty = stockShelfOrderDO.getReceiptQuantity();
|
||||
}
|
||||
if ((workQty == null || workQty.compareTo(BigDecimal.ZERO) == 0)
|
||||
&& !CollectionUtils.isEmpty(stockShelfOrderDO.getMaterialDetailList())) {
|
||||
workQty = sumShelfMaterialDetailQuantities(stockShelfOrderDO.getMaterialDetailList());
|
||||
}
|
||||
stockInTaskOrderDO.setActualQuantity(workQty != null ? workQty : BigDecimal.ZERO);
|
||||
List<TaskShelfMaterialDetailDO> taskReceiptMaterialDetailDOList = stockShelfOrderDO.getMaterialDetailList().stream()
|
||||
.map(shelfMaterialDetailDO -> JSONUtil.toBean(JSONUtil.toJsonStr(shelfMaterialDetailDO), TaskShelfMaterialDetailDO.class))
|
||||
.collect(Collectors.toList());
|
||||
for (TaskShelfMaterialDetailDO d : taskReceiptMaterialDetailDOList) {
|
||||
if (d.getChildren() == null) {
|
||||
d.setChildren(new ArrayList<>());
|
||||
}
|
||||
}
|
||||
stockInTaskOrderDO.setTaskShelfMaterialDetailList(taskReceiptMaterialDetailDOList);
|
||||
return stockInTaskOrderService.genStockShelfTaskOrder(Collections.singletonList(stockInTaskOrderDO));
|
||||
}
|
||||
|
||||
/** 汇总上架明细计划数量(与收货实际量一致),含子行树 */
|
||||
private static BigDecimal sumShelfMaterialDetailQuantities(List<ShelfMaterialDetailDO> lines) {
|
||||
if (CollectionUtils.isEmpty(lines)) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
BigDecimal sum = BigDecimal.ZERO;
|
||||
for (ShelfMaterialDetailDO line : lines) {
|
||||
if (line == null) {
|
||||
continue;
|
||||
}
|
||||
if (line.getQuantity() != null) {
|
||||
sum = sum.add(line.getQuantity());
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(line.getChildren())) {
|
||||
sum = sum.add(sumShelfMaterialDetailQuantities(line.getChildren()));
|
||||
}
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
private long countShelfTypeInTaskOrder(String shelfOrderNumber) {
|
||||
if (StringUtils.isBlank(shelfOrderNumber)) {
|
||||
return 0L;
|
||||
}
|
||||
return stockInTaskOrderService.count(new LambdaQueryWrapper<StockInTaskOrder>()
|
||||
.eq(StockInTaskOrder::getShelfOrderNumber, shelfOrderNumber)
|
||||
.eq(StockInTaskOrder::getType, 2)
|
||||
.eq(StockInTaskOrder::getDelFlag, 1));
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA 收货完成已生成上架单后,落库「上架」入库作业单(type=2)。与 {@link #genStockShelfTaskOrderByUpShelf} 同结构,避免在上架操作时再生成一条(上架环节仅在上尚未存在时补生成,供 PC 使用)。
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void tryGenStockShelfInTaskOrderAfterPdaReceiptComplete(String receiptOrderNumber) {
|
||||
if (StringUtils.isBlank(receiptOrderNumber)) {
|
||||
return;
|
||||
}
|
||||
List<StockShelfOrder> rows = stockShelfOrderService.list(new LambdaQueryWrapper<StockShelfOrder>()
|
||||
.eq(StockShelfOrder::getReceiptOrderNumber, receiptOrderNumber)
|
||||
.eq(StockShelfOrder::getDelFlag, 1));
|
||||
if (CollectionUtils.isEmpty(rows)) {
|
||||
return;
|
||||
}
|
||||
rows.sort(Comparator.comparing(StockShelfOrder::getShelfOrderId, Comparator.nullsLast(Comparator.naturalOrder())).reversed());
|
||||
StockShelfOrder head = rows.get(0);
|
||||
if (countShelfTypeInTaskOrder(head.getShelfOrderNumber()) > 0) {
|
||||
return;
|
||||
}
|
||||
StockShelfOrderPO full = getInfo(head.getShelfOrderId());
|
||||
if (full == null || CollectionUtils.isEmpty(full.getMaterialDetailList())) {
|
||||
return;
|
||||
}
|
||||
StockShelfOrderDO d = new StockShelfOrderDO();
|
||||
BeanUtils.copyProperties(full, d);
|
||||
List<ShelfMaterialDetailDO> dlist = full.getMaterialDetailList().stream()
|
||||
.map(po -> {
|
||||
ShelfMaterialDetailDO m = JSONUtil.toBean(JSONUtil.toJsonStr(po), ShelfMaterialDetailDO.class);
|
||||
if (m.getChildren() == null && !CollectionUtils.isEmpty(po.getChildren())) {
|
||||
m.setChildren(po.getChildren().stream()
|
||||
.map(c -> JSONUtil.toBean(JSONUtil.toJsonStr(c), ShelfMaterialDetailDO.class))
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
if (m.getChildren() == null) {
|
||||
m.setChildren(new ArrayList<>());
|
||||
}
|
||||
return m;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
d.setMaterialDetailList(dlist);
|
||||
genStockShelfTaskOrderByUpShelf(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 生成上架追溯记录
|
||||
* @author ZhouGY
|
||||
|
||||
@@ -41,6 +41,21 @@ public class ReviewOrderDTO extends BaseVOEntity {
|
||||
@ApiModelProperty("客户名称(模糊)")
|
||||
private String customerName;
|
||||
|
||||
@ApiModelProperty("客户ID")
|
||||
private Long customerId;
|
||||
|
||||
@ApiModelProperty("客户代码(模糊)")
|
||||
private String customerCode;
|
||||
|
||||
@ApiModelProperty("货主名称")
|
||||
private String shipperName;
|
||||
|
||||
@ApiModelProperty("货主ID")
|
||||
private Long shipperId;
|
||||
|
||||
@ApiModelProperty("货主代码")
|
||||
private String shipperCode;
|
||||
|
||||
@ApiModelProperty("创建时间起 yyyy-MM-dd")
|
||||
private String createTimeStart;
|
||||
|
||||
@@ -69,4 +84,6 @@ public class ReviewOrderDTO extends BaseVOEntity {
|
||||
|
||||
@ApiModelProperty("PDA 列表 Tab:2=历史(已复核),其它=待办(待复核/复核中)")
|
||||
private Integer tabType;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -150,6 +150,9 @@
|
||||
<if test="customerName != null and customerName != ''">
|
||||
and a.customer_name like concat('%', #{customerName}, '%')
|
||||
</if>
|
||||
<if test="shipperName != null and shipperName != ''">
|
||||
and a.shipper_name like concat('%', #{shipperName}, '%')
|
||||
</if>
|
||||
<if test="createTimeStart != null and createTimeStart != ''">
|
||||
and date_format(a.create_time, '%Y-%m-%d') >= #{createTimeStart}
|
||||
</if>
|
||||
|
||||
@@ -93,6 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<where>
|
||||
<include refid="selectStockInTaskOrderPo1"/>
|
||||
</where>
|
||||
order by a.operators_end_time desc, a.create_time desc
|
||||
-- 创建时间为空的排最后
|
||||
order by a.create_time is null, a.create_time desc
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user