opt:增加任务及点位消息通知

This commit is contained in:
2024-12-20 23:32:51 +08:00
parent 84ed95bc24
commit 3ed4f5fe10
15 changed files with 81 additions and 88 deletions

View File

@@ -10,7 +10,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.enums.NoticeEnum;
@@ -18,12 +17,11 @@ import org.nl.common.exception.BadRequestException;
import org.nl.common.mnt.websocket.MsgType;
import org.nl.common.mnt.websocket.SocketMsg;
import org.nl.common.mnt.websocket.WebSocketServer;
import org.nl.common.utils.SecurityUtils;
import org.nl.system.service.dict.dao.Dict;
import org.nl.system.service.dict.dao.mapper.SysDictMapper;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.system.service.notice.dao.mapper.SysNoticeMapper;
import org.nl.system.service.notice.dao.SysNotice;
import org.nl.system.service.notice.dao.mapper.SysNoticeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -33,7 +31,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
/**
* @description 服务实现
@@ -156,19 +153,21 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice
@Override
public void createNotice(String msg, String title, String type) {
log.info("创建消息通知-信息:{}, 标题:{}, 类型:{}", msg, title, type);
// 获取标题相同的信息
List<SysNotice> sysNotices = sysNoticeMapper.selectList(new LambdaQueryWrapper<SysNotice>().eq(SysNotice::getNotice_title, title));
if (ObjectUtil.isNotEmpty(sysNotices)) return;
String dealStatus = NoticeEnum.DEAL_STATUS_NO.getValue();
String haveRead = NoticeEnum.HAVE_READ_OFF.getValue();
if (title.contains("LTX")||title.contains("ZCS")) {
dealStatus = NoticeEnum.DEAL_STATUS_NO_NEED.getValue();
haveRead = NoticeEnum.HAVE_READ_ON.getValue();
}
SysNotice noticeDto = SysNotice.builder()
.notice_id(IdUtil.getSnowflake(1,1).nextIdStr())
.notice_id(IdUtil.getSnowflake(1, 1).nextIdStr())
.notice_type(type)
.notice_title(title)
.notice_content(msg)
.deal_status(NoticeEnum.DEAL_STATUS_NO.getValue())
.have_read(NoticeEnum.HAVE_READ_OFF.getValue())
.deal_status(dealStatus)
.have_read(haveRead)
.create_time(DateUtil.now())
.build();
// 插入
sysNoticeMapper.insert(noticeDto);
JSONObject res = new JSONObject();
res.put("data", "notice_message_update");

View File

@@ -34,11 +34,8 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* @Author: lyd
@@ -73,6 +70,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private CockpitMapper cockpitMapper;
@Autowired
private GHCMLTask ghcmlTask;
/**
* 初始化反射方法
*/
@@ -116,13 +114,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
interactRecordService.saveRecord(requestMethodName, param, result, GeneralDefinition.ACS_LMS);
} catch (Exception e) {
String message = e.getMessage();
log.error("ACS请求LMS出现错误,acsApply请求参数为:{},错误信息为:{},{}",param,e, message);
log.error("ACS请求LMS出现错误,acsApply请求参数为:{},错误信息为:{},{}", param, e, message);
result.setCode(HttpStatus.HTTP_BAD_REQUEST);
result.setMessage(message);
result.setRequestNo(requestNo);
String title = "acsApply: " + param.getString("request_method_code");
// 消息通知
noticeService.createNotice("异常信息:" + message, "acsApply: " + param.getString("request_medthod_code"),
NoticeTypeEnum.EXCEPTION.getCode());
noticeService.createNotice("异常信息:" + message, title, NoticeTypeEnum.EXCEPTION.getCode());
}
return result;
}
@@ -194,6 +192,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
switch (type) {
case 1:
//反馈设备状态,将对应固化室修改为传入状态
List<String> deviceCodeList = new ArrayList<>(Arrays.asList("ZCSSX010107", "ZCSSX010207", "ZCSSX030101", "ZCSSX030201", "ZCSSX020101", "ZCSSX020201",
"ZCSSX030107", "ZCSSX030207", "ZCSSX020107", "ZCSSX020207", "LTX01DJW02", "LTXD2JW02", "LTXD03JW02", "LTXD04JW02", "LTXD05JW02", "LTXD06JW02"));
if (deviceCodeList.contains(device_code)) {
String msg = device_code + "的光电反馈变更:"+pointService.getById(device_code).getPoint_status()+" -> " + state;
noticeService.createNotice(msg, device_code, NoticeTypeEnum.NOTIFICATION.getCode());
}
pointMapper.updatePointStatus(device_code, state);
break;
case 2:
@@ -203,8 +207,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
case 3:
//设备反馈故障
try {
SchBasePoint schBasePoint=pointService.getById(device_code);
if(ObjectUtil.isNotEmpty(schBasePoint)) {
SchBasePoint schBasePoint = pointService.getById(device_code);
if (ObjectUtil.isNotEmpty(schBasePoint)) {
if ("0".equals(current_status)) {
schBasePoint.setIs_used(true);
pointService.update(schBasePoint);

View File

@@ -111,7 +111,7 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
@Override
public SchBaseVehiclematerialgroup getVehicleGroupInfo(String vehicleCode, String vehicleType, String status) {
LambdaQueryWrapper<SchBaseVehiclematerialgroup> lambda = new QueryWrapper<SchBaseVehiclematerialgroup>().lambda();
lambda.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode)
lambda.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode)
// .eq(SchBaseVehiclematerialgroup::getVehicle_type, vehicleType)
.eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, status)
.eq(SchBaseVehiclematerialgroup::getIs_delete, false);

View File

@@ -3,7 +3,6 @@ package org.nl.wms.sch.task_manage;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.common.exception.BadRequestException;
@@ -224,9 +223,8 @@ public abstract class AbstractTask {
// 获取执行中的任务
List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(
taskConfig.getConfig_code(), apply_point_code, taskConfig.getTask_direction());
Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn,
"点位申请的任务未完成数已超过上限,无法申请任务");
"点位" + apply_point_code + ",已存在未完成任务类型为" + taskConfig.getConfig_code() + "的任务,申请失败!请检查!");
// 获取对接位点位对象
SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, apply_point_code));

