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

@@ -192,9 +192,9 @@ public class ZheDaAgvServiceImpl implements ZheDaAgvService {
siteDeviceDriver.writing(10);
siteDeviceDriver.writing(10);
siteDeviceDriver.writing(10);
log.error("tofix子母车取货完成离开第1次写入{}输送线信号成功!",siteDeviceDriver.getDeviceCode());
//log.error("tofix子母车取货完成离开第1次写入{}输送线信号成功!",siteDeviceDriver.getDeviceCode());
}catch(Exception e){
log.error("tofix子母车取货完成离开第1次写入{}信号失败:{}{}",siteDeviceDriver.getDeviceCode(),e,e.getMessage());
//log.error("tofix子母车取货完成离开第1次写入{}信号失败:{}{}",siteDeviceDriver.getDeviceCode(),e,e.getMessage());
}
}
}

View File

@@ -34,7 +34,7 @@ public class ItemProtocol {
public int getOpcIntegerValue(String protocol) {
Integer value = this.driver.getIntegeregerValue(protocol);
if (value == null) {
log.error("读取错误!");
//log.error("读取错误!");
} else {
return value;
}

View File

@@ -221,6 +221,10 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
SiteDeviceDriver siteDeviceDriver = (SiteDeviceDriver) device.getDeviceDriver();
//输送线对接增加取货完成写入确认信号10
siteDeviceDriver.writing(10);
siteDeviceDriver.writing(10);
siteDeviceDriver.writing(10);
siteDeviceDriver.writing(10);
siteDeviceDriver.writing(10);
}
//校验agv上报站点编号与指令起始点相同
if (ObjectUtil.isEmpty(inst)) {

View File

@@ -51,7 +51,7 @@ public class ItemProtocol {
public int getOpcIntegerValue(String protocol) {
Integer value = this.driver.getIntegeregerValue(protocol);
if (value == null) {
log.error("读取错误!");
//log.error("读取错误!");
} else {
return value;
}

View File

@@ -11,7 +11,6 @@ import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.RouteableDeviceDriver;
import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver;
import org.nl.acs.device_driver.driver.ExecutableDeviceDriver;
import org.nl.acs.ext.wms.data.BaseRequest;
import org.nl.acs.ext.wms.service.AcsToWmsService;
import org.nl.acs.instruction.domain.Instruction;
import org.nl.acs.instruction.service.InstructionService;
@@ -24,7 +23,6 @@ import org.openscada.opc.lib.da.Server;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -221,20 +219,24 @@ public class BaoshijianSiteDeviceDriver extends AbstractOpcDeviceDriver implemen
this.writing("x7", 0);
} else if (x2 != last_x2 && x2 == 1 && !out && x5==0 && x7==0) {
//DJW02申请空盘
mode2 =1;
mode2 = 1;
out = false;
JSONObject jsonObject = new JSONObject();
String device_code = this.device_code + "DJW02";
jsonObject.put("device_code", device_code);
jsonObject.put("requestDate", new Date());
jsonObject.put("vehicle_type",2);
jsonObject.put("vehicle_type", 2);
jsonObject.put("requestNo", IdUtil.simpleUUID());
jsonObject.put("request_method_code", "TBXQKTask");
String result=acsToWmsService.applyTaskToWms(jsonObject);
//log.error("tofix涂板线呼叫空架BaoshijianSiteDeviceDriver" + device_code + "信号为" + mode + ":" + "x2" + ":" + x2 + ",满足请求条件,发出请求空架任务");
String result = acsToWmsService.applyTaskToWms(jsonObject);
JSONObject res_jo = JSONObject.parseObject(result);
if (res_jo.getString("status").equals("200")){
if ("200".equals(res_jo.getString("status"))) {
// log.error("tofix涂板线呼叫空架BaoshijianSiteDeviceDriver" + device_code + "信号为" + mode + ":" + "x2" + ":" + x2 + ",请求空架任务成功!");
this.writing("x5", 1);
out = true;
} else {
log.error("tofix涂板线呼叫空架BaoshijianSiteDeviceDriver" + device_code + "信号为" + mode + ":" + "x2" + ":" + x2 + ",请求空架任务失败!");
}
}

View File

@@ -224,21 +224,15 @@ public class SiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceD
break;
case 6:
//空托盘出库
if (move == 1 && !requireSucess) {
apply(6);
}
log.info("tofix输送线SiteDeviceDriver" + device_code + "信号为" + mode + ":" + move + ":" + requireSucess + "已无此信号协议,需输送线去掉");
break;
case 7:
//涂板线申请空盘
if (move == 0 && !requireSucess) {
apply(7);
}
log.info("tofix输送线SiteDeviceDriver" + device_code + "信号为" + mode + ":" + move + ":" + requireSucess + "已无此信号协议,需输送线去掉");
break;
case 8:
//空托盘出库
if (move == 1 && !requireSucess) {
apply(8);
}
log.info("tofix输送线SiteDeviceDriver" + device_code + "信号为" + mode + ":" + move + ":" + requireSucess + "已无此信号协议,需输送线去掉");
break;
}
switch (flag) {
@@ -250,9 +244,7 @@ public class SiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceD
case 2:
writing(3);
return;
}
}
last_mode = mode;
last_error = error;
@@ -412,31 +404,21 @@ public class SiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceD
jsonObject.put("requestDate", new Date());
jsonObject.put("vehicle_type", this.pallet_type);
jsonObject.put("requestNo", IdUtil.simpleUUID());
switch (type) {
case 5:
if (device_code.startsWith("ZCSSX")) {
log.info("tofix输送线SiteDeviceDriver" + device_code + "信号为" + mode + ":" + move + ":" + requireSucess + ",满足请求条件,发出请求空架任务");
jsonObject.put("request_method_code", "KJQKTask");
} else {
jsonObject.put("request_method_code", "TBXQKTask");
}
break;
case 7:
jsonObject.put("request_method_code", "TBXQKTask");
break;
case 8:
jsonObject.put("request_method_code", "KJSKTask");
break;
if (type == 5) {
if (device_code.startsWith("ZCSSX")) {
log.error("tofix输送线呼叫空架SiteDeviceDriver" + device_code + "信号为" + mode + ":" + move + ":" + requireSucess + ",满足请求条件,发出请求空架任务");
jsonObject.put("request_method_code", "KJQKTask");
}
}
String result = acsToWmsService.applyTaskToWms(jsonObject);
JSONObject res_jo = JSONObject.parseObject(result);
// if (StrUtil.equals(res_jo.getString("code"), "200")) {
this.writing(type);
this.setRequireSucess(true);
log.info("acs申请任务", this.device_code, "任务申请成功!");
// }else{
// this.writing(99);
// }
if (StrUtil.equals(res_jo.getString("code"), "200")) {
this.writing(type);
this.setRequireSucess(true);
log.info("tofix输送线呼叫空架SiteDeviceDriver" + device_code + "信号为" + mode + ":" + move + ":" + requireSucess + ",申请空架任务成功");
} else {
log.info("tofix输送线呼叫空架SiteDeviceDriver" + device_code + "信号为" + mode + ":" + move + ":" + requireSucess + ",申请空架任务失败!" + res_jo.getString("message"));
}
return true;
}
}

View File

@@ -84,9 +84,9 @@ public class QueryZDAgvTaskStatus {
siteDeviceDriver.writing(10);
siteDeviceDriver.writing(10);
siteDeviceDriver.writing(10);
log.error("tofix子母车反馈任务完成第2次写入{}输送线信号成功!",siteDeviceDriver.getDeviceCode());
//log.error("tofix子母车反馈任务完成第2次写入{}输送线信号成功!",siteDeviceDriver.getDeviceCode());
}catch(Exception e){
log.error("tofix子母车反馈任务完成第2次写入检测站点驱动信号失败{}{}",e,e.getMessage());
//log.error("tofix子母车反馈任务完成第2次写入检测站点驱动信号失败{}{}",e,e.getMessage());
}
}
}
@@ -120,7 +120,7 @@ public class QueryZDAgvTaskStatus {
}
}
} catch (Exception e){
log.error("自动线程开始查询浙大AGV任务状态失败失败原因:{}", e.getMessage());
//log.error("自动线程开始查询浙大AGV任务状态失败失败原因:{}", e.getMessage());
}
}

View File

@@ -246,7 +246,7 @@ public class SyncDeviceStatus {
redisUtils.set("agv", agv);
// log.trace("自动上报驱动状态,完毕耗时{}", System.currentTimeMillis() - startTime);
} catch (Exception e) {
log.error("tofix自动线程开始查询AGV设备自动上报驱动状态失败{}{}", e, e.getMessage());
//log.error("tofix自动线程开始查询AGV设备自动上报驱动状态失败{}{}", e, e.getMessage());
}
}
}

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;
}