rev:现场测试优化

This commit is contained in:
2025-09-29 16:34:54 +08:00
parent aea07382d5
commit a3f2c69f32
13 changed files with 145 additions and 55 deletions

View File

@@ -114,6 +114,8 @@ public class WebSocketServer {
item.sendMessage(message);
}else if(item.sid.equals(sid)){
item.sendMessage(message);
}else {
item.sendMessage(message);
}
} catch (IOException ignored) { }
}

View File

@@ -45,6 +45,7 @@ import javax.annotation.PostConstruct;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -154,12 +155,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
SchBasePoint newPoint = null;
String taskPointType = null;
//执行中的任务
List<String> status = Arrays.asList(TaskStatus.EXECUTING.getCode(), TaskStatusEnum.PICK_UP_COMPLETED.getCode());
SchBaseTask baseTask = taskService.getOne(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_code, taskCode)
.eq(SchBaseTask::getIs_delete, PackageInfoIvtEnum.IS_SEND.code(""))
.eq(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode())
.or()
.eq(SchBaseTask::getTask_status, TaskStatusEnum.PICK_UP_COMPLETED.getCode()));
.in(SchBaseTask::getTask_status, status));
if (baseTask == null) {
throw new BadRequestException("该任务未执行或不存在!");
}

View File

@@ -224,6 +224,10 @@ public class PdaTaskServiceImpl implements PdaTaskService {
if (ObjectUtil.isEmpty(point)) {
throw new BadRequestException("点位" + point_code + "不存在!");
}
List<SchBaseTask> list = taskService.findTaskByPoint(point_code);
if (list.size()>0){
throw new BadRequestException("点位" + point_code + "已经存在agv任务!");
}
JSONObject jo = data.getJSONObject(0);
String material_code = jo.getString("material_code");
MdMeMaterialbase mdMeMaterialbase = mdMeMaterialbaseMapper.selectOne(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_code, material_code));
@@ -419,7 +423,13 @@ public class PdaTaskServiceImpl implements PdaTaskService {
@Override
public JSONObject getPointnByRegion(JSONObject whereJson) {
List<SchBasePoint> list = pointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getRegion_code, whereJson.getString("region_code")));
String region_code = whereJson.getString("region_code");
LambdaQueryWrapper<SchBasePoint> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SchBasePoint::getRegion_code, whereJson.getString("region_code"));
if ("L1".equals(region_code)||"L2".equals(region_code)){
wrapper.eq(SchBasePoint::getPoint_type, "4");
}
List<SchBasePoint> list = pointMapper.selectList(wrapper);
List<JSONObject> arr = new ArrayList<>();
JSONObject ret = new JSONObject();
if (ObjectUtil.isNotEmpty(list)) {

View File

@@ -52,4 +52,6 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
List<SchBasePoint> selectSameRowPoints(@Param("point") SchBasePoint point);
List<SchBasePoint> getNewEndBasePoints(@Param("point_code2") String point_code2, @Param("region_code") String region_code);
List<SchBasePoint> getSamePoints(@Param("regionCode") String regionCode, @Param("material_code") String material_code);
}

View File

@@ -150,6 +150,7 @@
AND is_delete = '0'
)
AND point_type = '1'
AND point_status = '1'
AND is_used = 1
ORDER BY col_num DESC
</select>
@@ -209,6 +210,8 @@
OR point_code3 = p.point_code
OR point_code4 = p.point_code
)
AND task_status <![CDATA[<]]> '5'
AND is_delete = '0'
)
AND p.point_code != #{point.point_code}
AND p.row_num = #{point.row_num}
@@ -225,4 +228,26 @@
AND point_status = "1"
ORDER BY in_order_seq asc
</select>
<select id="getSamePoints" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT *
FROM `sch_base_point` p
LEFT JOIN md_pb_groupplate plate ON plate.storagevehicle_code = p.storagevehicle_code
WHERE p.region_code = #{regionCode}
AND 0 = (
SELECT COUNT(*)
FROM sch_base_task
WHERE (point_code1 = p.point_code
OR point_code2 = p.point_code
OR point_code3 = p.point_code
OR point_code4 = p.point_code
)
AND task_status <![CDATA[<]]> '5'
AND is_delete = '0'
)
AND plate.material_code = #{material_code}
AND p.point_status = '2'
AND p.is_used = 1
AND p.point_type = 1
order by in_order_seq asc
</select>
</mapper>

