This commit is contained in:
15066119699 2025-03-09 12:02:22 +08:00
parent d8930d9559
commit 271c246bb3
4 changed files with 171 additions and 138 deletions

View File

@ -567,6 +567,9 @@ public class AppTaskController extends BaseController
if (appPmsOrderOutList.stream().map(AppPmsOrderOut::getGoodsId).distinct().count() != appPmsOrderOutList.size()) { if (appPmsOrderOutList.stream().map(AppPmsOrderOut::getGoodsId).distinct().count() != appPmsOrderOutList.size()) {
return error("出库单明细不能有重复物料编码"); return error("出库单明细不能有重复物料编码");
} }
if (appPmsOrderOutList.stream().map(AppPmsOrderOut::getListId).distinct().count() > 1) {
return error("手动出库紧支持单个出库单出库");
}
// //
logger.info("请求出库单明细:{}", appPmsOrderOutList); logger.info("请求出库单明细:{}", appPmsOrderOutList);
@ -590,6 +593,7 @@ public class AppTaskController extends BaseController
//根据物料ID查询库存按照先进先出的原则按上架时间倒叙查询 //根据物料ID查询库存按照先进先出的原则按上架时间倒叙查询
AppStock tMiStock = new AppStock(); AppStock tMiStock = new AppStock();
tMiStock.setGoodsId(appPmsOrderOut.getGoodsId()); tMiStock.setGoodsId(appPmsOrderOut.getGoodsId());
//确定在库中
List<AppStock> appStocks = appStockService.selectStockByGoodsId(tMiStock); List<AppStock> appStocks = appStockService.selectStockByGoodsId(tMiStock);
@ -912,6 +916,7 @@ public class AppTaskController extends BaseController
appTask.setOrderId(orderId); appTask.setOrderId(orderId);
//库存编号 //库存编号
appTask.setStockId(tMiStock1.getStockId()); appTask.setStockId(tMiStock1.getStockId());
appTask.setCreateTime(new Date());
appTaskService.insertAppTask(appTask); appTaskService.insertAppTask(appTask);
} }
@ -1185,15 +1190,29 @@ public class AppTaskController extends BaseController
} }
for(PickCompleteReq request : requests) { for(PickCompleteReq request : requests) {
// 更新捡货任务数量 // 更新捡货任务数量
AppTask updatePickNum = new AppTask(); //根据taskId查询该条任务
updatePickNum.setTaskId(request.getTaskId()); AppTask task = appTaskService.selectAppTaskByTaskId(request.getTaskId());
updatePickNum.setOpNum(request.getPickNum()); if(task.getOpNum().compareTo(request.getPickNum()) < 0){
updatePickNum.setTaskStatus(6); throw new RuntimeException("拣选数量不能大于出库数量");
updatePickNum.setOpUser(request.getPicker()); }
int updateAppTask = appTaskService.updateAppTask(updatePickNum); task.setOpNum(request.getPickNum());
if (updateAppTask == 0) { task.setTaskStatus(6);
task.setOpUser(request.getPicker());
appTaskService.updateAppTask(task);
//查询出库单 根据orderId和goodsId
AppPmsOrderOut appPmsOrderOut = new AppPmsOrderOut();
appPmsOrderOut.setGoodsId(task.getGoodsId());
appPmsOrderOut.setOrderId(task.getOrderId());
appPmsOrderOut.setOrderStatus(1);
List<AppPmsOrderOut> appPmsOrderOuts = appPmsOrderOutService.selectAppPmsOrderOutList(appPmsOrderOut);
if(CollectionUtils.isEmpty(appPmsOrderOuts)){
return error("数据服务异常,请重试"); return error("数据服务异常,请重试");
} }
AppPmsOrderOut appPmsOrderOut1 = appPmsOrderOuts.get(0);
appPmsOrderOut1.setTrNum(appPmsOrderOut1.getTrNum().add(request.getPickNum()));
appPmsOrderOut1.setShelvesNum(BigDecimal.ZERO);
appPmsOrderOut1.setOrderStatus(0);
appPmsOrderOutService.updateAppPmsOrderOut(appPmsOrderOut1);
} }
return success("捡货成功"); return success("捡货成功");
} }

View File

