账务处理业务区分优化

This commit is contained in:
Lenovo
2026-09-14 10:26:07 +08:00
parent 8ddae081cd
commit 0bd8d92bc0
8 changed files with 505 additions and 29 deletions

View File

@@ -62,9 +62,9 @@ public class MydoJobHandler {
/**
* 手动作废作业账务处理
* 账务处理 - 手动作废作业
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
// @Scheduled(fixedRate = TIMEINTERVAL_2000)
public void cancelMydoJobHandler(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
@@ -176,9 +176,200 @@ public class MydoJobHandler {
/**
* 手动完成作业账务处理
* 账务处理 - 手动作废作业 - 入库
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void cancelMydoJobHandler_in(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.CANCEL.getCode())
.build()
);
if (mydoJobs.isEmpty()) return;
for (MydoJob mydoJob : mydoJobs) {
//任务子表
List<MydoJobDetail> details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId());
if (!details.isEmpty()){
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动作废任务】移除任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
if (!stocks.isEmpty()){
for (BasStock stock : stocks){
stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId());
stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE);
basStockService.updateBasStock(stock);
}
}
//恢复货位状态
//入库
if (mydoJob.getInOrOut() < 20 && mydoJob.getInOrOut() != TaskType.TASKTYPE_PICK_STOCK_MOVE){
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE);
BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode());
if (ObjUtil.isNotNull(stockInfo)){
basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode());
}
for (MydoJobDetail mydoJobDetail : details){
//还原子单数量
InStockinDetail inStockinDetail = inStockinDetailService.selectInStockinDetailByRollerNumber(mydoJobDetail.getRollerNumber());
if (ObjUtil.isNotNull(inStockinDetail)){
inStockinDetail.setScanNum(BigDecimal.ZERO);
inStockinDetail.setAssignNum(BigDecimal.ZERO);
inStockinDetail.setStatus(0);
inStockinDetailService.updateInStockinDetail(inStockinDetail);
}
}
mydoJobService.insertMydoJobFinish(mydoJob.getJobId());
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
// apiWcsService.cancelWcsMydojob()
log.info("【账务处理-入库】任务作废,更新货位信息,作业号:{}", mydoJob.getJobId());
return;
}
}
}
/**
* 账务处理 - 手动作废作业 - 出库
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void cancelMydoJobHandler_out(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.CANCEL.getCode())
.build()
);
if (mydoJobs.isEmpty()) return;
for (MydoJob mydoJob : mydoJobs) {
//任务子表
List<MydoJobDetail> details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId());
if (!details.isEmpty()){
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动作废任务】移除任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
if (!stocks.isEmpty()){
for (BasStock stock : stocks){
stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId());
stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE);
basStockService.updateBasStock(stock);
}
}
//恢复货位状态
//出库
if (mydoJob.getInOrOut() >= 20){
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED);
BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode());
if (ObjUtil.isNotNull(stockInfo)){
stockInfo.setCargoSpaceId(mydoJob.getCargoSpaceId());
basStockInfoService.updateBasStockInfo(stockInfo);
}
for (MydoJobDetail mydoJobDetail : details){
//还原子单数量
OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(mydoJobDetail.getRollerNumber());
if(ObjUtil.isNotNull(outStockoutDetail)){
outStockoutDetail.setAllotNum(BigDecimal.ZERO);
outStockoutDetail.setAssignNum(BigDecimal.ZERO);
outStockoutDetail.setStatus(0);
outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail);
}
}
mydoJobService.insertMydoJobFinish(mydoJob.getJobId());
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
log.info("【账务处理-出库】任务作废,更新货位和库存信息,作业号:{}", mydoJob.getJobId());
}
}
}
/**
* 账务处理 - 手动作废作业 - 移库
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void cancelMydoJobHandler_move(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.CANCEL.getCode())
.inOrOut(TaskType.TASKTYPE_PICK_STOCK_MOVE)
.build()
);
if (mydoJobs.isEmpty()) return;
for (MydoJob mydoJob : mydoJobs) {
//任务子表
List<MydoJobDetail> details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId());
if (!details.isEmpty()){
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动作废任务】移除任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
if (!stocks.isEmpty()){
for (BasStock stock : stocks){
stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId());
stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE);
basStockService.updateBasStock(stock);
}
}
//恢复货位状态
//源位置
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED);
//目标位置
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getTargetCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE);
BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode());
if (ObjUtil.isNotNull(stockInfo)){
stockInfo.setCargoSpaceId(mydoJob.getCargoSpaceId());
basStockInfoService.updateBasStockInfo(stockInfo);
}
mydoJobService.insertMydoJobFinish(mydoJob.getJobId());
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
log.info(
"【账务处理-移库】任务作废,更新库存和货位信息,作业号:{},托盘号:{},源位置:{},目标位置:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId()
);
}
}
//====================================================================================================
//====================================================================================================
//====================================================================================================
/**
* 账务处理 - 手动完成作业
*/
// @Scheduled(fixedRate = TIMEINTERVAL_2000)
public void manualCompleteMydoJobHandler(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
@@ -317,6 +508,245 @@ public class MydoJobHandler {
}
/**
* 账务处理 - 手动完成作业 - 入库
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void manualCompleteMydoJobHandler_in(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.MANUAL_FINISHED.getCode())
.build()
);
if (mydoJobs.isEmpty()) return;
for (MydoJob mydoJob : mydoJobs) {
//任务子表
List<MydoJobDetail> details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId());
if (!details.isEmpty()){
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动完成任务】移除任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
if (!stocks.isEmpty()){
for (BasStock stock : stocks){
stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId());
stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE);
basStockService.updateBasStock(stock);
}
}
//恢复货位状态
//入库
if (mydoJob.getInOrOut() < 20){
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED);
//生成库存编号
String stockId = basJobIdService.getId(JobIdType.STOCK);
//插入库存主表
BasStockInfo info = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode());
if (ObjUtil.isNull(info)){
basStockInfoService.insertBasStockInfo(
new BasStockInfo().builder()
.stockId(stockId)
.cargoSpaceId(mydoJob.getCargoSpaceId())
.trayCode(mydoJob.getTrayCode())
.warehouseId(mydoJob.getWarehouseId())
.trayType(mydoJob.getTrayType())
.emptyStatus(details.size())//版辊数量
.build()
);
log.info("【账务处理-入库】新增库存主表信息,库存编号:{},货位:{},托盘号:{},入库数量:{}", stockId, mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), details.size());
}else{
info.setStockId(stockId);
info.setCargoSpaceId(mydoJob.getCargoSpaceId());
info.setEmptyStatus(details.size());
basStockInfoService.updateBasStockInfo(info);
log.info("【账务处理-入库】更新库存主表信息,库存编号:{},货位:{},托盘号:{},入库数量:{}", stockId, mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), details.size());
}
int num = 1;
//每条子任务生成一条库存信息
for (MydoJobDetail detail : details){
//物料数量固定为1,辊号唯一
//插入库存明细信息
BasStock stockInit = new BasStock().builder()
.stockId(stockId)
.stockDetailId(stockId + "-" + num)
.stockStatus(BasStockCode.STOCK_STATUS_AVAILABLE)
.jobId(mydoJob.getJobId())
.jobDetailId(mydoJob.getJobId() + "-" + num++)
.rollerNumber(detail.getRollerNumber())
.quantity(detail.getInQuantity())
.cargoSpaceId(mydoJob.getCargoSpaceId())
.productId(detail.getProductId())
.productName(detail.getProductName())
.inDate(DateUtil.date().now())
.build();
basStockService.insertBasStock(stockInit);
//更新子单数量
InStockinDetail inStockinDetail = inStockinDetailService.selectInStockinDetailByRollerNumber(detail.getRollerNumber());
if (ObjUtil.isNotNull(inStockinDetail)){
inStockinDetail.setScanNum(BigDecimal.ONE);
inStockinDetail.setAssignNum(BigDecimal.ONE);
inStockinDetail.setStatus(1);
inStockinDetailService.updateInStockinDetail(inStockinDetail);
stockInit.setStockinId(inStockinDetail.getStockinId());
stockInit.setStockDetailId(inStockinDetail.getStockinDetailId());
}
intrayMsgService.deleteInTrayMsgByRollerNumber(detail.getRollerNumber());
}
log.info("【账务处理-入库】任务完成,移除绑定信息,更新货位信息,作业号:{}", mydoJob.getJobId());
}
}
}
/**
* 账务处理 - 手动完成作业 - 出库
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void manualCompleteMydoJobHandler_out(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.MANUAL_FINISHED.getCode())
.build()
);
if (mydoJobs.isEmpty()) return;
for (MydoJob mydoJob : mydoJobs) {
//任务子表
List<MydoJobDetail> details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId());
if (!details.isEmpty()){
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动完成任务】移除任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
if (!stocks.isEmpty()){
for (BasStock stock : stocks){
stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId());
stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE);
basStockService.updateBasStock(stock);
}
}
//恢复货位状态
//整托出库
if (mydoJob.getInOrOut() >= TaskType.TASKTYPE_STOCKOUT ||
mydoJob.getInOrOut() == TaskType.TASKTYPE_STOCKOUT_EMPTY_TRAY ||
mydoJob.getInOrOut() == TaskType.TASKTYPE_STOCKOUT_MANUAL){
for (MydoJobDetail mydoJobDetail : details){
//还原子单数量
OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(mydoJobDetail.getRollerNumber());
if (ObjUtil.isNotNull(outStockoutDetail)){
outStockoutDetail.setAllotNum(BigDecimal.ONE);
outStockoutDetail.setAssignNum(BigDecimal.ONE);
outStockoutDetail.setStatus(1);
outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail);
}
}
basStockService.deleteBasStockByTrayCode(mydoJob.getTrayCode());
basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode());
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE);
log.info("【账务处理-整托出库】任务完成,移除托盘库存,更新货位和库存信息,作业号:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getTrayCode());
}else{
log.info("【账务处理-操作失败】当前任务类型<{}>不支持手动完成操作,作业号:{},托盘号:{}", mydoJob.getInOrOut(), mydoJob.getJobId(), mydoJob.getTrayCode());
}
}
}
/**
* 账务处理 - 手动完成作业 - 移库
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void manualCompleteMydoJobHandler_move(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.MANUAL_FINISHED.getCode())
.inOrOut(TaskType.TASKTYPE_PICK_STOCK_MOVE)
.build()
);
if (mydoJobs.isEmpty()) return;
for (MydoJob mydoJob : mydoJobs) {
//任务子表
List<MydoJobDetail> details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId());
if (!details.isEmpty()){
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动完成任务】移除任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
if (!stocks.isEmpty()){
for (BasStock stock : stocks){
stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId());
stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE);
basStockService.updateBasStock(stock);
}
}
//恢复货位状态
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE);
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getTargetCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED);
BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode());
if (ObjUtil.isNotNull(stockInfo)){
stockInfo.setCargoSpaceId(mydoJob.getTargetCargoSpaceId());
basStockInfoService.updateBasStockInfo(stockInfo);
}
log.info(
"【账务处理-移库】任务作废,更新库存和货位信息,作业号:{},托盘号:{},源位置:{},目标位置:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId()
);
}
}
//====================================================================================================
//====================================================================================================
//====================================================================================================
/**
* 账务处理 - 自动完成作业
*/
// @Scheduled(fixedRate = TIMEINTERVAL_2000)
public void autoCompleteMydoJobHandler(){
}
}