20260409修改内容
This commit is contained in:
+63
-6
@@ -83,16 +83,73 @@ public class ReviewOrderApplicationService {
|
||||
private OutMaterialDetailMapper outMaterialDetailMapper;
|
||||
|
||||
public List<ReviewOrderPO> queryList(ReviewOrderDO query) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
if (topOrganizationId != null && topOrganizationId != 1L) {
|
||||
query.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
if (query == null) {
|
||||
query = new ReviewOrderDO();
|
||||
}
|
||||
applyReviewOrderDataPermission(query);
|
||||
return reviewOrderMapper.queryList(query);
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA 复核任务列表:数据来自 REVIEW_ORDER,仅展示已下发任务;与出库单 PDA 列表的 tab 语义对齐。
|
||||
*/
|
||||
public List<ReviewOrderPO> queryListForPda(ReviewOrderDO query) {
|
||||
if (query == null) {
|
||||
query = new ReviewOrderDO();
|
||||
}
|
||||
applyReviewOrderDataPermission(query);
|
||||
query.setLtReviewStatus(null);
|
||||
query.setReviewStatus(null);
|
||||
if (Integer.valueOf(2).equals(query.getTabType())) {
|
||||
query.setReviewStatus(3);
|
||||
} else {
|
||||
query.setLtReviewStatus(3);
|
||||
}
|
||||
query.setIssuedFlag("1");
|
||||
if (query.getDelFlag() == null) {
|
||||
query.setDelFlag(1);
|
||||
}
|
||||
return reviewOrderMapper.queryList(query);
|
||||
}
|
||||
|
||||
/**
|
||||
* 复核单数据权限(对齐出库单列表):
|
||||
* 1) organizationId=2827 可跨组织查询(前端传 organizationId 则按其过滤,不传则全组织)
|
||||
* 2) 其他组织仅可查询本组织数据,防止越权。
|
||||
*/
|
||||
private void applyReviewOrderDataPermission(ReviewOrderDO query) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser == null || loginUser.getUserPo() == null) {
|
||||
return;
|
||||
}
|
||||
Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
Long frontendOrganizationId = query.getOrganizationId();
|
||||
if (userOrganizationId != null && userOrganizationId == 2827L) {
|
||||
if (frontendOrganizationId != null) {
|
||||
query.setOrganizationId(frontendOrganizationId);
|
||||
query.setTopOrganizationId(null);
|
||||
} else {
|
||||
query.setOrganizationId(null);
|
||||
query.setTopOrganizationId(null);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (userOrganizationId != null) {
|
||||
if (frontendOrganizationId == null || !userOrganizationId.equals(frontendOrganizationId)) {
|
||||
query.setOrganizationId(userOrganizationId);
|
||||
} else {
|
||||
query.setOrganizationId(frontendOrganizationId);
|
||||
}
|
||||
// 非 2827 组织下,限定在同一顶级组织,避免跨集团越权
|
||||
query.setTopOrganizationId(2827L);
|
||||
return;
|
||||
}
|
||||
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
if (topOrganizationId != null && topOrganizationId != 1L) {
|
||||
query.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
}
|
||||
|
||||
public ReviewOrderPO getDetailByReviewOrderId(Long reviewOrderId) {
|
||||
if (reviewOrderId == null) {
|
||||
throw new ServiceException("复核单ID不能为空");
|
||||
|
||||
+19
@@ -299,6 +299,7 @@ public class StockReceiptOrderApplicationService {
|
||||
// 计算待收货数量 = 计划数量 - 已收货数量
|
||||
fillPendingReceiptQuantityRecursively(receiptMaterialDetailPOList);
|
||||
fillPlanAndPendingMetricsRecursively(receiptMaterialDetailPOList);
|
||||
fillBatchNumberFromSheetRefNoRecursively(receiptMaterialDetailPOList);
|
||||
stockReceiptOrderPO.setMaterialDetailList(receiptMaterialDetailPOList);
|
||||
log.info("返回收货单信息,receiptOrderId={}, materialDetailList大小={}, totalNetWeight={}, totalGrossWeight={}, totalVolume={}, totalArea={}",
|
||||
stockReceiptOrderPO.getReceiptOrderId(),
|
||||
@@ -467,6 +468,24 @@ public class StockReceiptOrderApplicationService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情接口展示:批次号为空时默认用料单号(sheetRefNo)展示
|
||||
*/
|
||||
private void fillBatchNumberFromSheetRefNoRecursively(List<ReceiptMaterialDetailPO> receiptMaterialDetailPOList) {
|
||||
if (CollectionUtils.isEmpty(receiptMaterialDetailPOList)) {
|
||||
return;
|
||||
}
|
||||
for (ReceiptMaterialDetailPO detail : receiptMaterialDetailPOList) {
|
||||
if (StringUtils.isBlank(detail.getBatchNumber()) && StringUtils.isNotBlank(detail.getSheetRefNo())) {
|
||||
detail.setBatchNumber(detail.getSheetRefNo());
|
||||
}
|
||||
List<ReceiptMaterialDetailPO> children = detail.getChildren();
|
||||
if (!CollectionUtils.isEmpty(children)) {
|
||||
fillBatchNumberFromSheetRefNoRecursively(children);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归计算并填充待收货数量:待收货数量 = 计划数量 - 已收货数量
|
||||
*/
|
||||
|
||||
+6
@@ -63,4 +63,10 @@ public class ReviewOrderDO extends BaseVOEntity {
|
||||
|
||||
@ApiModelProperty("复核明细列表(用于批量复核/取消复核)")
|
||||
private List<ReviewMaterialDetailPO> details;
|
||||
|
||||
@ApiModelProperty("PDA 列表 Tab:2=历史(已复核),其它=待办(待复核/复核中)")
|
||||
private Integer tabType;
|
||||
|
||||
@ApiModelProperty("复核状态小于该值(查询用,如待办 review_status < 3)")
|
||||
private Integer ltReviewStatus;
|
||||
}
|
||||
|
||||
+4
@@ -158,6 +158,10 @@ public class ShelfMaterialDetailDO extends BaseVOEntity {
|
||||
@Excel(name = "批次号")
|
||||
private String batchNumber;
|
||||
|
||||
@ApiModelProperty("LOT编号")
|
||||
@Excel(name = "LOT编号")
|
||||
private String lotNumber;
|
||||
|
||||
@ApiModelProperty("物料状态编码")
|
||||
@Excel(name = "物料状态编码")
|
||||
private String materialStatusCode;
|
||||
|
||||
@@ -54,6 +54,7 @@ public class ReviewOrderDTO extends BaseVOEntity {
|
||||
private String receiveTimeEnd;
|
||||
|
||||
@ApiModelProperty("复核单ID集合")
|
||||
@JsonAlias({"outOrderIds"})
|
||||
private List<Long> reviewOrderIds;
|
||||
|
||||
@ApiModelProperty("复核作业人用户ID(复核下发可选,未传则默认当前登录人)")
|
||||
@@ -65,4 +66,7 @@ public class ReviewOrderDTO extends BaseVOEntity {
|
||||
@ApiModelProperty("复核明细列表(用于批量复核/取消复核)")
|
||||
@JsonAlias({"materialDetailList"})
|
||||
private List<ReviewMaterialDetailPO> details;
|
||||
|
||||
@ApiModelProperty("PDA 列表 Tab:2=历史(已复核),其它=待办(待复核/复核中)")
|
||||
private Integer tabType;
|
||||
}
|
||||
|
||||
+4
@@ -158,6 +158,10 @@ public class ShelfMaterialDetailDTO extends BaseVOEntity {
|
||||
@Excel(name = "批次号")
|
||||
private String batchNumber;
|
||||
|
||||
@ApiModelProperty("LOT编号")
|
||||
@Excel(name = "LOT编号")
|
||||
private String lotNumber;
|
||||
|
||||
@ApiModelProperty("物料状态编码")
|
||||
@Excel(name = "物料状态编码")
|
||||
private String materialStatusCode;
|
||||
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
package com.mhd.wms.interfaces.facadeApp.reviewOrder;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.mhd.common.core.domain.po.UserPo;
|
||||
import com.mhd.common.core.web.controller.BaseController;
|
||||
import com.mhd.common.core.web.domain.AjaxResult;
|
||||
import com.mhd.common.core.web.page.TableDataInfoApi;
|
||||
import com.mhd.common.security.utils.SecurityUtils;
|
||||
import com.mhd.system.api.domain.cache.AssociationWarehouseCacheDO;
|
||||
import com.mhd.system.api.domain.cache.SystemServiceCacheUtil;
|
||||
import com.mhd.system.api.model.LoginUser;
|
||||
import com.mhd.wms.application.service.reviewOrder.ReviewOrderApplicationService;
|
||||
import com.mhd.wms.domain.reviewOrder.repository.po.ReviewOrderPO;
|
||||
import com.mhd.wms.domain.reviewOrder.repository.todo.ReviewOrderDO;
|
||||
import com.mhd.wms.interfaces.assember.reviewOrder.ReviewOrderAssembler;
|
||||
import com.mhd.wms.interfaces.dto.reviewOrder.ReviewOrderDTO;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* PDA 复核单接口:列表、详情、提交复核、取消复核、完成复核。
|
||||
* 数据口径以 {@code REVIEW_ORDER}、{@code REVIEW_MATERIAL_DETAIL} 为准(与 PC {@code ReviewOrderApi} 同源服务)。
|
||||
*
|
||||
* @see com.mhd.wms.interfaces.facadeApi.reviewOrder.ReviewOrderApi
|
||||
* @see com.mhd.wms.interfaces.facadeApp.stockOutOrder.StockOutOrderAppApi
|
||||
*/
|
||||
@Api(tags = "PDA复核单")
|
||||
@RestController
|
||||
@RequestMapping("/reviewOrderAppApi")
|
||||
public class ReviewOrderAppApi extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private ReviewOrderApplicationService reviewOrderApplicationService;
|
||||
|
||||
@Resource
|
||||
private ReviewOrderAssembler reviewOrderAssembler;
|
||||
|
||||
/**
|
||||
* 分页查询复核单列表(仅已下发任务,按当前用户仓库过滤)
|
||||
* <ul>
|
||||
* <li>{@code tabType=2}:历史({@code review_status=3} 已复核)</li>
|
||||
* <li>其它:待办({@code review_status < 3},待复核/复核中)</li>
|
||||
* </ul>
|
||||
*/
|
||||
@ApiOperation("PDA 复核单列表(REVIEW_ORDER)")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfoApi list(ReviewOrderDTO reviewOrderDTO) {
|
||||
ReviewOrderDO query = reviewOrderAssembler.toDO(reviewOrderDTO);
|
||||
startPage();
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
query.setOrganizationId(userPo.getOrganizationId());
|
||||
query.setTopOrganizationId(userPo.getTopOrganizationId());
|
||||
AssociationWarehouseCacheDO wh = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid());
|
||||
if (wh != null) {
|
||||
query.setWarehouseId(wh.getWarehouseId());
|
||||
}
|
||||
List<ReviewOrderPO> list = reviewOrderApplicationService.queryListForPda(query);
|
||||
return getDataTableApi(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 复核单详情(头 + REVIEW_MATERIAL_DETAIL 明细,含批次展示字段)
|
||||
*/
|
||||
@ApiOperation("PDA 复核单详情")
|
||||
@GetMapping("/getInfo")
|
||||
public AjaxResult getInfo(@RequestParam("reviewOrderId") Long reviewOrderId) {
|
||||
return AjaxResult.success(reviewOrderApplicationService.getDetailByReviewOrderId(reviewOrderId));
|
||||
}
|
||||
|
||||
@ApiOperation("PDA 按复核单号查详情")
|
||||
@GetMapping("/getInfoByNumber")
|
||||
public AjaxResult getInfoByNumber(@RequestParam("reviewOrderNumber") String reviewOrderNumber) {
|
||||
return AjaxResult.success(reviewOrderApplicationService.getDetailByReviewOrderNumber(reviewOrderNumber));
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交复核(更新 REVIEW_MATERIAL_DETAIL 已复核/待复核数量等,与 PC batchCheck 一致)
|
||||
*/
|
||||
@ApiOperation("PDA 提交复核")
|
||||
@PostMapping("/check")
|
||||
public AjaxResult check(@RequestBody ReviewOrderDTO reviewOrderDTO) {
|
||||
ReviewOrderDO cmd = JSONUtil.toBean(JSONUtil.toJsonStr(reviewOrderDTO), ReviewOrderDO.class);
|
||||
return toAjax(reviewOrderApplicationService.batchCheck(cmd));
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消复核(与 PC batchCancelCheck 一致)
|
||||
*/
|
||||
@ApiOperation("PDA 取消复核")
|
||||
@PostMapping("/cancelCheck")
|
||||
public AjaxResult cancelCheck(@RequestBody ReviewOrderDTO reviewOrderDTO) {
|
||||
ReviewOrderDO cmd = reviewOrderAssembler.toDO(reviewOrderDTO);
|
||||
return toAjax(reviewOrderApplicationService.batchCancelCheck(cmd));
|
||||
}
|
||||
|
||||
/**
|
||||
* 完成复核确认(无待复核数量时可确认,同步出库明细并生成交接等,与 PC checkConfirm 一致)
|
||||
*/
|
||||
@ApiOperation("PDA 完成复核")
|
||||
@PostMapping("/completeCheck")
|
||||
public AjaxResult completeCheck(@RequestBody ReviewOrderDTO reviewOrderDTO) {
|
||||
ReviewOrderDO cmd = JSONUtil.toBean(JSONUtil.toJsonStr(reviewOrderDTO), ReviewOrderDO.class);
|
||||
return toAjax(reviewOrderApplicationService.checkConfirm(cmd));
|
||||
}
|
||||
}
|
||||
@@ -116,6 +116,9 @@
|
||||
<if test="reviewStatus != null">
|
||||
and a.review_status = #{reviewStatus}
|
||||
</if>
|
||||
<if test="ltReviewStatus != null">
|
||||
and a.review_status < #{ltReviewStatus}
|
||||
</if>
|
||||
<if test="issuedFlag != null and issuedFlag != ''">
|
||||
and a.issued_flag = #{issuedFlag}
|
||||
</if>
|
||||
|
||||
@@ -178,6 +178,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="batchNumber != null and batchNumber != ''">
|
||||
and batch_number = #{batchNumber}
|
||||
</if>
|
||||
<if test="lotNumber != null and lotNumber != ''">
|
||||
and lot_number = #{lotNumber}
|
||||
</if>
|
||||
<if test="materialStatusCode != null and materialStatusCode != ''">
|
||||
and material_status_code = #{materialStatusCode}
|
||||
</if>
|
||||
|
||||
@@ -82,19 +82,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="orderDate" column="ORDER_DATE" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 计划入库数量:入库明细主行 quantity 汇总(列表 quantity / plan_in_quantity 均以此为准展示) -->
|
||||
<sql id="sumPlanInMaterialQuantity">
|
||||
(select ifnull(sum(imd.quantity), 0)
|
||||
from in_material_detail imd
|
||||
where imd.in_order_number = a.in_order_number
|
||||
and imd.del_flag = 1
|
||||
and (imd.level is null or imd.level = 1))
|
||||
</sql>
|
||||
|
||||
<sql id="selectStockInOrderPo">
|
||||
a.in_order_id, a.organization_id, a.organization_name, a.top_organization_id, a.notice_number, a.in_order_number, a.status,
|
||||
a.audit_status, a.audit_remark, a.audit_by, a.audit_by_name, a.audit_time, a.warehouse_id, a.warehouse_code, a.warehouse_name, a.shipper_id, a.shipper_code,
|
||||
a.shipper_name, a.order_type_code, a.order_type_name, a.supplier_id, a.supplier_code, a.supplier_name, a.expect_time, a.supply_chain_number,
|
||||
a.priority_level_code, a.priority_level_name, a.direct_warehouse, a.annex_url, a.material_quantity, a.quantity,
|
||||
-- 计划入库数量:入库明细表 in_material_detail 的 quantity 汇总
|
||||
(select ifnull(sum(imd.quantity), 0)
|
||||
from in_material_detail imd
|
||||
where imd.in_order_number = a.in_order_number
|
||||
and imd.del_flag = 1
|
||||
and (imd.level is null or imd.level = 1)
|
||||
) as plan_in_quantity,
|
||||
a.priority_level_code, a.priority_level_name, a.direct_warehouse, a.annex_url, a.material_quantity,
|
||||
<include refid="sumPlanInMaterialQuantity"/> as quantity,
|
||||
<include refid="sumPlanInMaterialQuantity"/> as plan_in_quantity,
|
||||
-- 收货数量:收货单表 stock_receipt_order 的 receipt_quantity 汇总
|
||||
(select ifnull(sum(sro.receipt_quantity), 0)
|
||||
from stock_receipt_order sro
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
-- 收货单明细新增 lot 编号(达梦)
|
||||
DECLARE
|
||||
v_count INT;
|
||||
BEGIN
|
||||
SELECT COUNT(1)
|
||||
INTO v_count
|
||||
FROM USER_TAB_COLUMNS
|
||||
WHERE TABLE_NAME = 'RECEIPT_MATERIAL_DETAIL'
|
||||
AND COLUMN_NAME = 'LOT_NO';
|
||||
|
||||
IF v_count = 0 THEN
|
||||
EXECUTE IMMEDIATE 'ALTER TABLE RECEIPT_MATERIAL_DETAIL ADD (LOT_NO VARCHAR2(255))';
|
||||
EXECUTE IMMEDIATE 'COMMENT ON COLUMN RECEIPT_MATERIAL_DETAIL.LOT_NO IS ''lot编号''';
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
Reference in New Issue
Block a user