@ -7,13 +7,13 @@ import java.util.List;
*/ */
public class PmsOutFeedBack { public class PmsOutFeedBack {
private List<PmsOutFeedBackRecordList> recordList; private List<PmsOutFeedBackRecord> recordList;
public List<PmsOutFeedBackRecordList> getRecordList() { public List<PmsOutFeedBackRecord> getRecordList() {
return recordList; return recordList;
} }
public void setRecordList(List<PmsOutFeedBackRecordList> recordList) { public void setRecordList(List<PmsOutFeedBackRecord> recordList) {
this.recordList = recordList; this.recordList = recordList;
} }
} }

View File

@ -1,6 +1,6 @@
package com.ruoyi.quartz.domain.app; package com.ruoyi.quartz.domain.app;
public class PmsOutFeedBackRecordList { public class PmsOutFeedBackRecord {
private Integer amount; private Integer amount;

View File

@ -3,6 +3,7 @@ package com.ruoyi.quartz.task;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.ruoyi.app.domain.*; import com.ruoyi.app.domain.*;
import com.ruoyi.app.mapper.AppLocationMapper; import com.ruoyi.app.mapper.AppLocationMapper;
import com.ruoyi.app.mapper.AppPmsOrderOutMapper;
import com.ruoyi.quartz.domain.app.*; import com.ruoyi.quartz.domain.app.*;
import com.ruoyi.app.service.*; import com.ruoyi.app.service.*;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
@ -13,7 +14,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@ -51,6 +51,8 @@ public class TaskExecutor {
}}; }};
@Autowired @Autowired
private AppLocationMapper appLocationMapper; private AppLocationMapper appLocationMapper;
@Autowired
private AppPmsOrderOutMapper appPmsOrderOutMapper;
/** /**
* 解析wms任务 * 解析wms任务
@ -335,81 +337,76 @@ public class TaskExecutor {
if (appTasks == null || appTasks.isEmpty()) { if (appTasks == null || appTasks.isEmpty()) {
return; return;
} }
PmsOutFeedBack pmsOutFeedBack = new PmsOutFeedBack();
List<PmsOutFeedBackRecord> recordList = new ArrayList<>();
for (AppTask task : appTasks) { for (AppTask task : appTasks) {
if(task.getOpNum().compareTo(task.getStockNum()) >= 0) {
// 整出 //调用接口组装数据
AppStock appStock = new AppStock(); AppPmsOrderOut appPmsOrderOut = new AppPmsOrderOut();
appStock.setGoodsId(task.getGoodsId()); appPmsOrderOut.setOrderId(task.getOrderId());
appStock.setVehicleId(task.getVehicleId()); appPmsOrderOut.setGoodsId(task.getGoodsId());
List<AppStock> appStocks = appStockService.selectAppStockList(appStock); List<AppPmsOrderOut> appPmsOrderOuts = appPmsOrderOutMapper.selectAppPmsOrderOutList(appPmsOrderOut);
if(appStocks == null) { if (CollectionUtils.isEmpty(appPmsOrderOuts)) {
return; continue;
}
for (AppStock stock : appStocks) {
int deleteAppStockByStockId = appStockService.deleteAppStockByStockId(stock.getStockId());
logger.info("删除库存:{}", JSON.toJSONString(stock));
if(deleteAppStockByStockId > 0) {
AppTask updateRemark = new AppTask();
updateRemark.setTaskId(task.getTaskId());
updateRemark.setRemark("出库完成");
appTaskService.updateAppTask(updateRemark); // 更新备注信息
AppTaskBak appTaskBak = new AppTaskBak();
BeanUtils.copyProperties(task, appTaskBak);
logger.info("出库任务数据归档成功。{}", JSON.toJSONString(appTaskBak));
appTaskBakService.insertAppTaskBak(appTaskBak);// 数据归档
appTaskService.deleteAppTaskByTaskId(task.getTaskId()); // 删除旧数据
}
// 调用 pms 接口
PmsOutFeedBack pmsOutFeedBack = new PmsOutFeedBack();
PmsOutFeedBackRecordList recordListItem = new PmsOutFeedBackRecordList();
recordListItem.setAmount(task.getOpNum().intValue());
recordListItem.setBusinessOrder(task.getOrderId());
recordListItem.setMaterialsNo(task.getGoodsId());
List<PmsOutFeedBackRecordList> recordList = new ArrayList<>();
recordList.add(recordListItem);
pmsOutFeedBack.setRecordList(recordList);
String url = sysConfigService.selectConfigByKey("pms.outComplete");
if (StringUtils.isEmpty(url)) {
continue;
}
PmsCommonRes pmsCommonRes = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, JSON.toJSONString(pmsOutFeedBack)), PmsCommonRes.class);
logger.info("pms出库反馈请求信息{},结果:{}", JSON.toJSONString(pmsOutFeedBack), JSON.toJSONString(pmsCommonRes));
}
AppStock appStockCheck = new AppStock();
appStockCheck.setLocationId(task.getOrigin());
List<AppStock> appStockCheckData = appStockService.selectAppStockList(appStockCheck);
logger.info("剩余库存条目{}",appStockCheckData.size());
if(appStockCheckData == null) {
return;
}
if(appStockCheckData.isEmpty()) {
// 这个位置没有库存了直接释放货位
AppLocation location = new AppLocation();
location.setLocationId(task.getOrigin());
location.setLocationStatus(0);
appLocationMapper.updateLocationByLocationId(location);
}
} else {
// 如果小于的话就属于捡货任务
// 删除库存内的绑定的库位号释放库位
AppStock appStock = new AppStock();
appStock.setLocationId(task.getOrigin());
List<AppStock> appStocks = appStockService.selectAppStockList(appStock);
if (CollectionUtils.isEmpty(appStocks)) {
continue;
}
int updateNewLocation = appStockService.updateNewLocation(task.getOrigin(), "");
logger.info("捡选出库清除库存绑定的货位,数据:{},清除结果:{}", JSON.toJSONString(task), updateNewLocation);
AppLocation location = new AppLocation();
location.setLocationId(task.getOrigin());
location.setLocationStatus(0);
appLocationMapper.updateLocationByLocationId(location);
} }
return; AppPmsOrderOut appPmsOrderOut1 = appPmsOrderOuts.get(0);
PmsOutFeedBackRecord recordListItem = new PmsOutFeedBackRecord();
recordListItem.setAmount(task.getOpNum().intValue());
recordListItem.setBusinessOrder(appPmsOrderOut1.getListId());
recordListItem.setMaterialsNo(task.getGoodsId());
recordList.add(recordListItem);
}
pmsOutFeedBack.setRecordList(recordList);
String url = sysConfigService.selectConfigByKey("pms.outComplete");
if (StringUtils.isEmpty(url)) {
throw new RuntimeException("pms.outComplete配置为空");
}
PmsCommonRes pmsCommonRes = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, JSON.toJSONString(pmsOutFeedBack)), PmsCommonRes.class);
logger.info("pms出库反馈请求信息{},结果:{}", JSON.toJSONString(pmsOutFeedBack), JSON.toJSONString(pmsCommonRes));
// 归档旧数据
for (AppTask task : appTasks) {
BigDecimal opNum = task.getOpNum();
AppTaskBak appTaskBak = new AppTaskBak();
BeanUtils.copyProperties(task, appTaskBak);
appTaskBakService.insertAppTaskBak(appTaskBak); // 将任务数据归档
appTaskService.deleteAppTaskByTaskId(task.getTaskId()); // 删除旧数据
if (opNum.compareTo(task.getStockNum()) >= 0) { // 需求数量大于库存数量
int deleteAppStockByStockId = appStockService.deleteAppStockByStockId(task.getStockId());
logger.info("出库捡选删除库存:{},删除结果:{}", task.getStockId(), deleteAppStockByStockId);
} else {
// 更新库存剩余数量
AppStock update = new AppStock();
update.setStockId(task.getStockId());
update.setRemainNum(task.getStockNum().subtract(opNum));
update.setPackingNum(BigDecimal.ZERO);
appStockService.updateAppStock(update);
logger.info("出库捡选更新库存剩余数量:{},更新结果:{}", JSON.toJSONString(update), appStockService.updateAppStock(update));
}
}
//java8 stream流过滤出appTasks数组中的stockId对应的vehicleId 去重
List<String> locations = appTasks.stream().map(AppTask::getLocationId).distinct().collect(Collectors.toList());
List<String> vehicles = appTasks.stream().map(AppTask::getVehicleId).distinct().collect(Collectors.toList());
//更新库存中中这些vehicleId对应的stock_status为0,并且把locationId置空
for (String vehicleId : vehicles) {
AppStock appStock = new AppStock();
appStock.setVehicleId(vehicleId);
appStock.setStockStatus(0);
appStockService.updateSts(appStock);
}
for (String locationId : locations){
appStockService.updateNewLocation(locationId,"");
//更新库位表状态
updateLocation(locationId,0);
} }
} }
private void completePickOutTask() {
@Transactional
public void completePickOutTask() {
AppTask appTask = new AppTask(); AppTask appTask = new AppTask();
appTask.setTaskStatus(6); appTask.setTaskStatus(6);
appTask.setTaskType(2); appTask.setTaskType(2);
@ -417,69 +414,86 @@ public class TaskExecutor {
if (appTasks == null || appTasks.isEmpty()) { if (appTasks == null || appTasks.isEmpty()) {
return; return;
} }
PmsOutFeedBack pmsOutFeedBack = new PmsOutFeedBack();
List<PmsOutFeedBackRecord> recordList = new ArrayList<>();
for (AppTask task : appTasks) { for (AppTask task : appTasks) {
// 更新库存
AppStock appStock = new AppStock(); //调用接口组装数据
appStock.setGoodsId(task.getGoodsId()); AppPmsOrderOut appPmsOrderOut = new AppPmsOrderOut();
appStock.setVehicleId(task.getVehicleId()); appPmsOrderOut.setOrderId(task.getOrderId());
List<AppStock> appStocks = appStockService.selectAppStockList(appStock); appPmsOrderOut.setGoodsId(task.getGoodsId());
if(appStocks == null) { List<AppPmsOrderOut> appPmsOrderOuts = appPmsOrderOutMapper.selectAppPmsOrderOutList(appPmsOrderOut);
return; if (CollectionUtils.isEmpty(appPmsOrderOuts)) {
continue;
} }
AppPmsOrderOut appPmsOrderOut1 = appPmsOrderOuts.get(0);
PmsOutFeedBackRecord recordListItem = new PmsOutFeedBackRecord();
recordListItem.setAmount(task.getOpNum().intValue());
recordListItem.setBusinessOrder(appPmsOrderOut1.getListId());
recordListItem.setMaterialsNo(task.getGoodsId());
recordList.add(recordListItem);
}
//根据orderId查询出库单表获取listid和物料id
//组装数组
// 调用 pms 接口
pmsOutFeedBack.setRecordList(recordList);
String url = sysConfigService.selectConfigByKey("pms.outComplete");
if (StringUtils.isEmpty(url)) {
throw new RuntimeException("pms.outComplete配置为空");
}
PmsCommonRes pmsCommonRes = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, JSON.toJSONString(pmsOutFeedBack)), PmsCommonRes.class);
logger.info("pms出库反馈请求信息{},结果:{}", JSON.toJSONString(pmsOutFeedBack), JSON.toJSONString(pmsCommonRes));
// 归档旧数据
for (AppTask task : appTasks) {
BigDecimal opNum = task.getOpNum(); BigDecimal opNum = task.getOpNum();
for (AppStock stock : appStocks) { AppTaskBak appTaskBak = new AppTaskBak();
if(opNum.compareTo(stock.getRemainNum()) >= 0) { // 需求数量大于库存数量 BeanUtils.copyProperties(task, appTaskBak);
int deleteAppStockByStockId = appStockService.deleteAppStockByStockId(stock.getStockId()); appTaskBakService.insertAppTaskBak(appTaskBak); // 将任务数据归档
logger.info("出库捡选删除库存:{},删除结果:{}", JSON.toJSONString(stock), deleteAppStockByStockId); appTaskService.deleteAppTaskByTaskId(task.getTaskId()); // 删除旧数据
// 调用 pms 接口
PmsOutFeedBack pmsOutFeedBack = new PmsOutFeedBack(); if (opNum.compareTo(task.getStockNum()) >= 0) { // 需求数量大于库存数量
PmsOutFeedBackRecordList recordListItem = new PmsOutFeedBackRecordList(); int deleteAppStockByStockId = appStockService.deleteAppStockByStockId(task.getStockId());
recordListItem.setAmount(stock.getRemainNum().intValue()); logger.info("出库捡选删除库存:{},删除结果:{}", task.getStockId(), deleteAppStockByStockId);
recordListItem.setBusinessOrder(task.getOrderId());
recordListItem.setMaterialsNo(task.getGoodsId()); } else {
List<PmsOutFeedBackRecordList> recordList = new ArrayList<>(); // 更新库存剩余数量
recordList.add(recordListItem); AppStock update = new AppStock();
pmsOutFeedBack.setRecordList(recordList); update.setStockId(task.getStockId());
String url = sysConfigService.selectConfigByKey("pms.outComplete"); update.setRemainNum(task.getStockNum().subtract(opNum));
if (StringUtils.isEmpty(url)) { update.setPackingNum(BigDecimal.ZERO);
continue; appStockService.updateAppStock(update);
} logger.info("出库捡选更新库存剩余数量:{},更新结果:{}", JSON.toJSONString(update), appStockService.updateAppStock(update));
PmsCommonRes pmsCommonRes = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, JSON.toJSONString(pmsOutFeedBack)), PmsCommonRes.class);
logger.info("pms出库反馈请求信息{},结果:{}", JSON.toJSONString(pmsOutFeedBack), JSON.toJSONString(pmsCommonRes));
opNum = opNum.subtract(stock.getRemainNum());
} else {
// 更新库存剩余数量
AppStock update = new AppStock();
update.setStockId(stock.getStockId());
update.setRemainNum(stock.getRemainNum().subtract(opNum));
appStockService.updateAppStock(update);
logger.info("出库捡选更新库存剩余数量:{},更新结果:{}", JSON.toJSONString(update), appStockService.updateAppStock(update));
// 调用 pms 接口
PmsOutFeedBack pmsOutFeedBack = new PmsOutFeedBack();
PmsOutFeedBackRecordList recordListItem = new PmsOutFeedBackRecordList();
recordListItem.setAmount(stock.getRemainNum().intValue());
recordListItem.setBusinessOrder(task.getOrderId());
recordListItem.setMaterialsNo(task.getGoodsId());
List<PmsOutFeedBackRecordList> recordList = new ArrayList<>();
recordList.add(recordListItem);
pmsOutFeedBack.setRecordList(recordList);
String url = sysConfigService.selectConfigByKey("pms.outComplete");
if (StringUtils.isEmpty(url)) {
continue;
}
PmsCommonRes pmsCommonRes = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, JSON.toJSONString(pmsOutFeedBack)), PmsCommonRes.class);
logger.info("pms出库反馈请求信息{},结果:{}", JSON.toJSONString(pmsOutFeedBack), JSON.toJSONString(pmsCommonRes));
}
// 归档旧数据
AppTaskBak appTaskBak = new AppTaskBak();
BeanUtils.copyProperties(task, appTaskBak);
appTaskBakService.insertAppTaskBak(appTaskBak); // 将任务数据归档
appTaskService.deleteAppTaskByTaskId(task.getTaskId()); // 删除旧数据
} }
} }
//java8 stream流过滤出appTasks数组中的stockId对应的vehicleId 去重
List<String> locations = appTasks.stream().map(AppTask::getLocationId).distinct().collect(Collectors.toList());
List<String> vehicles = appTasks.stream().map(AppTask::getVehicleId).distinct().collect(Collectors.toList());
//更新库存中中这些vehicleId对应的stock_status为0,并且把locationId置空
for (String vehicleId : vehicles) {
AppStock appStock = new AppStock();
appStock.setVehicleId(vehicleId);
appStock.setStockStatus(0);
appStockService.updateSts(appStock);
}
for (String locationId : locations){
appStockService.updateNewLocation(locationId,"");
//更新库位表状态
updateLocation(locationId,0);
}
} }
private void updateLocation(String location,Integer status) {
AppLocation appLocation = new AppLocation();
appLocation.setLocationId(location);
appLocation.setLocationStatus(status);
appLocationMapper.updateLocationByLocationId(appLocation);
}
/** /**