View File

@@ -208,12 +208,13 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
@Override
public List<SchBasePoint> getSamePoints(String regionCode, String material_code) {
LambdaQueryWrapper<SchBasePoint> queryWrapper = new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getRegion_code, regionCode)
.eq(SchBasePoint::getPoint_status, "2")
.eq(SchBasePoint::getMaterial_code, material_code)
.orderByAsc(SchBasePoint::getIn_order_seq);
List<SchBasePoint> list = pointMapper.selectList(queryWrapper);
// LambdaQueryWrapper<SchBasePoint> queryWrapper = new LambdaQueryWrapper<SchBasePoint>()
// .eq(SchBasePoint::getRegion_code, regionCode)
// .eq(SchBasePoint::getPoint_status, "2")
// .eq(SchBasePoint::getMaterial_code, material_code)
// .orderByAsc(SchBasePoint::getIn_order_seq);
// List<SchBasePoint> list = pointMapper.selectList(queryWrapper);
List<SchBasePoint> list = pointMapper.getSamePoints(regionCode,material_code);
if (CollUtil.isNotEmpty(list)){
return list;
}

View File

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.domain.query.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.ext.acs.service.dto.to.BaseRequest;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dto.SchBaseTaskQuery;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;

View File

@@ -16,6 +16,7 @@ import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.language.LangProcess;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskMapper;

View File

@@ -0,0 +1,33 @@
package org.nl.wms.sch.task_manage.task;
import com.alibaba.fastjson.JSONObject;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
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.config.language.LangProcess;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
@Slf4j
@Component
public class TestWebSoctetConnect {
@Resource
private WebSocketServer webSocketServer;
@SneakyThrows
public void run() {
JSONObject res = new JSONObject();
res.put("data", "库存不足!");
SocketMsg messageInfo = new SocketMsg(res, MsgType.INFO);
try {
webSocketServer.sendInfo(messageInfo, "sid");
} catch (IOException e) {
throw new BadRequestException(LangProcess.msg("error_Send"));
}
}
}

View File

