Browse Source

Merge remote-tracking branch 'origin/master'

master
廉洪喜 2 years ago
parent
commit
2e71eceac0
  1. 3
      win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java
  2. 11
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRecord/PurchasereceiptRecordDetailController.java
  3. 132
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestMainServiceImpl.java
  4. 156
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/util/JobUtils.java

3
win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java

@ -914,6 +914,9 @@ public interface ErrorCodeConstants {
ErrorCode EXPECTIN_NOT_EXISTS = new ErrorCode(1_000_162_000, "预计入库存不存在");
//库存余额ErrorCode
ErrorCode BALANCE_NOT_EXISTS = new ErrorCode(1_000_163_000, "库存余额不存在");
ErrorCode BALANCE_ITEM_NOT_EXISTS = new ErrorCode(1_000_163_001, "查询库存余额 物品不能为空");
ErrorCode BALANCE_STATU_NOT_EXISTS = new ErrorCode(1_000_163_002, "查询库存余额 库存状态不能为空");
ErrorCode BALANCE_QTY_NOT_EXISTS = new ErrorCode(1_000_163_003, "查询库存余额 数量不能为空");
//库存事务ErrorCode
ErrorCode TRANSACTION_NOT_EXISTS = new ErrorCode(1_000_164_000, "库存事务不存在");
//库存事务ErrorCode

11
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRecord/PurchasereceiptRecordDetailController.java

@ -19,6 +19,8 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
import static com.win.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 采购收货记录子")
@ -61,4 +63,13 @@ public class PurchasereceiptRecordDetailController {
return success(result);
}
@GetMapping("/list")
@Operation(summary = "高级搜索获得采购收货记录子信息分页")
@PreAuthorize("@ss.hasPermission('wms:purchasereceipt-record-detail:query')")
public CommonResult<List<PurchasereceiptRecordDetailRespVO>> getPurchasereceiptRecordDetailList(@RequestParam Long masterId) {
List<PurchasereceiptRecordDetailDO> list = purchasereceiptRecordDetailService.selectList(masterId);
List<PurchasereceiptRecordDetailRespVO> result = PurchasereceiptRecordDetailConvert.INSTANCE.convertList(list);
return success(result);
}
}

132
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestMainServiceImpl.java

