feat(oms,wms): 出库业务单反审——已出库/已审核单据回退已创建
- 新增 POST /reservationStockOutOrderApi/reverseAudit,按issueStatus(2-已审核/4-已出库)判断可反审 - 主单回退已创建并打reverseStatus标记,进【已反审】tab(list status=-2),重新审核通过自动复位 - 执行单/明细软删+reverseFlag=1,预约库存调整记录软删 - WMS新增/stockOutOrderApi/omsReverseExecutionOrder:已出库还原实物库存+推OMS,未出库仅还原分配占用,WMS无数据幂等成功 - W出库/拣货/复核/交接单软删+reverseFlag=1,列表支持delFlag=2&reverseFlag=1【已反审】tab - 四页面新增归档详情接口getReverseInfo* - 生成出库异常记录【反审记录】(abnormalType=3,前缀FSYC) - 需先执行SQL: 20260908两个反审脚本(OMS库+WMS库)
This commit is contained in:
+8
@@ -157,6 +157,14 @@ public class HandoverTaskOrderApplicationService {
|
||||
return handoverTaskOrderDomainService.getInfo(outTaskOrderId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取交接作业单归档详情(已反审): 反审时交接单已软删, 供【已反审】tab 查看归档详情
|
||||
*/
|
||||
public HandoverTaskOrderPO getReverseInfo(Long outTaskOrderId)
|
||||
{
|
||||
return handoverTaskOrderDomainService.getReverseInfo(outTaskOrderId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 按作业单号获取交接作业单详细信息(PDA 端)
|
||||
* 用于下发任务(taskType=7)中 trackingNumber 对应交接作业单的 taskNumber
|
||||
|
||||
+9
-2
@@ -282,11 +282,18 @@ public class PickingOrderApplicationService {
|
||||
setMaterialMoreDetailListRecursively(pickingMaterialDetailPOList, batchDetailMap);
|
||||
|
||||
pickingOrderPO.setMaterialDetailList(pickingMaterialDetailPOList);
|
||||
log.info("返回拣货单信息,pickingOrderId={}, materialDetailList大小={}",
|
||||
pickingOrderPO.getPickingOrderId(),
|
||||
log.info("返回拣货单信息,pickingOrderId={}, materialDetailList大小={}",
|
||||
pickingOrderPO.getPickingOrderId(),
|
||||
pickingMaterialDetailPOList != null ? pickingMaterialDetailPOList.size() : 0);
|
||||
return pickingOrderPO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取拣货单归档详情(已反审): 反审时拣货单已软删(del_flag=2), 供【已反审】tab 查看归档详情
|
||||
*/
|
||||
public PickingOrderPO getReverseInfoByIdAndType(Long pickingOrderId, Integer type) {
|
||||
return pickingOrderDomainService.getReverseInfoByIdAndType(pickingOrderId, type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归为物料明细设置更多属性
|
||||
|
||||
+21
@@ -186,6 +186,27 @@ public class ReviewOrderApplicationService {
|
||||
header.setMaterialDetailList(details);
|
||||
return header;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取复核单归档详情(已反审): 反审时复核单/明细均已软删(del_flag=2), 供【已反审】tab 查看归档详情
|
||||
*/
|
||||
public ReviewOrderPO getReverseDetailByReviewOrderId(Long reviewOrderId) {
|
||||
if (reviewOrderId == null) {
|
||||
throw new ServiceException("复核单ID不能为空");
|
||||
}
|
||||
ReviewOrderPO header = reviewOrderMapper.selectHeaderByReviewOrderIdReverse(reviewOrderId);
|
||||
if (header == null) {
|
||||
throw new ServiceException("复核单不存在");
|
||||
}
|
||||
List<ReviewMaterialDetailPO> details = reviewOrderMapper.queryDetailByReviewOrderIdReverse(reviewOrderId);
|
||||
fillDisplayQtyFields(details);
|
||||
Map<Long, List<BatchDetailFeignPO>> batchDetailMap = loadDisplayBatchDetailMap(details);
|
||||
fillDynamicBatchDisplayFields(details, batchDetailMap);
|
||||
buildReviewMaterialMoreDetailListLikeShelf(details, batchDetailMap);
|
||||
fillHeaderSummary(header, details);
|
||||
header.setMaterialDetailList(details);
|
||||
return header;
|
||||
}
|
||||
|
||||
|
||||
public ReviewOrderPO getDetailByReviewOrderNumber(String reviewOrderNumber) {
|
||||
|
||||
+16
-1
@@ -500,7 +500,15 @@ public class StockOutOrderApplicationService {
|
||||
|
||||
return stockOutOrderPO;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取出库单归档详情(已反审): 反审时单据已软删, 供【已反审】tab 查看归档详情
|
||||
*/
|
||||
public StockOutOrderPO getReverseInfoChildren(Long outOrderId)
|
||||
{
|
||||
return stockOutOrderDomainService.getReverseInfoChildren(outOrderId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 出库交接场景:递归过滤 pickingQuantity 为 0 的明细(与交接详情一致)
|
||||
* @param detailList 物料明细树
|
||||
@@ -1950,6 +1958,13 @@ public class StockOutOrderApplicationService {
|
||||
stockOutOrderDomainService.cancelExecutionOrder(stockOutOrder);
|
||||
}
|
||||
|
||||
/**
|
||||
* oms出库执行单反审(已出库单据回退): 还原实物库存并推送OMS、清理单据、生成反审异常记录
|
||||
*/
|
||||
public void reverseExecutionOrder(StockOutOrder stockOutOrder){
|
||||
stockOutOrderDomainService.reverseExecutionOrder(stockOutOrder);
|
||||
}
|
||||
|
||||
public void omsOrderAddDetail(List<OutMaterialDetail> outMaterialDetails){
|
||||
stockOutOrderDomainService.omsOrderAddDetail(outMaterialDetails);
|
||||
}
|
||||
|
||||
+4
-1
@@ -144,4 +144,7 @@ public class HandoverTaskOrder extends BaseVOEntity {
|
||||
private String operatorsName;
|
||||
@ApiModelProperty("计费信息")
|
||||
private String billingJson;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+4
-1
@@ -146,4 +146,7 @@ public class HandoverTaskOrderPO extends BaseVOEntity {
|
||||
private List<TaskHandoverMaterialDetailPO> materialDetailList;
|
||||
@ApiModelProperty("计费信息")
|
||||
private String billingJson;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+4
-1
@@ -146,4 +146,7 @@ public class HandoverTaskOrderDO extends BaseVOEntity {
|
||||
private String pictureApp;
|
||||
|
||||
private String billingJson;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+85
@@ -44,6 +44,7 @@ import com.mhd.wms.domain.materialInventory.repository.mapper.MaterialInventoryM
|
||||
import com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryParamDO;
|
||||
import com.mhd.wms.domain.outMaterialDetail.entity.OutMaterialDetail;
|
||||
import com.mhd.wms.domain.outMaterialDetail.repository.mapper.OutMaterialDetailMapper;
|
||||
import com.mhd.wms.domain.pickingMaterialDetail.entity.PickingMaterialDetail;
|
||||
import com.mhd.wms.domain.pickingMaterialDetail.repository.mapper.PickingMaterialDetailMapper;
|
||||
import com.mhd.wms.domain.pickingMaterialDetail.repository.po.PickingMaterialDetailPO;
|
||||
import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO;
|
||||
@@ -242,6 +243,90 @@ public class HandoverTaskOrderDomainService {
|
||||
return handoverTaskOrderPO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取交接作业单归档详情(已反审): 出库单反审时交接单及关联出库明细均已软删(del_flag=2),
|
||||
* 本方法镜像 getInfo 按 del_flag=2 查归档数据, 供交接单【已反审】tab 查看详情。
|
||||
*/
|
||||
public HandoverTaskOrderPO getReverseInfo(Long outTaskOrderId)
|
||||
{
|
||||
HandoverTaskOrderPO handoverTaskOrderPO = handoverTaskOrderService.getInfo(outTaskOrderId);
|
||||
if (handoverTaskOrderPO == null) {
|
||||
return null;
|
||||
}
|
||||
String orderNumber = handoverTaskOrderPO.getOrderNumber();
|
||||
if (orderNumber != null && !orderNumber.trim().isEmpty()) {
|
||||
StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper<StockOutOrder>().lambda()
|
||||
.eq(StockOutOrder::getOutOrderNumber, orderNumber)
|
||||
.eq(StockOutOrder::getDelFlag, 2));
|
||||
Integer review = stockOutOrder != null ? stockOutOrder.getReview() : null;
|
||||
// 归档明细: 出库明细已随反审软删, 按 del_flag=2 查
|
||||
LambdaQueryWrapper<OutMaterialDetail> omdQuery = new QueryWrapper<OutMaterialDetail>().lambda()
|
||||
.eq(OutMaterialDetail::getOutOrderNumber, orderNumber)
|
||||
.eq(OutMaterialDetail::getDelFlag, 2);
|
||||
List<OutMaterialDetail> outMaterialDetailList = outMaterialDetailMapper.selectList(omdQuery);
|
||||
List<TaskHandoverMaterialDetailPO> materialDetailList = new ArrayList<>();
|
||||
for (OutMaterialDetail omd : outMaterialDetailList) {
|
||||
BigDecimal handoverQuantity;
|
||||
BigDecimal pickQty;
|
||||
if (Integer.valueOf(1).equals(review)) {
|
||||
// 需要复核时:仅限复核单上的明细(picking_material_detail 有拣货的 unique_id)
|
||||
List<PickingMaterialDetail> pmdList = pickingMaterialDetailMapper.selectList(new QueryWrapper<PickingMaterialDetail>().lambda()
|
||||
.eq(PickingMaterialDetail::getOutUniqueId, omd.getUniqueId())
|
||||
.eq(PickingMaterialDetail::getDelFlag, 2)
|
||||
.gt(PickingMaterialDetail::getPickingQuantity, BigDecimal.ZERO));
|
||||
if (pmdList == null || pmdList.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
if (omd.getCheckQuantity() == null || omd.getCheckQuantity().compareTo(BigDecimal.ZERO) <= 0) {
|
||||
continue;
|
||||
}
|
||||
PickingMaterialDetailPO pickingSummary = pickingMaterialDetailMapper.queryTotalsByOutNumberAndBaseId(omd.getUniqueId());
|
||||
pickQty = (pickingSummary != null && pickingSummary.getPickingQuantity() != null) ? pickingSummary.getPickingQuantity() : BigDecimal.ZERO;
|
||||
if (pickQty.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
continue;
|
||||
}
|
||||
handoverQuantity = omd.getCheckQuantity();
|
||||
} else {
|
||||
BigDecimal qty = omd.getPickingQuantity() != null ? omd.getPickingQuantity() : omd.getQuantity();
|
||||
if (qty == null || qty.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
continue;
|
||||
}
|
||||
pickQty = qty;
|
||||
handoverQuantity = qty;
|
||||
}
|
||||
TaskHandoverMaterialDetailPO detail = new TaskHandoverMaterialDetailPO();
|
||||
detail.setMaterialDetailId(omd.getMaterialDetailId());
|
||||
detail.setUniqueId(omd.getUniqueId());
|
||||
detail.setTaskNumber(handoverTaskOrderPO.getTaskNumber());
|
||||
detail.setOrganizationId(omd.getOrganizationId());
|
||||
detail.setOrganizationName(omd.getOrganizationName());
|
||||
detail.setTopOrganizationId(omd.getTopOrganizationId());
|
||||
detail.setMaterialBaseInfoId(omd.getMaterialBaseInfoId());
|
||||
detail.setMaterialCode(omd.getMaterialCode() != null ? omd.getMaterialCode() : omd.getMaterialNo());
|
||||
detail.setMaterialName(omd.getMaterialName() != null ? omd.getMaterialName() : omd.getCommodityName());
|
||||
detail.setBarCode(omd.getBarCode());
|
||||
detail.setWeightLimit(omd.getWeightLimit());
|
||||
detail.setVolumeLimit(omd.getVolumeLimit());
|
||||
detail.setQuantity(omd.getQuantity());
|
||||
detail.setPickingQuantity(pickQty);
|
||||
detail.setCheckQuantity(handoverQuantity);
|
||||
detail.setPackId(omd.getPackId());
|
||||
detail.setPackCode(omd.getPackCode());
|
||||
detail.setPackName(omd.getPackName());
|
||||
detail.setPackDetailId(omd.getPackDetailId() != null ? String.valueOf(omd.getPackDetailId()) : null);
|
||||
detail.setUnitCode(omd.getUnitCode());
|
||||
detail.setUnitName(omd.getUnitName());
|
||||
detail.setUnitNumber(omd.getUnitNumber());
|
||||
detail.setMaterialWarehouseControlId(omd.getMaterialWarehouseControlId());
|
||||
detail.setSerialNumberManage(omd.getSerialNumberManage());
|
||||
detail.setRemark(omd.getRemark());
|
||||
materialDetailList.add(detail);
|
||||
}
|
||||
handoverTaskOrderPO.setMaterialDetailList(materialDetailList);
|
||||
}
|
||||
return handoverTaskOrderPO;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @description 分配月台
|
||||
|
||||
+4
-1
@@ -541,4 +541,7 @@ public class OutMaterialDetail extends BaseVOEntity {
|
||||
@ApiModelProperty("出库数量")
|
||||
@Excel(name = "出库数量")
|
||||
private BigDecimal outQuantity;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+4
-4
@@ -53,8 +53,8 @@ public class OutOrderAbnormal extends BaseVOEntity {
|
||||
@Excel(name = "拣货作业单号")
|
||||
private String outTaskOrderNumber;
|
||||
|
||||
@ApiModelProperty("类型:1-拣货 2-复核")
|
||||
@Excel(name = "类型:1-拣货 2-复核")
|
||||
@ApiModelProperty("类型:1-拣货 2-复核 3-反审记录")
|
||||
@Excel(name = "类型:1-拣货 2-复核 3-反审记录")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty("计划数量")
|
||||
@@ -69,8 +69,8 @@ public class OutOrderAbnormal extends BaseVOEntity {
|
||||
@Excel(name = "异常数量 = 作业数量 - 计划数量")
|
||||
private BigDecimal abnormalActualQuantity;
|
||||
|
||||
@ApiModelProperty("异常类型: 1-拣货异常 2-复核异常")
|
||||
@Excel(name = "异常类型: 1-拣货异常 2-复核异常")
|
||||
@ApiModelProperty("异常类型: 1-拣货异常 2-复核异常 3-反审记录")
|
||||
@Excel(name = "异常类型: 1-拣货异常 2-复核异常 3-反审记录")
|
||||
private Integer abnormalType;
|
||||
|
||||
@ApiModelProperty("异常原因")
|
||||
|
||||
+4
-4
@@ -53,8 +53,8 @@ public class OutOrderAbnormalPO extends BaseVOEntity {
|
||||
@Excel(name = "拣货作业单号")
|
||||
private String outTaskOrderNumber;
|
||||
|
||||
@ApiModelProperty("类型:1-拣货 2-复核")
|
||||
@Excel(name = "类型:1-拣货 2-复核")
|
||||
@ApiModelProperty("类型:1-拣货 2-复核 3-反审记录")
|
||||
@Excel(name = "类型:1-拣货 2-复核 3-反审记录")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty("计划数量:拣货异常=分配数量;复核异常=拣货数量")
|
||||
@@ -69,8 +69,8 @@ public class OutOrderAbnormalPO extends BaseVOEntity {
|
||||
@Excel(name = "异常数量 = 作业数量 - 计划数量")
|
||||
private BigDecimal abnormalActualQuantity;
|
||||
|
||||
@ApiModelProperty("异常类型: 1-拣货异常 2-复核异常")
|
||||
@Excel(name = "异常类型: 1-拣货异常 2-复核异常")
|
||||
@ApiModelProperty("异常类型: 1-拣货异常 2-复核异常 3-反审记录")
|
||||
@Excel(name = "异常类型: 1-拣货异常 2-复核异常 3-反审记录")
|
||||
private Integer abnormalType;
|
||||
|
||||
@ApiModelProperty("异常原因")
|
||||
|
||||
+4
-4
@@ -51,8 +51,8 @@ public class OutOrderAbnormalDO extends BaseVOEntity {
|
||||
@Excel(name = "拣货作业单号")
|
||||
private String outTaskOrderNumber;
|
||||
|
||||
@ApiModelProperty("类型:1-拣货 2-复核")
|
||||
@Excel(name = "类型:1-拣货 2-复核")
|
||||
@ApiModelProperty("类型:1-拣货 2-复核 3-反审记录")
|
||||
@Excel(name = "类型:1-拣货 2-复核 3-反审记录")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty("计划数量")
|
||||
@@ -67,8 +67,8 @@ public class OutOrderAbnormalDO extends BaseVOEntity {
|
||||
@Excel(name = "异常数量 = 作业数量 - 计划数量")
|
||||
private BigDecimal abnormalActualQuantity;
|
||||
|
||||
@ApiModelProperty("异常类型: 1-拣货异常 2-复核异常")
|
||||
@Excel(name = "异常类型: 1-拣货异常 2-复核异常")
|
||||
@ApiModelProperty("异常类型: 1-拣货异常 2-复核异常 3-反审记录")
|
||||
@Excel(name = "异常类型: 1-拣货异常 2-复核异常 3-反审记录")
|
||||
private Integer abnormalType;
|
||||
|
||||
@ApiModelProperty("异常原因")
|
||||
|
||||
+4
-1
@@ -321,4 +321,7 @@ public class PickingMaterialDetail extends BaseVOEntity {
|
||||
private String bondInvtNoGw;
|
||||
private String whNoGw;
|
||||
private String seatNoGw;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
@@ -133,4 +133,7 @@ public class PickingOrder extends BaseVOEntity {
|
||||
private String pushByName;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+5
@@ -58,6 +58,11 @@ public interface IPickingOrderService extends IService<PickingOrder>
|
||||
*/
|
||||
public PickingOrderPO getInfoByIdAndType(Long pickingOrderId, Integer type);
|
||||
|
||||
/**
|
||||
* @description 根据id和类型获取指定拣货单信息(归档: 已反审软删 del_flag=2, 供【已反审】tab 详情)
|
||||
*/
|
||||
public PickingOrderPO getInfoByIdAndTypeReverse(Long pickingOrderId, Integer type);
|
||||
|
||||
|
||||
/**
|
||||
* @description 根据单号和类型获取指定拣货单信息
|
||||
|
||||
+10
@@ -25,12 +25,22 @@ public interface PickingOrderMapper extends BaseMapper<PickingOrder>
|
||||
*/
|
||||
public PickingOrderPO queryOutOrderById(Long pickingOrderId);
|
||||
|
||||
/**
|
||||
* 根据Id关联出库单查询(归档: 已反审软删 del_flag=2, 供【已反审】tab 详情)
|
||||
*/
|
||||
public PickingOrderPO queryOutOrderByIdReverse(Long pickingOrderId);
|
||||
|
||||
|
||||
/**
|
||||
* 根据Id关联波次单查询
|
||||
*/
|
||||
public PickingOrderPO queryWaveOrderById(Long pickingOrderId);
|
||||
|
||||
/**
|
||||
* 根据Id关联波次单查询(归档: 已反审软删 del_flag=2)
|
||||
*/
|
||||
public PickingOrderPO queryWaveOrderByIdReverse(Long pickingOrderId);
|
||||
|
||||
/**
|
||||
* 根据单号关联出库单查询
|
||||
*/
|
||||
|
||||
+17
@@ -146,6 +146,23 @@ public class PickingOrderImpl extends ServiceImpl<PickingOrderMapper, PickingOrd
|
||||
return pickingOrderPO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 归档(已反审): 按 del_flag=2 查软删的拣货单, 供【已反审】tab 详情
|
||||
*/
|
||||
@Override
|
||||
public PickingOrderPO getInfoByIdAndTypeReverse(Long pickingOrderId, Integer type) {
|
||||
PickingOrderPO pickingOrderPO = null;
|
||||
if (type == 1){
|
||||
pickingOrderPO = pickingOrderMapper.queryOutOrderByIdReverse(pickingOrderId);
|
||||
}else {
|
||||
pickingOrderPO = pickingOrderMapper.queryWaveOrderByIdReverse(pickingOrderId);
|
||||
}
|
||||
if (pickingOrderPO == null){
|
||||
throw new ServiceException("拣货单不存在");
|
||||
}
|
||||
return pickingOrderPO;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 根据单号和类型获取指定拣货单信息
|
||||
* @author ZhouGY
|
||||
|
||||
+4
-1
@@ -171,4 +171,7 @@ public class PickingOrderPO extends StockOutOrderBasePO {
|
||||
private String specificationModel;
|
||||
@ApiModelProperty("货物类型 0-物料 1-半成品 2-成品")
|
||||
private Integer goodsType;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+4
-1
@@ -228,4 +228,7 @@ public class PickingOrderDO extends BaseVOEntity {
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTimeTo;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+28
@@ -312,6 +312,34 @@ public class PickingOrderDomainService {
|
||||
return pickingOrderPO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取拣货单归档详情(已反审): 反审时拣货单/拣货明细均已软删(del_flag=2),
|
||||
* 主表走 Reverse 查询(del_flag=2), 明细通过 DO.delFlag=2 查归档数据,
|
||||
* 供拣货单【已反审】tab 查看详情。
|
||||
*/
|
||||
public PickingOrderPO getReverseInfoByIdAndType(Long pickingOrderId, Integer type) {
|
||||
PickingOrderPO pickingOrderPO = pickingOrderService.getInfoByIdAndTypeReverse(pickingOrderId, type);
|
||||
if (pickingOrderPO == null) {
|
||||
throw new ServiceException("拣货单不存在");
|
||||
}
|
||||
PickingMaterialDetailDO pickingMaterialDetailDO = new PickingMaterialDetailDO();
|
||||
pickingMaterialDetailDO.setPickingOrderNumber(pickingOrderPO.getPickingOrderNumber());
|
||||
pickingMaterialDetailDO.setDelFlag(2);
|
||||
List<PickingMaterialDetailPO> pickingMaterialDetailPOList = pickingMaterialDetailService.queryList(pickingMaterialDetailDO);
|
||||
for (PickingMaterialDetailPO pickingMaterialDetailPO : pickingMaterialDetailPOList) {
|
||||
Long materialBaseInfoId = pickingMaterialDetailPO.getMaterialBaseInfoId();
|
||||
MaterialBaseInfo materialBaseInfo = materialBaseInfoMapper.selectById(materialBaseInfoId);
|
||||
if(materialBaseInfo!=null){
|
||||
pickingMaterialDetailPO.setMaterialCode(materialBaseInfo.getMaterialCode());
|
||||
pickingMaterialDetailPO.setMaterialName(materialBaseInfo.getMaterialName());
|
||||
pickingMaterialDetailPO.setCopyCode(materialBaseInfo.getCopyCode());
|
||||
}
|
||||
}
|
||||
copyCodeReferenceDomainService.fillWeightListOnPickingMaterialDetails(pickingMaterialDetailPOList);
|
||||
pickingOrderPO.setMaterialDetailList(pickingMaterialDetailPOList);
|
||||
return pickingOrderPO;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 整单下发
|
||||
* @author ZhouGY
|
||||
|
||||
+4
-1
@@ -120,4 +120,7 @@ public class ReviewMaterialDetail extends BaseVOEntity {
|
||||
@ApiModelProperty("包装详情id")
|
||||
@Excel(name = "包装详情id")
|
||||
private String packDetailId;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.mhd.common.core.web.domain.BaseVOEntity;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
@@ -58,4 +59,7 @@ public class ReviewOrder extends BaseVOEntity {
|
||||
private Date receiveTime;
|
||||
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+10
@@ -24,6 +24,16 @@ public interface ReviewOrderMapper extends BaseMapper<ReviewOrder> {
|
||||
*/
|
||||
ReviewOrderPO selectHeaderByReviewOrderId(@Param("reviewOrderId") Long reviewOrderId);
|
||||
|
||||
/**
|
||||
* 详情-主表(按主键,归档: 已反审软删 del_flag=2,供【已反审】tab 详情)
|
||||
*/
|
||||
ReviewOrderPO selectHeaderByReviewOrderIdReverse(@Param("reviewOrderId") Long reviewOrderId);
|
||||
|
||||
/**
|
||||
* 详情-明细行(按复核单主键,归档: 已反审软删 del_flag=2)
|
||||
*/
|
||||
List<ReviewMaterialDetailPO> queryDetailByReviewOrderIdReverse(@Param("reviewOrderId") Long reviewOrderId);
|
||||
|
||||
/**
|
||||
* 详情-主表(按复核单号)
|
||||
*/
|
||||
|
||||
@@ -106,4 +106,7 @@ public class ReviewOrderPO extends BaseVOEntity {
|
||||
/** 详情与上架单一致:头字段扁平 + 明细列表 */
|
||||
@ApiModelProperty("复核明细")
|
||||
private List<ReviewMaterialDetailPO> materialDetailList;
|
||||
|
||||
@ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+3
@@ -86,4 +86,7 @@ public class ReviewOrderDO extends BaseVOEntity {
|
||||
*/
|
||||
@ApiModelProperty("仅已接收:1-是(receive_time 非空)")
|
||||
private Integer onlyReceived;
|
||||
|
||||
@ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
@@ -461,4 +461,7 @@ public class StockOutOrder extends BaseVOEntity {
|
||||
|
||||
@ApiModelProperty("签名备注")
|
||||
private String signatureRemark;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+4
-1
@@ -497,4 +497,7 @@ public class StockOutOrderPO extends BaseVOEntity {
|
||||
|
||||
@ApiModelProperty("签名备注")
|
||||
private String signatureRemark;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+4
-1
@@ -538,4 +538,7 @@ public class StockOutOrderDO extends BaseVOEntity {
|
||||
/** PDA出库签名列表专用:作业任务人员模糊查询字段 */
|
||||
@ApiModelProperty("作业任务人员模糊查询")
|
||||
private String workUserNameLike;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+215
@@ -48,6 +48,7 @@ import com.mhd.wms.domain.materialInventory.entity.MaterialInventory;
|
||||
import com.mhd.wms.domain.materialInventory.repository.facade.IMaterialInventoryService;
|
||||
import com.mhd.wms.domain.materialInventory.repository.mapper.MaterialInventoryMapper;
|
||||
import com.mhd.wms.domain.materialInventory.repository.po.MaterialInventoryPO;
|
||||
import com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryParamDO;
|
||||
import com.mhd.wms.domain.materialMoreDetail.repository.po.MaterialMoreDetailPO;
|
||||
import com.mhd.wms.domain.materialWarehouseControl.repository.facade.IMaterialWarehouseControlService;
|
||||
import com.mhd.wms.domain.materialWarehouseControl.repository.po.MaterialWarehouseControlPO;
|
||||
@@ -63,6 +64,7 @@ import com.mhd.wms.domain.outMaterialDetail.repository.po.OutMaterialDetailPO;
|
||||
import com.mhd.wms.domain.outMaterialDetail.repository.todo.OutMaterialDetailBaseDO;
|
||||
import com.mhd.wms.domain.outMaterialDetail.repository.todo.OutMaterialDetailDO;
|
||||
import com.mhd.wms.domain.outOrderAbnormal.repository.facade.IOutOrderAbnormalService;
|
||||
import com.mhd.wms.domain.outOrderAbnormal.entity.OutOrderAbnormal;
|
||||
import com.mhd.wms.domain.outOrderAbnormal.repository.todo.OutOrderAbnormalBaseDO;
|
||||
import com.mhd.wms.domain.pickingMaterialDetail.entity.PickingMaterialDetail;
|
||||
import com.mhd.wms.domain.pickingMaterialDetail.repository.facade.IPickingMaterialDetailService;
|
||||
@@ -888,6 +890,34 @@ public class StockOutOrderDomainService {
|
||||
return stockOutOrderPO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取出库单归档详情(已反审): 出库单反审时主表/明细均已软删(del_flag=2),
|
||||
* 主表 getInfo 走 getById 不滤 del_flag, 明细通过 DO.delFlag=2 查归档数据
|
||||
* (out_material_detail queryList XML 支持 delFlag 参数), 供【已反审】tab 查看详情。
|
||||
*/
|
||||
public StockOutOrderPO getReverseInfoChildren(Long outOrderId) {
|
||||
StockOutOrderPO stockOutOrderPO = stockOutOrderService.getInfo(outOrderId);
|
||||
if (stockOutOrderPO == null || stockOutOrderPO.getOutOrderNumber() == null) {
|
||||
throw new ServiceException("出库单不存在");
|
||||
}
|
||||
OutMaterialDetailDO outMaterialDetailDO = new OutMaterialDetailDO();
|
||||
outMaterialDetailDO.setOutOrderNumber(stockOutOrderPO.getOutOrderNumber());
|
||||
outMaterialDetailDO.setDelFlag(2);
|
||||
List<OutMaterialDetailPO> materialDetailPOList = outMaterialDetailService.queryListChildren(outMaterialDetailDO);
|
||||
for (OutMaterialDetailPO outMaterialDetailPO : materialDetailPOList) {
|
||||
String materialNo = outMaterialDetailPO.getMaterialNo();
|
||||
List<MaterialBaseInfo> materialBaseInfos = materialBaseInfoMapper.selectList(new QueryWrapper<MaterialBaseInfo>().lambda().eq(MaterialBaseInfo::getMaterialCode, materialNo));
|
||||
if (!CollectionUtils.isEmpty(materialBaseInfos) && materialBaseInfos.size() > 0) {
|
||||
outMaterialDetailPO.setCommodityName(materialBaseInfos.get(0).getMaterialName());
|
||||
outMaterialDetailPO.setMaterialCode(materialBaseInfos.get(0).getMaterialCode());
|
||||
outMaterialDetailPO.setMaterialName(materialBaseInfos.get(0).getMaterialName());
|
||||
outMaterialDetailPO.setCopyCode(materialBaseInfos.get(0).getCopyCode());
|
||||
}
|
||||
}
|
||||
stockOutOrderPO.setMaterialDetailList(materialDetailPOList);
|
||||
return stockOutOrderPO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取出库单详细信息(PDA复核管理查询详情)
|
||||
* 复核场景下与PC端getCheckInfo保持一致,返回拣货下发时的完整数据(树形结构、拣货汇总、批次属性等)
|
||||
@@ -2625,6 +2655,191 @@ public class StockOutOrderDomainService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description oms出库执行单反审(业务单反审时逐执行单调用; 业务单侧仅允许"已审核未出库"单据反审):
|
||||
* 按WMS出库单状态分支还原库存:
|
||||
* 1.未出库(状态非9, 常规场景): 还原分配占用(可用+、冻结-, 与 cancelExecutionOrder 取消分配同口径),
|
||||
* 不动实物库存、不推OMS——实物未被扣减, 加回会虚增库存; 软删库存调整记录。
|
||||
* 2.已出库(状态9, 防御分支, 业务单侧已拦截): 镜像交接扣减 doStockOutDeduct(实物/可用加回, 冻结不动),
|
||||
* 生成库存调整记录【出库反审】并 omsEdit 推送还原OMS预约库存。
|
||||
* 3.逻辑删除出库链路单据(软删+reverseFlag=1, 划归【已反审】tab): 配送明细/出库明细/出库单/拣货单及明细/复核单及明细/交接作业单。
|
||||
* 4.生成1条出库异常记录【反审记录】(abnormalType=3), 单号前缀 FSYC, 供记录跟踪。
|
||||
* 反审原因经入参 remark 透传(OMS侧拼接业务单号+反审原因)。
|
||||
* @date 2026/9/8
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void reverseExecutionOrder(StockOutOrder stockOutOrder) {
|
||||
String outOrderNumber = stockOutOrder.getOutOrderNumber();
|
||||
StockOutOrder stockOutOrderDB = stockOutOrderService.getOne(new LambdaQueryWrapper<StockOutOrder>()
|
||||
.eq(StockOutOrder::getOutOrderNumber, outOrderNumber)
|
||||
.eq(StockOutOrder::getDelFlag, 1));
|
||||
if (stockOutOrderDB == null) {
|
||||
// 幂等: OMS普通「下发」生成的执行单不推WMS(仅「执行并下发」才推), WMS无此单属正常场景,
|
||||
// 直接返回成功(无数据可清), 由OMS侧完成OMS侧清理——与入库侧反审"WMS无数据时幂等成功"同口径
|
||||
log.info("出库反审幂等:WMS无活动出库单[{}],无需清理", outOrderNumber);
|
||||
return;
|
||||
}
|
||||
// OMS经Feign调用时可能无登录上下文(SecurityUtils会抛异常), 容错获取, 兜底用出库单创建人
|
||||
LoginUser loginUser;
|
||||
try {
|
||||
loginUser = SecurityUtils.getLoginUser();
|
||||
} catch (Exception e) {
|
||||
loginUser = new LoginUser();
|
||||
loginUser.setUserid(stockOutOrderDB.getCreateBy() != null ? stockOutOrderDB.getCreateBy() : 0L);
|
||||
loginUser.setUsername(stockOutOrderDB.getCreateByName() != null ? stockOutOrderDB.getCreateByName() : "system");
|
||||
}
|
||||
String reverseRemark = stockOutOrder.getRemark();
|
||||
//逻辑删除配送明细(所有清理路径统一先清, 与 cancelExecutionOrder 一致)
|
||||
deliveryDetailsLinkService.update(new UpdateWrapper<com.mhd.wms.domain.deliveryDetailsLink.entity.DeliveryDetailsLink>().lambda()
|
||||
.set(com.mhd.wms.domain.deliveryDetailsLink.entity.DeliveryDetailsLink::getDelFlag, 2)
|
||||
.eq(com.mhd.wms.domain.deliveryDetailsLink.entity.DeliveryDetailsLink::getOrderNumber, outOrderNumber)
|
||||
.eq(com.mhd.wms.domain.deliveryDetailsLink.entity.DeliveryDetailsLink::getDelFlag, 1));
|
||||
List<OutMaterialDetail> materialDetails = outMaterialDetailService.list(new LambdaQueryWrapper<OutMaterialDetail>()
|
||||
.eq(OutMaterialDetail::getOutOrderNumber, outOrderNumber)
|
||||
.eq(OutMaterialDetail::getDelFlag, 1));
|
||||
// 出库/未出库分支: 未出库单据(WMS状态非9)实物库存未被扣减, 只还原分配占用(可用+冻结-),
|
||||
// 不做实物还原也不推OMS——否则会虚增库存; 已出库(9)分支还原实物并推OMS(防御保留, 业务单反审已拦截已出库单)
|
||||
boolean shipped = stockOutOrderDB.getStatus() != null && stockOutOrderDB.getStatus() == 9;
|
||||
for (OutMaterialDetail materialDetail : materialDetails) {
|
||||
MaterialInventory materialInventory = materialInventoryMapper.selectById(materialDetail.getMaterialInventoryId());
|
||||
if (!shipped) {
|
||||
// ===== 未出库: 还原分配占用(与 cancelExecutionOrder 的取消分配同口径) =====
|
||||
BigDecimal allocationQuantity = materialDetail.getAllocationQuantity();
|
||||
if (materialInventory != null && allocationQuantity != null && allocationQuantity.compareTo(BigDecimal.ZERO) > 0) {
|
||||
materialInventory.setAllocationQuantity((materialInventory.getAllocationQuantity() == null ? BigDecimal.ZERO : materialInventory.getAllocationQuantity()).add(allocationQuantity));
|
||||
materialInventory.setFreezeQuantity((materialInventory.getFreezeQuantity() == null ? BigDecimal.ZERO : materialInventory.getFreezeQuantity()).subtract(allocationQuantity));
|
||||
materialInventory.setUpdateTime(new Date());
|
||||
materialInventoryMapper.updateById(materialInventory);
|
||||
}
|
||||
//逻辑删除库存调整记录
|
||||
Long uniqueId = materialDetail.getUniqueId();
|
||||
String relateNo = outOrderNumber + "#" + uniqueId;
|
||||
inventoryAdjustmentRecordService.update(new InventoryAdjustmentRecord(), new LambdaUpdateWrapper<InventoryAdjustmentRecord>()
|
||||
.set(InventoryAdjustmentRecord::getDelFlag, 2)
|
||||
.eq(InventoryAdjustmentRecord::getRelateNo, relateNo));
|
||||
} else {
|
||||
// ===== 已出库: 还原实物库存并推送OMS(防御分支) =====
|
||||
//还原数量与交接扣减一致: 需复核取复核数量, 否则取拣货数量(为空取计划数量), 见 doStockOutDeduct
|
||||
BigDecimal effectiveQuantity = Integer.valueOf(1).equals(stockOutOrderDB.getReview())
|
||||
? materialDetail.getCheckQuantity()
|
||||
: (materialDetail.getPickingQuantity() != null ? materialDetail.getPickingQuantity() : materialDetail.getQuantity());
|
||||
Long materialInventoryId = materialDetail.getMaterialInventoryId();
|
||||
if (materialInventoryId == null || effectiveQuantity == null || effectiveQuantity.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
//无可还原库存(未交接或漏传), 仍继续清理单据
|
||||
materialDetail.setDelFlag(2);
|
||||
materialDetail.setReverseFlag(1);
|
||||
outMaterialDetailService.updateById(materialDetail);
|
||||
continue;
|
||||
}
|
||||
if (materialInventory != null && !"yang_pin_chu_ku".equals(stockOutOrderDB.getBusinessType())) {
|
||||
//样品出库交接不扣库存(与 doStockOutDeduct 一致), 反审同样跳过还原
|
||||
BigDecimal area = materialDetail.getCheckArea() != null ? materialDetail.getCheckArea() : BigDecimal.ZERO;
|
||||
BigDecimal volume = materialDetail.getCheckVolume() != null ? materialDetail.getCheckVolume() : BigDecimal.ZERO;
|
||||
BigDecimal grossWeight = materialDetail.getCheckGrossWeight() != null ? materialDetail.getCheckGrossWeight() : BigDecimal.ZERO;
|
||||
BigDecimal netWeight = materialDetail.getCheckNetWeight() != null ? materialDetail.getCheckNetWeight() : BigDecimal.ZERO;
|
||||
MaterialInventoryParamDO restoreParam = new MaterialInventoryParamDO();
|
||||
restoreParam.setMaterialInventoryId(materialInventoryId);
|
||||
restoreParam.setMaterialBaseInfoId(materialInventory.getMaterialBaseInfoId());
|
||||
restoreParam.setOrganizationId(materialInventory.getOrganizationId());
|
||||
restoreParam.setOrganizationName(materialInventory.getOrganizationName());
|
||||
restoreParam.setTopOrganizationId(materialInventory.getTopOrganizationId());
|
||||
restoreParam.setWarehouseId(materialInventory.getWarehouseId());
|
||||
restoreParam.setWarehouseCode(materialInventory.getWarehouseCode());
|
||||
restoreParam.setWarehouseName(materialInventory.getWarehouseName());
|
||||
restoreParam.setQuantity(effectiveQuantity);
|
||||
restoreParam.setArea(area);
|
||||
restoreParam.setVolume(volume);
|
||||
restoreParam.setGrossWeight(grossWeight);
|
||||
restoreParam.setNetWeight(netWeight);
|
||||
restoreParam.setLotNumber(materialInventory.getLotNumber());
|
||||
restoreParam.setBatchNumber(materialInventory.getBatchNumber());
|
||||
restoreParam.setInOrderNumber(materialInventory.getInOrderNumber());
|
||||
restoreParam.setProductionDate(materialInventory.getProductionDate());
|
||||
restoreParam.setExpiryDate(materialInventory.getExpiryDate());
|
||||
//库存调整记录【出库反审】(kctzjl 内部取调整前快照, 与交接扣减先记录后改库存的顺序一致)
|
||||
restoreParam.setRelateNo(outOrderNumber + "#" + materialDetail.getUniqueId());
|
||||
materialInventoryService.kctzjl(restoreParam, "出库反审", loginUser);
|
||||
//type=1 上架还原: 实物库存/可用数量加回, 冻结数量不动
|
||||
restoreParam.setType("1");
|
||||
materialInventoryService.xgkc(restoreParam);
|
||||
//推送OMS还原预约库存(type=1: OMS侧实物/可用加回, 与交接 omsEdit 扣减互逆)
|
||||
MaterialInventoryOmsParamDO omsParam = new MaterialInventoryOmsParamDO();
|
||||
BeanUtils.copyProperties(restoreParam, omsParam);
|
||||
omsParam.setKctzType("出库反审");
|
||||
omsParam.setLoginUser(loginUser);
|
||||
omsServiceFeign.omsEdit(omsParam);
|
||||
}
|
||||
}
|
||||
//逻辑删除出库单明细
|
||||
materialDetail.setDelFlag(2);
|
||||
materialDetail.setReverseFlag(1);
|
||||
outMaterialDetailService.updateById(materialDetail);
|
||||
}
|
||||
//逻辑删除出库单(用按单号查出的DB对象更新: 传入对象无主键, 直接updateById不生效, 与 cancelExecutionOrder 一致)
|
||||
stockOutOrderDB.setDelFlag(2);
|
||||
stockOutOrderDB.setReverseFlag(1);
|
||||
stockOutOrderService.updateById(stockOutOrderDB);
|
||||
//逻辑删除拣货单及拣货明细
|
||||
PickingOrder pickingOrder = pickingOrderService.getOne(new LambdaQueryWrapper<PickingOrder>()
|
||||
.eq(PickingOrder::getDelFlag, 1)
|
||||
.eq(PickingOrder::getOrderNumber, outOrderNumber));
|
||||
if (pickingOrder != null) {
|
||||
String pickingOrderNumber = pickingOrder.getPickingOrderNumber();
|
||||
List<PickingMaterialDetail> pickingDetails = pickingMaterialDetailService.list(new LambdaQueryWrapper<PickingMaterialDetail>()
|
||||
.eq(PickingMaterialDetail::getPickingOrderNumber, pickingOrderNumber)
|
||||
.eq(PickingMaterialDetail::getDelFlag, 1));
|
||||
for (PickingMaterialDetail pickingMaterialDetail : pickingDetails) {
|
||||
pickingMaterialDetail.setDelFlag(2);
|
||||
pickingMaterialDetail.setReverseFlag(1);
|
||||
pickingMaterialDetailService.updateById(pickingMaterialDetail);
|
||||
}
|
||||
pickingOrder.setDelFlag(2);
|
||||
pickingOrder.setReverseFlag(1);
|
||||
pickingOrderService.updateById(pickingOrder);
|
||||
}
|
||||
//逻辑删除复核单及复核明细(已复核单据反审时存在)
|
||||
List<ReviewOrder> reviewOrders = reviewOrderMapper.selectList(new LambdaQueryWrapper<ReviewOrder>()
|
||||
.eq(ReviewOrder::getDelFlag, 1)
|
||||
.eq(ReviewOrder::getOutOrderNumber, outOrderNumber));
|
||||
for (ReviewOrder reviewOrder : reviewOrders) {
|
||||
reviewMaterialDetailMapper.update(null, new LambdaUpdateWrapper<ReviewMaterialDetail>()
|
||||
.set(ReviewMaterialDetail::getDelFlag, 2)
|
||||
.set(ReviewMaterialDetail::getReverseFlag, 1)
|
||||
.eq(ReviewMaterialDetail::getReviewOrderId, reviewOrder.getReviewOrderId())
|
||||
.eq(ReviewMaterialDetail::getDelFlag, 1));
|
||||
reviewOrder.setDelFlag(2);
|
||||
reviewOrder.setReverseFlag(1);
|
||||
reviewOrderMapper.updateById(reviewOrder);
|
||||
}
|
||||
//逻辑删除交接作业单(不需复核单据出库完成时生成)
|
||||
List<HandoverTaskOrder> handoverTaskOrders = handoverTaskOrderService.list(new LambdaQueryWrapper<HandoverTaskOrder>()
|
||||
.eq(HandoverTaskOrder::getDelFlag, 1)
|
||||
.eq(HandoverTaskOrder::getOrderNumber, outOrderNumber));
|
||||
for (HandoverTaskOrder handoverTaskOrder : handoverTaskOrders) {
|
||||
handoverTaskOrder.setDelFlag(2);
|
||||
handoverTaskOrder.setReverseFlag(1);
|
||||
handoverTaskOrderService.updateById(handoverTaskOrder);
|
||||
}
|
||||
//生成1条出库异常记录【反审记录】, 供记录跟踪
|
||||
OutOrderAbnormal reverseAbnormal = new OutOrderAbnormal();
|
||||
reverseAbnormal.setOrganizationId(stockOutOrderDB.getOrganizationId());
|
||||
reverseAbnormal.setOrganizationName(stockOutOrderDB.getOrganizationName());
|
||||
reverseAbnormal.setTopOrganizationId(stockOutOrderDB.getTopOrganizationId());
|
||||
reverseAbnormal.setAbnormalNumber(OrderSequence.getOrderCode("FSYC"));
|
||||
reverseAbnormal.setOutOrderNumber(outOrderNumber);
|
||||
reverseAbnormal.setType(3);
|
||||
reverseAbnormal.setAbnormalType(3);
|
||||
reverseAbnormal.setQuantity(stockOutOrderDB.getQuantity());
|
||||
reverseAbnormal.setActualQuantity(stockOutOrderDB.getPickingQuantity());
|
||||
reverseAbnormal.setAbnormalActualQuantity(BigDecimal.ZERO);
|
||||
reverseAbnormal.setAbnormalReason("出库单反审");
|
||||
reverseAbnormal.setRemark(reverseRemark);
|
||||
reverseAbnormal.setCreateBy(loginUser.getUserid());
|
||||
reverseAbnormal.setCreateByName(loginUser.getUsername());
|
||||
reverseAbnormal.setCreateTime(new Date());
|
||||
outOrderAbnormalService.save(reverseAbnormal);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void omsOrderAddDetail(List<OutMaterialDetail> outMaterialDetails) {
|
||||
if (CollectionUtils.isEmpty(outMaterialDetails)) {
|
||||
|
||||
+4
-1
@@ -174,4 +174,7 @@ public class HandoverTaskOrderDTO extends BaseVOEntity {
|
||||
private String pictureApp;
|
||||
|
||||
private String billingJson;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+4
-4
@@ -50,8 +50,8 @@ public class OutOrderAbnormalDTO extends BaseVOEntity {
|
||||
@Excel(name = "拣货作业单号")
|
||||
private String outTaskOrderNumber;
|
||||
|
||||
@ApiModelProperty("类型:1-拣货 2-复核")
|
||||
@Excel(name = "类型:1-拣货 2-复核")
|
||||
@ApiModelProperty("类型:1-拣货 2-复核 3-反审记录")
|
||||
@Excel(name = "类型:1-拣货 2-复核 3-反审记录")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty("计划数量")
|
||||
@@ -66,8 +66,8 @@ public class OutOrderAbnormalDTO extends BaseVOEntity {
|
||||
@Excel(name = "异常数量 = 作业数量 - 计划数量")
|
||||
private BigDecimal abnormalActualQuantity;
|
||||
|
||||
@ApiModelProperty("异常类型: 1-拣货异常 2-复核异常")
|
||||
@Excel(name = "异常类型: 1-拣货异常 2-复核异常")
|
||||
@ApiModelProperty("异常类型: 1-拣货异常 2-复核异常 3-反审记录")
|
||||
@Excel(name = "异常类型: 1-拣货异常 2-复核异常 3-反审记录")
|
||||
private Integer abnormalType;
|
||||
|
||||
@ApiModelProperty("异常原因")
|
||||
|
||||
@@ -196,4 +196,7 @@ public class PickingOrderDTO extends BaseVOEntity {
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTimeTo;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
@@ -86,4 +86,7 @@ public class ReviewOrderDTO extends BaseVOEntity {
|
||||
private Integer tabType;
|
||||
|
||||
|
||||
|
||||
@ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+4
-1
@@ -513,4 +513,7 @@ public class StockOutOrderDTO extends StockOutOrderBaseDTO {
|
||||
/** PDA出库签名列表专用:作业任务人员模糊查询字段 */
|
||||
@ApiModelProperty("作业任务人员(模糊查询)")
|
||||
private String workUserNameLike;
|
||||
}
|
||||
|
||||
@ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)")
|
||||
private Integer reverseFlag;
|
||||
}
|
||||
|
||||
+10
@@ -92,6 +92,16 @@ public class HandoverTaskOrderApi extends BaseController {
|
||||
return AjaxResult.success(handoverTaskOrderApplicationService.getInfo(outTaskOrderId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取交接作业单归档详情(已反审): 反审时交接单已软删(del_flag=2), 供【已反审】tab 查看归档详情
|
||||
*/
|
||||
@ApiOperation("获取交接作业单归档详情(已反审)")
|
||||
@GetMapping(value = "/getReverseInfo/{outTaskOrderId}")
|
||||
public AjaxResult getReverseInfo(@PathVariable("outTaskOrderId") Long outTaskOrderId)
|
||||
{
|
||||
return AjaxResult.success(handoverTaskOrderApplicationService.getReverseInfo(outTaskOrderId));
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation("分配月台")
|
||||
@PostMapping("/allocationPlatform")
|
||||
|
||||
+9
@@ -80,6 +80,15 @@ public class PickingOrderApi extends BaseController {
|
||||
return AjaxResult.success(pickingOrderApplicationService.getInfoByIdAndType(pickingOrderId, type));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取拣货单归档详情(已反审): 反审时拣货单已软删(del_flag=2), 供【已反审】tab 查看归档详情
|
||||
*/
|
||||
@ApiOperation("获取拣货单归档详情(已反审)")
|
||||
@GetMapping(value = "/getReverseInfoByIdAndType/{pickingOrderId}/{type}")
|
||||
public AjaxResult getReverseInfoByIdAndType(@PathVariable("pickingOrderId") Long pickingOrderId, @PathVariable("type") Integer type) {
|
||||
return AjaxResult.success(pickingOrderApplicationService.getReverseInfoByIdAndType(pickingOrderId, type));
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation("整单下发")
|
||||
@PostMapping("/allDistribution")
|
||||
|
||||
@@ -52,6 +52,15 @@ public class ReviewOrderApi extends BaseController {
|
||||
return AjaxResult.success(reviewOrderApplicationService.getDetailByReviewOrderId(reviewOrderId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取复核单归档详情(已反审): 反审时复核单已软删(del_flag=2), 供【已反审】tab 查看归档详情
|
||||
*/
|
||||
@ApiOperation("获取复核单归档详情(已反审)")
|
||||
@GetMapping(value = "/getReverseInfo/{reviewOrderId}")
|
||||
public AjaxResult getReverseInfo(@PathVariable("reviewOrderId") Long reviewOrderId) {
|
||||
return AjaxResult.success(reviewOrderApplicationService.getReverseDetailByReviewOrderId(reviewOrderId));
|
||||
}
|
||||
|
||||
@ApiOperation("根据复核单号获取复核单详情")
|
||||
@GetMapping(value = "/getInfoReviewOrderNumber")
|
||||
public AjaxResult getInfoReviewOrderNumber(@RequestParam("reviewOrderNumber") String reviewOrderNumber) {
|
||||
|
||||
+21
@@ -200,6 +200,16 @@ public class StockOutOrderApi extends BaseController {
|
||||
return AjaxResult.success(stockOutOrderApplicationService.getInfoChildren(outOrderId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取出库单归档详情(已反审): 反审时单据已软删(del_flag=2), 常规详情查不到,
|
||||
* 本接口不滤主表 del_flag 且明细查 del_flag=2 归档数据, 供【已反审】tab 使用
|
||||
*/
|
||||
@ApiOperation("获取出库单归档详情(已反审)")
|
||||
@GetMapping(value = "/getReverseInfo/{outOrderId}")
|
||||
public AjaxResult getReverseInfo(@PathVariable("outOrderId") Long outOrderId) {
|
||||
return AjaxResult.success(stockOutOrderApplicationService.getReverseInfoChildren(outOrderId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据出库单号获取出库单详细信息
|
||||
*/
|
||||
@@ -561,6 +571,17 @@ public class StockOutOrderApi extends BaseController {
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* oms出库执行单反审(已出库单据回退): 还原实物库存并推送OMS、
|
||||
* 逻辑删除出库单/明细/拣货/复核/交接/配送链路数据、生成出库异常记录【反审记录】
|
||||
*/
|
||||
@ApiOperation("oms出库执行单反审")
|
||||
@PostMapping(value = "/omsReverseExecutionOrder")
|
||||
public AjaxResult omsReverseExecutionOrder(@RequestBody StockOutOrder stockOutOrder) {
|
||||
stockOutOrderApplicationService.reverseExecutionOrder(stockOutOrder);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* oms下发单配送明细保存
|
||||
*/
|
||||
|
||||
@@ -39,6 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateByName" column="update_by_name" />
|
||||
<result property="delFlag" column="del_flag" />
|
||||
<result property="reverseFlag" column="reverse_flag" />
|
||||
<result property="pictureApp" column="picture_app" />
|
||||
<result property="billingJson" column="billing_json" />
|
||||
</resultMap>
|
||||
@@ -49,7 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
a.platform_code, a.platform_name, a.platform_use_time_id, a.platform_use_start_time, a.platform_use_end_time, a.platform_use_status,
|
||||
a.order_type_code, a.order_type_name, a.expect_time, a.warehouse_id, a.warehouse_code, a.warehouse_name, a.shipper_id,
|
||||
a.shipper_name, a.order_number, a.picking_order_number, a.remark, a.task_distribution, a.task_distribution_time, a.create_time, a.create_by, a.create_by_name, a.update_time,
|
||||
a.update_by, a.update_by_name, a.del_flag, a.picture_app,a.billing_json
|
||||
a.update_by, a.update_by_name, a.del_flag, a.reverse_flag, a.picture_app,a.billing_json
|
||||
</sql>
|
||||
|
||||
<sql id="selectHandoverTaskOrderPo1">
|
||||
@@ -138,6 +139,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<when test="delFlag != null"> and a.del_flag = #{delFlag} </when>
|
||||
<otherwise> and a.del_flag = 1 </otherwise>
|
||||
</choose>
|
||||
<!-- 反审标记查询: 【已反审】tab 前端传 delFlag=2 + reverseFlag=1 -->
|
||||
<if test="reverseFlag != null"> and a.reverse_flag = #{reverseFlag} </if>
|
||||
</sql>
|
||||
|
||||
<select id="queryList" parameterType="com.mhd.wms.domain.handoverTaskOrder.repository.todo.HandoverTaskOrderDO" resultMap="HandoverTaskOrderResult">
|
||||
|
||||
@@ -26,6 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateByName" column="update_by_name" />
|
||||
<result property="delFlag" column="del_flag" />
|
||||
<result property="reverseFlag" column="reverse_flag" />
|
||||
<result property="outOrderNumber" column="out_order_number" />
|
||||
<result property="businessOrderNo" column="business_order_no" />
|
||||
<result property="orderTypeCode" column="order_type_code" />
|
||||
@@ -47,7 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
a.status, a.type, a.warehouse_id, a.warehouse_code, a.warehouse_name, a.shipper_id, a.shipper_name, a.quantity, a.weight_limit, a.volume_limit, a.material_quantity,
|
||||
IFNULL((SELECT SUM(b.picking_quantity) FROM picking_material_detail b WHERE b.picking_order_number = a.picking_order_number AND b.del_flag = 1), 0) AS picking_quantity,
|
||||
a.picking_material_quantity, a.abnormal, a.task_distribution, a.remark, a.create_time, a.create_by, a.create_by_name, a.update_time,b.out_order_id,
|
||||
a.update_by, a.update_by_name, a.del_flag,a.out_order_number, a.business_order_no, a.order_type_code, a.order_type_name, a.priority_level_code, a.priority_level_name
|
||||
a.update_by, a.update_by_name, a.del_flag, a.reverse_flag, a.out_order_number, a.business_order_no, a.order_type_code, a.order_type_name, a.priority_level_code, a.priority_level_name
|
||||
,a.push_status,a.push_time,a.push_by,a.push_by_name,
|
||||
(SELECT m.goods_type FROM PICKING_MATERIAL_DETAIL d
|
||||
JOIN material_base_info m ON d.material_base_info_id = m.material_base_info_id
|
||||
@@ -120,6 +121,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<when test="delFlag != null"> and a.del_flag = #{delFlag} </when>
|
||||
<otherwise> and a.del_flag = 1 </otherwise>
|
||||
</choose>
|
||||
<!-- 反审标记查询: 【已反审】tab 前端传 delFlag=2 + reverseFlag=1 -->
|
||||
<if test="reverseFlag != null"> and a.reverse_flag = #{reverseFlag} </if>
|
||||
<if test="needDeclareFlag != null and needDeclareFlag != ''">
|
||||
and b.need_declare_flag = #{needDeclareFlag}
|
||||
</if>
|
||||
@@ -170,6 +173,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
WHERE a.picking_order_id = #{pickingOrderId}
|
||||
</select>
|
||||
|
||||
<!-- 归档详情(已反审): 反审时拣货单/出库单均已软删, 按 del_flag=2 查归档数据 -->
|
||||
<select id="queryOutOrderByIdReverse" parameterType="java.lang.Long" resultType="com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO">
|
||||
select
|
||||
<include refid="selectPickingOrderPo"/>
|
||||
<include refid="com.mhd.wms.domain.stockOutOrder.repository.mapper.StockOutOrderMapper.joinStockOutOrderPo"/>
|
||||
from picking_order a
|
||||
left join stock_out_order b on a.order_number = b.out_order_number and b.del_flag = 2 and a.del_flag = 2
|
||||
WHERE a.picking_order_id = #{pickingOrderId}
|
||||
</select>
|
||||
|
||||
<select id="queryWaveOrderByIdReverse" parameterType="java.lang.Long" resultType="com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO">
|
||||
select
|
||||
<include refid="selectPickingOrderPo"/>
|
||||
<include refid="com.mhd.wms.domain.waveOrder.repository.mapper.WaveOrderMapper.joinWaveOrderPo"/>
|
||||
from picking_order a
|
||||
left join wave_order b on a.order_number = b.wave_order_number and a.del_flag = 2
|
||||
WHERE a.picking_order_id = #{pickingOrderId}
|
||||
</select>
|
||||
|
||||
<select id="queryOutOrderByOrderNumber" parameterType="java.lang.String" resultType="com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO">
|
||||
select
|
||||
<include refid="selectPickingOrderPo"/>
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
<result property="updateByName" column="update_by_name"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="reverseFlag" column="reverse_flag"/>
|
||||
<result property="materialKindCount" column="material_kind_count"/>
|
||||
<result property="totalPlanQty" column="total_plan_qty"/>
|
||||
<result property="totalReviewedQty" column="total_reviewed_qty"/>
|
||||
@@ -81,6 +82,7 @@
|
||||
<result property="updateByName" column="update_by_name"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="reverseFlag" column="reverse_flag"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="reviewOrderSelectColumns">
|
||||
@@ -111,7 +113,7 @@
|
||||
a.update_by,
|
||||
a.update_by_name,
|
||||
a.update_time,
|
||||
a.del_flag
|
||||
a.del_flag, a.reverse_flag
|
||||
</sql>
|
||||
|
||||
<sql id="reviewOrderWhere">
|
||||
@@ -180,6 +182,10 @@
|
||||
and a.del_flag = 1
|
||||
</otherwise>
|
||||
</choose>
|
||||
<!-- 反审标记查询: 【已反审】tab 前端传 delFlag=2 + reverseFlag=1 -->
|
||||
<if test="reverseFlag != null">
|
||||
and a.reverse_flag = #{reverseFlag}
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
<!-- 复核单列表查询(头表 + 明细聚合:种类数、计划总量、已复核总量) -->
|
||||
@@ -216,6 +222,15 @@
|
||||
and a.del_flag = 1
|
||||
</select>
|
||||
|
||||
<!-- 详情:主表 by id(归档: 已反审软删 del_flag=2,供【已反审】tab 详情) -->
|
||||
<select id="selectHeaderByReviewOrderIdReverse" resultMap="ReviewOrderResult">
|
||||
select
|
||||
<include refid="reviewOrderSelectColumns"/>
|
||||
from review_order a
|
||||
where a.review_order_id = #{reviewOrderId}
|
||||
and a.del_flag = 2
|
||||
</select>
|
||||
|
||||
<!-- 详情:主表 by 复核单号 -->
|
||||
<select id="selectHeaderByReviewOrderNumber" resultMap="ReviewOrderResult">
|
||||
select
|
||||
@@ -282,6 +297,16 @@
|
||||
order by d.review_material_detail_id asc
|
||||
</select>
|
||||
|
||||
<!-- 详情:明细 by 复核单主键(归档: 已反审软删 del_flag=2) -->
|
||||
<select id="queryDetailByReviewOrderIdReverse" resultMap="ReviewMaterialDetailResult">
|
||||
select
|
||||
<include refid="reviewMaterialDetailColumns"/>
|
||||
from review_material_detail d
|
||||
where d.review_order_id = #{reviewOrderId}
|
||||
and d.del_flag = 2
|
||||
order by d.review_material_detail_id asc
|
||||
</select>
|
||||
|
||||
<!-- 详情:明细 by 复核单号 -->
|
||||
<select id="queryDetailByReviewOrderNumber" resultMap="ReviewMaterialDetailResult">
|
||||
select
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateByName" column="update_by_name"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="reverseFlag" column="reverse_flag"/>
|
||||
<result property="overStockId" column="over_stock_id"/>
|
||||
<result property="overStockStatus" column="over_stock_status"/>
|
||||
<result property="overStockType" column="over_stock_type"/>
|
||||
@@ -127,7 +128,7 @@
|
||||
a.cancel_time, a.close_order, a.close_remark, a.close_by, a.close_by_name, a.close_time, a.check_status,
|
||||
a.check_task_distribution, a.check_task_distribution_time, a.check_operators_by, a.check_operators_name, a.mobilize_code,
|
||||
a.remark, a.create_time, a.create_by, a.create_by_name,a.train_no,a.PUSH_TIME,a.PUSH_BY,a.PUSH_BY_NAME,a.PUSH_STATUS,
|
||||
a.update_time, a.update_by, a.update_by_name, a.del_flag, a.over_stock_id, a.over_stock_status, a.over_stock_type,a."TO",
|
||||
a.update_time, a.update_by, a.update_by_name, a.del_flag, a.reverse_flag, a.over_stock_id, a.over_stock_status, a.over_stock_type,a."TO",
|
||||
a.CONTACT_PERSON,a.VEHICLE_MODEL_PLATE,a.ENTRUST_NO,a.TEL,a.DRIVER_SIGN,a.FAX,a.DECLARE_CUSTOMS,a.MANUFACTURER,
|
||||
a.CUSTOMS_DECLARER_INFO,a.DELIVERY_ADDR,a.ENTRY_EXIT_CUSTOMS,a.DEPARTURE_ARRIVAL_COUNTRY,a.CARRIER,a.CONTAINER_NO,a.CONTAINER_NO_NAME,a.OUTBOUND_DATE,
|
||||
a.COMPLETE_TIME,a.ORDER_DATE,a.TRANSPORT_MODE_CODE,a.TRANSPORT_MODE_NAME,a.SUPERVISION_MODE_CODE,a.SUPERVISION_MODE_NAME,
|
||||
@@ -384,6 +385,8 @@
|
||||
<when test="delFlag != null">and a.del_flag = #{delFlag}</when>
|
||||
<otherwise>and a.del_flag = 1</otherwise>
|
||||
</choose>
|
||||
<!-- 反审标记查询: 【已反审】tab 前端传 delFlag=2 + reverseFlag=1 -->
|
||||
<if test="reverseFlag != null">and a.reverse_flag = #{reverseFlag}</if>
|
||||
</sql>
|
||||
|
||||
<select id="queryList" parameterType="com.mhd.wms.domain.stockOutOrder.repository.todo.StockOutOrderDO"
|
||||
|
||||
Reference in New Issue
Block a user