现场运行调整

This commit is contained in:
Lenovo
2026-09-21 08:42:34 +08:00
parent 7d1092e748
commit 074fc081cf
13 changed files with 136 additions and 40 deletions

View File

@@ -153,6 +153,7 @@ public class ApiErpService implements IApiErpService {
.build() .build()
); );
log.info("【ERP入库单明细】{}", JSONUtil.toJsonStr(detail));
} }
return AjaxResult.success("操作成功,下发erp入库单据号:" + docNo); return AjaxResult.success("操作成功,下发erp入库单据号:" + docNo);
@@ -243,6 +244,7 @@ public class ApiErpService implements IApiErpService {
.build() .build()
); );
log.info("【ERP出库单明细】{}", JSONUtil.toJsonStr(detail));
} }
return AjaxResult.success("操作成功,下发erp出库单据号:" + docNo); return AjaxResult.success("操作成功,下发erp出库单据号:" + docNo);

View File

@@ -481,27 +481,27 @@ public class MydoJobServiceImpl implements IMydoJobService
//--------------------处理库存信息-------------------- //--------------------处理库存信息--------------------
//移除指定辊号的库存信息 //移除指定辊号的库存信息
for (MydoJobDetail detail : details){ // for (MydoJobDetail detail : details){
//
//移除指定辊号的库存明细 // //移除指定辊号的库存明细
basStockService.deleteBasStockByRollerNumber(detail.getRollerNumber()); // basStockService.deleteBasStockByRollerNumber(detail.getRollerNumber());
//如果条码没有库存明细,则移除主表信息 // //如果条码没有库存明细,则移除主表信息
if (basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()).size() == 0){ // if (basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()).size() == 0){
basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode()); // basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode());
} // }
//
//更新出库子单物料实际出库数量 // //更新出库子单物料实际出库数量
OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(detail.getRollerNumber()); // OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(detail.getRollerNumber());
//
if (ObjUtil.isNotNull(outStockoutDetail)){ // if (ObjUtil.isNotNull(outStockoutDetail)){
outStockoutDetail.setAssignNum(detail.getOutQuantity()); // outStockoutDetail.setAssignNum(detail.getOutQuantity());
outStockoutDetail.setStatus(1); // outStockoutDetail.setStatus(1);
outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail); // outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail);
//
log.info("【账务处理】移除库存信息,更新单据出库分配数量,作业号:{},库存编号:{},辊号:{}", jobId, detail.getStockinDetailId(), detail.getRollerNumber()); // log.info("【账务处理】移除库存信息,更新单据出库分配数量,作业号:{},库存编号:{},辊号:{}", jobId, detail.getStockinDetailId(), detail.getRollerNumber());
} // }
//
} // }
//--------------------更新货位状态-------------------- //--------------------更新货位状态--------------------
BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId()); BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId());
@@ -704,7 +704,7 @@ public class MydoJobServiceImpl implements IMydoJobService
//3.移除当前托盘的绑定信息 //3.移除当前托盘的绑定信息
inTrayMsgService.deleteInTrayMsgByTrayCode(mydoJob.getTrayCode()); inTrayMsgService.deleteInTrayMsgByTrayCode(mydoJob.getTrayCode());
log.info("【账务处理-载货容器出库】移除任务数据,生成历史记录,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode()); log.info("【账务处理-空托盘出库】移除任务数据,生成历史记录,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode());
return AjaxResult.success(); return AjaxResult.success();

View File