@ -666,137 +666,11 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService {
List<IssueJobDetailDO> issueJobDetailDOList = new ArrayList<>();
List<ExpectinCreateReqVO> expectinCreateReqVOList = new ArrayList<>();
List<ExpectoutCreateReqVO> expectoutCreateReqVOList = new ArrayList<>();
JobUtils jobUtils = new JobUtils();
// 根据发料申请子表数据进行分析
detailDO.forEach(item -> {
// 批次策略
RuleRespVO ruleRespVOBatch = ruleService.batch(null, null,null,null,null,item.getProjectCode(),item.getItemCode());
JSONObject jsonObjectBatch = JSONUtil.parseObj(ruleRespVOBatch.getConfiguration());
// 下架策略
RuleRespVO ruleRespVOOffShelf = ruleService.offShelf(null,null,null,null,null,item.getProjectCode(),item.getItemCode(),null,null,null);
JSONObject jsonObjectOffShelf = JSONUtil.parseObj(ruleRespVOOffShelf.getConfiguration());
// 查询库存余额
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.select("item_code", "batch", "SUM(qty) as qty", "packing_number", "container_number", "warehouse_code", "area_code", "location_group_code", "location_code", "produce_date", "arrive_date");
queryWrapper.eq("item_code", item.getItemCode());
queryWrapper.eq("inventory_status", item.getInventoryStatus());
// 根据下架策略 作为查询库存余额条件
// 仓库
if (jsonObjectOffShelf.get("WarehouseCode") != null && !jsonObjectOffShelf.get("WarehouseCode").equals("")) {
queryWrapper.eq("warehouse_code", jsonObjectOffShelf.get("WarehouseCode"));
}
// 库区
if (jsonObjectOffShelf.get("AreaCode") != null && !jsonObjectOffShelf.get("AreaCode").equals("")) {
queryWrapper.eq("area_code", jsonObjectOffShelf.get("AreaCode"));
}
// 库位组
if (jsonObjectOffShelf.get("LocationGroupCode") != null && !jsonObjectOffShelf.get("LocationGroupCode").equals("")) {
queryWrapper.eq("location_group_code", jsonObjectOffShelf.get("LocationGroupCode"));
}
// 库位
if (jsonObjectOffShelf.get("LocationCode") != null && !jsonObjectOffShelf.get("LocationCode").equals("")) {
queryWrapper.eq("location_code", jsonObjectOffShelf.get("LocationCode"));
}
// 根据下架策略 作为查询库存余额分组
// 发料包装类型——按 包装
if (jsonObjectOffShelf.get("IssueStorageType") != null && jsonObjectOffShelf.get("IssueStorageType").equals("1")) {
queryWrapper.groupBy("packing_number");
}
// 发料包装类型——按 容器
if (jsonObjectOffShelf.get("IssueStorageType") != null && jsonObjectOffShelf.get("IssueStorageType").equals("2")) {
queryWrapper.groupBy("container_number");
}
// 发料包装类型——按 单件
if (jsonObjectOffShelf.get("IssueStorageType") != null && jsonObjectOffShelf.get("IssueStorageType").equals("3")) {
queryWrapper.groupBy("item_code", "batch", "qty", "packing_number", "container_number", "warehouse_code", "area_code", "location_group_code", "location_code", "expire_date", "produce_date", "arrive_date");
}
// 根据批次策略 作为查询库存余额排序
// 批次类型——按 生产时间
if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("0")) {
// ASC = 0,正向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("0")) {
queryWrapper.orderByAsc("produce_date");
}
// DESC = 1,逆向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("1")) {
queryWrapper.orderByDesc("produce_date");
}
}
// 批次类型——按 到货时间
if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("1")) {
// ASC = 0,正向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("0")) {
queryWrapper.orderByAsc("arrive_date");
}
// DESC = 1,逆向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("1")) {
queryWrapper.orderByDesc("arrive_date");
}
}
// 批次类型——按 失效时间
if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("2")) {
// ASC = 0,正向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("0")) {
queryWrapper.orderByAsc("expire_date");
}
// DESC = 1,逆向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("1")) {
queryWrapper.orderByDesc("expire_date");
}
}
// 批次类型——按 供应商批次
if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("3")) {
// TODO: 供应商批次 ??? 不知道怎么搞了
}
// 批次类型——按 供应商优先级
if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("4")) {
// TODO: 供应商优先级 ??? 不知道怎么搞了
}
// 批次类型——按 其它批次
if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("5")) {
// ASC = 0,正向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("0")) {
queryWrapper.orderByAsc("batch");
}
// DESC = 1,逆向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("1")) {
queryWrapper.orderByDesc("batch");
}
}
// 数量排序方向 正向
if (jsonObjectOffShelf.get("QtyOrderDirection") != null && jsonObjectOffShelf.get("QtyOrderDirection").equals("ASC")) {
queryWrapper.orderByAsc("qty");
}
// 数量排序方向 逆向
if (jsonObjectOffShelf.get("QtyOrderDirection") != null && jsonObjectOffShelf.get("QtyOrderDirection").equals("DESC")) {
queryWrapper.orderByDesc("qty");
}
// 任务子表数据
List<BalanceDO> balanceDOListJob = new ArrayList<>();
List<BalanceDO> balanceDOList = balanceMapper.selectList(queryWrapper);
BigDecimal countQty = new BigDecimal(0.000000);
for (BalanceDO balanceDO: balanceDOList) {
// 查询 预计出 求和 数量
// TODO: 后续完善 根据 管理精度查询
QueryWrapper queryWrapperExpectout = new QueryWrapper();
queryWrapperExpectout.select("SUM(qty) as qty");
queryWrapperExpectout.eq("item_code", balanceDO.getItemCode());
if (balanceDO.getPackingNumber() != null && !balanceDO.getPackingNumber().equals("")) queryWrapperExpectout.eq("packing_number", balanceDO.getPackingNumber());
if (balanceDO.getBatch() != null && !balanceDO.getBatch().equals("")) queryWrapperExpectout.eq("batch", balanceDO.getBatch());
queryWrapperExpectout.groupBy("item_code","packing_number", "batch");
ExpectoutDO expectoutDO = expectoutMapper.selectOne(queryWrapperExpectout);
BigDecimal countQtyExpectout = new BigDecimal(0.000000);
if (expectoutDO != null) {
countQtyExpectout = expectoutDO.getQty();
}
// balanceDO.getQty().subtract(countQtyExpectout) 扣减预计出数量
countQty = countQty.add(balanceDO.getQty().subtract(countQtyExpectout));
balanceDOListJob.add(balanceDO);
// 数据列表循环累加 直到总和大于等于当前物品的qty {countQty >= balanceDO.getQty()}
if (countQty.compareTo(item.getQty()) != -1) {
break;
}
}
// 根据批次策略/下架策略 返回 库存余额DO
List<BalanceDO> balanceDOListJob = jobUtils.getBalanceByBatchOffShelf(item.getItemCode(),item.getInventoryStatus(),item.getProjectCode(),item.getQty());
// 根据 查询出所需数据 解析成 任务子表数据
balanceDOListJob.forEach(balanceDOItem -> {
IssueJobDetailDO issueJobDetailDO = new IssueJobDetailDO();

156
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/util/JobUtils.java

@ -2,6 +2,7 @@ package com.win.module.wms.util;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.win.module.wms.controller.rule.vo.RuleRespVO;
import com.win.module.wms.dal.dataobject.balance.BalanceDO;
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO;
@ -725,4 +726,159 @@ public class JobUtils {
return true;
}
/**
* 根据批次策略/下架策略 返回 库存余额DO
* @param itemCode
* @param inventoryStatus
* @param projectCode
* @param qty
* @return
*/
public List<BalanceDO> getBalanceByBatchOffShelf(String itemCode, String inventoryStatus, String projectCode, BigDecimal qty) {
// 批次策略
RuleRespVO ruleRespVOBatch = ruleService.batch(null, null,null,null,null,projectCode,itemCode);
JSONObject jsonObjectBatch = JSONUtil.parseObj(ruleRespVOBatch.getConfiguration());
// 下架策略
RuleRespVO ruleRespVOOffShelf = ruleService.offShelf(null,null,null,null,null,projectCode,itemCode,inventoryStatus,null,null);
JSONObject jsonObjectOffShelf = JSONUtil.parseObj(ruleRespVOOffShelf.getConfiguration());
// 查询库存余额
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.select("item_code", "batch", "SUM(qty) as qty", "packing_number", "container_number", "warehouse_code", "area_code", "location_group_code", "location_code", "produce_date", "arrive_date");
if (itemCode != null && !itemCode.equals("")) {
queryWrapper.eq("item_code", itemCode);
} else {
throw exception(BALANCE_ITEM_NOT_EXISTS);
}
if (inventoryStatus != null && !inventoryStatus.equals("")) {
queryWrapper.eq("inventory_status", inventoryStatus);
} else {
throw exception(BALANCE_STATU_NOT_EXISTS);
}
if (qty == null) {
throw exception(BALANCE_QTY_NOT_EXISTS);
}
// 根据下架策略 作为查询库存余额条件
// 仓库
if (jsonObjectOffShelf.get("WarehouseCode") != null && !jsonObjectOffShelf.get("WarehouseCode").equals("")) {
queryWrapper.eq("warehouse_code", jsonObjectOffShelf.get("WarehouseCode"));
}
// 库区
if (jsonObjectOffShelf.get("AreaCode") != null && !jsonObjectOffShelf.get("AreaCode").equals("")) {
queryWrapper.eq("area_code", jsonObjectOffShelf.get("AreaCode"));
}
// 库位组
if (jsonObjectOffShelf.get("LocationGroupCode") != null && !jsonObjectOffShelf.get("LocationGroupCode").equals("")) {
queryWrapper.eq("location_group_code", jsonObjectOffShelf.get("LocationGroupCode"));
}
// 库位
if (jsonObjectOffShelf.get("LocationCode") != null && !jsonObjectOffShelf.get("LocationCode").equals("")) {
queryWrapper.eq("location_code", jsonObjectOffShelf.get("LocationCode"));
}
// 根据下架策略 作为查询库存余额分组
// 发料包装类型——按 包装
if (jsonObjectOffShelf.get("IssueStorageType") != null && jsonObjectOffShelf.get("IssueStorageType").equals("1")) {
queryWrapper.groupBy("packing_number");
}
// 发料包装类型——按 容器
if (jsonObjectOffShelf.get("IssueStorageType") != null && jsonObjectOffShelf.get("IssueStorageType").equals("2")) {
queryWrapper.groupBy("container_number");
}
// 发料包装类型——按 单件
if (jsonObjectOffShelf.get("IssueStorageType") != null && jsonObjectOffShelf.get("IssueStorageType").equals("3")) {
queryWrapper.groupBy("item_code", "batch", "qty", "packing_number", "container_number", "warehouse_code", "area_code", "location_group_code", "location_code", "expire_date", "produce_date", "arrive_date");
}
// 根据批次策略 作为查询库存余额排序
// 批次类型——按 生产时间
if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("0")) {
// ASC = 0,正向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("0")) {
queryWrapper.orderByAsc("produce_date");
}
// DESC = 1,逆向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("1")) {
queryWrapper.orderByDesc("produce_date");
}
}
// 批次类型——按 到货时间
if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("1")) {
// ASC = 0,正向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("0")) {
queryWrapper.orderByAsc("arrive_date");
}
// DESC = 1,逆向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("1")) {
queryWrapper.orderByDesc("arrive_date");
}
}
// 批次类型——按 失效时间
if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("2")) {
// ASC = 0,正向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("0")) {
queryWrapper.orderByAsc("expire_date");
}
// DESC = 1,逆向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("1")) {
queryWrapper.orderByDesc("expire_date");
}
}
// 批次类型——按 供应商批次
if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("3")) {
// TODO: 供应商批次 ??? 不知道怎么搞了
}
// 批次类型——按 供应商优先级
if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("4")) {
// TODO: 供应商优先级 ??? 不知道怎么搞了
}
// 批次类型——按 其它批次
if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("5")) {
// ASC = 0,正向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("0")) {
queryWrapper.orderByAsc("batch");
}
// DESC = 1,逆向
if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("1")) {
queryWrapper.orderByDesc("batch");
}
}
// 数量排序方向 正向
if (jsonObjectOffShelf.get("QtyOrderDirection") != null && jsonObjectOffShelf.get("QtyOrderDirection").equals("ASC")) {
queryWrapper.orderByAsc("qty");
}
// 数量排序方向 逆向
if (jsonObjectOffShelf.get("QtyOrderDirection") != null && jsonObjectOffShelf.get("QtyOrderDirection").equals("DESC")) {
queryWrapper.orderByDesc("qty");
}
// 任务子表数据
List<BalanceDO> balanceDOListJob = new ArrayList<>();
List<BalanceDO> balanceDOList = balanceMapper.selectList(queryWrapper);
if (balanceDOList == null || balanceDOList.size() == 0 ) {
throw exception(BALANCE_NOT_EXISTS);
}
BigDecimal countQty = new BigDecimal(0.000000);
for (BalanceDO balanceDO: balanceDOList) {
// 查询 预计出 求和 数量
// TODO: 后续完善 根据 管理精度查询
QueryWrapper queryWrapperExpectout = new QueryWrapper();
queryWrapperExpectout.select("SUM(qty) as qty");
queryWrapperExpectout.eq("item_code", balanceDO.getItemCode());
if (balanceDO.getPackingNumber() != null && !balanceDO.getPackingNumber().equals("")) queryWrapperExpectout.eq("packing_number", balanceDO.getPackingNumber());
if (balanceDO.getBatch() != null && !balanceDO.getBatch().equals("")) queryWrapperExpectout.eq("batch", balanceDO.getBatch());
queryWrapperExpectout.groupBy("item_code","packing_number", "batch");
ExpectoutDO expectoutDO = expectoutMapper.selectOne(queryWrapperExpectout);
BigDecimal countQtyExpectout = new BigDecimal(0.000000);
if (expectoutDO != null) {
countQtyExpectout = expectoutDO.getQty();
}
// balanceDO.getQty().subtract(countQtyExpectout) 扣减预计出数量
countQty = countQty.add(balanceDO.getQty().subtract(countQtyExpectout));
balanceDOListJob.add(balanceDO);
// 数据列表循环累加 直到总和大于等于当前物品的qty {countQty >= balanceDO.getQty()}
if (countQty.compareTo(qty) != -1) {
break;
}
}
return balanceDOListJob;
}
}

Loading…
Cancel
Save