View File

@@ -168,7 +168,7 @@ public class GHCMLTask extends AbstractTask {
if (ObjectUtil.isNotEmpty(temp)) {
return temp;
}
// 如果没有找到。或者分配等待点失败,就选择一个空列存放
//如果没有找到。或者分配等待点失败,就选择一个空列存放
return autoMapper.getZCEmptyMaterialPoint(nextRegionStr.get(0), jsonObject.getString("material_id"));
}

View File

@@ -64,15 +64,16 @@ public class KJQKTask extends AbstractTask {
JSONObject extGroupData = JSONObject.parseObject(requestParam);
// 根据对接位查找对应的载具类型
SchBasePoint endPoint = pointService.getById(task.getPoint_code2());
log.error("tofix__KJQKTask_目标点位:" + endPoint.getPoint_code() + ",点位状态为:"+endPoint.getPoint_status());
log.error("tofix__KJQKTask_目标点位" + endPoint.getPoint_code() + ",点位状态为:"+endPoint.getPoint_status());
if (!endPoint.getPoint_status().equals(PointStatusEnum.EMPTY_POINT.getCode())) {
log.error("tofix__KJQKTask_目标点位:" + endPoint.getPoint_code() + ",点位状态不为无货,不满足补空架任务生成条件");
throw new BadRequestException("目标点位:" + endPoint.getPoint_code() + ",点位状态不为无货,不满足补空架任务生成条件");
log.error("tofix__KJQKTask_目标点位" + endPoint.getPoint_code() + "申请KJQKTask任务,但该点位状态为2有货,不满足任务生成条件,请核对该点位现场的实际状态!");
throw new BadRequestException("点位" + endPoint.getPoint_code() + "申请KJQKTask任务,但该点位状态为2有货,不满足任务生成条件,请核对该点位现场的实际状态!");
}
extGroupData.put("vehicle_type", endPoint.getCan_vehicle_type());
SchBasePoint point = findStartPoint(startRegionStr, extGroupData);
if (ObjectUtil.isEmpty(point)) {
throw new BadRequestException("未找到所需点位!");
log.error("tofix__KJQKTask_点位" + endPoint.getPoint_code() + "未找到取空架起点!请检查ZCSSX010107,ZCSSX010207点位状态是否为2有货,或这些起点已存在未完成的KJQKTask任务");
throw new BadRequestException("点位:" + endPoint.getPoint_code() + "未找到取空架起点!请检查ZCSSX010107,ZCSSX010207点位状态是否为2有货,或这些起点已存在未完成的KJQKTask任务");
}
// 设置终点并修改创建成功状态
task.setPoint_code1(point.getPoint_code());
@@ -80,7 +81,6 @@ public class KJQKTask extends AbstractTask {
task.setRemark("");
task.setTask_status(TaskStatus.CREATED.getCode());
taskService.save(task);
log.error("tofix_KJQKTask+" + task.getPoint_code1() + ":" + task.getPoint_code2() + "创建任务成功!");
point.setIng_task_code(task.getTask_code());
PointUtils.setUpdateByAcs(point);
pointService.updateById(point);
@@ -96,14 +96,13 @@ public class KJQKTask extends AbstractTask {
// todo:不考虑等待点
LambdaQueryWrapper<SchBasePoint> lam = new QueryWrapper<SchBasePoint>().lambda();
lam.in(SchBasePoint::getRegion_code, startRegionStr)
.eq(SchBasePoint::getVehicle_type, extGroupData.getString("vehicle_type"))
.eq(SchBasePoint::getCan_material_type, "AGV")
.eq(SchBasePoint::getIs_used, true)
.and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL有数据表示锁住
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode())
.orderByAsc(SchBasePoint::getCol_num)
.orderByAsc(SchBasePoint::getRow_num);
.orderByAsc(SchBasePoint::getPoint_code);
List<SchBasePoint> list = pointService.list(lam);
return list.size() > 0 ? list.get(0) : null;
}

View File

@@ -100,19 +100,23 @@ public class TBXQKTask extends AbstractTask {
String requestParam = task.getRequest_param();
JSONObject extGroupData = JSONObject.parseObject(requestParam);
// 根据对接位查找对应的载具类型
SchBasePoint startPoint = pointService.getById(task.getPoint_code2());
extGroupData.put("vehicle_type", startPoint.getCan_vehicle_type());
SchBasePoint endPoint = pointService.getById(task.getPoint_code2());
if (!endPoint.getPoint_status().equals(PointStatusEnum.EMPTY_POINT.getCode())) {
log.error("tofix__TBXQKTask_目标点位" + endPoint.getPoint_code() + "申请TBXQKTask任务,但该点位状态为2有货,不满足任务生成条件,请核对该点位现场的实际状态!");
throw new BadRequestException("点位" + endPoint.getPoint_code() + "申请TBXQKTask任务,但该点位状态为2有货,不满足任务生成条件,请核对该点位现场的实际状态!");
}
extGroupData.put("vehicle_type", endPoint.getCan_vehicle_type());
SchBasePoint point = findStartPoint(startRegionStr, extGroupData);
if (ObjectUtil.isEmpty(point)) {
throw new BadRequestException("未找到所需点位!");
log.error("tofix__TBXQKTask_点位" + endPoint.getPoint_code() + "未找到取空架起点!请检查起点ZCSSX020107,ZCSSX020207,ZCSSX030107,ZCSSX030207点位状态是否为2有货,或这些起点已存在未完成的TBXQKTask任务");
throw new BadRequestException("点位" + endPoint.getPoint_code() + "未找到取空架起点!请检查起点ZCSSX020107,ZCSSX020207,ZCSSX030107,ZCSSX030207点位状态是否为2有货,或这些起点已存在未完成的TBXQKTask任务");
}
// 设置终点并修改创建成功状态
task.setPoint_code1(point.getPoint_code());
task.setVehicle_type(startPoint.getCan_vehicle_type());
task.setVehicle_type(endPoint.getCan_vehicle_type());
task.setRemark("");
task.setTask_status(TaskStatus.CREATED.getCode());
taskService.save(task);
point.setIng_task_code(task.getTask_code());
PointUtils.setUpdateByAcs(point);
pointService.updateById(point);
@@ -130,14 +134,15 @@ public class TBXQKTask extends AbstractTask {
lam.in(SchBasePoint::getRegion_code, startRegionStr)
// 点位类型是拆盘机出口
.eq(SchBasePoint::getPoint_type, GeneralDefinition.EXIT)
.eq(SchBasePoint::getCan_vehicle_type, requestParam.getString("vehicle_type"))
.eq(SchBasePoint::getCan_material_type, "RGV")
// 当前执行的任务为空或者NULL有数据表示锁住
.and(la -> la.isNull(SchBasePoint::getIng_task_code)
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.eq(SchBasePoint::getPoint_status,"2")
.eq(SchBasePoint::getPoint_status, "2")
.eq(SchBasePoint::getBlock_num, "1")
.eq(SchBasePoint::getIs_used, true);
.eq(SchBasePoint::getIs_used, true)
.orderByAsc(SchBasePoint::getPoint_code);
List<SchBasePoint> schBasePoints = pointService.list(lam);
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
}