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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user