@@ -195,6 +195,7 @@ public class NETSLTask extends AbstractTask {
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
// 起点清空
if (ObjectUtil.isNotEmpty(endPointObj)) {
@@ -212,24 +213,24 @@ public class NETSLTask extends AbstractTask {
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
//判断起点区域库存是否小于预警值
// List<SchBasePoint> samePoints = pointService.getSamePoints(startPointObj.getRegion_code(), taskObj.getMaterial_code());
// List<StIvtForewarningmaterial> list = stIvtForewarningmaterialMapper.selectList(new QueryWrapper<StIvtForewarningmaterial>().eq("material_code", taskObj.getMaterial_code()));
// if (list.size() > 0) {
// StIvtForewarningmaterial stIvtForewarningmaterial = list.get(0);
// StIvtForewarningconfig forewarningconfig = stIvtForewarningconfigMapper.selectOne(new QueryWrapper<StIvtForewarningconfig>().eq("id", stIvtForewarningmaterial.getConfig_id()));
// BigDecimal safe_qty_lower_limit = forewarningconfig.getSafe_qty_lower_limit();
// int low = safe_qty_lower_limit.intValue();
// if (samePoints.size() < low) {
// String currentUserId = SecurityUtils.getCurrentUserId();
// SysUser userInfo = sysUserService.getOne(new QueryWrapper<SysUser>().eq("user_id", currentUserId));
// // 获取权限列表 - 登录查找权限
// List<String> permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo));
// if (permissionList.contains("dd")) {
// MdMeMaterialbase mdMeMaterialbase = mdMeMaterialbaseMapper.selectOne(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_code, taskObj.getMaterial_code()));
// noticeService.createNotice(startPointObj.getRegion_name()+"【"+mdMeMaterialbase.getMaterial_name()+"】物料数量低于库存预警值", "库存预警", "dd");
// }
// }
// }
List<SchBasePoint> samePoints = pointService.getSamePoints(startPointObj.getRegion_code(), taskObj.getMaterial_code());
List<StIvtForewarningmaterial> list = stIvtForewarningmaterialMapper.selectList(new QueryWrapper<StIvtForewarningmaterial>().eq("material_code", taskObj.getMaterial_code()));
if (list.size() > 0) {
StIvtForewarningmaterial stIvtForewarningmaterial = list.get(0);
StIvtForewarningconfig forewarningconfig = stIvtForewarningconfigMapper.selectOne(new QueryWrapper<StIvtForewarningconfig>().eq("id", stIvtForewarningmaterial.getConfig_id()));
BigDecimal safe_qty_lower_limit = forewarningconfig.getSafe_qty_lower_limit();
int low = safe_qty_lower_limit.intValue();
if (samePoints.size() < low) {
String currentUserId = SecurityUtils.getCurrentUserId();
SysUser userInfo = sysUserService.getOne(new QueryWrapper<SysUser>().eq("user_id", currentUserId));
// 获取权限列表 - 登录查找权限
List<String> permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo));
if (permissionList.contains("dd")) {
MdMeMaterialbase mdMeMaterialbase = mdMeMaterialbaseMapper.selectOne(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_code, taskObj.getMaterial_code()));
noticeService.createNotice(startPointObj.getRegion_name()+""+mdMeMaterialbase.getMaterial_name()+"】物料数量低于库存预警值", "库存预警", "dd");
}
}
}
}

View File