@@ -61,7 +61,7 @@ public class InStockinServiceImpl implements IInStockinService
* @return 入库单据主信息 * @return 入库单据主信息
*/ */
@Override @Override
@WarehouseScope // @WarehouseScope
public List<InStockin> selectInStockinList(InStockin inStockin) public List<InStockin> selectInStockinList(InStockin inStockin)
{ {
return inStockinMapper.selectInStockinList(inStockin); return inStockinMapper.selectInStockinList(inStockin);

View File

@@ -56,7 +56,7 @@ public class InStockinDetail extends BaseEntity
private BigDecimal assignNum; private BigDecimal assignNum;
/** 分配状态 0-未完成 1-入库完成等待回传 2-回传成功 */ /** 分配状态 0-未完成 1-入库完成等待回传 2-回传成功 */
private int status; private Integer status;
// /** 键槽规格 */ // /** 键槽规格 */
// String keyGrooveSpec; // String keyGrooveSpec;

View File

@@ -221,9 +221,9 @@ public class OutStockoutServiceImpl implements IOutStockoutService
List<OutStockoutDetail> details = outStockoutDetailService.selectOutStockoutDetailList( List<OutStockoutDetail> details = outStockoutDetailService.selectOutStockoutDetailList(
new OutStockoutDetail().builder().stockoutId(stockoutId).allotNum(BigDecimal.valueOf(0)).build() new OutStockoutDetail().builder().stockoutId(stockoutId).allotNum(BigDecimal.valueOf(0)).build()
); );
if (details.size() == 0){ if (details.isEmpty()){
log.warn("【出库单据分配】操作已中止,未找到该单据号的子单明细或者没有可分配的物料,单据号:{}", stockoutId); log.warn("【出库单据分配】分配失败,该单据号的子单明细没有可分配的物料,请检查单据状态,单据号:{}", stockoutId);
return AjaxResult.error("操作异常,未找到该单据号的子单明细或者没有可分配的物料"); return AjaxResult.error("操作异常,该单据号的子单明细没有可分配的物料,请检查单据状态");
} }
int num = 1; int num = 1;
@@ -350,7 +350,7 @@ public class OutStockoutServiceImpl implements IOutStockoutService
//生成托盘主作业 //生成托盘主作业
mydoJobService.insertMydoJob(mydoJob); mydoJobService.insertMydoJob(mydoJob);
num = 1;
log.info("【出库分配】生成出库作业,作业号:{},托盘号:{}", mydoJob.getJobId(), stock.getTrayCode()); log.info("【出库分配】生成出库作业,作业号:{},托盘号:{}", mydoJob.getJobId(), stock.getTrayCode());
// //
// //>>>>>>>>>>>>>>>>>>>>>> 推送出库 <<<<<<<<<<<<<<<<<<<<<<< // //>>>>>>>>>>>>>>>>>>>>>> 推送出库 <<<<<<<<<<<<<<<<<<<<<<<

View File

@@ -71,7 +71,7 @@ public class OutStockoutDetail extends BaseEntity
String color; String color;
/** 状态 0-未完成分配 1-出库完成等待回传 2-回传成功 */ /** 状态 0-未完成分配 1-出库完成等待回传 2-回传成功 */
private int status; private Integer status;
/** 版长 */ /** 版长 */
@Excel(name = "版长") @Excel(name = "版长")

View File

@@ -11,6 +11,14 @@ import com.ruoyi.out.stockoutdetail.domain.OutStockoutDetail;
*/ */
public interface IOutStockoutDetailService public interface IOutStockoutDetailService
{ {
/**
* 查询出库单据子信息
*
* @param stockoutId 出库单据主键
* @return 出库单据子信息
*/
public List<OutStockoutDetail> selectOutStockoutDetailByStockoutId(String stockoutId);
/** /**
* 查询出库单据子信息 * 查询出库单据子信息
* *

View File

@@ -21,6 +21,17 @@ public class OutStockoutDetailServiceImpl implements IOutStockoutDetailService
@Autowired @Autowired
private OutStockoutDetailMapper outStockoutDetailMapper; private OutStockoutDetailMapper outStockoutDetailMapper;
/**
* 根据出库单据id查询出库单据子信息列表
* @param stockoutId
* @return
*/
@Override
public List<OutStockoutDetail> selectOutStockoutDetailByStockoutId(String stockoutId)
{
return outStockoutDetailMapper.selectOutStockoutDetailListByStockoutId(stockoutId);
}
/** /**
* 查询出库单据子信息 * 查询出库单据子信息
* *

View File

@@ -624,6 +624,11 @@ public class PdaServiceImpl implements IPdaService {
String rollerNumber = (String) params.get("barcode"); String rollerNumber = (String) params.get("barcode");
BigDecimal quantity = Convert.toBigDecimal(params.get("outQuantity")); BigDecimal quantity = Convert.toBigDecimal(params.get("outQuantity"));
if (DecimalUtil.eq(quantity, BigDecimal.ZERO)){
log.warn("【操作失败】未选择出库数量,无法执行出库确认操作,辊号:{}", rollerNumber);
return AjaxResult.error("未选择出库数量,无法执行出库确认操作");
}
MydoJobDetail detail = mydoJobDetailService.selectMydoJobDetailByRollerNumber(rollerNumber); MydoJobDetail detail = mydoJobDetailService.selectMydoJobDetailByRollerNumber(rollerNumber);
if (ObjUtil.isNull(detail)){ if (ObjUtil.isNull(detail)){
log.warn("【操作失败】找不到当前版辊的出库明细,无法执行出库确认操作,请检查任务明细状态,辊号:{}", rollerNumber); log.warn("【操作失败】找不到当前版辊的出库明细,无法执行出库确认操作,请检查任务明细状态,辊号:{}", rollerNumber);
@@ -690,6 +695,10 @@ public class PdaServiceImpl implements IPdaService {
//移除库存信息 //移除库存信息
basStockService.deleteBasStockByRollerNumber(rollerNumber); basStockService.deleteBasStockByRollerNumber(rollerNumber);
//如果条码没有库存明细,则移除主表信息
if (basStockService.selectBasStockListByTrayCode(job.getTrayCode()).isEmpty()){
basStockInfoService.deleteBasStockInfoByTrayCode(job.getTrayCode());
}
log.info("【出库确认】移除版辊库存信息,辊号:{}", rollerNumber); log.info("【出库确认】移除版辊库存信息,辊号:{}", rollerNumber);
//更新分配数量、实际数量、明细状态 //更新分配数量、实际数量、明细状态
@@ -938,6 +947,9 @@ public class PdaServiceImpl implements IPdaService {
//移除库存信息 //移除库存信息
basStockService.deleteBasStockByRollerNumber(rollerNumber); basStockService.deleteBasStockByRollerNumber(rollerNumber);
if (basStockService.selectBasStockListByTrayCode(job.getTrayCode()).isEmpty()){
basStockInfoService.deleteBasStockInfoByTrayCode(job.getTrayCode());
}
log.info("【出库确认】移除版辊库存信息,辊号:{}", rollerNumber); log.info("【出库确认】移除版辊库存信息,辊号:{}", rollerNumber);
//更新分配数量、实际数量、明细状态 //更新分配数量、实际数量、明细状态

View File

@@ -1,6 +1,7 @@
package com.ruoyi.scheduleTask; package com.ruoyi.scheduleTask;
import com.ruoyi.common.StockStatusEnum; import com.ruoyi.common.StockStatusEnum;
import com.ruoyi.common.Utils.DecimalUtil;
import com.ruoyi.in.stockin.domain.InStockin; import com.ruoyi.in.stockin.domain.InStockin;
import com.ruoyi.in.stockin.service.IInStockinService; import com.ruoyi.in.stockin.service.IInStockinService;
import com.ruoyi.in.stockindetail.domain.InStockinDetail; 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.stockout.service.IOutStockoutService;
import com.ruoyi.out.stockoutdetail.domain.OutStockoutDetail; import com.ruoyi.out.stockoutdetail.domain.OutStockoutDetail;
import com.ruoyi.out.stockoutdetail.service.IOutStockoutDetailService; import com.ruoyi.out.stockoutdetail.service.IOutStockoutDetailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
@Slf4j
@Component @Component
public class StockHandler { public class StockHandler {
@@ -53,6 +57,33 @@ public class StockHandler {
} }
/** 自动结束已完成入库单 */
@Scheduled(fixedDelay = 300000)
public void inStockinAutoComplete(){
List<InStockin> stockinList = inStockinService.selectInStockinList(
new InStockin().builder().status(StockStatusEnum.RUNNING.getCode()).build()
);
if(stockinList.isEmpty()) return;
for(InStockin stockin : stockinList){
List<InStockinDetail> 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) // @Scheduled(fixedDelay = 3000)
public void outStockoutCallBack(){ public void outStockoutCallBack(){
@@ -81,4 +112,30 @@ public class StockHandler {
} }
/** 自动结束已完成出库单 */
@Scheduled(fixedDelay = 300000)
public void outStockoutAutoComplete(){
List<OutStockout> stockoutList = outStockoutService.selectOutStockoutList(
new OutStockout().builder().status(StockStatusEnum.RUNNING.getCode()).build()
);
if(stockoutList.isEmpty()) return;
for(OutStockout stockout : stockoutList){
List<OutStockoutDetail> 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());
}
}
}
} }

View File

@@ -34,6 +34,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectOutStockoutDetailVo"/> <include refid="selectOutStockoutDetailVo"/>
<where> <where>
<if test="stockoutId != null and stockoutId != ''"> and stockout_id = #{stockoutId}</if> <if test="stockoutId != null and stockoutId != ''"> and stockout_id = #{stockoutId}</if>
<if test="stockoutDetailId != null and stockoutDetailId != ''"> and stockout_detail_id = #{stockoutDetailId}</if>
<if test="lotNo != null and lotNo != ''"> and lot_no = #{lotNo}</if> <if test="lotNo != null and lotNo != ''"> and lot_no = #{lotNo}</if>
<if test="productId != null and productId != ''"> and product_id = #{productId}</if> <if test="productId != null and productId != ''"> and product_id = #{productId}</if>
<if test="productName != null and productName != ''"> and product_name like concat('%', #{productName}, '%')</if> <if test="productName != null and productName != ''"> and product_name like concat('%', #{productName}, '%')</if>
@@ -62,7 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectOutStockoutDetailListByStockoutId" parameterType="String" resultMap="OutStockoutDetailResult"> <select id="selectOutStockoutDetailListByStockoutId" parameterType="String" resultMap="OutStockoutDetailResult">
<include refid="selectOutStockoutDetailVo"/> <include refid="selectOutStockoutDetailVo"/>
where stockout_id = #{stockoutDetailId} where stockout_id = #{stockoutId}
</select> </select>
<select id="outboundTaskList" resultMap="OutStockoutDetailResult"> <select id="outboundTaskList" resultMap="OutStockoutDetailResult">

View File

@@ -223,8 +223,8 @@
> >
<el-table-column label="子单ID" align="center" prop="stockinDetailId" width="180"/> <el-table-column label="子单ID" align="center" prop="stockinDetailId" width="180"/>
<el-table-column label="批次" align="center" prop="lotNo" width="150"/> <el-table-column label="批次" align="center" prop="lotNo" width="150"/>
<el-table-column label="物料编码" align="center" prop="productId" width="150"/> <!-- <el-table-column label="物料编码" align="center" prop="productId" width="150"/> -->
<el-table-column label="物料名称" align="center" prop="productName" min-width="150" show-overflow-tooltip/> <el-table-column label="物料名称" align="center" prop="productName" min-width="200" show-overflow-tooltip/>
<el-table-column label="版辊编号" align="center" prop="rollerNumber"/> <el-table-column label="版辊编号" align="center" prop="rollerNumber"/>
<el-table-column label="版长" align="center" prop="length"/> <el-table-column label="版长" align="center" prop="length"/>
<el-table-column label="版周" align="center" prop="perimeter"/> <el-table-column label="版周" align="center" prop="perimeter"/>

View File

@@ -157,7 +157,7 @@
:disabled="single" :disabled="single"
@click="handleAutoAssign" @click="handleAutoAssign"
v-hasPermi="['out:stockout:autoAssign']" v-hasPermi="['out:stockout:autoAssign']"
>自动分配 >单据分配
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
@@ -169,7 +169,7 @@
:disabled="detailSingle" :disabled="detailSingle"
@click="openAssignDialog" @click="openAssignDialog"
v-hasPermi="['out:stockout:manualAssign']" v-hasPermi="['out:stockout:manualAssign']"
>手动分配 >指定明细分配
</el-button> </el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -249,13 +249,18 @@
<el-table-column label="子单ID" align="center" prop="stockoutDetailId" width="180"/> <el-table-column label="子单ID" align="center" prop="stockoutDetailId" width="180"/>
<el-table-column label="批次" align="center" prop="lotNo" width="150"/> <el-table-column label="批次" align="center" prop="lotNo" width="150"/>
<el-table-column label="辊号" align="center" prop="rollerNumber" width="150"/> <el-table-column label="辊号" align="center" prop="rollerNumber" width="150"/>
<el-table-column label="版长" align="center" prop="length" width="150"/> <el-table-column label="版长" align="center" prop="length" width="100"/>
<el-table-column label="版周" align="center" prop="perimeter" width="150"/> <el-table-column label="版周" align="center" prop="perimeter" width="100"/>
<el-table-column label="物料编码" align="center" prop="productId" width="150"/> <!-- <el-table-column label="物料编码" align="center" prop="productId" width="150"/> -->
<el-table-column label="物料名称" align="center" prop="productName" min-width="150" show-overflow-tooltip/> <el-table-column label="物料名称" align="center" prop="productName" min-width="200" show-overflow-tooltip/>
<el-table-column label="计划数量" align="center" prop="quantity" width="100"/> <el-table-column label="计划数量" align="center" prop="quantity" width="100"/>
<el-table-column label="分配数量" align="center" prop="allotNum" width="100"/> <el-table-column label="分配数量" align="center" prop="allotNum" width="100"/>
<el-table-column label="实际数量" align="center" prop="assignNum" width="100"/> <el-table-column label="实际数量" align="center" prop="assignNum" width="100"/>
<el-table-column label="状态" align="center" prop="status" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.stock_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" min-width="120" show-overflow-tooltip/> <el-table-column label="备注" align="center" prop="remark" min-width="120" show-overflow-tooltip/>
<template slot="empty"> <template slot="empty">
<div style="padding: 30px 0; color: #909399; font-size: 13px;"> <div style="padding: 30px 0; color: #909399; font-size: 13px;">
@@ -324,7 +329,7 @@ import { listStock } from "@/api/bas/stock"
export default { export default {
name: "Stockout", name: "Stockout",
dicts: ['out_stockout_stock_source', 'out_stockout_status', 'out_stockout_out_type'], dicts: ['out_stockout_stock_source', 'out_stockout_status', 'out_stockout_out_type', 'stock_status'],
data() { data() {
return { return {
loading: true, loading: true,