fix(oms,wms): 出库反审补全——重新下发自愈/仓库信息本地兜底/运输链路反审联动/归档查询修复
- 反审后 issueStatus 置 3-已驳回(与入库侧同口径), 清空执行单号/货源单号 - 反审/取消下发软删执行明细时置空 uniqueId, 修复重新下发撞唯一约束 - 新增 WarehouseInfoApplicationService(Feign优先+本地跨库兜底), 出库侧8处调用点接入 - 反审联动软删运输链路: 运输业务单/执行单本地软删 + TMS deleteChainByExecuteOrderNumber - WMS归档查询修复: 交接归档详情丢行/拣货归档数量恒0/复核列表归档汇总/OMS执行单已反审tab
This commit is contained in:
@@ -539,6 +539,13 @@ public interface WlhyServiceFeign {
|
|||||||
@GetMapping("/feign/order/cancelIssueDocuments")
|
@GetMapping("/feign/order/cancelIssueDocuments")
|
||||||
public AjaxResult cancelIssueDocuments(@RequestParam(name="executeOrderId") String executeOrderId);
|
public AjaxResult cancelIssueDocuments(@RequestParam(name="executeOrderId") String executeOrderId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OMS出库业务单反审联动: 按执行单货源编号软删TMS整条链路(货源单->运单->运输作业单, is_delete=1), 幂等,
|
||||||
|
* 与 cancelIssueDocuments(仅关闭货源单且有有效运单即拒绝)不同, 反审口径不留TMS数据
|
||||||
|
*/
|
||||||
|
@PostMapping("/feign/order/deleteChainByExecuteOrderNumber")
|
||||||
|
public AjaxResult deleteChainByExecuteOrderNumber(@RequestParam(name="executeOrderNumber") String executeOrderNumber);
|
||||||
|
|
||||||
@GetMapping(value = "/ntocc/tmsSettlementExchangeRate/queryList")
|
@GetMapping(value = "/ntocc/tmsSettlementExchangeRate/queryList")
|
||||||
public AjaxResult<?> queryList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
|
public AjaxResult<?> queryList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
|
||||||
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
|
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
|
||||||
|
|||||||
+6
@@ -551,6 +551,12 @@ public class RemoteWlhyFallbackFactory implements FallbackFactory<WlhyServiceFei
|
|||||||
return AjaxResult.error(cause.getMessage());
|
return AjaxResult.error(cause.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AjaxResult deleteChainByExecuteOrderNumber(String executeOrderNumber) {
|
||||||
|
//返回错误而非静默成功, 让OMS反审事务能感知失败并整体回滚
|
||||||
|
return AjaxResult.error("TMS反审联动软删链路失败(服务降级):" + cause.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AjaxResult<?> queryList(Integer pageNo, Integer pageSize, String pushStatus, String organizationId) {
|
public AjaxResult<?> queryList(Integer pageNo, Integer pageSize, String pushStatus, String organizationId) {
|
||||||
return AjaxResult.error(cause.getMessage());
|
return AjaxResult.error(cause.getMessage());
|
||||||
|
|||||||
+58
@@ -0,0 +1,58 @@
|
|||||||
|
package com.mhd.oms.application.service;
|
||||||
|
|
||||||
|
import com.mhd.common.core.exception.ServiceException;
|
||||||
|
import com.mhd.common.core.web.domain.AjaxResult;
|
||||||
|
import com.mhd.oms.domain.reservationStockInOrder.repository.mapper.ReservationStockInOrderMapper;
|
||||||
|
import com.mhd.system.api.SystemServiceFeign;
|
||||||
|
import com.mhd.system.api.domain.WarehouseFeignPO;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 仓库信息获取(带本地兜底): 下发/下单冻结/保存等流程原先直接 Feign 调 system 服务取仓库信息,
|
||||||
|
* system 服务未启动/降级/返回非200时整个流程被"获取仓库信息失败"阻断。
|
||||||
|
* 本组件统一收口: 优先 Feign, 失败时回退本地跨库直查 "NGWL_TEST_SYSTEM".WAREHOUSE(与 Feign 同库同表, OMS 库账号可读),
|
||||||
|
* 两侧都取不到才抛错并带出 Feign 真实返回原因。
|
||||||
|
*
|
||||||
|
* @date 2026/9/11
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class WarehouseInfoApplicationService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SystemServiceFeign systemServiceFeign;
|
||||||
|
@Autowired
|
||||||
|
private ReservationStockInOrderMapper reservationStockInOrderMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取仓库信息: Feign 优先, 失败走本地兜底; 两边都取不到抛 ServiceException
|
||||||
|
*
|
||||||
|
* @param warehouseId 仓库id
|
||||||
|
* @return 仓库信息(含编码/名称/单号生成规则/库存锁定模式等)
|
||||||
|
*/
|
||||||
|
public WarehouseFeignPO getWarehouseInfo(Long warehouseId) {
|
||||||
|
if (warehouseId == null) {
|
||||||
|
throw new ServiceException("仓库ID不能为空");
|
||||||
|
}
|
||||||
|
AjaxResult ajaxResult = null;
|
||||||
|
try {
|
||||||
|
ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("获取仓库信息Feign调用异常, 走本地兜底查询, warehouseId={}, error={}", warehouseId, e.getMessage());
|
||||||
|
}
|
||||||
|
if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code"))) && ajaxResult.get("data") != null) {
|
||||||
|
return com.alibaba.fastjson.JSON.parseObject(
|
||||||
|
com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
||||||
|
}
|
||||||
|
String remoteMsg = ajaxResult == null ? "Feign调用异常" : String.valueOf(ajaxResult.get("msg"));
|
||||||
|
log.warn("获取仓库信息Feign失败(返回: {}), 走本地兜底查询, warehouseId={}", remoteMsg, warehouseId);
|
||||||
|
WarehouseFeignPO local = reservationStockInOrderMapper.getWarehouseInfoFallback(warehouseId);
|
||||||
|
if (local == null) {
|
||||||
|
throw new ServiceException("获取仓库信息失败(Feign返回:" + remoteMsg + "), 且本地未查到仓库[warehouseId="
|
||||||
|
+ warehouseId + "], 请检查仓库是否存在/已启用");
|
||||||
|
}
|
||||||
|
return local;
|
||||||
|
}
|
||||||
|
}
|
||||||
+5
-6
@@ -46,6 +46,9 @@ public class OutEntrustOrderApplicationService {
|
|||||||
@Resource
|
@Resource
|
||||||
private SystemServiceFeign systemServiceFeign;
|
private SystemServiceFeign systemServiceFeign;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private com.mhd.oms.application.service.WarehouseInfoApplicationService warehouseInfoApplicationService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private WmsServiceFeign wmsServiceFeign;
|
private WmsServiceFeign wmsServiceFeign;
|
||||||
|
|
||||||
@@ -352,14 +355,10 @@ public class OutEntrustOrderApplicationService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 仓库信息校验并回填编码/名称
|
* 仓库信息校验并回填编码/名称 (Feign失败走本地跨库兜底)
|
||||||
*/
|
*/
|
||||||
private void setWarehouseInfo(OutEntrustOrderDO outEntrustOrderDO) {
|
private void setWarehouseInfo(OutEntrustOrderDO outEntrustOrderDO) {
|
||||||
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(outEntrustOrderDO.getWarehouseId());
|
WarehouseFeignPO warehouseFeignPO = warehouseInfoApplicationService.getWarehouseInfo(outEntrustOrderDO.getWarehouseId());
|
||||||
if (ajaxResult == null || !"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
|
||||||
throw new ServiceException("获取仓库信息失败,请检查仓库是否有效");
|
|
||||||
}
|
|
||||||
WarehouseFeignPO warehouseFeignPO = JSONUtil.toBean(JSONUtil.toJsonStr(ajaxResult.get("data")), WarehouseFeignPO.class);
|
|
||||||
if (warehouseFeignPO == null || Objects.isNull(warehouseFeignPO.getWarehouseId())) {
|
if (warehouseFeignPO == null || Objects.isNull(warehouseFeignPO.getWarehouseId())) {
|
||||||
throw new ServiceException("仓库不存在,请重新选择");
|
throw new ServiceException("仓库不存在,请重新选择");
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -29,6 +29,8 @@ public class ExecutionStockOutOrderPO extends BaseVOEntity {
|
|||||||
|
|
||||||
@ApiModelProperty("出库单id")
|
@ApiModelProperty("出库单id")
|
||||||
private Long outOrderId;
|
private Long outOrderId;
|
||||||
|
@ApiModelProperty("反审标记: 1-已反审(反审软删归档, 【已反审】tab按 delFlag=2+reverseFlag=1 查询)")
|
||||||
|
private Integer reverseFlag;
|
||||||
@ApiModelProperty("总价")
|
@ApiModelProperty("总价")
|
||||||
@Excel(name = "总价")
|
@Excel(name = "总价")
|
||||||
private BigDecimal amount;
|
private BigDecimal amount;
|
||||||
|
|||||||
+3
@@ -29,6 +29,9 @@ public class ExecutionStockOutOrderDO extends BaseVOEntity {
|
|||||||
@ApiModelProperty("出库单id")
|
@ApiModelProperty("出库单id")
|
||||||
private Long outOrderId;
|
private Long outOrderId;
|
||||||
|
|
||||||
|
@ApiModelProperty("反审标记查询: 1-已反审(与delFlag=2成对传, 查【已反审】tab归档数据)")
|
||||||
|
private Integer reverseFlag;
|
||||||
|
|
||||||
@ApiModelProperty("组织表ID")
|
@ApiModelProperty("组织表ID")
|
||||||
@Excel(name = "组织表ID")
|
@Excel(name = "组织表ID")
|
||||||
private Long organizationId;
|
private Long organizationId;
|
||||||
|
|||||||
+3
@@ -27,6 +27,9 @@ public class ExecutionStockOutOrderDTO extends ExecutionStockOutOrderBaseDTO {
|
|||||||
@ApiModelProperty("出库单id")
|
@ApiModelProperty("出库单id")
|
||||||
private Long outOrderId;
|
private Long outOrderId;
|
||||||
|
|
||||||
|
@ApiModelProperty("反审标记查询: 1-已反审(与delFlag=2成对传, 查【已反审】tab归档数据)")
|
||||||
|
private Integer reverseFlag;
|
||||||
|
|
||||||
@ApiModelProperty("组织表ID")
|
@ApiModelProperty("组织表ID")
|
||||||
@Excel(name = "组织表ID")
|
@Excel(name = "组织表ID")
|
||||||
private Long organizationId;
|
private Long organizationId;
|
||||||
|
|||||||
+4
-5
@@ -66,6 +66,8 @@ import java.util.stream.Collectors;
|
|||||||
public class ExecutionStockOutOrderApplicationService {
|
public class ExecutionStockOutOrderApplicationService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ExecutionStockOutOrderDomainService stockOutOrderDomainService;
|
private ExecutionStockOutOrderDomainService stockOutOrderDomainService;
|
||||||
|
@Autowired
|
||||||
|
private com.mhd.oms.application.service.WarehouseInfoApplicationService warehouseInfoApplicationService;
|
||||||
// @Autowired
|
// @Autowired
|
||||||
// private ExecutionOutMaterialDetailDomainService outMaterialDetailDomainService;
|
// private ExecutionOutMaterialDetailDomainService outMaterialDetailDomainService;
|
||||||
// @Autowired
|
// @Autowired
|
||||||
@@ -862,11 +864,8 @@ public class ExecutionStockOutOrderApplicationService {
|
|||||||
if (stockOutOrderDO.getWarehouseId() == null) {
|
if (stockOutOrderDO.getWarehouseId() == null) {
|
||||||
throw new ServiceException("仓库ID不能为空");
|
throw new ServiceException("仓库ID不能为空");
|
||||||
}
|
}
|
||||||
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(stockOutOrderDO.getWarehouseId());
|
// Feign失败走本地跨库兜底, 避免保存被"获取仓库信息失败"阻断
|
||||||
if(!"200".equals(String.valueOf(ajaxResult.get("code")))){
|
WarehouseFeignPO warehouseFeignPO = warehouseInfoApplicationService.getWarehouseInfo(stockOutOrderDO.getWarehouseId());
|
||||||
throw new ServiceException("获取仓库信息失败");
|
|
||||||
}
|
|
||||||
WarehouseFeignPO warehouseFeignPO = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
|
||||||
stockOutOrderDO.setWarehouseCode(warehouseFeignPO.getWarehouseCode());
|
stockOutOrderDO.setWarehouseCode(warehouseFeignPO.getWarehouseCode());
|
||||||
stockOutOrderDO.setWarehouseName(warehouseFeignPO.getWarehouseName());
|
stockOutOrderDO.setWarehouseName(warehouseFeignPO.getWarehouseName());
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-14
@@ -71,6 +71,8 @@ public class ExecutionStockOutOrderDomainService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IExecutionStockOutOrderService stockOutOrderService;
|
private IExecutionStockOutOrderService stockOutOrderService;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
private com.mhd.oms.application.service.WarehouseInfoApplicationService warehouseInfoApplicationService;
|
||||||
|
@Autowired
|
||||||
private IExecutionOutMaterialDetailService outMaterialDetailService;
|
private IExecutionOutMaterialDetailService outMaterialDetailService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IReservationDeliveryDetailsLinkService deliveryDetailsLinkService;
|
private IReservationDeliveryDetailsLinkService deliveryDetailsLinkService;
|
||||||
@@ -148,14 +150,9 @@ public class ExecutionStockOutOrderDomainService {
|
|||||||
public Boolean insert(ExecutionStockOutOrderDO stockOutOrderDO) {
|
public Boolean insert(ExecutionStockOutOrderDO stockOutOrderDO) {
|
||||||
//建单校验:明细数量必须大于0(0数量单下发WMS后自动分配必失败,出库单会卡死在已审核状态)
|
//建单校验:明细数量必须大于0(0数量单下发WMS后自动分配必失败,出库单会卡死在已审核状态)
|
||||||
validateMaterialDetailQuantity(stockOutOrderDO.getMaterialDetailList());
|
validateMaterialDetailQuantity(stockOutOrderDO.getMaterialDetailList());
|
||||||
//设置单号
|
//设置单号(仓库信息: Feign优先, system服务失败/降级时本地跨库兜底)
|
||||||
Long warehouseId = stockOutOrderDO.getWarehouseId();
|
Long warehouseId = stockOutOrderDO.getWarehouseId();
|
||||||
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
WarehouseFeignPO warehouseFeignPO = warehouseInfoApplicationService.getWarehouseInfo(warehouseId);
|
||||||
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
|
||||||
throw new ServiceException("获取仓库信息失败");
|
|
||||||
}
|
|
||||||
//仓库信息
|
|
||||||
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
|
||||||
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||||
String prefix = warehouseFeignPO.getOutOrderNoPrefix();
|
String prefix = warehouseFeignPO.getOutOrderNoPrefix();
|
||||||
if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) {
|
if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) {
|
||||||
@@ -218,14 +215,9 @@ public class ExecutionStockOutOrderDomainService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean batchInsert(List<ExecutionStockOutOrderDO> stockOutOrderDOList) {
|
public Boolean batchInsert(List<ExecutionStockOutOrderDO> stockOutOrderDOList) {
|
||||||
for (ExecutionStockOutOrderDO stockOutOrderDO : stockOutOrderDOList){
|
for (ExecutionStockOutOrderDO stockOutOrderDO : stockOutOrderDOList){
|
||||||
//设置单号
|
//设置单号(仓库信息: Feign优先, system服务失败/降级时本地跨库兜底)
|
||||||
Long warehouseId = stockOutOrderDO.getWarehouseId();
|
Long warehouseId = stockOutOrderDO.getWarehouseId();
|
||||||
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
WarehouseFeignPO warehouseFeignPO = warehouseInfoApplicationService.getWarehouseInfo(warehouseId);
|
||||||
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
|
||||||
throw new ServiceException("获取仓库信息失败");
|
|
||||||
}
|
|
||||||
//仓库信息
|
|
||||||
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
|
||||||
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||||
String prefix = warehouseFeignPO.getOutOrderNoPrefix();
|
String prefix = warehouseFeignPO.getOutOrderNoPrefix();
|
||||||
if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) {
|
if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) {
|
||||||
|
|||||||
+6
@@ -54,6 +54,12 @@ public interface ReservationStockInOrderMapper extends BaseMapper<ReservationSto
|
|||||||
|
|
||||||
public String getWarehouseName(@Param("id") Long id);
|
public String getWarehouseName(@Param("id") Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 本地跨库直查仓库信息(编码/名称/单号规则/库存锁定模式),
|
||||||
|
* 供下发等流程在 system 服务 Feign 失败/降级时兜底, 与 getWarehouseInfoByWarehouseId Feign 接口同数据源
|
||||||
|
*/
|
||||||
|
public com.mhd.system.api.domain.WarehouseFeignPO getWarehouseInfoFallback(@Param("id") Long id);
|
||||||
|
|
||||||
List<ReservationStockInOrderPO> queryNoticePrint(ReservationStockInOrderDO stockInOrderDO);
|
List<ReservationStockInOrderPO> queryNoticePrint(ReservationStockInOrderDO stockInOrderDO);
|
||||||
List<ReservationInMaterialDetailPO> queryNoticePrintDetail(ReservationStockInOrderDO stockInOrderDO);
|
List<ReservationInMaterialDetailPO> queryNoticePrintDetail(ReservationStockInOrderDO stockInOrderDO);
|
||||||
public void updateByTransportationNumber(@Param("transportationNumber") String transportationNumber);
|
public void updateByTransportationNumber(@Param("transportationNumber") String transportationNumber);
|
||||||
|
|||||||
+4
-5
@@ -85,6 +85,8 @@ import java.util.stream.Collectors;
|
|||||||
public class ReservationStockOutOrderApplicationService {
|
public class ReservationStockOutOrderApplicationService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ReservationStockOutOrderDomainService stockOutOrderDomainService;
|
private ReservationStockOutOrderDomainService stockOutOrderDomainService;
|
||||||
|
@Autowired
|
||||||
|
private com.mhd.oms.application.service.WarehouseInfoApplicationService warehouseInfoApplicationService;
|
||||||
// @Autowired
|
// @Autowired
|
||||||
// private ReservationOutMaterialDetailDomainService outMaterialDetailDomainService;
|
// private ReservationOutMaterialDetailDomainService outMaterialDetailDomainService;
|
||||||
// @Autowired
|
// @Autowired
|
||||||
@@ -913,11 +915,8 @@ public class ReservationStockOutOrderApplicationService {
|
|||||||
if (stockOutOrderDO.getWarehouseId() == null) {
|
if (stockOutOrderDO.getWarehouseId() == null) {
|
||||||
throw new ServiceException("仓库ID不能为空");
|
throw new ServiceException("仓库ID不能为空");
|
||||||
}
|
}
|
||||||
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(stockOutOrderDO.getWarehouseId());
|
// Feign失败走本地跨库兜底, 避免新增/编辑保存被"获取仓库信息失败"阻断
|
||||||
if(!"200".equals(String.valueOf(ajaxResult.get("code")))){
|
WarehouseFeignPO warehouseFeignPO = warehouseInfoApplicationService.getWarehouseInfo(stockOutOrderDO.getWarehouseId());
|
||||||
throw new ServiceException("获取仓库信息失败");
|
|
||||||
}
|
|
||||||
WarehouseFeignPO warehouseFeignPO = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
|
||||||
stockOutOrderDO.setWarehouseCode(warehouseFeignPO.getWarehouseCode());
|
stockOutOrderDO.setWarehouseCode(warehouseFeignPO.getWarehouseCode());
|
||||||
stockOutOrderDO.setWarehouseName(warehouseFeignPO.getWarehouseName());
|
stockOutOrderDO.setWarehouseName(warehouseFeignPO.getWarehouseName());
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-5
@@ -68,6 +68,8 @@ import java.util.concurrent.ThreadLocalRandom;
|
|||||||
public class ReserveStockOutOrderApplicationService {
|
public class ReserveStockOutOrderApplicationService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ReserveStockOutOrderDomainService stockOutOrderDomainService;
|
private ReserveStockOutOrderDomainService stockOutOrderDomainService;
|
||||||
|
@Autowired
|
||||||
|
private com.mhd.oms.application.service.WarehouseInfoApplicationService warehouseInfoApplicationService;
|
||||||
// @Autowired
|
// @Autowired
|
||||||
// private ReserveOutMaterialDetailDomainService outMaterialDetailDomainService;
|
// private ReserveOutMaterialDetailDomainService outMaterialDetailDomainService;
|
||||||
// @Autowired
|
// @Autowired
|
||||||
@@ -895,11 +897,8 @@ public class ReserveStockOutOrderApplicationService {
|
|||||||
if (stockOutOrderDO.getWarehouseId() == null) {
|
if (stockOutOrderDO.getWarehouseId() == null) {
|
||||||
throw new ServiceException("仓库ID不能为空");
|
throw new ServiceException("仓库ID不能为空");
|
||||||
}
|
}
|
||||||
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(stockOutOrderDO.getWarehouseId());
|
// Feign失败走本地跨库兜底, 避免保存被"获取仓库信息失败"阻断
|
||||||
if(!"200".equals(String.valueOf(ajaxResult.get("code")))){
|
WarehouseFeignPO warehouseFeignPO = warehouseInfoApplicationService.getWarehouseInfo(stockOutOrderDO.getWarehouseId());
|
||||||
throw new ServiceException("获取仓库信息失败");
|
|
||||||
}
|
|
||||||
WarehouseFeignPO warehouseFeignPO = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
|
||||||
stockOutOrderDO.setWarehouseCode(warehouseFeignPO.getWarehouseCode());
|
stockOutOrderDO.setWarehouseCode(warehouseFeignPO.getWarehouseCode());
|
||||||
stockOutOrderDO.setWarehouseName(warehouseFeignPO.getWarehouseName());
|
stockOutOrderDO.setWarehouseName(warehouseFeignPO.getWarehouseName());
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-1
@@ -52,6 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<result property="updateBy" column="update_by" />
|
<result property="updateBy" column="update_by" />
|
||||||
<result property="updateByName" column="update_by_name" />
|
<result property="updateByName" column="update_by_name" />
|
||||||
<result property="delFlag" column="del_flag" />
|
<result property="delFlag" column="del_flag" />
|
||||||
|
<result property="reverseFlag" column="reverse_flag" />
|
||||||
<result property="overStockId" column="over_stock_id" />
|
<result property="overStockId" column="over_stock_id" />
|
||||||
<result property="overStockStatus" column="over_stock_status" />
|
<result property="overStockStatus" column="over_stock_status" />
|
||||||
<result property="overStockType" column="over_stock_type" />
|
<result property="overStockType" column="over_stock_type" />
|
||||||
@@ -127,7 +128,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
a.cancel_time, a.close_order, a.close_remark, a.close_by, a.close_by_name, a.close_time, a.check_status,a.BUSINESS_ORDER_NO,
|
a.cancel_time, a.close_order, a.close_remark, a.close_by, a.close_by_name, a.close_time, a.check_status,a.BUSINESS_ORDER_NO,
|
||||||
a.check_task_distribution, a.check_task_distribution_time, a.check_operators_by, a.check_operators_name, a.mobilize_code,
|
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.business_number,a.train_no,a.amount,a.business_out_order_number,
|
a.remark, a.create_time, a.create_by, a.create_by_name,a.business_number,a.train_no,a.amount,a.business_out_order_number,
|
||||||
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.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.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,
|
a.COMPLETE_TIME,a.ORDER_DATE,a.TRANSPORT_MODE_CODE,a.TRANSPORT_MODE_NAME,a.SUPERVISION_MODE_CODE,a.SUPERVISION_MODE_NAME,
|
||||||
@@ -401,6 +402,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<when test="delFlag != null"> and a.del_flag = #{delFlag} </when>
|
<when test="delFlag != null"> and a.del_flag = #{delFlag} </when>
|
||||||
<otherwise> and a.del_flag = 1 </otherwise>
|
<otherwise> and a.del_flag = 1 </otherwise>
|
||||||
</choose>
|
</choose>
|
||||||
|
<!-- 反审标记查询: OMS执行单【已反审】tab 前端传 delFlag=2 + reverseFlag=1 (与WMS四列表同口径, 两参数须成对传) -->
|
||||||
|
<if test="reverseFlag != null"> and a.reverse_flag = #{reverseFlag} </if>
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="queryList" parameterType="com.mhd.oms.domain.executionStockOutOrder.repository.todo.ExecutionStockOutOrderDO" resultMap="StockOutOrderResult">
|
<select id="queryList" parameterType="com.mhd.oms.domain.executionStockOutOrder.repository.todo.ExecutionStockOutOrderDO" resultMap="StockOutOrderResult">
|
||||||
|
|||||||
+12
@@ -592,6 +592,18 @@
|
|||||||
select WAREHOUSE_CODE from "NGWL_TEST_SYSTEM".WAREHOUSE where 1 = 1 and DEL_FLAG = 1 and WAREHOUSE_ID = #{id} limit 1
|
select WAREHOUSE_CODE from "NGWL_TEST_SYSTEM".WAREHOUSE where 1 = 1 and DEL_FLAG = 1 and WAREHOUSE_ID = #{id} limit 1
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 本地跨库直查仓库信息: 下发/下单冻结等流程 Feign 获取仓库信息失败/降级时兜底(与 system 服务同库同表) -->
|
||||||
|
<select id="getWarehouseInfoFallback" parameterType="java.lang.Long" resultType="com.mhd.system.api.domain.WarehouseFeignPO">
|
||||||
|
select WAREHOUSE_CODE as warehouseCode,
|
||||||
|
WAREHOUSE_NAME as warehouseName,
|
||||||
|
ORDER_NO_GENERATE_RULE as orderNoGenerateRule,
|
||||||
|
OUT_ORDER_NO_PREFIX as outOrderNoPrefix,
|
||||||
|
SAMPLE_OUT_ORDER_NO_PREFIX as sampleOutOrderNoPrefix,
|
||||||
|
STOCK_LOCK_MODE as stockLockMode
|
||||||
|
from "NGWL_TEST_SYSTEM".WAREHOUSE
|
||||||
|
where 1 = 1 and DEL_FLAG = 1 and WAREHOUSE_ID = #{id} limit 1
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
<!-- 入仓通知单打印-表头查询 -->
|
<!-- 入仓通知单打印-表头查询 -->
|
||||||
<select id="queryNoticePrint" resultMap="StockInOrderResult">
|
<select id="queryNoticePrint" resultMap="StockInOrderResult">
|
||||||
|
|||||||
+6
@@ -26,6 +26,12 @@ public interface PickingMaterialDetailMapper extends BaseMapper<PickingMaterialD
|
|||||||
|
|
||||||
public PickingMaterialDetailPO queryTotalsByOutNumberAndBaseId(@Param("outUniqueId") Long outUniqueId);
|
public PickingMaterialDetailPO queryTotalsByOutNumberAndBaseId(@Param("outUniqueId") Long outUniqueId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 归档汇总(已反审): 同 queryTotalsByOutNumberAndBaseId, 但按 DEL_FLAG=2 统计软删归档的拣货明细,
|
||||||
|
* 供交接单归档详情 getReverseInfo 使用(反审时拣货明细均已软删, 按 del_flag=1 统计恒为0会丢行)
|
||||||
|
*/
|
||||||
|
public PickingMaterialDetailPO queryTotalsByOutNumberAndBaseIdReverse(@Param("outUniqueId") Long outUniqueId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按出库单号汇总拣货完成数量(实际下发/拣货完成的数量)
|
* 按出库单号汇总拣货完成数量(实际下发/拣货完成的数量)
|
||||||
*/
|
*/
|
||||||
|
|||||||
+15
@@ -248,6 +248,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
AND b.DEL_FLAG = 1
|
AND b.DEL_FLAG = 1
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 归档汇总(已反审): 反审时拣货明细已软删(del_flag=2), 按 del_flag=1 统计恒为0会丢行, 供交接单归档详情使用 -->
|
||||||
|
<select id="queryTotalsByOutNumberAndBaseIdReverse" resultType="com.mhd.wms.domain.pickingMaterialDetail.repository.po.PickingMaterialDetailPO">
|
||||||
|
SELECT
|
||||||
|
COALESCE(SUM(b.PICKING_QUANTITY), 0) AS picking_quantity,
|
||||||
|
COALESCE(SUM(b.TOTAL_AREA), 0) AS total_area,
|
||||||
|
COALESCE(SUM(b.TOTAL_VOLUME), 0) AS total_volume,
|
||||||
|
COALESCE(SUM(b.TOTAL_NET_WEIGHT), 0) AS total_net_weight,
|
||||||
|
COALESCE(SUM(b.TOTAL_GROSS_WEIGHT), 0) AS total_gross_weight
|
||||||
|
FROM
|
||||||
|
PICKING_MATERIAL_DETAIL b
|
||||||
|
WHERE
|
||||||
|
b.OUT_UNIQUE_ID = #{outUniqueId}
|
||||||
|
AND b.DEL_FLAG = 2
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="sumPickingQuantityByOutOrderNumber" resultType="java.math.BigDecimal">
|
<select id="sumPickingQuantityByOutOrderNumber" resultType="java.math.BigDecimal">
|
||||||
SELECT COALESCE(SUM(pmd.PICKING_QUANTITY), 0)
|
SELECT COALESCE(SUM(pmd.PICKING_QUANTITY), 0)
|
||||||
FROM picking_material_detail pmd
|
FROM picking_material_detail pmd
|
||||||
|
|||||||
@@ -46,13 +46,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<sql id="selectPickingOrderPo">
|
<sql id="selectPickingOrderPo">
|
||||||
a.picking_order_id, a.organization_id, a.organization_name, a.top_organization_id, a.order_number, a.picking_order_number,
|
a.picking_order_id, a.organization_id, a.organization_name, a.top_organization_id, a.order_number, a.picking_order_number,
|
||||||
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,
|
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,
|
<!-- 拣货数量/货物类型按行自身生命周期聚合(del_flag=a.del_flag): 活动行统计活动明细, 已反审归档行(del_flag=2)统计归档明细;
|
||||||
|
固定 del_flag=1 会导致【已反审】tab 及归档详情(queryOutOrderByIdReverse 复用本片段)拣货数量恒为0 -->
|
||||||
|
IFNULL((SELECT SUM(b.picking_quantity) FROM picking_material_detail b WHERE b.picking_order_number = a.picking_order_number AND b.del_flag = a.del_flag), 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.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.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.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,
|
,a.push_status,a.push_time,a.push_by,a.push_by_name,
|
||||||
(SELECT m.goods_type FROM PICKING_MATERIAL_DETAIL d
|
(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
|
JOIN material_base_info m ON d.material_base_info_id = m.material_base_info_id
|
||||||
WHERE d.PICKING_ORDER_NUMBER = a.PICKING_ORDER_NUMBER and d.del_flag = 1
|
WHERE d.PICKING_ORDER_NUMBER = a.PICKING_ORDER_NUMBER and d.del_flag = a.del_flag
|
||||||
LIMIT 1) AS goods_type
|
LIMIT 1) AS goods_type
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
|
|||||||
@@ -204,7 +204,8 @@
|
|||||||
sum(ifnull(d.material_plan_qty, ifnull(d.pending_review_qty, 0) + ifnull(d.reviewed_qty, 0))) as total_plan_qty,
|
sum(ifnull(d.material_plan_qty, ifnull(d.pending_review_qty, 0) + ifnull(d.reviewed_qty, 0))) as total_plan_qty,
|
||||||
sum(ifnull(d.reviewed_qty, 0)) as total_reviewed_qty
|
sum(ifnull(d.reviewed_qty, 0)) as total_reviewed_qty
|
||||||
from review_material_detail d
|
from review_material_detail d
|
||||||
where d.del_flag = 1
|
<!-- 不滤 del_flag: 复核明细仅随整单反审统一软删(全库唯一软删路径), 不滤才能让【已反审】tab 行汇总到归档明细;
|
||||||
|
活动单明细恒为 del_flag=1, 汇总口径不变 -->
|
||||||
group by d.review_order_id
|
group by d.review_order_id
|
||||||
) agg on a.review_order_id = agg.review_order_id
|
) agg on a.review_order_id = agg.review_order_id
|
||||||
<where>
|
<where>
|
||||||
|
|||||||
Reference in New Issue
Block a user