diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java index ba9a45148..aa3f1f09b 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java @@ -539,6 +539,13 @@ public interface WlhyServiceFeign { @GetMapping("/feign/order/cancelIssueDocuments") 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") public AjaxResult queryList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteWlhyFallbackFactory.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteWlhyFallbackFactory.java index 489e8e221..7b401a6ad 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteWlhyFallbackFactory.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteWlhyFallbackFactory.java @@ -551,6 +551,12 @@ public class RemoteWlhyFallbackFactory implements FallbackFactory queryList(Integer pageNo, Integer pageSize, String pushStatus, String organizationId) { return AjaxResult.error(cause.getMessage()); diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/WarehouseInfoApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/WarehouseInfoApplicationService.java new file mode 100644 index 000000000..0fa4c737d --- /dev/null +++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/WarehouseInfoApplicationService.java @@ -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; + } +} diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/outEntrustOrder/OutEntrustOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/outEntrustOrder/OutEntrustOrderApplicationService.java index 6dd2abf2e..bcdfacb14 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/application/service/outEntrustOrder/OutEntrustOrderApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/outEntrustOrder/OutEntrustOrderApplicationService.java @@ -46,6 +46,9 @@ public class OutEntrustOrderApplicationService { @Resource private SystemServiceFeign systemServiceFeign; + @Resource + private com.mhd.oms.application.service.WarehouseInfoApplicationService warehouseInfoApplicationService; + @Resource private WmsServiceFeign wmsServiceFeign; @@ -352,14 +355,10 @@ public class OutEntrustOrderApplicationService { } /** - * 仓库信息校验并回填编码/名称 + * 仓库信息校验并回填编码/名称 (Feign失败走本地跨库兜底) */ private void setWarehouseInfo(OutEntrustOrderDO outEntrustOrderDO) { - AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(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); + WarehouseFeignPO warehouseFeignPO = warehouseInfoApplicationService.getWarehouseInfo(outEntrustOrderDO.getWarehouseId()); if (warehouseFeignPO == null || Objects.isNull(warehouseFeignPO.getWarehouseId())) { throw new ServiceException("仓库不存在,请重新选择"); } diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/po/ExecutionStockOutOrderPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/po/ExecutionStockOutOrderPO.java index 58f120900..1801bf6eb 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/po/ExecutionStockOutOrderPO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/po/ExecutionStockOutOrderPO.java @@ -29,6 +29,8 @@ public class ExecutionStockOutOrderPO extends BaseVOEntity { @ApiModelProperty("出库单id") private Long outOrderId; + @ApiModelProperty("反审标记: 1-已反审(反审软删归档, 【已反审】tab按 delFlag=2+reverseFlag=1 查询)") + private Integer reverseFlag; @ApiModelProperty("总价") @Excel(name = "总价") private BigDecimal amount; diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDO.java index b8317cf1c..8dbda715e 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDO.java @@ -29,6 +29,9 @@ public class ExecutionStockOutOrderDO extends BaseVOEntity { @ApiModelProperty("出库单id") private Long outOrderId; + @ApiModelProperty("反审标记查询: 1-已反审(与delFlag=2成对传, 查【已反审】tab归档数据)") + private Integer reverseFlag; + @ApiModelProperty("组织表ID") @Excel(name = "组织表ID") private Long organizationId; diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDTO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDTO.java index 0b2033f43..a140f238b 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDTO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDTO.java @@ -27,6 +27,9 @@ public class ExecutionStockOutOrderDTO extends ExecutionStockOutOrderBaseDTO { @ApiModelProperty("出库单id") private Long outOrderId; + @ApiModelProperty("反审标记查询: 1-已反审(与delFlag=2成对传, 查【已反审】tab归档数据)") + private Integer reverseFlag; + @ApiModelProperty("组织表ID") @Excel(name = "组织表ID") private Long organizationId; diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderApplicationService.java index f28d93192..320fa25fa 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderApplicationService.java @@ -66,6 +66,8 @@ import java.util.stream.Collectors; public class ExecutionStockOutOrderApplicationService { @Autowired private ExecutionStockOutOrderDomainService stockOutOrderDomainService; + @Autowired + private com.mhd.oms.application.service.WarehouseInfoApplicationService warehouseInfoApplicationService; // @Autowired // private ExecutionOutMaterialDetailDomainService outMaterialDetailDomainService; // @Autowired @@ -862,11 +864,8 @@ public class ExecutionStockOutOrderApplicationService { if (stockOutOrderDO.getWarehouseId() == null) { throw new ServiceException("仓库ID不能为空"); } - AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(stockOutOrderDO.getWarehouseId()); - if(!"200".equals(String.valueOf(ajaxResult.get("code")))){ - throw new ServiceException("获取仓库信息失败"); - } - WarehouseFeignPO warehouseFeignPO = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class); + // Feign失败走本地跨库兜底, 避免保存被"获取仓库信息失败"阻断 + WarehouseFeignPO warehouseFeignPO = warehouseInfoApplicationService.getWarehouseInfo(stockOutOrderDO.getWarehouseId()); stockOutOrderDO.setWarehouseCode(warehouseFeignPO.getWarehouseCode()); stockOutOrderDO.setWarehouseName(warehouseFeignPO.getWarehouseName()); } diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java index 5d57783ba..4e33c7a29 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java @@ -71,6 +71,8 @@ public class ExecutionStockOutOrderDomainService { @Autowired private IExecutionStockOutOrderService stockOutOrderService; @Autowired + private com.mhd.oms.application.service.WarehouseInfoApplicationService warehouseInfoApplicationService; + @Autowired private IExecutionOutMaterialDetailService outMaterialDetailService; @Autowired private IReservationDeliveryDetailsLinkService deliveryDetailsLinkService; @@ -148,14 +150,9 @@ public class ExecutionStockOutOrderDomainService { public Boolean insert(ExecutionStockOutOrderDO stockOutOrderDO) { //建单校验:明细数量必须大于0(0数量单下发WMS后自动分配必失败,出库单会卡死在已审核状态) validateMaterialDetailQuantity(stockOutOrderDO.getMaterialDetailList()); - //设置单号 + //设置单号(仓库信息: Feign优先, system服务失败/降级时本地跨库兜底) Long warehouseId = stockOutOrderDO.getWarehouseId(); - AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(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); + WarehouseFeignPO warehouseFeignPO = warehouseInfoApplicationService.getWarehouseInfo(warehouseId); String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule(); String prefix = warehouseFeignPO.getOutOrderNoPrefix(); if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) { @@ -218,14 +215,9 @@ public class ExecutionStockOutOrderDomainService { @Transactional(rollbackFor = Exception.class) public Boolean batchInsert(List stockOutOrderDOList) { for (ExecutionStockOutOrderDO stockOutOrderDO : stockOutOrderDOList){ - //设置单号 + //设置单号(仓库信息: Feign优先, system服务失败/降级时本地跨库兜底) Long warehouseId = stockOutOrderDO.getWarehouseId(); - AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(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); + WarehouseFeignPO warehouseFeignPO = warehouseInfoApplicationService.getWarehouseInfo(warehouseId); String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule(); String prefix = warehouseFeignPO.getOutOrderNoPrefix(); if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) { diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java index 16e7e43d2..d43721560 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java @@ -54,6 +54,12 @@ public interface ReservationStockInOrderMapper extends BaseMapper queryNoticePrint(ReservationStockInOrderDO stockInOrderDO); List queryNoticePrintDetail(ReservationStockInOrderDO stockInOrderDO); public void updateByTransportationNumber(@Param("transportationNumber") String transportationNumber); diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderApplicationService.java index 18185988e..e10484acd 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderApplicationService.java @@ -85,6 +85,8 @@ import java.util.stream.Collectors; public class ReservationStockOutOrderApplicationService { @Autowired private ReservationStockOutOrderDomainService stockOutOrderDomainService; + @Autowired + private com.mhd.oms.application.service.WarehouseInfoApplicationService warehouseInfoApplicationService; // @Autowired // private ReservationOutMaterialDetailDomainService outMaterialDetailDomainService; // @Autowired @@ -913,11 +915,8 @@ public class ReservationStockOutOrderApplicationService { if (stockOutOrderDO.getWarehouseId() == null) { throw new ServiceException("仓库ID不能为空"); } - AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(stockOutOrderDO.getWarehouseId()); - if(!"200".equals(String.valueOf(ajaxResult.get("code")))){ - throw new ServiceException("获取仓库信息失败"); - } - WarehouseFeignPO warehouseFeignPO = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class); + // Feign失败走本地跨库兜底, 避免新增/编辑保存被"获取仓库信息失败"阻断 + WarehouseFeignPO warehouseFeignPO = warehouseInfoApplicationService.getWarehouseInfo(stockOutOrderDO.getWarehouseId()); stockOutOrderDO.setWarehouseCode(warehouseFeignPO.getWarehouseCode()); stockOutOrderDO.setWarehouseName(warehouseFeignPO.getWarehouseName()); } diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/service/ReserveStockOutOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/service/ReserveStockOutOrderApplicationService.java index 210afd106..720c3a76c 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/service/ReserveStockOutOrderApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/service/ReserveStockOutOrderApplicationService.java @@ -68,6 +68,8 @@ import java.util.concurrent.ThreadLocalRandom; public class ReserveStockOutOrderApplicationService { @Autowired private ReserveStockOutOrderDomainService stockOutOrderDomainService; + @Autowired + private com.mhd.oms.application.service.WarehouseInfoApplicationService warehouseInfoApplicationService; // @Autowired // private ReserveOutMaterialDetailDomainService outMaterialDetailDomainService; // @Autowired @@ -895,11 +897,8 @@ public class ReserveStockOutOrderApplicationService { if (stockOutOrderDO.getWarehouseId() == null) { throw new ServiceException("仓库ID不能为空"); } - AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(stockOutOrderDO.getWarehouseId()); - if(!"200".equals(String.valueOf(ajaxResult.get("code")))){ - throw new ServiceException("获取仓库信息失败"); - } - WarehouseFeignPO warehouseFeignPO = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class); + // Feign失败走本地跨库兜底, 避免保存被"获取仓库信息失败"阻断 + WarehouseFeignPO warehouseFeignPO = warehouseInfoApplicationService.getWarehouseInfo(stockOutOrderDO.getWarehouseId()); stockOutOrderDO.setWarehouseCode(warehouseFeignPO.getWarehouseCode()); stockOutOrderDO.setWarehouseName(warehouseFeignPO.getWarehouseName()); } diff --git a/mhd_oms/src/main/resources/mapper/executionStockOutOrder/ExecutionStockOutOrderMapper.xml b/mhd_oms/src/main/resources/mapper/executionStockOutOrder/ExecutionStockOutOrderMapper.xml index 631d9f187..ced13d638 100644 --- a/mhd_oms/src/main/resources/mapper/executionStockOutOrder/ExecutionStockOutOrderMapper.xml +++ b/mhd_oms/src/main/resources/mapper/executionStockOutOrder/ExecutionStockOutOrderMapper.xml @@ -52,6 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -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.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.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, @@ -401,6 +402,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and a.del_flag = #{delFlag} and a.del_flag = 1 + + and a.reverse_flag = #{reverseFlag} + + + + 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 + +