@@ -159,6 +159,7 @@ public class NETXLTask extends AbstractTask {
private SchBasePoint findNextPoint(List<String> nextRegionStr, String regionCode, SchBaseTask task) {
// 找到同一个区域下物料相同的所有点位
if ("E2".equals(regionCode)) {
SchBasePoint nextPoint = null;
List<SchBasePoint> list = pointService.getSamePoints(regionCode, task.getMaterial_code());
if (!CollectionUtils.isEmpty(list)) {
for (int i = 0; i < list.size(); i++) {
@@ -167,12 +168,12 @@ public class NETXLTask extends AbstractTask {
if (col_num == 1) {
continue;
}
SchBasePoint newPoint;
String newPoint_code = "";
SchBasePoint newPoint = null;
int new_col = col_num - 1;
// 校验当前点位相邻的点是否空闲
for (int j = 0; j < (col_num - 1); j++) {
newPoint_code = forametDevice_code(point.getPoint_code(), new_col);
for (int j = 0; j < new_col; j++) {
newPoint_code = forametDevice_code(point.getPoint_code(), (col_num - 1));
newPoint = pointService.findByCode(newPoint_code);
Boolean result = this.checkIsFree(newPoint_code);
if (!result) {
@@ -180,15 +181,19 @@ public class NETXLTask extends AbstractTask {
point = newPoint;
continue;
}
nextPoint = newPoint;
task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配"));
return newPoint;
return nextPoint;
}
}
}
if (CollectionUtils.isEmpty(list)) {
if (ObjectUtil.isEmpty(nextPoint)) {
//找一排都是空的点位 //todo: 两台机台有没有生成相同物料 机台速度
//找最大列为空且没有任务的点位
List<SchBasePoint> points = pointService.getPointByMaxCol(regionCode, 3);
if (CollectionUtils.isEmpty(points)) {
return null;
}
for (int i = 0; i < points.size(); i++) {
SchBasePoint thirdColPoint = points.get(0);
String firstColPointCode = thirdColPoint.getPoint_code().substring(0, thirdColPoint.getPoint_code().length() - 1) + "1";
@@ -231,7 +236,7 @@ public class NETXLTask extends AbstractTask {
if (newPoint.getPoint_status().equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) {
return false;
}
List<SchBaseTask> list = taskService.findUnFinishTasksByTaskConfigAndPointCode("NETSLTask", point_code);
List<SchBaseTask> list = taskService.findUnFinishTasksByTaskConfigAndPointCode("NETXLTask", point_code);
if (list.size() > 0) {
return false;
}

View File

@@ -121,6 +121,7 @@ public class THXLTask extends AbstractTask {
private SchBasePoint findNextPoint(List<String> nextRegionStr, String regionCode, SchBaseTask task) {
// 找到同一个区域下物料相同的所有点位
SchBasePoint nextPoint = null;
List<SchBasePoint> list = pointService.getSamePoints(regionCode, task.getMaterial_code());
if (!CollectionUtils.isEmpty(list)) {
for (int i = 0; i < list.size(); i++) {
@@ -129,12 +130,12 @@ public class THXLTask extends AbstractTask {
if (col_num == 1) {
continue;
}
SchBasePoint newPoint;
SchBasePoint newPoint = null;
String newPoint_code = "";
int new_col = col_num - 1;
// 校验当前点位相邻的点是否空闲
for (int j = 0; j < (col_num - 1); j++) {
newPoint_code = forametDevice_code(point.getPoint_code(), new_col);
for (int j = 0; j < new_col; j++) {
newPoint_code = forametDevice_code(point.getPoint_code(), (col_num - 1));
newPoint = pointService.findByCode(newPoint_code);
Boolean result = this.checkIsFree(newPoint_code);
if (!result) {
@@ -142,30 +143,34 @@ public class THXLTask extends AbstractTask {
point = newPoint;
continue;
}
nextPoint = newPoint;
task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配"));
return point;
return nextPoint;
}
}
}
if (CollectionUtils.isEmpty(list)) {
if (ObjectUtil.isEmpty(nextPoint)) {
//找一排都是空的点位
//找最大列为空且没有任务的点位
// if (regionCode.equals("KTP")) {
List<SchBasePoint> points = pointService.getPointByMaxCol(regionCode, 2);
for (int i = 0; i < points.size(); i++) {
SchBasePoint twoColPoint = points.get(0);
String firstColPointCode = twoColPoint.getPoint_code().substring(0, twoColPoint.getPoint_code().length() - 1) + "1";
// 查询第一列
SchBasePoint firstColPoint = pointService.findByCode(firstColPointCode);
// 判断第一列否为空且没有任务
boolean isFirstColFree = checkIsEmpty(firstColPoint);
// 如果第一列为空,则返回这个第二列点位
if (isFirstColFree) {
task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配"));
return twoColPoint;
}
continue;
List<SchBasePoint> points = pointService.getPointByMaxCol(regionCode, 2);
if (CollectionUtils.isEmpty(points)) {
return null;
}
for (int i = 0; i < points.size(); i++) {
SchBasePoint twoColPoint = points.get(0);
String firstColPointCode = twoColPoint.getPoint_code().substring(0, twoColPoint.getPoint_code().length() - 1) + "1";
// 查询第一列
SchBasePoint firstColPoint = pointService.findByCode(firstColPointCode);
// 判断第一列否为空且没有任务
boolean isFirstColFree = checkIsEmpty(firstColPoint);
// 如果第一列为空,则返回这个第二列点位
if (isFirstColFree) {
task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配"));
return twoColPoint;
}
continue;
}
// }
// if (regionCode.equals("DKB")){
// //找一排都是空的点位 //todo: 两台机台有没有生成相同物料 机台速度