From 074fc081cf362ac6e0367403854b99669cb93ecf Mon Sep 17 00:00:00 2001 From: Lenovo Date: Mon, 21 Sep 2026 08:42:34 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=B0=E5=9C=BA=E8=BF=90=E8=A1=8C=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/api/service/impl/ApiErpService.java | 2 + .../job/service/impl/MydoJobServiceImpl.java | 44 +++++++------- .../service/impl/InStockinServiceImpl.java | 2 +- .../stockindetail/domain/InStockinDetail.java | 2 +- .../service/impl/OutStockoutServiceImpl.java | 8 +-- .../domain/OutStockoutDetail.java | 2 +- .../service/IOutStockoutDetailService.java | 8 +++ .../impl/OutStockoutDetailServiceImpl.java | 13 ++++- .../pda/service/impl/PdaServiceImpl.java | 12 ++++ .../com/ruoyi/scheduleTask/StockHandler.java | 57 +++++++++++++++++++ .../mapper/out/OutStockoutDetailMapper.xml | 3 +- ruoyi-ui/src/views/in/stockin/index.vue | 4 +- ruoyi-ui/src/views/out/stockout/index.vue | 19 ++++--- 13 files changed, 136 insertions(+), 40 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiErpService.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiErpService.java index 7f24539..901ba05 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiErpService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiErpService.java @@ -153,6 +153,7 @@ public class ApiErpService implements IApiErpService { .build() ); + log.info("【ERP入库单明细】{}", JSONUtil.toJsonStr(detail)); } return AjaxResult.success("操作成功,下发erp入库单据号:" + docNo); @@ -243,6 +244,7 @@ public class ApiErpService implements IApiErpService { .build() ); + log.info("【ERP出库单明细】{}", JSONUtil.toJsonStr(detail)); } return AjaxResult.success("操作成功,下发erp出库单据号:" + docNo); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java index 404c3de..a8428f4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java @@ -481,27 +481,27 @@ public class MydoJobServiceImpl implements IMydoJobService //--------------------处理库存信息-------------------- //移除指定辊号的库存信息 - for (MydoJobDetail detail : details){ - - //移除指定辊号的库存明细 - basStockService.deleteBasStockByRollerNumber(detail.getRollerNumber()); - //如果条码没有库存明细,则移除主表信息 - if (basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()).size() == 0){ - basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode()); - } - - //更新出库子单物料实际出库数量 - OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(detail.getRollerNumber()); - - if (ObjUtil.isNotNull(outStockoutDetail)){ - outStockoutDetail.setAssignNum(detail.getOutQuantity()); - outStockoutDetail.setStatus(1); - outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail); - - log.info("【账务处理】移除库存信息,更新单据出库分配数量,作业号:{},库存编号:{},辊号:{}", jobId, detail.getStockinDetailId(), detail.getRollerNumber()); - } - - } +// for (MydoJobDetail detail : details){ +// +// //移除指定辊号的库存明细 +// basStockService.deleteBasStockByRollerNumber(detail.getRollerNumber()); +// //如果条码没有库存明细,则移除主表信息 +// if (basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()).size() == 0){ +// basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode()); +// } +// +// //更新出库子单物料实际出库数量 +// OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(detail.getRollerNumber()); +// +// if (ObjUtil.isNotNull(outStockoutDetail)){ +// outStockoutDetail.setAssignNum(detail.getOutQuantity()); +// outStockoutDetail.setStatus(1); +// outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail); +// +// log.info("【账务处理】移除库存信息,更新单据出库分配数量,作业号:{},库存编号:{},辊号:{}", jobId, detail.getStockinDetailId(), detail.getRollerNumber()); +// } +// +// } //--------------------更新货位状态-------------------- BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId()); @@ -704,7 +704,7 @@ public class MydoJobServiceImpl implements IMydoJobService //3.移除当前托盘的绑定信息 inTrayMsgService.deleteInTrayMsgByTrayCode(mydoJob.getTrayCode()); - log.info("【账务处理-载货容器出库】移除任务数据,生成历史记录,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode()); + log.info("【账务处理-空托盘出库】移除任务数据,生成历史记录,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode()); return AjaxResult.success(); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/service/impl/InStockinServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/service/impl/InStockinServiceImpl.java index 7db136c..a05c9bd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/service/impl/InStockinServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/service/impl/InStockinServiceImpl.java @@ -61,7 +61,7 @@ public class InStockinServiceImpl implements IInStockinService * @return 入库单据主信息 */ @Override - @WarehouseScope +// @WarehouseScope public List selectInStockinList(InStockin inStockin) { return inStockinMapper.selectInStockinList(inStockin); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/domain/InStockinDetail.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/domain/InStockinDetail.java index ae39710..856e2e1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/domain/InStockinDetail.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/domain/InStockinDetail.java @@ -56,7 +56,7 @@ public class InStockinDetail extends BaseEntity private BigDecimal assignNum; /** 分配状态 0-未完成 1-入库完成等待回传 2-回传成功 */ - private int status; + private Integer status; // /** 键槽规格 */ // String keyGrooveSpec; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/out/stockout/service/impl/OutStockoutServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/out/stockout/service/impl/OutStockoutServiceImpl.java index 6dcf7a3..3b42557 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/out/stockout/service/impl/OutStockoutServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/out/stockout/service/impl/OutStockoutServiceImpl.java @@ -221,9 +221,9 @@ public class OutStockoutServiceImpl implements IOutStockoutService List details = outStockoutDetailService.selectOutStockoutDetailList( new OutStockoutDetail().builder().stockoutId(stockoutId).allotNum(BigDecimal.valueOf(0)).build() ); - if (details.size() == 0){ - log.warn("【出库单据分配】操作已中止,未找到该单据号的子单明细或者没有可分配的物料,单据号:{}", stockoutId); - return AjaxResult.error("操作异常,未找到该单据号的子单明细或者没有可分配的物料"); + if (details.isEmpty()){ + log.warn("【出库单据分配】分配失败,该单据号的子单明细没有可分配的物料,请检查单据状态,单据号:{}", stockoutId); + return AjaxResult.error("操作异常,该单据号的子单明细没有可分配的物料,请检查单据状态"); } int num = 1; @@ -350,7 +350,7 @@ public class OutStockoutServiceImpl implements IOutStockoutService //生成托盘主作业 mydoJobService.insertMydoJob(mydoJob); - + num = 1; log.info("【出库分配】生成出库作业,作业号:{},托盘号:{}", mydoJob.getJobId(), stock.getTrayCode()); // // //>>>>>>>>>>>>>>>>>>>>>> 推送出库 <<<<<<<<<<<<<<<<<<<<<<< diff --git a/ruoyi-admin/src/main/java/com/ruoyi/out/stockoutdetail/domain/OutStockoutDetail.java b/ruoyi-admin/src/main/java/com/ruoyi/out/stockoutdetail/domain/OutStockoutDetail.java index 4894ebd..5ed9b23 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/out/stockoutdetail/domain/OutStockoutDetail.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/out/stockoutdetail/domain/OutStockoutDetail.java @@ -71,7 +71,7 @@ public class OutStockoutDetail extends BaseEntity String color; /** 状态 0-未完成分配 1-出库完成等待回传 2-回传成功 */ - private int status; + private Integer status; /** 版长 */ @Excel(name = "版长") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/out/stockoutdetail/service/IOutStockoutDetailService.java b/ruoyi-admin/src/main/java/com/ruoyi/out/stockoutdetail/service/IOutStockoutDetailService.java index 493b6b4..af78398 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/out/stockoutdetail/service/IOutStockoutDetailService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/out/stockoutdetail/service/IOutStockoutDetailService.java @@ -14,6 +14,14 @@ public interface IOutStockoutDetailService /** * 查询出库单据子信息 * + * @param stockoutId 出库单据主键 + * @return 出库单据子信息 + */ + public List selectOutStockoutDetailByStockoutId(String stockoutId); + + /** + * 查询出库单据子信息 + * * @param stockoutDetailId 出库单据子信息主键 * @return 出库单据子信息 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/out/stockoutdetail/service/impl/OutStockoutDetailServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/out/stockoutdetail/service/impl/OutStockoutDetailServiceImpl.java index efc5aaa..bb01252 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/out/stockoutdetail/service/impl/OutStockoutDetailServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/out/stockoutdetail/service/impl/OutStockoutDetailServiceImpl.java @@ -21,9 +21,20 @@ public class OutStockoutDetailServiceImpl implements IOutStockoutDetailService @Autowired private OutStockoutDetailMapper outStockoutDetailMapper; + /** + * 根据出库单据id查询出库单据子信息列表 + * @param stockoutId + * @return + */ + @Override + public List selectOutStockoutDetailByStockoutId(String stockoutId) + { + return outStockoutDetailMapper.selectOutStockoutDetailListByStockoutId(stockoutId); + } + /** * 查询出库单据子信息 - * + * * @param stockoutDetailId 出库单据子信息主键 * @return 出库单据子信息 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java index 8b06a90..d23d0e9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java @@ -624,6 +624,11 @@ public class PdaServiceImpl implements IPdaService { String rollerNumber = (String) params.get("barcode"); BigDecimal quantity = Convert.toBigDecimal(params.get("outQuantity")); + if (DecimalUtil.eq(quantity, BigDecimal.ZERO)){ + log.warn("【操作失败】未选择出库数量,无法执行出库确认操作,辊号:{}", rollerNumber); + return AjaxResult.error("未选择出库数量,无法执行出库确认操作"); + } + MydoJobDetail detail = mydoJobDetailService.selectMydoJobDetailByRollerNumber(rollerNumber); if (ObjUtil.isNull(detail)){ log.warn("【操作失败】找不到当前版辊的出库明细,无法执行出库确认操作,请检查任务明细状态,辊号:{}", rollerNumber); @@ -690,6 +695,10 @@ public class PdaServiceImpl implements IPdaService { //移除库存信息 basStockService.deleteBasStockByRollerNumber(rollerNumber); + //如果条码没有库存明细,则移除主表信息 + if (basStockService.selectBasStockListByTrayCode(job.getTrayCode()).isEmpty()){ + basStockInfoService.deleteBasStockInfoByTrayCode(job.getTrayCode()); + } log.info("【出库确认】移除版辊库存信息,辊号:{}", rollerNumber); //更新分配数量、实际数量、明细状态 @@ -938,6 +947,9 @@ public class PdaServiceImpl implements IPdaService { //移除库存信息 basStockService.deleteBasStockByRollerNumber(rollerNumber); + if (basStockService.selectBasStockListByTrayCode(job.getTrayCode()).isEmpty()){ + basStockInfoService.deleteBasStockInfoByTrayCode(job.getTrayCode()); + } log.info("【出库确认】移除版辊库存信息,辊号:{}", rollerNumber); //更新分配数量、实际数量、明细状态 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/StockHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/StockHandler.java index cfb8edd..9024723 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/StockHandler.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/StockHandler.java @@ -1,6 +1,7 @@ package com.ruoyi.scheduleTask; import com.ruoyi.common.StockStatusEnum; +import com.ruoyi.common.Utils.DecimalUtil; import com.ruoyi.in.stockin.domain.InStockin; import com.ruoyi.in.stockin.service.IInStockinService; import com.ruoyi.in.stockindetail.domain.InStockinDetail; @@ -9,12 +10,15 @@ import com.ruoyi.out.stockout.domain.OutStockout; import com.ruoyi.out.stockout.service.IOutStockoutService; import com.ruoyi.out.stockoutdetail.domain.OutStockoutDetail; import com.ruoyi.out.stockoutdetail.service.IOutStockoutDetailService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.math.BigDecimal; import java.util.List; +@Slf4j @Component public class StockHandler { @@ -53,6 +57,33 @@ public class StockHandler { } + /** 自动结束已完成入库单 */ + @Scheduled(fixedDelay = 300000) + public void inStockinAutoComplete(){ + List stockinList = inStockinService.selectInStockinList( + new InStockin().builder().status(StockStatusEnum.RUNNING.getCode()).build() + ); + + if(stockinList.isEmpty()) return; + + for(InStockin stockin : stockinList){ + + List details = inStockinDetailService.selectInStockinDetailByStockinId(stockin.getStockinId()); + + if(details.isEmpty()) continue; + + //所有明细全部执行完成 - 自动完成单据 + if (!details.stream().anyMatch(s -> s.getStatus() == 0)){ + //自动完成单据 + inStockinService.finishStockin(stockin.getStockinId()); + log.info("【完成单据】入库单据已经自动完成,单据号:{}", stockin.getStockinId()); + } + + } + + } + + /** 出库单据版辊信息上报 */ // @Scheduled(fixedDelay = 3000) public void outStockoutCallBack(){ @@ -81,4 +112,30 @@ public class StockHandler { } + /** 自动结束已完成出库单 */ + @Scheduled(fixedDelay = 300000) + public void outStockoutAutoComplete(){ + List stockoutList = outStockoutService.selectOutStockoutList( + new OutStockout().builder().status(StockStatusEnum.RUNNING.getCode()).build() + ); + + if(stockoutList.isEmpty()) return; + + for(OutStockout stockout : stockoutList){ + + List details = outStockoutDetailService.selectOutStockoutDetailByStockoutId(stockout.getStockoutId()); + + if(details.isEmpty()) continue; + + //所有明细全部执行完成 - 自动完成单据 + if (!details.stream().anyMatch(s -> s.getStatus() == 0)){ + //自动完成单据 + outStockoutService.finishOutStockout(stockout.getStockoutId()); + log.info("【完成单据】出库单据已经自动完成,单据号:{}", stockout.getStockoutId()); + } + + } + + } + } diff --git a/ruoyi-admin/src/main/resources/mapper/out/OutStockoutDetailMapper.xml b/ruoyi-admin/src/main/resources/mapper/out/OutStockoutDetailMapper.xml index 760f4be..0e21d0c 100644 --- a/ruoyi-admin/src/main/resources/mapper/out/OutStockoutDetailMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/out/OutStockoutDetailMapper.xml @@ -34,6 +34,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and stockout_id = #{stockoutId} + and stockout_detail_id = #{stockoutDetailId} and lot_no = #{lotNo} and product_id = #{productId} and product_name like concat('%', #{productName}, '%') @@ -62,7 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"