no message

main
HUOJIN\92525 2024-08-19 17:04:30 +08:00
parent c7ba5be2b9
commit 700b8cace2
7 changed files with 67 additions and 101 deletions

View File

@ -344,9 +344,7 @@ public class StockServiceImpl implements StockService {
List<AsnDetail> asnDetails = asnDetailService.existsByboxNumber(barNumbers);
if (!asnDetails.isEmpty()) {
Set<String> newBarNumbers = asnDetails.stream().map(AsnDetail::getOrderNumber).collect(Collectors.toSet());
// 取barNumbers和newBarNumbers的差集即为重复的箱号
Set<String> diffBarNumbers = barNumbers.stream().filter(boxNumber -> !newBarNumbers.contains(boxNumber)).collect(Collectors.toSet());
throw new RuntimeException("箱号已入库,请勿重复入库:" + diffBarNumbers);
throw new RuntimeException("箱号已入库,请勿重复入库:" + newBarNumbers);
}
}
@ -687,7 +685,7 @@ public class StockServiceImpl implements StockService {
private void moveInventory(Task task, Stock dstStock, double moveQty) {
//将占用数量移位,原库存回库内
Inventory inventory = task.getInventory();
Inventory inventory = inventoryRepository.findById(task.getInvId()).get();
inventory.setQueuedQty(inventory.getQueuedQty() - moveQty);
inventory.setQuantity(inventory.getQuantity() - moveQty);
inventoryRepository.save(inventory);
@ -702,7 +700,7 @@ public class StockServiceImpl implements StockService {
newInventory.setQueuedQty(0d);
newInventory.setDept(inventory.getDept());
inventoryRepository.save(newInventory);
task.setInventory(newInventory);
task.setInvId(newInventory.getId());
taskRepository.save(task);
if (inventory.getQuantity() <= 0) {
inventoryRepository.delete(inventory);

View File

@ -147,10 +147,9 @@ public class Task extends BaseEntity implements Serializable {
@ApiModelProperty(value = "上架号")
private String putCode;
@OneToOne
@JoinColumn(name = "inv_id")
@Column(name = "inv_id")
@ApiModelProperty(value = "库存ID")
private Inventory inventory;
private Long invId;
@OneToOne
@JoinColumn(name = "dept_id")
@ -188,11 +187,11 @@ public class Task extends BaseEntity implements Serializable {
* @param taskStatus-
* @param planQty-
* @param putCode-
* @param inventory-ID
* @param invId-ID
* @param dept-
* @param agvTask-AGV
*/
public Task(Item item, ItemKey itemKey, String billCode, String taskType, AsnDetail asnDetail, Long moveDetailId, Long waveDetailId, PickDetail pickDetail, Stock srcStock, Stock dstStock, Point srcPoint, Point dstPoint, String srcStockCode, String dstStockCode, String srcPointCode, String dstPointCode, String invStatus, String taskStatus, Double planQty, String putCode, Inventory inventory, Dept dept, AgvTask agvTask) {
public Task(Item item, ItemKey itemKey, String billCode, String taskType, AsnDetail asnDetail, Long moveDetailId, Long waveDetailId, PickDetail pickDetail, Stock srcStock, Stock dstStock, Point srcPoint, Point dstPoint, String srcStockCode, String dstStockCode, String srcPointCode, String dstPointCode, String invStatus, String taskStatus, Double planQty, String putCode, Long invId, Dept dept, AgvTask agvTask) {
this.item = item;
this.itemKey = itemKey;
this.billCode = billCode;
@ -213,7 +212,7 @@ public class Task extends BaseEntity implements Serializable {
this.taskStatus = taskStatus;
this.planQty = planQty;
this.putCode = putCode;
this.inventory = inventory;
this.invId = invId;
this.dept = dept;
this.agvTask = agvTask;
}

View File

@ -108,7 +108,7 @@ public class TaskDto implements Serializable {
private String putCode;
/** 库存 */
private Inventory inventory;
private Long invId;
/** 仓库ID */
private DeptDto dept;

View File

@ -353,7 +353,7 @@ public class AgvTaskServiceImpl implements AgvTaskService {
}
private void sendAgvTask(AgvTask agvTask, String json) {
String resultJson = HttpPostUtil.sendPostReq(UrlApi.submitMission(), json);
/*String resultJson = HttpPostUtil.sendPostReq(UrlApi.submitMission(), json);
if (StringUtils.isEmpty(resultJson)) {
throw new RuntimeException("AGV返回信息:下发任务接口调用失败!");
}
@ -363,8 +363,10 @@ public class AgvTaskServiceImpl implements AgvTaskService {
}
String code = resulObject.getString("code");
String message = resulObject.getString("message");
String message = resulObject.getString("message");*/
String resultJson = null;
String code = "0";
String message = "";
if (!"0".equals(code)) {
throw new RuntimeException("AGV返回信息:" + message);
} else {
@ -401,6 +403,9 @@ public class AgvTaskServiceImpl implements AgvTaskService {
case "CANCELED":
handleCanceledTask(agvTask, containerCode);//容器取消
break;
case "RESEND":
handleResendTask(agvTask);//重新发送
break;
}
}
@ -431,6 +436,7 @@ public class AgvTaskServiceImpl implements AgvTaskService {
List<Task> taskList = taskService.getAgvTaskList(agvTask.getId());
switch (endAreaName) {
case AreaNameDic.XJFBQ:
case AreaNameDic.DJFBQ:
handleFBQ(taskList, stock, endPoint);//备料完成
break;
case AreaNameDic.JLQ:
@ -470,80 +476,47 @@ public class AgvTaskServiceImpl implements AgvTaskService {
update(agvTask);
}
/**
*
*
* @param containerCode
*/
@Transactional(rollbackFor = Exception.class)
public void containerOut(String containerCode) {
Stock stock = validateStock(containerCode);//验证容器
validateAgvResponse(UrlApi.containerOut(), containerOutJson(stock.getCode()));//验证AGV返回信息
clearInventory(stock);//清空库存
Point point = stock.getPoint();
point.setStatus(BaseStatus.FREE);
pointService.update(point);
stock.setStatus(BaseStatus.FREE);
stock.setPoint(null);
stockRepository.save(stock);
}
/**
*
*
* @param stockCode
*/
private Stock validateStock(String stockCode) {
Stock stock = stockRepository.findByCode(stockCode, null);
if (stock == null) {
throw new RuntimeException("请扫描正确的容器!");
private synchronized void handleResendTask(AgvTask agvTask) {
List<AgvTask> repeatList = agvTaskRepository.findRepeat(agvTask.getStockCode());
if (!repeatList.isEmpty()) {
throw new RuntimeException("任务已重新生成,请勿重复操作! ");
}
return stock;
AgvTask newAgvTask = new AgvTask();
newAgvTask.setStockCode(agvTask.getStockCode());
newAgvTask.setStartSlotCode(agvTask.getStartSlotCode());
newAgvTask.setEndSlotCode(agvTask.getEndSlotCode());
newAgvTask.setSlotCode(agvTask.getSlotCode());
newAgvTask.setStatus(BizStatus.OPEN);
newAgvTask.setType(agvTask.getType());
newAgvTask.setJobType(agvTask.getJobType());
newAgvTask.setJobPriority(1);
agvTaskRepository.save(newAgvTask);
//重新发送任务
List<Task> taskList = taskService.getAgvTaskList(agvTask.getId());
for (Task task : taskList) {
task.setAgvTask(newAgvTask);
taskRepository.save(task);
}
// 根据任务类型发送不同的实现
switch (agvTask.getJobType()) {
case "FORKLIFT_MOVE":
sendAgvTaskCCImpl(newAgvTask);
break;
case "RACK_MOVE":
sendAgvTaskHJImpl(newAgvTask);
break;
case "ROLLER_MOVE":
sendAgvTaskGTImpl(newAgvTask);
break;
default:
throw new RuntimeException("任务类型不支持: " + agvTask.getJobType());
}
}
/**
* AGV
*
* @param jsonObject
*/
private void validateAgvResponse(String url, String jsonObject) {
/*String resultJson = HttpPostUtil.sendPostReq(url, jsonObject);
if (StringUtils.isEmpty(resultJson)) {
throw new RuntimeException("AGV返回信息:容器入场接口调用失败!");
}
JSONObject resultObject = JSON.parseObject(resultJson);
if (resultObject == null) {
throw new RuntimeException("AGV返回信息:容器入场接口数据返回为空!");
}
String code = resultObject.getString("code");
String message = resultObject.getString("message");
if (!"0".equals(code)) {
throw new RuntimeException("AGV返回信息:容器入场接口调用失败!" + message);
}*/
}
public synchronized String containerOutJson(String containerCode) {
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
jsonObject.put("requestId", String.valueOf(new Date().getTime()));//请求 id
jsonObject.put("containerType", "");//容器类型
jsonObject.put("containerCode", containerCode);//容器编号
jsonObject.put("position", "");//容器当前位置
return jsonObject.toJSONString();
}
/**
*
*
* @param stock
*/
private void clearInventory(Stock stock) {
List<Inventory> inventoryList = inventoryService.queryInventory(stock);
Long[] ids = inventoryList.stream().map(Inventory::getId).toArray(Long[]::new);
if (ids.length > 0) {
inventoryService.deleteAll(ids);
}
}
/**
*
@ -677,12 +650,9 @@ public class AgvTaskServiceImpl implements AgvTaskService {
for (Task task : taskList) {
AsnDetail ad = task.getAsnDetail();
ad.setStatus(BizStatus.CANCEL);
ad.setStock(stock);
asnDetailService.update(ad);
task.setTaskStatus(BizStatus.CANCEL);
task.setSrcStock(stock);
task.setDstStock(stock);
taskService.update(task);
}
//起点点位释放

View File

@ -23,7 +23,6 @@ import com.youchain.basicdata.service.dto.ItemDto;
import com.youchain.basicdata.service.mapstruct.ItemMapper;
import com.youchain.businessdata.domain.*;
import com.youchain.businessdata.repository.*;
import com.youchain.businessdata.service.InventoryService;
import com.youchain.businessdata.service.dto.InventoryDto;
import com.youchain.modules.quartz.utils.TimeNumberUtils;
import com.youchain.modules.system.domain.Dept;
@ -57,7 +56,7 @@ import javax.servlet.http.HttpServletResponse;
public class PickDetailServiceImpl implements PickDetailService {
private final PickDetailRepository pickDetailRepository;
private final PickRepository pickRepository;
private final InventoryService inventoryService;
private final InventoryRepository inventoryRepository;
private final TaskRepository taskRepository;
private final AgvTaskRepository agvTaskRepository;
private final ItemMapper itemMapper;
@ -146,7 +145,7 @@ public class PickDetailServiceImpl implements PickDetailService {
return pick.getCode() + "出库单;" + item.getCode() + "数量已分配!";
}
String areaCode = stockTypeToAreaMap.getValueByKey(item.getGoodType());
List<Inventory> inventoryList = inventoryService.findByItemIdAndAreaCode(item.getId(), areaCode);
List<Inventory> inventoryList = inventoryRepository.findByItemIdAndAreaCode(item.getId(), areaCode);
if (inventoryList.isEmpty()) {
return pick.getCode() + "出库单;" + item.getCode() + "物料库存不足,请先补充库存!";
}
@ -173,7 +172,7 @@ public class PickDetailServiceImpl implements PickDetailService {
allocateQty = unQty;
}
inv.setQueuedQty(inv.getQueuedQty() + allocateQty);
inventoryService.update(inv);
inventoryRepository.save(inv);
unQty -= allocateQty;
/* 更新出库单明细状态*/
pd.setAllocatedQty(pd.getAllocatedQty() + allocateQty);
@ -209,7 +208,7 @@ public class PickDetailServiceImpl implements PickDetailService {
task.setInvStatus(inv.getStatus());
task.setTaskStatus(BizStatus.OPEN);
task.setPlanQty(allocateQty);
task.setInventory(inv);
task.setInvId(inv.getId());
task.setDept(dept);
taskRepository.save(task);
}
@ -222,7 +221,7 @@ public class PickDetailServiceImpl implements PickDetailService {
ItemDto itemDto = pickDetailDto.getItem();
Item item = itemMapper.toEntity(itemDto);
Dept dept = item.getDept();//仓库
List<Inventory> Inventorys = inventoryService.findByItemIdAndAreaCode(item.getId(), item.getGoodType());
List<Inventory> Inventorys = inventoryRepository.findByItemIdAndAreaCode(item.getId(), item.getGoodType());
if (Inventorys.size() > 0) {
Inventory inv = Inventorys.get(0);
//库存冻结状态不允许出库
@ -232,7 +231,7 @@ public class PickDetailServiceImpl implements PickDetailService {
Stock stock = inv.getStock();//容器
Point startPoint = inv.getPoint();//起始点位
inv.setQueuedQty(inv.getQuantity());
inventoryService.update(inv);
inventoryRepository.save(inv);
pd.setAllocatedQty(inv.getQuantity());
pd.setOrderQty(pd.getAllocatedQty());
if (pd.getOrderQty().equals(pd.getAllocatedQty())) {
@ -258,10 +257,9 @@ public class PickDetailServiceImpl implements PickDetailService {
List<Task> Tasks = taskRepository.findByPickNotAllTask(id);
for (Task task : Tasks) {
//根据Taskz找到对应的库存
InventoryDto inventoryDto = inventoryService.findById(task.getInventory().getId());
Inventory inv = inventoryService.toEntity(inventoryDto);
Inventory inv = inventoryRepository.findById(task.getInvId()).get();
inv.setQueuedQty(inv.getQueuedQty() - pd.getAllocatedQty());
inventoryService.update(inv);
inventoryRepository.save(inv);
//删除Task
taskRepository.delete(task);

View File

@ -355,6 +355,7 @@ public class PickServiceImpl implements PickService {
agvTaskService.sendAgvTaskCCImpl(agvTask);
}
task.setAgvTask(agvTask);
task.setTaskStatus(agvTask.getStatus());
taskRepository.save(task);
}
/*更新出库单状态*/

View File

@ -154,7 +154,7 @@ public class TaskServiceImpl implements TaskService {
task.setMoveQty(pickedQuantity);
task.setTaskStatus(BizStatus.FINISH);
taskRepository.save(task);
Inventory inv = inventoryRepository.findById(task.getInventory().getId()).get();
Inventory inv = inventoryRepository.findById(task.getInvId()).get();
if (inv != null) {
ItemKey itemKey = inv.getItemKey();
Item item = itemKey.getItem();
@ -198,7 +198,7 @@ public class TaskServiceImpl implements TaskService {
TaskDto taskDto = findById(taskId);
Task task = taskMapper.toEntity(taskDto);//Dto转实体
PickDetail pickDetail = task.getPickDetail();
Inventory inv = inventoryRepository.findById(task.getInventory().getId()).get();
Inventory inv = inventoryRepository.findById(task.getInvId()).get();
if (inv != null) {
//退回库存
double srcQty = inv.getQueuedQty();