From 51c8764a3446dd7a606e6afa7998d3783261db87 Mon Sep 17 00:00:00 2001 From: lsymicc Date: Wed, 10 Dec 2025 09:20:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E6=8D=AE=E5=AD=97=E6=AE=B5=E8=B0=83?= =?UTF-8?q?=E6=95=B4=EF=BC=8C=E5=AD=90=E5=8D=95=E8=B4=A7=E4=BD=8D=E5=88=86?= =?UTF-8?q?=E9=85=8D=EF=BC=8C=E5=AE=9A=E6=97=B6=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller/ToErpApiController.java | 3 +- .../com/ruoyi/api/service/IToErpService.java | 4 +- .../api/service/impl/ToErpServiceImpl.java | 299 +++++++++++++----- .../mapper/BasCargoSpaceMapper.java | 9 +- .../service/IBasCargoSpaceService.java | 8 + .../impl/BasCargoSpaceServiceImpl.java | 15 +- .../controller/ErpInStockinController.java | 4 +- .../in/ErpInStockin/domain/ErpInStockin.java | 4 +- .../mapper/ErpInStockinMapper.java | 26 +- .../service/IErpInStockinService.java | 26 +- .../service/impl/ErpInStockinServiceImpl.java | 38 ++- .../domain/ErpInStockinDetail.java | 10 +- .../mapper/InStockinDetailMapper.java | 9 + .../service/IInStockinDetailService.java | 8 + .../impl/InStockinDetailServiceImpl.java | 12 + .../kpi/service/impl/KpiServiceImpl.java | 1 - .../stock/stock/mapper/BasStockMapper.java | 9 + .../stock/stock/service/IBasStockService.java | 9 + .../service/impl/BasStockServiceImpl.java | 9 + .../bas/cargoSpace/BasCargoSpaceMapper.xml | 30 ++ .../mapper/in/ErpInStockinMapper.xml | 25 +- .../mapper/in/InStockinDetailMapper.xml | 5 + .../resources/mapper/stock/BasStockMapper.xml | 5 + 23 files changed, 450 insertions(+), 118 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/controller/ToErpApiController.java b/ruoyi-admin/src/main/java/com/ruoyi/api/controller/ToErpApiController.java index 0d23bd6..1bee8b9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/controller/ToErpApiController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/controller/ToErpApiController.java @@ -59,7 +59,6 @@ public class ToErpApiController { @PostMapping("/qqq") public AjaxResult qqq() { - ErpStockinParam p=new ErpStockinParam(); - return toErpService.getErpStockinList(p); + return toErpService.getErpStockinList(); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/IToErpService.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/IToErpService.java index 3f5135f..9d13137 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/IToErpService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/IToErpService.java @@ -34,9 +34,11 @@ public interface IToErpService { AjaxResult receiveOutStockList(); - AjaxResult getErpStockinList(ErpStockinParam erpStockinParam); + AjaxResult getErpStockinList(); void AddStockinByErpStockin(ErpInStockin erpInStockin); void AddStockinDetailByErpStockinDetail(ErpInStockinDetail erpInStockinetail); + + String getCargoSpaceByProductInfo(String productId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java index 690e456..2bc0e98 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java @@ -2,10 +2,11 @@ package com.ruoyi.api.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.http.HttpRequest; -import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; @@ -18,6 +19,8 @@ import com.ruoyi.bas.BasProduct.domain.BasProduct; import com.ruoyi.bas.BasProduct.service.IBasProductService; import com.ruoyi.bas.BasSupplier.domain.BasSupplier; import com.ruoyi.bas.BasSupplier.service.IBasSupplierService; +import com.ruoyi.bas.cargoSpace.domain.BasCargoSpace; +import com.ruoyi.bas.cargoSpace.service.IBasCargoSpaceService; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.in.ErpInStockin.domain.ErpInStockin; @@ -28,6 +31,8 @@ import com.ruoyi.in.stockin.domain.InStockin; import com.ruoyi.in.stockin.service.IInStockinService; import com.ruoyi.in.stockindetail.domain.InStockinDetail; import com.ruoyi.in.stockindetail.service.IInStockinDetailService; +import com.ruoyi.log.domain.RequestLog; +import com.ruoyi.log.service.IRequestLogService; import com.ruoyi.out.ErpOutStock.domain.ErpOutStock; import com.ruoyi.out.OutStockMiddle.domain.OutStockMiddle; import com.ruoyi.out.ErpOutStockDetail.domain.ErpOutStockDetail; @@ -39,15 +44,18 @@ import com.ruoyi.out.OutStockMiddle.service.IOutStockMiddleService; import com.ruoyi.bas.basJobId.service.IBasJobIdService; import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail; import com.ruoyi.out.outStockoutDetail.service.IOutStockoutDetailService; +import com.ruoyi.stock.stock.domain.BasStock; +import com.ruoyi.stock.stock.service.IBasStockService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.text.SimpleDateFormat; -import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * 作业统计 Service 实现 @@ -93,6 +101,18 @@ public class ToErpServiceImpl implements IToErpService { @Autowired private IInStockinDetailService inStockinDetailService; + //货位 + @Autowired + private IBasCargoSpaceService basCargoSpaceService; + + //库存 + @Autowired + private IBasStockService basStockService; + + //日志 + @Autowired + private IRequestLogService requestLogService; + @Autowired private IBasJobIdService basJobIdService; @@ -431,79 +451,92 @@ public class ToErpServiceImpl implements IToErpService { } + //入库单据执行计数(用于区分是否首次执行获取单据请求) + int num = 0; + /** - * 请求入库单列表 - * - * @param erpStockinParam + * 入库单据 -> 请求入库单列表 * @return */ - public AjaxResult getErpStockinList(ErpStockinParam erpStockinParam){ + @Scheduled(fixedDelay = 60_000) + public AjaxResult getErpStockinList(){ - erpStockinParam = new ErpStockinParam(); + ErpStockinParam erpStockinParam = new ErpStockinParam(); + + // 首次执行(num=0)时,同步所有单据数据 + // 后续执行(num>0)仅同步指定时间内的单据数据 + if (num > 0){ + //当前时间 + DateTime dateNow = DateUtil.date(); + String dateStart = dateNow.offset(DateField.SECOND, -60).toString(); + String dateEnd = DateUtil.date().toString(); + //todo 请求筛选时间似乎时分秒条件无效,只能筛选年月日条件 + //todo 请求筛选时间似乎时分秒条件无效,只能筛选年月日条件 +// erpStockinParam.setDate3Start(dateStart);//请求筛选:开始时间 +// erpStockinParam.setDate3End(dateEnd);//请求筛选:结束时间 + } //测试 erpStockinParam.setTitle(""); // erpStockinParam.setNeedList(0); - //获取请求参数 - String requestSession = login(); - String response = HttpRequest.post(getStockinListUrl) - .header(TOKEN_KEY,requestSession) - .body(JSONUtil.toJsonStr(erpStockinParam)) - .execute() - .body(); - - //处理响应信息 try { + log.info(">>>>>>>>>>>>>>>>>>>> 开始更新入库单据 >>>>>>>>>>>>>>>>>>>>"); + //------获取请求响应 + String response = getResponse(getStockinListUrl, erpStockinParam, "更新入库单据"); + + //------处理响应信息 ErpStockinResponse res = JSONUtil.toBean(response, ErpStockinResponse.class); for (List list : res.getRows()) { - //获取入库主单参数 + + //【入库id】校验单据是否存在 + String kuin = Convert.toStr(list.get(1)); ErpInStockin erpInStockin = new ErpInStockin(); - erpInStockin.setTitle(Convert.toStr(list.get(0))); - erpInStockin.setKuin(Convert.toStr(list.get(1))); - erpInStockin.setComplete1(Convert.toStr(list.get(2))); - erpInStockin.setCateid(Convert.toStr(list.get(3))); - erpInStockin.setDate3(Convert.toStr(list.get(4))); - erpInStockin.setDate5(Convert.toStr(list.get(5))); - erpInStockin.setCatein(Convert.toStr(list.get(6))); - erpInStockin.setIntro2(Convert.toStr(list.get(7))); - erpInStockin.setIntro(Convert.toStr(list.get(8))); - erpInStockin.setCaigou(Convert.toStr(list.get(9))); - erpInStockin.setDate7(Convert.toStr(list.get(10))); - erpInStockin.setKg(Convert.toStr(list.get(11))); - erpInStockin.setSort1(Convert.toStr(list.get(12))); - erpInStockin.setRkbh(Convert.toStr(list.get(13))); - erpInStockin.setStatus(Convert.toStr(list.get(14))); - //todo 入库单明细长度? - erpInStockin.setKuinList(Convert.toStr(list.get(15))); - erpInStockin.setSysIcusIInheritIdIidI413(Convert.toStr(list.get(16))); - erpInStockin.setSysIcusIInheritIdIidI414(Convert.toStr(list.get(17))); - erpInStockin.setSysIcusIInheritIdIidI415(Convert.toStr(list.get(18))); - String id = "RK" + DateUtil.date().toString("yyyyMMdd") + erpInStockin.getKuin(); - erpInStockin.setStockinGuid(id); + //获取入库主单参数 + erpInStockin.setTitle(Convert.toStr(list.get(0)));//主题 + erpInStockin.setKuin(kuin);//入库id + erpInStockin.setComplete1(Convert.toStr(list.get(2)));//入库状态 + erpInStockin.setCateid(Convert.toStr(list.get(3)));//申请人 + erpInStockin.setDate3(Convert.toStr(list.get(4)));//申请日期 + erpInStockin.setDate5(Convert.toStr(list.get(5)));//确认日期 + erpInStockin.setCatein(Convert.toStr(list.get(6)));//审批人 + erpInStockin.setIntro2(Convert.toStr(list.get(7)));//审批意见 + erpInStockin.setIntro(Convert.toStr(list.get(8)));//备注 + erpInStockin.setCaigou(Convert.toStr(list.get(9)));//其他采购单据 + erpInStockin.setDate7(Convert.toStr(list.get(10)));//erp添加时间 + erpInStockin.setKg(Convert.toStr(list.get(11)));//库管 + erpInStockin.setSort1(Convert.toStr(list.get(12)));//入库类别 + erpInStockin.setRkbh(Convert.toStr(list.get(13)));//入库编号 + erpInStockin.setStatus(Convert.toStr(list.get(14)));//审批状态 + erpInStockin.setKuinList(Convert.toStr(list.get(15)));//主单明细 + erpInStockin.setSysIcusIInheritIdIidI413(Convert.toStr(list.get(16)));//客户名称 + erpInStockin.setSysIcusIInheritIdIidI414(Convert.toStr(list.get(17)));// + erpInStockin.setSysIcusIInheritIdIidI415(Convert.toStr(list.get(18)));//车号 + String id = erpInStockin.getRkbh() + "_" + erpInStockin.getKuin(); + erpInStockin.setStockinGuid(id);//guid - //校验单据是否已经在表中 - 新增/更新 - if (ObjUtil.isNotNull(erpInStockinService.selectErpInStockinByKuin(erpInStockin.getKuin()))) { + //------校验单据是否已经在表中 - 新增/更新 + if (ObjUtil.isNotNull(erpInStockinService.selectErpInStockinByKuin(kuin))) { erpInStockinService.updateErpInStockin(erpInStockin); }else{ erpInStockinService.insertErpInStockin(erpInStockin); } - //更新wms主单 + //------更新wms主单 AddStockinByErpStockin(erpInStockin); //======================================================================================================================================== - //根据主单【kuinlist】字段获取子单信息 + //------根据主单【kuinlist】字段获取子单信息 if (erpStockinParam.getNeedList() == 1) { - //获取子单明细 + //------获取子单明细 JSONObject jsonObject = JSONUtil.parseObj(erpInStockin.getKuinList()); jsonObject.get("rows"); ErpStockinDetailResponse resDetail = JSONUtil.toBean(erpInStockin.getKuinList(), ErpStockinDetailResponse.class); - //生成子单信息 + //------生成子单信息 for (List details : resDetail.getRows()){ //获取入库子单数据 ErpInStockinDetail erpInStockinDetail = new ErpInStockinDetail(); @@ -511,7 +544,6 @@ public class ToErpServiceImpl implements IToErpService { erpInStockinDetail.setQuantity(Convert.toLong(details.get(9)));//入库数量 erpInStockinDetail.setAssistUnit(Convert.toLong(details.get(5)));//辅助单位 erpInStockinDetail.setAssistQuantity(Convert.toLong(details.get(9)));//辅助数量 - erpInStockinDetail.setWarehousePositionID(0L);//货位 erpInStockinDetail.setKu(0L);//库区 erpInStockinDetail.setPh(Convert.toStr(details.get(17)));//批号 erpInStockinDetail.setXlh(Convert.toStr(details.get(18)));//序列号 @@ -522,19 +554,23 @@ public class ToErpServiceImpl implements IToErpService { erpInStockinDetail.setSpare1(Convert.toStr(details.get(1)));//产品名称 - product_name erpInStockinDetail.setSpare2(Convert.toStr(details.get(2)));//产品型号 - product_id + //自动分配货位区域 + String cargoSpace = getCargoSpaceByProductInfo(Convert.toStr(details.get(2))); + erpInStockinDetail.setWarehousePositionID(cargoSpace);//货位 + //关联主单 erpInStockinDetail.setKuin(erpInStockin.getKuin());//入库id erpInStockinDetail.setRkbh(erpInStockin.getRkbh());//入库编号 erpInStockinDetail.setSpare3(erpInStockin.getStockinGuid());//入库单guid - //校验数据是否已经在表中 - 新增/更新 + //------校验数据是否已经在表中 - 新增/更新 if (ObjUtil.isNotNull(erpInStockinDetailService.selectErpInStockinDetailById(erpInStockinDetail.getId()))) { erpInStockinDetailService.updateErpInStockinDetail(erpInStockinDetail); }else{ erpInStockinDetailService.insertErpInStockinDetail(erpInStockinDetail); } - //更新wms子单 + //------更新wms子单 AddStockinDetailByErpStockinDetail(erpInStockinDetail); } }else { @@ -543,33 +579,72 @@ public class ToErpServiceImpl implements IToErpService { } }catch(Exception e){ - log.error("请求异常:" + e.getMessage()); + log.error("获取/同步单据异常:" + e.getMessage()); return AjaxResult.error(); } + log.info("<<<<<<<<<<<<<<<<<<<< 更新入库单据完成 <<<<<<<<<<<<<<<<<<<<"); + num++; return AjaxResult.success(); } + /** - * 根据erp入库单更新wms入库主单 + * 生成入库单据 -> 获取请求响应 + * @param url 请求地址 + * @param param 请求参数 + * @param remark + * @return 响应信息 + */ + public String getResponse(String url, Object param, String remark){ + try { + //------获取请求响应 + String requestSession = login(); + String response = HttpRequest.post(url) + .header(TOKEN_KEY,requestSession) + .body(JSONUtil.toJsonStr(param)) + .execute() + .body(); + + //生成请求记录 + RequestLog requestLog = new RequestLog(); + requestLog.setRequestTime(DateUtil.now()); + requestLog.setSourceSystem("wms"); + requestLog.setTargetSystem("erp"); + requestLog.setEndpoint(remark); + requestLog.setRequestUrl(url); + requestLog.setRequestMethod("POST"); + requestLog.setRequestBody(JSONUtil.toJsonStr(param)); + requestLog.setIsSuccessful(""); + requestLogService.insertRequestLog(requestLog); + + return response; + } catch (Exception e) { + log.error("请求异常:" + e.getMessage()); + } + return null; + } + + /** + * 生成入库单据 -> 根据erp入库单更新wms入库主单 * @param erpInStockin erp入库主单 */ public void AddStockinByErpStockin(ErpInStockin erpInStockin) { InStockin inStockin = new InStockin(); - - inStockin.setStockinGuid(erpInStockin.getStockinGuid());//guid - inStockin.setStockinId(erpInStockin.getKuin());//入库单据id - inStockin.setStatus(erpInStockin.getComplete1());//入库状态(区别erpInStockin.getStatus() - 审批状态) - inStockin.setCreateDate(DateUtil.now());//生成时间 - inStockin.setErpBill(erpInStockin.getRkbh());//入库编号 RK_2025082107 - inStockin.setInType(erpInStockin.getSort1());//入库类别 - inStockin.setWarehouseId("0");//库区 - inStockin.setStockSource("Erp");//单据来源 - inStockin.setCustomerNo(erpInStockin.getSysIcusIInheritIdIidI413());//客户编码 - inStockin.setRemark(erpInStockin.getIntro());//入库备注 - try { + inStockin.setStockinGuid(erpInStockin.getStockinGuid());//guid + inStockin.setStockinId(erpInStockin.getKuin());//入库单据id + inStockin.setStatus(erpInStockin.getComplete1());//入库状态(区别erpInStockin.getStatus() - 审批状态) + inStockin.setCreateDate(DateUtil.now());//生成时间 + inStockin.setErpBill(erpInStockin.getRkbh());//入库编号 RK_2025082107 + inStockin.setInType(erpInStockin.getSort1());//入库类别 + inStockin.setWarehouseId("0");//库区 + inStockin.setStockSource("Erp");//单据来源 + inStockin.setCustomerNo(erpInStockin.getSysIcusIInheritIdIidI413());//客户编码 + inStockin.setRemark(erpInStockin.getIntro());//入库备注 + + //更新/新增wms入库单据 if (ObjUtil.isNotNull(inStockinService.selectInStockinByStockinGuid(erpInStockin.getStockinGuid()))) { inStockinService.updateInStockin(inStockin); }else{ @@ -578,29 +653,31 @@ public class ToErpServiceImpl implements IToErpService { }catch(Exception e){ log.error("生成/更新主单据失败,主单据号:" + inStockin.getStockinId() + ",异常信息:" + e.getMessage()); } + } /** - * 根据erp入库子单更新wms入库子单明细 + * 生成入库单据 -> 根据erp入库子单更新wms入库子单明细 * @param erpInStockinetail */ public void AddStockinDetailByErpStockinDetail(ErpInStockinDetail erpInStockinetail) { InStockinDetail inStockinDetail = new InStockinDetail(); - - inStockinDetail.setStockinDetailId(erpInStockinetail.getId().toString());//明细id - inStockinDetail.setStockinGuid(erpInStockinetail.getSpare3());//入库主单guid - inStockinDetail.setStockinId(erpInStockinetail.getKuin());//主单id - inStockinDetail.setLotNo(erpInStockinetail.getPh());//批次 - inStockinDetail.setProductId(erpInStockinetail.getSpare2());//物料编号 - inStockinDetail.setAssignNum(erpInStockinetail.getQuantity().toString());//入库数量 - inStockinDetail.setWarehouseId("0");//库区 - inStockinDetail.setPrintDate(DateUtil.now());//库区 - inStockinDetail.setStatus("");//单据状态 - inStockinDetail.setRemark("");//入库备注 - try { - if (ObjUtil.isNotNull(inStockinDetailService.selectInStockinDetailByStockinDetailId(inStockinDetail.getStockinGuid()))) { + //向wms入库单据表同步erp主单信息 + inStockinDetail.setStockinDetailId(erpInStockinetail.getId().toString());//明细id + inStockinDetail.setStockinGuid(erpInStockinetail.getSpare3());//入库主单guid + inStockinDetail.setStockinId(erpInStockinetail.getKuin());//主单id + inStockinDetail.setLotNo(erpInStockinetail.getPh());//批次 + inStockinDetail.setProductId(erpInStockinetail.getSpare2());//物料编号 + inStockinDetail.setAssignNum(erpInStockinetail.getQuantity().toString());//入库数量 + inStockinDetail.setWarehouseId("0");//库区 + inStockinDetail.setPrintDate(DateUtil.now());//库区 + inStockinDetail.setStatus("");//单据状态 + inStockinDetail.setRemark("");//入库备注 + + //更新/新增wms入库明细 + if (ObjUtil.isNotNull(inStockinDetailService.selectInStockinDetailByStockinGuid(inStockinDetail.getStockinGuid()))) { inStockinDetailService.updateInStockinDetail(inStockinDetail); }else{ inStockinDetailService.insertInStockinDetail(inStockinDetail); @@ -608,6 +685,76 @@ public class ToErpServiceImpl implements IToErpService { }catch(Exception e){ log.error("生成/更新单据明细失败,主单据号:" + inStockinDetail.getStockinId() + ",异常信息:" + e.getMessage()); } + + } + + /** + * 生成入库单据 -> 向子单明细分配入库货位 + * 获取库存物料号 -> 货位id -> 存储区组group -> 状态:未占用 -> 按规则获取货位 + * @param productId 物料号 + * @return + */ + public String getCargoSpaceByProductInfo(String productId){ + +//>>>>>>>>>>>>>>获取物料库存信息 -> 有库存 -> 货位(cargospace) -> 存储区组(groupCodingNo) -> 根据groupCoding(由高到低) -> 获取状态1的货位分配 +//>>>>>>>>>>>>>>获取物料库存信息 -> 无库存 -> 遍历存储区组(groupCodingNo) -> 查找全部货位空的区组 -> 根据groupCoding(由高到低) -> 获取状态1的货位分配 + + try { + //获取物料的货位集合 - 首先查找已经存放该物料的存储区 + List stocks = basStockService.selectBasStockListByProductId(productId); + + //如果集合空 - 寻找未被占用的存储区组放货 + if (stocks.size() == 0) { + for (int i = 1; i <= 45; i++) { + BasCargoSpace cargospace = new BasCargoSpace(); + + //存储区 + String groupCodingNo = String.format("%03d", i); + cargospace.setGroupCodingNo(groupCodingNo); + + //获取【groupCodingNo】所有货位 + List cargoSpaces = basCargoSpaceService.selectBasCargoSpaceList(cargospace); + + //判断是否全部未占用,即某存储区全部为空位 - 避免物料混放 + boolean isAllEmpty = cargoSpaces.stream().allMatch(c -> "1".equals(c.getStatus())); + + //区域未占用 - 则分配最内侧货位 + if (isAllEmpty && cargoSpaces.size() > 0) { + cargoSpaces.sort(Comparator.comparing(BasCargoSpace::getGroupCoding).reversed()); + return cargoSpaces.get(0).getCargoSpaceId(); + } + } + + } + + //如果物料已经存放在多个货位(区域) - 去重 + List stocksNew = stocks.stream().distinct().collect(Collectors.toList()); + + //查询对应货位的区域在【BasCargoSpace】是否有空位 - 在groupCodingNo的分组中是否仍然有状态【1】的货位 + for (BasStock stock : stocksNew){ + //获取每种物料的存放货位信息 + BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(stock.getCargoSpaceId()); + + //获取每种物料的存放货位信息 - 存储区 + String group = cargoSpace.getGroupCodingNo(); + + //获取该存储区组的所有货位 + List cargoSpaces = basCargoSpaceService.selectBasCargoSpaceListByGroupCodingNo(group); + + //在集合中获取状态为【1】的货位 + for (BasCargoSpace cs : cargoSpaces){ + //货位状态:1(未占用) -> 返回该货位结果 + if ("1".equals(cs.getStatus())){ + return cs.getCargoSpaceId(); + } + } + + } + }catch(Exception e){ + log.error("入库子单获取目标货位失败,异常信息:" + e.getMessage()); + } + + return null; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/mapper/BasCargoSpaceMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/mapper/BasCargoSpaceMapper.java index 8358230..3f94ef1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/mapper/BasCargoSpaceMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/mapper/BasCargoSpaceMapper.java @@ -2,7 +2,6 @@ package com.ruoyi.bas.cargoSpace.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.bas.cargoSpace.domain.BasCargoSpace; -import com.ruoyi.bas.warehouse.domain.BasWarehouse; import java.util.List; import java.util.Map; @@ -31,6 +30,14 @@ public interface BasCargoSpaceMapper extends BaseMapper */ public List selectBasCargoSpaceList(BasCargoSpace basCargoSpace); + /** + * 根据【存储区组】查询库存信息列表 + * + * @param groupCodingNo 存储区组 + * @return 库存信息集合 + */ + public List selectBasCargoSpaceListByGroupCodingNo(String groupCodingNo); + /** * 新增库存信息 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/service/IBasCargoSpaceService.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/service/IBasCargoSpaceService.java index 42c6ead..c8c33f1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/service/IBasCargoSpaceService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/service/IBasCargoSpaceService.java @@ -30,6 +30,14 @@ public interface IBasCargoSpaceService extends IService */ public List selectBasCargoSpaceList(BasCargoSpace basCargoSpace); + /** + * 根据【存储区域组】查询库存信息列表 + * + * @param groupCodingNo 库存区组 + * @return 库存信息集合 + */ + public List selectBasCargoSpaceListByGroupCodingNo(String groupCodingNo); + /** * 新增库存信息 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/service/impl/BasCargoSpaceServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/service/impl/BasCargoSpaceServiceImpl.java index 65ff0bd..e9a5b7e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/service/impl/BasCargoSpaceServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/service/impl/BasCargoSpaceServiceImpl.java @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.bas.cargoSpace.domain.BasCargoSpace; import com.ruoyi.bas.cargoSpace.mapper.BasCargoSpaceMapper; import com.ruoyi.bas.cargoSpace.service.IBasCargoSpaceService; -import com.ruoyi.bas.warehouse.domain.BasWarehouse; import com.ruoyi.common.annotation.DataScope; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -42,12 +41,24 @@ public class BasCargoSpaceServiceImpl extends ServiceImpl selectBasCargoSpaceList(BasCargoSpace basCargoSpace) { return basCargoSpaceMapper.selectBasCargoSpaceList(basCargoSpace); } + /** + * 根据【存储区组】查询库存信息列表 + * + * @param groupCodingNo 存储区组 + * @return 库存信息 + */ + @Override + public List selectBasCargoSpaceListByGroupCodingNo(String groupCodingNo){ + return basCargoSpaceMapper.selectBasCargoSpaceListByGroupCodingNo(groupCodingNo); + } + + /** * 新增库存信息 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/controller/ErpInStockinController.java b/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/controller/ErpInStockinController.java index 0eb8819..12789f2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/controller/ErpInStockinController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/controller/ErpInStockinController.java @@ -66,7 +66,7 @@ public class ErpInStockinController extends BaseController @GetMapping(value = "/{title}") public AjaxResult getInfo(@PathVariable("title") String title) { - return success(erpInStockinService.selectErpInStockinByKuin(title)); + return success(erpInStockinService.selectErpInStockinByStockinGuid(title)); } /** @@ -99,6 +99,6 @@ public class ErpInStockinController extends BaseController @DeleteMapping("/{titles}") public AjaxResult remove(@PathVariable String[] kuins) { - return toAjax(erpInStockinService.deleteErpInStockinByKuins(kuins)); + return toAjax(erpInStockinService.deleteErpInStockinByStockinGuids(kuins)); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/domain/ErpInStockin.java b/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/domain/ErpInStockin.java index 95d27ef..04ab5a6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/domain/ErpInStockin.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/domain/ErpInStockin.java @@ -74,7 +74,9 @@ public class ErpInStockin extends BaseEntity @Excel(name = "入库编号") private String rkbh; - /** 审批状态 */ + /** + * 审批状态 - 请求【确认入库】时需要 + */ @Excel(name = "审批状态") private String status; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/mapper/ErpInStockinMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/mapper/ErpInStockinMapper.java index dc827b8..cbafe86 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/mapper/ErpInStockinMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/mapper/ErpInStockinMapper.java @@ -14,11 +14,27 @@ public interface ErpInStockinMapper /** * 查询入库主表单 * - * @param kuin 入库主表单主键 + * @param stockinGuid 入库主表单主键 + * @return 入库主表单 + */ + public ErpInStockin selectErpInStockinByStockinGuid(String stockinGuid); + + /** + * 查询入库主表单 + * + * @param kuin 入库id * @return 入库主表单 */ public ErpInStockin selectErpInStockinByKuin(String kuin); + /** + * 查询入库主表单 + * + * @param rkbh 入库编号 + * @return 入库主表单 + */ + public ErpInStockin selectErpInStockinByRkbh(String rkbh); + /** * 查询入库主表单列表 * @@ -54,16 +70,16 @@ public interface ErpInStockinMapper /** * 删除入库主表单 * - * @param kuin 入库主表单主键 + * @param stockinGuid 入库主表单主键 * @return 结果 */ - public int deleteErpInStockinByKuin(String kuin); + public int deleteErpInStockinByStockinGuid(String stockinGuid); /** * 批量删除入库主表单 * - * @param kuins 需要删除的数据主键集合 + * @param stockinGuids 需要删除的数据主键集合 * @return 结果 */ - public int deleteErpInStockinByKuins(String[] kuins); + public int deleteErpInStockinByStockinGuids(String[] stockinGuids); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/service/IErpInStockinService.java b/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/service/IErpInStockinService.java index 862ce4f..0e4d1d0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/service/IErpInStockinService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/service/IErpInStockinService.java @@ -14,11 +14,27 @@ public interface IErpInStockinService /** * 查询入库主表单 * - * @param kuin 入库主表单主键 + * @param stockinGuid 入库主表单主键 + * @return 入库主表单 + */ + public ErpInStockin selectErpInStockinByStockinGuid(String stockinGuid); + + /** + * 查询入库主表单 + * + * @param kuin 入库id * @return 入库主表单 */ public ErpInStockin selectErpInStockinByKuin(String kuin); + /** + * 查询入库主表单 + * + * @param rkbh 入库编号 + * @return 入库主表单 + */ + public ErpInStockin selectErpInStockinByRkbh(String rkbh); + /** * 查询入库主表单列表 * @@ -54,16 +70,16 @@ public interface IErpInStockinService /** * 批量删除入库主表单 * - * @param kuins 需要删除的入库主表单主键集合 + * @param stockinGuids 需要删除的入库主表单主键集合 * @return 结果 */ - public int deleteErpInStockinByKuins(String[] kuins); + public int deleteErpInStockinByStockinGuids(String[] stockinGuids); /** * 删除入库主表单信息 * - * @param kuin 入库主表单主键 + * @param stockinGuid 入库主表单主键 * @return 结果 */ - public int deleteErpInStockinByKuin(String kuin); + public int deleteErpInStockinByStockinGuid(String stockinGuid); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/service/impl/ErpInStockinServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/service/impl/ErpInStockinServiceImpl.java index 0221ccf..229c24a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/service/impl/ErpInStockinServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockin/service/impl/ErpInStockinServiceImpl.java @@ -22,13 +22,33 @@ public class ErpInStockinServiceImpl implements IErpInStockinService /** * 查询入库主表单 * - * @param stockinId 入库主表单主键 + * @param stockinGuid 入库主表单主键 * @return 入库主表单 */ @Override - public ErpInStockin selectErpInStockinByKuin(String stockinId) + public ErpInStockin selectErpInStockinByStockinGuid(String stockinGuid) { - return erpInStockinMapper.selectErpInStockinByKuin(stockinId); + return erpInStockinMapper.selectErpInStockinByStockinGuid(stockinGuid); + } + + /** + * 查询入库主表单 + * + * @param kuin 入库id + * @return 入库主表单 + */ + public ErpInStockin selectErpInStockinByKuin(String kuin){ + return erpInStockinMapper.selectErpInStockinByKuin(kuin); + } + + /** + * 查询入库主表单 + * + * @param rkbh 入库编号 + * @return 入库主表单 + */ + public ErpInStockin selectErpInStockinByRkbh(String rkbh){ + return erpInStockinMapper.selectErpInStockinByRkbh(rkbh); } /** @@ -81,24 +101,24 @@ public class ErpInStockinServiceImpl implements IErpInStockinService /** * 批量删除入库主表单 * - * @param stockinIds 需要删除的入库主表单主键 + * @param stockinGuids 需要删除的入库主表单主键 * @return 结果 */ @Override - public int deleteErpInStockinByKuins(String[] kuins) + public int deleteErpInStockinByStockinGuids(String[] stockinGuids) { - return erpInStockinMapper.deleteErpInStockinByKuins(kuins); + return erpInStockinMapper.deleteErpInStockinByStockinGuids(stockinGuids); } /** * 删除入库主表单信息 * - * @param stockinId 入库主表单主键 + * @param stockinGuid 入库主表单主键 * @return 结果 */ @Override - public int deleteErpInStockinByKuin(String kuin) + public int deleteErpInStockinByStockinGuid(String stockinGuid) { - return erpInStockinMapper.deleteErpInStockinByKuin(kuin); + return erpInStockinMapper.deleteErpInStockinByStockinGuid(stockinGuid); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockinDetail/domain/ErpInStockinDetail.java b/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockinDetail/domain/ErpInStockinDetail.java index 1b1b8ba..574e308 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockinDetail/domain/ErpInStockinDetail.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/ErpInStockinDetail/domain/ErpInStockinDetail.java @@ -39,7 +39,7 @@ public class ErpInStockinDetail extends BaseEntity /** 库位id */ @Excel(name = "库位id") - private Long warehousePositionID; + private String warehousePositionID; /** 批号 */ @Excel(name = "批号") @@ -66,11 +66,11 @@ public class ErpInStockinDetail extends BaseEntity private String sysIcusIInheritIdIidI1; /** 入库单id(关联主单) */ - @Excel(name = "入库单id", readConverterExp = "关=联主单") + @Excel(name = "入库单id", readConverterExp = "关联主单") private String kuin; /** 入库编号(关联主单) */ - @Excel(name = "入库编号", readConverterExp = "关=联主单") + @Excel(name = "入库编号", readConverterExp = "关联主单") private String rkbh; /** @@ -140,12 +140,12 @@ public class ErpInStockinDetail extends BaseEntity return ku; } - public void setWarehousePositionID(Long warehousePositionID) + public void setWarehousePositionID(String warehousePositionID) { this.warehousePositionID = warehousePositionID; } - public Long getWarehousePositionID() + public String getWarehousePositionID() { return warehousePositionID; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/mapper/InStockinDetailMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/mapper/InStockinDetailMapper.java index 421ffce..58dfb3b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/mapper/InStockinDetailMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/mapper/InStockinDetailMapper.java @@ -22,6 +22,15 @@ public interface InStockinDetailMapper */ public InStockinDetail selectInStockinDetailByStockinDetailId(String stockinDetailId); + /** + * 查询入库单据子表 + * + * @param stockinGuid + * @return 入库单据子表 + */ + public InStockinDetail selectInStockinDetailByStockinGuid(String stockinGuid); + + /** * 查询入库单据子表列表 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/IInStockinDetailService.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/IInStockinDetailService.java index b08fac1..af1dfcd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/IInStockinDetailService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/IInStockinDetailService.java @@ -23,6 +23,14 @@ public interface IInStockinDetailService */ public InStockinDetail selectInStockinDetailByStockinDetailId(String stockinDetailId); + /** + * 查询入库单据子表 + * + * @param stockinGuid 入库单据子表主键 + * @return 入库单据子表 + */ + public InStockinDetail selectInStockinDetailByStockinGuid(String stockinGuid); + /** * 查询入库单据子表列表 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/impl/InStockinDetailServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/impl/InStockinDetailServiceImpl.java index 0d06891..64f0dd9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/impl/InStockinDetailServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/impl/InStockinDetailServiceImpl.java @@ -40,6 +40,18 @@ public class InStockinDetailServiceImpl implements IInStockinDetailService return inStockinDetailMapper.selectInStockinDetailByStockinDetailId(stockinDetailId); } + /** + * 查询入库单据子表 + * + * @param stockinGuid + * @return 入库单据子表 + */ + @Override + public InStockinDetail selectInStockinDetailByStockinGuid(String stockinGuid) + { + return inStockinDetailMapper.selectInStockinDetailByStockinGuid(stockinGuid); + } + /** * 查询入库单据子表列表 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/kpi/service/impl/KpiServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/kpi/service/impl/KpiServiceImpl.java index ddebc44..abc2864 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/kpi/service/impl/KpiServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/kpi/service/impl/KpiServiceImpl.java @@ -17,7 +17,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; -import java.util.stream.Collectors; /** * KPI 统计分析 服务实现类 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/mapper/BasStockMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/mapper/BasStockMapper.java index 8e243c0..8e7989f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/mapper/BasStockMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/mapper/BasStockMapper.java @@ -21,6 +21,15 @@ public interface BasStockMapper */ public BasStock selectBasStockByStockId(String stockId); + /** + * 根据【物料号】查询库存信息列表 + * + * @param productId 物料信息主键 + * @return 物料信息 + */ + public List selectBasStockListByProductId(String productId); + + /** * 查询库存信息列表 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/IBasStockService.java b/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/IBasStockService.java index c5f33e2..ab5407b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/IBasStockService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/IBasStockService.java @@ -21,6 +21,14 @@ public interface IBasStockService */ public BasStock selectBasStockByStockId(String stockId); + + /** + * 根据物料查询货位 + * @param productId + * @return 货位集合 + */ + public List selectBasStockListByProductId(String productId); + /** * 查询库存信息列表 * @@ -81,4 +89,5 @@ public interface IBasStockService List selectKtpStock(BasStock basStock); AjaxResult resetPdRecord(); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/impl/BasStockServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/impl/BasStockServiceImpl.java index 3effe05..9ce3a4a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/impl/BasStockServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/impl/BasStockServiceImpl.java @@ -49,6 +49,15 @@ public class BasStockServiceImpl implements IBasStockService return basStockMapper.selectBasStockByStockId(stockId); } + /** + * 根据【物料号】获取库存列表 + * @param productId - 物料号 + * @return + */ + public List selectBasStockListByProductId(String productId){ + return basStockMapper.selectBasStockListByProductId(productId); + } + /** * 查询库存信息列表 * diff --git a/ruoyi-admin/src/main/resources/mapper/bas/cargoSpace/BasCargoSpaceMapper.xml b/ruoyi-admin/src/main/resources/mapper/bas/cargoSpace/BasCargoSpaceMapper.xml index 2fe6427..e2e793d 100644 --- a/ruoyi-admin/src/main/resources/mapper/bas/cargoSpace/BasCargoSpaceMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/bas/cargoSpace/BasCargoSpaceMapper.xml @@ -83,6 +83,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by the_platoon,the_floor,the_column + + + + + + + insert into erp_in_stockin @@ -131,9 +141,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sysIcusIInheritIdIidI413 = #{sysIcusIInheritIdIidI413}, sysIcusIInheritIdIidI414 = #{sysIcusIInheritIdIidI414}, sysIcusIInheritIdIidI415 = #{sysIcusIInheritIdIidI415}, - stockin_guid = #{stockinGuid}, - where kuin = #{kuin} + where stockin_guid = #{stockinGuid} @@ -154,14 +163,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -- ON tar.stockin_id = src.stockin_id - - delete from erp_in_stockin where kuin = #{kuin} + + delete from erp_in_stockin where stockin_guid = #{stockinGuid} - - delete from erp_in_stockin where kuin in - - #{kuin} + + delete from erp_in_stockin where stockin_guid in + + #{stockinGuid} \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/in/InStockinDetailMapper.xml b/ruoyi-admin/src/main/resources/mapper/in/InStockinDetailMapper.xml index 57deda7..bc841ed 100644 --- a/ruoyi-admin/src/main/resources/mapper/in/InStockinDetailMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/in/InStockinDetailMapper.xml @@ -107,6 +107,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where stockin_detail_id = #{stockinDetailId} + + insert into in_stockin_detail diff --git a/ruoyi-admin/src/main/resources/mapper/stock/BasStockMapper.xml b/ruoyi-admin/src/main/resources/mapper/stock/BasStockMapper.xml index 1197211..65de21b 100644 --- a/ruoyi-admin/src/main/resources/mapper/stock/BasStockMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/stock/BasStockMapper.xml @@ -220,6 +220,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where stock_id = #{stockId} + + insert into bas_stock