no message
parent
9a9ba6ba7f
commit
0b81b55e59
|
|
@ -77,6 +77,22 @@ public interface AgvTaskMapper extends BaseMapper<AgvTask> {
|
||||||
@Select(value = "select * from data_agv_task where business_detail_id = #{businessId} and type='INBOUND' and agv_vendor = 'TES' ")
|
@Select(value = "select * from data_agv_task where business_detail_id = #{businessId} and type='INBOUND' and agv_vendor = 'TES' ")
|
||||||
AgvTask queryByBusinessId(@Param("businessId") Long businessId);
|
AgvTask queryByBusinessId(@Param("businessId") Long businessId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据入库工作站查询任务数
|
||||||
|
*
|
||||||
|
* @param workStation 工作站
|
||||||
|
*/
|
||||||
|
@Select(value = "select count(id) from data_agv_task where start_code = #{workStation} and type='INBOUND' and status in (1,2,3) and agv_vendor = 'TES' ")
|
||||||
|
Integer queryInCountByAgv(@Param("workStation") String workStation);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据工作站查询任务数
|
||||||
|
*
|
||||||
|
* @param workStation 工作站
|
||||||
|
*/
|
||||||
|
@Select(value = "select count(id) from data_agv_task where end_code = #{workStation} and type='OUTBOUND' and status in (1,2,3) and agv_vendor = 'TES' ")
|
||||||
|
Integer queryOutCountByAgv(@Param("workStation") String workStation);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 每个出库工作站和任务数
|
* 每个出库工作站和任务数
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ import org.cpte.modules.receive.mapper.AsnMapper;
|
||||||
import org.jeecg.common.system.vo.LoginUser;
|
import org.jeecg.common.system.vo.LoginUser;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,11 @@
|
||||||
package org.cpte.modules.conveyorLine.controller;
|
package org.cpte.modules.conveyorLine.controller;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.validation.Valid;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
||||||
import org.cpte.modules.conveyorLine.request.ScanTrayRequest;
|
import org.cpte.modules.conveyorLine.request.ScanTrayRequest;
|
||||||
import org.cpte.modules.conveyorLine.service.IConveyorLineService;
|
import org.cpte.modules.conveyorLine.service.IConveyorLineService;
|
||||||
import org.jeecg.common.api.vo.Result;
|
|
||||||
import org.jeecg.common.api.vo.TesResult;
|
import org.jeecg.common.api.vo.TesResult;
|
||||||
import org.jeecg.common.aspect.annotation.AutoLog;
|
import org.jeecg.common.aspect.annotation.AutoLog;
|
||||||
import org.jeecg.config.shiro.IgnoreAuth;
|
import org.jeecg.config.shiro.IgnoreAuth;
|
||||||
|
|
@ -52,10 +48,4 @@ public class ConveyorLineController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "输送线-大屏显示")
|
|
||||||
@GetMapping(value = "/showConveyorLine")
|
|
||||||
public Result<JSONObject> showConveyorLine(@RequestParam(name = "conveyorLine") String conveyorLine) {
|
|
||||||
return Result.OK(iConveyorLineService.showConveyorLine(conveyorLine));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package org.cpte.modules.conveyorLine.service;
|
package org.cpte.modules.conveyorLine.service;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import org.cpte.modules.agvTask.entity.AgvTask;
|
||||||
import org.cpte.modules.base.entity.Point;
|
import org.cpte.modules.base.entity.Point;
|
||||||
import org.cpte.modules.base.entity.Stock;
|
import org.cpte.modules.base.entity.Stock;
|
||||||
import org.cpte.modules.conveyorLine.request.ScanTrayRequest;
|
import org.cpte.modules.conveyorLine.request.ScanTrayRequest;
|
||||||
|
|
@ -20,8 +21,8 @@ public interface IConveyorLineService {
|
||||||
/**
|
/**
|
||||||
* 显示 输送线大屏显示
|
* 显示 输送线大屏显示
|
||||||
*
|
*
|
||||||
* @param conveyorLine conveyorLine
|
* @param agvTask 任务
|
||||||
*/
|
*/
|
||||||
JSONObject showConveyorLine(String conveyorLine);
|
JSONObject showConveyorLine(AgvTask agvTask);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,12 @@
|
||||||
package org.cpte.modules.conveyorLine.service.impl;
|
package org.cpte.modules.conveyorLine.service.impl;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.cpte.modules.agvTask.entity.AgvTask;
|
import org.cpte.modules.agvTask.entity.AgvTask;
|
||||||
import org.cpte.modules.agvTask.mapper.AgvTaskMapper;
|
import org.cpte.modules.agvTask.mapper.AgvTaskMapper;
|
||||||
import org.cpte.modules.base.entity.Area;
|
|
||||||
import org.cpte.modules.base.mapper.AreaMapper;
|
|
||||||
import org.cpte.modules.constant.enums.*;
|
import org.cpte.modules.constant.enums.*;
|
||||||
import org.cpte.modules.conveyorLine.request.ScanTrayRequest;
|
import org.cpte.modules.conveyorLine.request.ScanTrayRequest;
|
||||||
import org.cpte.modules.conveyorLine.service.IConveyorLineService;
|
import org.cpte.modules.conveyorLine.service.IConveyorLineService;
|
||||||
|
|
@ -15,15 +14,12 @@ import org.cpte.modules.conveyorLine.service.processor.ScanTrayProcessor;
|
||||||
import org.cpte.modules.conveyorLine.vo.ScanTrayData;
|
import org.cpte.modules.conveyorLine.vo.ScanTrayData;
|
||||||
import org.cpte.modules.receive.entity.Asn;
|
import org.cpte.modules.receive.entity.Asn;
|
||||||
import org.cpte.modules.receive.mapper.AsnMapper;
|
import org.cpte.modules.receive.mapper.AsnMapper;
|
||||||
import org.cpte.modules.shipping.entity.Task;
|
|
||||||
import org.cpte.modules.shipping.mapper.TaskMapper;
|
|
||||||
import org.cpte.modules.utils.RedisDistributedLockUtil;
|
import org.cpte.modules.utils.RedisDistributedLockUtil;
|
||||||
import org.jeecg.common.util.RedisUtil;
|
import org.jeecg.modules.message.websocket.WebSocket;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
@ -35,22 +31,17 @@ public class IConveyorLineServiceImpl implements IConveyorLineService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private AsnMapper asnMapper;
|
private AsnMapper asnMapper;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private AreaMapper areaMapper;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private AgvTaskMapper agvTaskMapper;
|
private AgvTaskMapper agvTaskMapper;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ScanTrayProcessor scanTrayProcessor;
|
private ScanTrayProcessor scanTrayProcessor;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private RedisUtil redisUtil;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RedisDistributedLockUtil redissonLock;
|
private RedisDistributedLockUtil redissonLock;
|
||||||
|
|
||||||
private static final String CONVEYOR_LINE_KEY = "CONVEYOR_LINE_KEY";
|
@Resource
|
||||||
|
private WebSocket webSocket;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void scanTray(ScanTrayRequest scanTrayRequest) {
|
public void scanTray(ScanTrayRequest scanTrayRequest) {
|
||||||
|
|
@ -62,6 +53,9 @@ public class IConveyorLineServiceImpl implements IConveyorLineService {
|
||||||
throw new RuntimeException("扫描处理中,请稍后重试");
|
throw new RuntimeException("扫描处理中,请稍后重试");
|
||||||
}
|
}
|
||||||
scanTrayProcessor.scanTray(scanTrayRequest);
|
scanTrayProcessor.scanTray(scanTrayRequest);
|
||||||
|
|
||||||
|
//推送输送线数据
|
||||||
|
sendConveyorLineData(scanTrayRequest);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("扫描托盘异常", e);
|
log.error("扫描托盘异常", e);
|
||||||
throw e;
|
throw e;
|
||||||
|
|
@ -87,55 +81,75 @@ public class IConveyorLineServiceImpl implements IConveyorLineService {
|
||||||
|
|
||||||
asn.setResMessage(scanTrayRequest.getContent().getSignal().getErrorReason().toString());
|
asn.setResMessage(scanTrayRequest.getContent().getSignal().getErrorReason().toString());
|
||||||
asnMapper.updateById(asn);
|
asnMapper.updateById(asn);
|
||||||
|
|
||||||
|
//推送输送线数据
|
||||||
|
sendConveyorLineData(scanTrayRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 推送输送线数据
|
||||||
|
*/
|
||||||
|
private void sendConveyorLineData(ScanTrayRequest scanTrayRequest) {
|
||||||
|
String stockCode = scanTrayRequest.getContent().getSignal().getBarCode();
|
||||||
|
String workStation = scanTrayRequest.getContent().getStationCode();
|
||||||
|
List<String> errorMsg = scanTrayRequest.getContent().getSignal().getErrorReason();
|
||||||
|
String description = "";
|
||||||
|
if (CollectionUtils.isEmpty(errorMsg)) {
|
||||||
|
description = "托盘检测成功";
|
||||||
|
} else {
|
||||||
|
description = scanTrayRequest.getContent().getSignal().getErrorReason().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject conveyorLineData = new JSONObject();
|
||||||
|
conveyorLineData.put("stockCode", stockCode);
|
||||||
|
conveyorLineData.put("izAll", "整托");
|
||||||
|
conveyorLineData.put("taskType", BusinessTypeEnum.INBOUND.getDesc());
|
||||||
|
conveyorLineData.put("endCode", workStation);
|
||||||
|
conveyorLineData.put("description", description);
|
||||||
|
|
||||||
|
JSONObject conveyorLineMsg = new JSONObject();
|
||||||
|
conveyorLineMsg.put("cmd", "conveyorLineData");
|
||||||
|
conveyorLineMsg.put("data", conveyorLineData);
|
||||||
|
webSocket.pushMessage(workStation, conveyorLineMsg.toJSONString());
|
||||||
|
|
||||||
|
|
||||||
|
Integer totalTasks = agvTaskMapper.queryInCountByAgv(scanTrayRequest.getContent().getStationCode());
|
||||||
|
JSONObject conveyorLineCountMsg = new JSONObject();
|
||||||
|
conveyorLineCountMsg.put("cmd", "conveyorLineCount");
|
||||||
|
conveyorLineCountMsg.put("totalTasks", totalTasks);
|
||||||
|
webSocket.pushMessage(workStation, conveyorLineCountMsg.toJSONString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JSONObject showConveyorLine(String conveyorLine) {
|
public JSONObject showConveyorLine(AgvTask agvTask) {
|
||||||
JSONObject jsonObject = initJsonObject();
|
JSONObject jsonObject = initJsonObject();
|
||||||
jsonObject.put("endCode", conveyorLine);
|
|
||||||
|
|
||||||
//工作站
|
|
||||||
Area area = areaMapper.queryByPointCode(conveyorLine);
|
|
||||||
if (area == null) {
|
|
||||||
return jsonObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置任务类型
|
|
||||||
String taskType = BusinessTypeEnum.OUTBOUND.getDesc();
|
|
||||||
if (AreaTypeEnum.RK_DOCK.getValue().equals(area.getAreaCode())) {
|
|
||||||
taskType = BusinessTypeEnum.INBOUND.getDesc();
|
|
||||||
}
|
|
||||||
jsonObject.put("taskType", taskType);
|
|
||||||
|
|
||||||
//获取工作站的最新任务
|
|
||||||
AgvTask agvTask = agvTaskMapper.queryByLastEndCode(conveyorLine);
|
|
||||||
if (agvTask == null) {
|
if (agvTask == null) {
|
||||||
jsonObject.put("description", "无出库任务");
|
jsonObject.put("description", "无任务");
|
||||||
if (AreaTypeEnum.RK_DOCK.getValue().equals(area.getAreaCode())) {
|
|
||||||
jsonObject.put("description", "无入库任务");
|
|
||||||
}
|
|
||||||
return jsonObject;
|
return jsonObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String workStation = "";
|
||||||
|
String taskType = "";
|
||||||
|
if (BusinessTypeEnum.INBOUND.getValue().equals(agvTask.getType())) {
|
||||||
|
taskType = BusinessTypeEnum.INBOUND.getDesc();
|
||||||
|
workStation = agvTask.getStartCode();
|
||||||
|
} else if(BusinessTypeEnum.OUTBOUND.getValue().equals(agvTask.getType())){
|
||||||
|
workStation = agvTask.getEndCode();
|
||||||
|
taskType = BusinessTypeEnum.OUTBOUND.getDesc();
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonObject.put("endCode", workStation);
|
||||||
|
jsonObject.put("taskType", taskType);
|
||||||
|
|
||||||
// 设置公共字段
|
// 设置公共字段
|
||||||
setCommonFields(jsonObject, agvTask);
|
setCommonFields(jsonObject, agvTask);
|
||||||
|
|
||||||
// 根据区域类型处理不同逻辑
|
// 根据区域类型处理不同逻辑
|
||||||
if (AreaTypeEnum.RK_DOCK.getValue().equals(area.getAreaCode())) {
|
if (BusinessTypeEnum.INBOUND.getValue().equals(agvTask.getType())) {
|
||||||
handleInboundTask(jsonObject, agvTask);
|
handleInboundTask(jsonObject, agvTask);
|
||||||
if (AgvStatusEnum.COMPLETED.getValue().equals(agvTask.getStatus())) {
|
} else if(BusinessTypeEnum.OUTBOUND.getValue().equals(agvTask.getType())){
|
||||||
Object dateObj = redisUtil.get(CONVEYOR_LINE_KEY);
|
|
||||||
if (dateObj != null) {
|
|
||||||
String description = "工作站无入库任务";
|
|
||||||
return cleanJsonObject(conveyorLine, description);
|
|
||||||
} else {
|
|
||||||
redisUtil.set(CONVEYOR_LINE_KEY, agvTask.getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
handleOutboundTask(jsonObject, agvTask);
|
handleOutboundTask(jsonObject, agvTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
return jsonObject;
|
return jsonObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -152,16 +166,6 @@ public class IConveyorLineServiceImpl implements IConveyorLineService {
|
||||||
return jsonObject;
|
return jsonObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JSONObject cleanJsonObject(String conveyorLine, String description) {
|
|
||||||
JSONObject jsonObject = new JSONObject();
|
|
||||||
jsonObject.put("stockCode", "");
|
|
||||||
jsonObject.put("taskType", "");
|
|
||||||
jsonObject.put("endCode", conveyorLine);
|
|
||||||
jsonObject.put("izAll", "");
|
|
||||||
jsonObject.put("description", description);
|
|
||||||
return jsonObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置公共字段
|
* 设置公共字段
|
||||||
*/
|
*/
|
||||||
|
|
@ -179,10 +183,6 @@ public class IConveyorLineServiceImpl implements IConveyorLineService {
|
||||||
jsonObject.put("description", description);
|
jsonObject.put("description", description);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateAgvTaskId(AgvTask agvTask) {
|
|
||||||
redisUtil.set(CONVEYOR_LINE_KEY, agvTask.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据状态获取入库描述
|
* 根据状态获取入库描述
|
||||||
*/
|
*/
|
||||||
|
|
@ -191,7 +191,7 @@ public class IConveyorLineServiceImpl implements IConveyorLineService {
|
||||||
|
|
||||||
Map<Integer, String> statusDescriptionMap = new HashMap<>();
|
Map<Integer, String> statusDescriptionMap = new HashMap<>();
|
||||||
statusDescriptionMap.put(AgvStatusEnum.CREATED.getValue(),
|
statusDescriptionMap.put(AgvStatusEnum.CREATED.getValue(),
|
||||||
"托盘异常:" + agvTask.getResMessage());
|
"任务异常:" + agvTask.getResMessage());
|
||||||
statusDescriptionMap.put(AgvStatusEnum.EXECUTING.getValue(),
|
statusDescriptionMap.put(AgvStatusEnum.EXECUTING.getValue(),
|
||||||
"托盘检测成功,入库中");
|
"托盘检测成功,入库中");
|
||||||
statusDescriptionMap.put(AgvStatusEnum.COMPLETED.getValue(),
|
statusDescriptionMap.put(AgvStatusEnum.COMPLETED.getValue(),
|
||||||
|
|
@ -199,11 +199,6 @@ public class IConveyorLineServiceImpl implements IConveyorLineService {
|
||||||
statusDescriptionMap.put(AgvStatusEnum.CANCELLED.getValue(),
|
statusDescriptionMap.put(AgvStatusEnum.CANCELLED.getValue(),
|
||||||
"托盘入库已取消或已失败,人工确认");
|
"托盘入库已取消或已失败,人工确认");
|
||||||
|
|
||||||
//成功更新缓存
|
|
||||||
if (AgvStatusEnum.COMPLETED.getValue().equals(agvTask.getStatus())) {
|
|
||||||
updateAgvTaskId(agvTask);
|
|
||||||
}
|
|
||||||
|
|
||||||
return statusDescriptionMap.getOrDefault(agvTask.getStatus(),
|
return statusDescriptionMap.getOrDefault(agvTask.getStatus(),
|
||||||
"【" + carrierCode + "】托盘状态未知");
|
"【" + carrierCode + "】托盘状态未知");
|
||||||
}
|
}
|
||||||
|
|
@ -215,9 +210,10 @@ public class IConveyorLineServiceImpl implements IConveyorLineService {
|
||||||
String stockCode = agvTask.getCarrierCode();
|
String stockCode = agvTask.getCarrierCode();
|
||||||
String izAll = agvTask.getIzAll() == 1 ? "拆托" : "整托";
|
String izAll = agvTask.getIzAll() == 1 ? "拆托" : "整托";
|
||||||
|
|
||||||
String description = izAll.equals("拆托")
|
/*String description = izAll.equals("拆托")
|
||||||
? "请人工将托盘叉走,避免任务拥堵"
|
? "请人工将托盘叉走,避免任务拥堵"
|
||||||
: "请等待AGV将托盘叉走";
|
: "请等待AGV将托盘叉走";*/
|
||||||
|
String description = "请人工将托盘叉走,避免任务拥堵!";
|
||||||
|
|
||||||
jsonObject.put("description", description);
|
jsonObject.put("description", description);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,34 +2,17 @@ package org.cpte.modules.dashboard.controller;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
||||||
import org.cpte.modules.agvTask.entity.AgvTask;
|
|
||||||
import org.cpte.modules.agvTask.mapper.AgvTaskMapper;
|
import org.cpte.modules.agvTask.mapper.AgvTaskMapper;
|
||||||
import org.cpte.modules.agvTask.service.IAgvTaskService;
|
|
||||||
import org.cpte.modules.base.entity.Item;
|
|
||||||
import org.cpte.modules.base.mapper.ItemMapper;
|
|
||||||
import org.cpte.modules.base.service.IItemService;
|
|
||||||
import org.cpte.modules.dashboard.vo.OutAndInData;
|
import org.cpte.modules.dashboard.vo.OutAndInData;
|
||||||
import org.cpte.modules.dashboard.vo.WorkstationTask;
|
import org.cpte.modules.dashboard.vo.WorkstationTask;
|
||||||
import org.cpte.modules.inventory.mapper.InventoryMapper;
|
import org.cpte.modules.inventory.mapper.InventoryMapper;
|
||||||
import org.cpte.modules.receive.mapper.AsnDetailMapper;
|
|
||||||
import org.cpte.modules.receive.mapper.ReceiveRecordMapper;
|
import org.cpte.modules.receive.mapper.ReceiveRecordMapper;
|
||||||
import org.cpte.modules.shipping.mapper.TaskMapper;
|
import org.cpte.modules.shipping.mapper.TaskMapper;
|
||||||
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.api.vo.Result;
|
||||||
import org.jeecg.common.aspect.annotation.AutoLog;
|
|
||||||
import org.jeecg.common.system.base.controller.JeecgController;
|
|
||||||
import org.jeecg.common.system.query.QueryGenerator;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.servlet.ModelAndView;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
|
|
@ -59,9 +42,6 @@ public class DashBoardController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private AgvTaskMapper agvTaskMapper;
|
private AgvTaskMapper agvTaskMapper;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private IItemService itemService;
|
|
||||||
|
|
||||||
@GetMapping("/getChartCardList")
|
@GetMapping("/getChartCardList")
|
||||||
public Result<JSONArray> getChartCardList() {
|
public Result<JSONArray> getChartCardList() {
|
||||||
JSONArray jsonArray = new JSONArray();
|
JSONArray jsonArray = new JSONArray();
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package org.cpte.modules.quartz.job;
|
package org.cpte.modules.quartz.job;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
@ -8,15 +10,19 @@ import org.cpte.modules.agvTask.mapper.AgvTaskMapper;
|
||||||
import org.cpte.modules.constant.GeneralConstant;
|
import org.cpte.modules.constant.GeneralConstant;
|
||||||
import org.cpte.modules.constant.enums.AgvStatusEnum;
|
import org.cpte.modules.constant.enums.AgvStatusEnum;
|
||||||
import org.cpte.modules.constant.enums.AgvVendorEnum;
|
import org.cpte.modules.constant.enums.AgvVendorEnum;
|
||||||
|
import org.cpte.modules.constant.enums.BusinessTypeEnum;
|
||||||
import org.cpte.modules.shipping.service.ITaskService;
|
import org.cpte.modules.shipping.service.ITaskService;
|
||||||
import org.cpte.modules.tesAgv.service.ITesAgvService;
|
import org.cpte.modules.tesAgv.service.ITesAgvService;
|
||||||
import org.cpte.modules.utils.RedisDistributedLockUtil;
|
import org.cpte.modules.utils.RedisDistributedLockUtil;
|
||||||
|
import org.jeecg.modules.message.websocket.WebSocket;
|
||||||
import org.quartz.Job;
|
import org.quartz.Job;
|
||||||
import org.quartz.JobExecutionContext;
|
import org.quartz.JobExecutionContext;
|
||||||
import org.quartz.JobExecutionException;
|
import org.quartz.JobExecutionException;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class TesAgvJob implements Job {
|
public class TesAgvJob implements Job {
|
||||||
|
|
@ -33,6 +39,9 @@ public class TesAgvJob implements Job {
|
||||||
@Autowired
|
@Autowired
|
||||||
private RedisDistributedLockUtil redissonLock;
|
private RedisDistributedLockUtil redissonLock;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private WebSocket webSocket;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
|
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
|
||||||
|
|
@ -74,6 +83,9 @@ public class TesAgvJob implements Job {
|
||||||
for (AgvTask agvTask : agvTaskList) {
|
for (AgvTask agvTask : agvTaskList) {
|
||||||
sendTesAgvTask(agvTask);
|
sendTesAgvTask(agvTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//4.推送输送线大屏数据
|
||||||
|
sendConveyorLineData(agvTaskList);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -82,4 +94,38 @@ public class TesAgvJob implements Job {
|
||||||
private void sendTesAgvTask(AgvTask agvTask) {
|
private void sendTesAgvTask(AgvTask agvTask) {
|
||||||
tesAgvService.sendTesAgvTask(GeneralConstant.TES_POD_TASK, tesAgvService.generateTesAgvTaskJson(agvTask), agvTask);
|
tesAgvService.sendTesAgvTask(GeneralConstant.TES_POD_TASK, tesAgvService.generateTesAgvTaskJson(agvTask), agvTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendConveyorLineData(List<AgvTask> agvTasks){
|
||||||
|
//入库任务
|
||||||
|
List<AgvTask> inTasks = agvTasks.stream().filter(agvTask -> BusinessTypeEnum.INBOUND.getValue().equals(agvTask.getType())).toList();
|
||||||
|
|
||||||
|
//入库任务根据startCode分组只需要获取startCode信息
|
||||||
|
List<String> inWorkStation = inTasks.stream().collect(Collectors.groupingBy(AgvTask::getStartCode)).keySet().stream().toList();
|
||||||
|
if(CollectionUtils.isNotEmpty(inWorkStation)){
|
||||||
|
for (String station : inWorkStation){
|
||||||
|
Integer totalTasks = agvTaskMapper.queryInCountByAgv(station);
|
||||||
|
sendConveyorLineData(station, totalTasks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//出库任务
|
||||||
|
List<AgvTask> outTasks = agvTasks.stream().filter(agvTask -> BusinessTypeEnum.OUTBOUND.getValue().equals(agvTask.getType())).toList();
|
||||||
|
|
||||||
|
//出库任务根据endCode分组只需要获取endCode信息
|
||||||
|
List<String> outWorkStation = outTasks.stream().collect(Collectors.groupingBy(AgvTask::getEndCode)).keySet().stream().toList();
|
||||||
|
if(CollectionUtils.isNotEmpty(outWorkStation)){
|
||||||
|
for (String station : outWorkStation){
|
||||||
|
Integer totalTasks = agvTaskMapper.queryOutCountByAgv(station);
|
||||||
|
sendConveyorLineData(station, totalTasks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
private void sendConveyorLineData(String workStation, Integer totalTasks) {
|
||||||
|
JSONObject conveyorLineCountMsg = new JSONObject();
|
||||||
|
conveyorLineCountMsg.put("cmd", "conveyorLineCount");
|
||||||
|
conveyorLineCountMsg.put("totalTasks", totalTasks);
|
||||||
|
webSocket.pushMessage(workStation, conveyorLineCountMsg.toJSONString());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package org.cpte.modules.tesAgv.service.impl;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
@ -16,6 +17,7 @@ import org.cpte.modules.constant.enums.AgvStatusEnum;
|
||||||
import org.cpte.modules.constant.enums.AgvVendorEnum;
|
import org.cpte.modules.constant.enums.AgvVendorEnum;
|
||||||
import org.cpte.modules.constant.enums.BusinessTypeEnum;
|
import org.cpte.modules.constant.enums.BusinessTypeEnum;
|
||||||
import org.cpte.modules.constant.enums.CommonStatusEnum;
|
import org.cpte.modules.constant.enums.CommonStatusEnum;
|
||||||
|
import org.cpte.modules.conveyorLine.service.IConveyorLineService;
|
||||||
import org.cpte.modules.inventory.mapper.InventoryMapper;
|
import org.cpte.modules.inventory.mapper.InventoryMapper;
|
||||||
import org.cpte.modules.inventory.service.IInventoryService;
|
import org.cpte.modules.inventory.service.IInventoryService;
|
||||||
import org.cpte.modules.receive.entity.AsnDetail;
|
import org.cpte.modules.receive.entity.AsnDetail;
|
||||||
|
|
@ -32,6 +34,7 @@ import org.cpte.modules.tesAgv.service.ITesAgvService;
|
||||||
import org.cpte.modules.utils.HttpPostUtil;
|
import org.cpte.modules.utils.HttpPostUtil;
|
||||||
import org.jeecg.common.util.RestUtil;
|
import org.jeecg.common.util.RestUtil;
|
||||||
import org.jeecg.common.util.UUIDGenerator;
|
import org.jeecg.common.util.UUIDGenerator;
|
||||||
|
import org.jeecg.modules.message.websocket.WebSocket;
|
||||||
import org.jeecg.modules.openapi.mapper.OpenApiMapper;
|
import org.jeecg.modules.openapi.mapper.OpenApiMapper;
|
||||||
import org.jeecg.modules.system.mapper.SysDictMapper;
|
import org.jeecg.modules.system.mapper.SysDictMapper;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
@ -77,6 +80,12 @@ public class ITesAgvServiceImpl implements ITesAgvService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private IInventoryService inventoryService;
|
private IInventoryService inventoryService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IConveyorLineService iConveyorLineService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private WebSocket webSocket;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String generateTesAgvTaskJson(AgvTask agvTask) {
|
public String generateTesAgvTaskJson(AgvTask agvTask) {
|
||||||
NewMovePodTaskRequest newMovePodTaskRequest = new NewMovePodTaskRequest();
|
NewMovePodTaskRequest newMovePodTaskRequest = new NewMovePodTaskRequest();
|
||||||
|
|
@ -356,6 +365,29 @@ public class ITesAgvServiceImpl implements ITesAgvService {
|
||||||
agvTask.setStatus(AgvStatusEnum.COMPLETED.getValue());
|
agvTask.setStatus(AgvStatusEnum.COMPLETED.getValue());
|
||||||
agvTask.setEndTime(new Date());
|
agvTask.setEndTime(new Date());
|
||||||
agvTaskMapper.updateById(agvTask);
|
agvTaskMapper.updateById(agvTask);
|
||||||
|
|
||||||
|
if (BusinessTypeEnum.INBOUND.getValue().equals(agvTask.getType())) {
|
||||||
|
//推送输送线大屏显示数据
|
||||||
|
Integer totalTasks = agvTaskMapper.queryInCountByAgv(agvTask.getStartCode());
|
||||||
|
sendConveyorLineData(agvTask.getStartCode(), agvTask, totalTasks);
|
||||||
|
} else if (BusinessTypeEnum.OUTBOUND.getValue().equals(agvTask.getType())) {
|
||||||
|
//推送输送线大屏显示数据
|
||||||
|
Integer totalTasks = agvTaskMapper.queryOutCountByAgv(agvTask.getEndCode());
|
||||||
|
sendConveyorLineData(agvTask.getEndCode(), agvTask, totalTasks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendConveyorLineData(String workStation, AgvTask agvTask, Integer totalTasks) {
|
||||||
|
JSONObject conveyorLineData = iConveyorLineService.showConveyorLine(agvTask);
|
||||||
|
JSONObject conveyorLineMsg = new JSONObject();
|
||||||
|
conveyorLineMsg.put("cmd", "conveyorLineData");
|
||||||
|
conveyorLineMsg.put("data", conveyorLineData);
|
||||||
|
webSocket.pushMessage(workStation, conveyorLineMsg.toJSONString());
|
||||||
|
|
||||||
|
JSONObject conveyorLineCountMsg = new JSONObject();
|
||||||
|
conveyorLineCountMsg.put("cmd", "conveyorLineCount");
|
||||||
|
conveyorLineCountMsg.put("totalTasks", totalTasks);
|
||||||
|
webSocket.pushMessage(workStation, conveyorLineCountMsg.toJSONString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue