add: 添加自动门功能,手动推送物料功能

This commit is contained in:
yanps
2024-09-12 20:00:27 +08:00
parent 802ab3671f
commit 3b4f567083
25 changed files with 341 additions and 147 deletions

View File

@@ -7,6 +7,7 @@
sys_user.person_name as personName,
sys_user.gender,
sys_user.phone,
sys_user.devices as devices,
sys_user.email,
sys_user.avatar_name as avatarName,
sys_user.avatar_path as avatarPath,
@@ -52,6 +53,7 @@
<result column="updateTime" property="update_time" />
<result column="extpersonId" property="extperson_id" />
<result column="extuserId" property="extuser_id" />
<result column="devices" property="devices" />
<collection property="depts" ofType="org.nl.system.service.dept.dao.SysDept">
<id property="dept_id" column="dept_id"/>
<result column="dept_name" property="name"/>

View File

@@ -1,8 +1,10 @@
package org.nl.system.service.user.impl;
import cn.dev33.satoken.secure.SaSecureUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -31,6 +33,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -73,6 +76,17 @@ public class ISysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> imp
@Override
public List<SysUserDetail> getUserDetail(UserQuery query, PageQuery pageQuery) {
List<SysUserDetail> userDetail = sysUserMapper.getUserDetail(query, pageQuery);
userDetail.stream().forEach(detail -> {
if (StrUtil.isNotEmpty(detail.getDevices())) {
String devices = detail.getDevices();
CollUtil.addAll(JSONUtil.parseArray(devices), String.class);
List<String> lists = new ArrayList<>();
JSONUtil.parseArray(devices).stream().forEach(device -> {
lists.add(device.toString());
});
detail.setDevice(lists);
}
});
return userDetail;
}
@@ -82,7 +96,7 @@ public class ISysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> imp
public void create(Map userDetail) {
SysUser username = this.getOne(Wrappers.lambdaQuery(SysUser.class)
.eq(SysUser::getUsername, userDetail.get("username")));
if (ObjectUtil.isEmpty(username)) {
if (ObjectUtil.isNotEmpty(username)) {
throw new BadRequestException("用户名已存在");
}
SysUser sysUser = new SysUser();
@@ -132,6 +146,7 @@ public class ISysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> imp
} catch (Exception ex) {
throw new RuntimeException();
}
sysUser.setDevices(StrUtil.toString(sysUser.getDevice()));
sysUser.setUpdate_time(new Date());
sysUser.setUpdate_id(SecurityUtils.getCurrentUserId());
this.updateById(sysUser);

View File

@@ -19,6 +19,14 @@ public interface WmsToAcsService {
*/
AcsResponse notifyAcs(JSONObject map);
/**
* 区域锁定
* @param map: 任务链表
* @return
*/
AcsResponse notifyAcs1(JSONObject map);
/**
* 下发acs任务
* @param schBaseTask

View File

@@ -624,4 +624,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return result;
}
}

View File

@@ -27,6 +27,13 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
return resultForAcs;
}
@Override
public AcsResponse notifyAcs1(JSONObject map) {
String api = "api/wms/updateRouteLock";
AcsResponse resultForAcs = AcsUtil.notifyAcs2(api, map);
return resultForAcs;
}
@Override

View File

@@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@Api(tags = "connector请求lms")
@RequestMapping("/api/")
@RequestMapping("/api/wms")
@Slf4j
@SaIgnore
public class ConnectorToWmsController {
@@ -29,9 +29,20 @@ public class ConnectorToWmsController {
@Log("connector下发agv任务")
@ApiOperation("connector下发agv任务")
@SaIgnore
@PostMapping("/wms/task")
@PostMapping("/task")
public ResponseEntity<Object> createTaskByConnector(@RequestBody JSONArray jsonArray){
return new ResponseEntity(connectorService.createTaskByConnector(jsonArray), HttpStatus.OK);
}
@Log("推送物料信息")
@ApiOperation("推送物料信息")
@SaIgnore
@PostMapping("/createMaterial")
public ResponseEntity<Object> createMaterial(@RequestBody JSONArray jsonArray){
return new ResponseEntity(connectorService.createMaterial(jsonArray), HttpStatus.OK);
}
}

View File

@@ -13,4 +13,11 @@ public interface ConnectorToWmsService {
* @return
*/
Object createTaskByConnector(JSONArray jsonArray);
/**
* connector推送物料信息
* @param jsonArray
* @return
*/
Object createMaterial(JSONArray jsonArray);
}

View File

@@ -1,18 +1,27 @@
package org.nl.wms.ext.connector.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONArray;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import nl.basjes.shaded.org.springframework.util.Assert;
import org.nl.config.MapOf;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.ext.connector.service.ConnectorToWmsService;
import org.nl.wms.ext.connector.service.dto.ConnectorDto;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.point.service.ISchBasePointService;
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_manage.AbstractTask;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.task.TaskFactory;
@@ -20,6 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@@ -29,15 +39,14 @@ public class ConnectorToWmsServiceImpl implements ConnectorToWmsService {
@Autowired
private ISchBasePointService schBasePointService;
@Autowired
private ISchBaseTaskService schBaseTaskService;
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private TaskFactory taskFactory;
@Autowired
private ISchBaseVehiclematerialgroupService iSchBaseVehiclematerialgroupService;
@Override
public Map createTaskByConnector(JSONArray jsonArray) {
@@ -114,4 +123,23 @@ public class ConnectorToWmsServiceImpl implements ConnectorToWmsService {
}
return map;
}
@Override
public Object createMaterial(JSONArray jsonArray) {
log.info("connector下发物料请求参数:{}", jsonArray);
Assert.noNullElements(jsonArray, "请求参数为空!");
List<ConnectorDto> connectorDtos = BeanUtil.copyToList(jsonArray, ConnectorDto.class);
for (ConnectorDto connectorDto : connectorDtos) {
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
schBaseVehiclematerialgroup.setVehicle_code(connectorDto.getVehicle_code());
schBaseVehiclematerialgroup.setJob_name(connectorDto.getJobname());
schBaseVehiclematerialgroup.setMaterial_id(connectorDto.getProductID());
schBaseVehiclematerialgroup.setMaterial_qty(connectorDto.getCurrentqty());
schBaseVehiclematerialgroup.setRegion_code(connectorDto.getNextOperation());
schBaseVehiclematerialgroup.setExtend(JSON.toJSONString(connectorDto));
schBaseVehiclematerialgroup.setOrder_code(connectorDto.getProductionOrder());
iSchBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
}
return null;
}
}

View File

@@ -154,11 +154,12 @@ public class FabController {
List<SendVehicleVo> sendVehicleVoList = sendVehiclesVo.getMater();
if (CollUtil.isEmpty(sendVehicleVoList)) throw new BadRequestException("物料信息为空,请确认!");
AtomicReference<Boolean> flag = new AtomicReference<>(false);
sendVehicleVoList.stream().forEach(sendVehicleVo1 -> {
for (SendVehicleVo sendVehicleVo1 : sendVehicleVoList) {
if (sendVehicleVo1.getMaterial_qty() != 0) {
flag.set(true);
break;
}
});
}
sendVehicleVoList.removeIf(sendVehicleVo1 -> (ObjectUtil.isEmpty(sendVehicleVo1) || sendVehicleVo1.getMaterial_qty() == 0));
if (!flag.get()) {
fabService.createAgvTask(toJSON, "snt");
@@ -167,10 +168,12 @@ public class FabController {
toJSON.put("vehicle_code", schBasePoint.getVehicle_code());
List<String> materiales = new ArrayList<>();
sendVehicleVoList.stream().forEach(send -> {
SchBaseVehiclematerialgroup one = iSchBaseVehiclematerialgroupService.getOne(Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class)
List<SchBaseVehiclematerialgroup> list = iSchBaseVehiclematerialgroupService.list(Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class)
.eq(SchBaseVehiclematerialgroup::getOrder_code, send.getOrder_code()));
send.setDue_date(one.getDue_date());
materiales.add(JSONObject.toJSONString(send));
if (CollUtil.isNotEmpty(list)) {
send.setDue_date(list.get(0).getDue_date());
materiales.add(JSONObject.toJSONString(send));
}
});
toJSON.put("region_code", schBasePoint.getRegion_code());
toJSON.put("material_info", materiales);
@@ -282,9 +285,17 @@ public class FabController {
@Log("查询订单号")
@PostMapping("/orders")
public ResponseEntity<TableDataInfo> selectOrders(@RequestBody SendVehicleVo sendVehicleVo) {
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(sendVehicleVo.getDevice_code());
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备不存在!");
List<String> list = iSchBaseVehiclematerialgroupService.selectOrdersByVehicleCode(schBasePoint.getVehicle_code());
if (StrUtil.isEmpty(sendVehicleVo.getDevice_code()) && StrUtil.isEmpty(sendVehicleVo.getVehicle_code())) {
throw new BadRequestException("请输入设备号或载具号!");
}
List<String> list = null;
if (StrUtil.isNotEmpty(sendVehicleVo.getVehicle_code())) {
list = iSchBaseVehiclematerialgroupService.selectOrdersByVehicleCode(sendVehicleVo.getVehicle_code());
} else if (StrUtil.isNotEmpty(sendVehicleVo.getDevice_code())) {
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(sendVehicleVo.getDevice_code());
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备不存在!");
list = iSchBaseVehiclematerialgroupService.selectOrdersByVehicleCode(schBasePoint.getVehicle_code());
}
HashSet<String> keys = new HashSet<>();
list.stream().forEach(item -> {
keys.add(item);

View File

@@ -27,6 +27,10 @@ public class SendVehicleVo {
* 交期时间
*/
private String due_date;
/**
* 载具号
*/
private String vehicle_code;
/**
* 物料信息
*/

View File

@@ -104,7 +104,7 @@ public class FabServiceImpl {
if(ObjectUtil.isEmpty(schBasePoint1)){
throw new BadRequestException("点位不存在");
}
if(!schBasePoint1.getPoint_status().equals(GoodsEnum.OUT_OF_STOCK.getValue())){
if(!schBasePoint1.getPoint_status().equals(GoodsEnum.OUT_OF_STOCK.getValue()) || schBasePoint1.getIs_lock()){
throw new BadRequestException("该点位不是空站点,请确认再呼叫");
}
param.put("device_code", callEmpVo.getDevice_code());
@@ -122,6 +122,7 @@ public class FabServiceImpl {
Assert.noNullElements(new Object[]{form.getString("device_code"), form.getString("region_code")}, "参数不能为空!");
SendMaterVo sendMaterVo = form.toJavaObject(SendMaterVo.class);
MdBaseVehicle vehicle = iMdBaseVehicleService.getOne(new QueryWrapper<MdBaseVehicle>().eq("vehicle_code", sendMaterVo.getVehicle_code()));
if(ObjectUtil.isEmpty(vehicle)) throw new BadRequestException("载具不存在");
param.put("device_code", sendMaterVo.getDevice_code());
param.put("ext_data", sendMaterVo);
param.put("region_code", sendMaterVo.getRegion_code());

View File

@@ -1,6 +1,7 @@
package org.nl.wms.ext.handheld.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -114,7 +115,7 @@ public class HandheldController {
@Log("修改订单工序")
@ApiOperation("修改订单工序")
@SaIgnore
public ResponseEntity<Object> updateRegionCodeByOrder(@RequestBody JSONObject json) {
public ResponseEntity<Object> updateRegionCodeByOrder(@RequestBody JSONArray json) {
handheldService.updateRegionCodeByOrder(json);
return new ResponseEntity<>(HttpStatus.OK);
}
@@ -146,4 +147,14 @@ public class HandheldController {
return new ResponseEntity<>(vehicleCode,HttpStatus.OK);
}
@PostMapping("/updateRouteStatus")
@Log("修改路线状态")
@SaIgnore
@ApiOperation("修改路线状态")
public ResponseEntity<Object> updateRouteStatus(@RequestBody JSONObject json) {
handheldService.updateRoute(json);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -0,0 +1,19 @@
package org.nl.wms.ext.handheld.handheldEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
/**
* 路线
* @author LENOVO
*/
@Getter
@AllArgsConstructor
public enum RouteEnum {
ROUTE_A("外协区到冲床一路线","AD1");
public String routeName;
public String pointCode;
}

View File

@@ -1,5 +1,6 @@
package org.nl.wms.ext.handheld.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.List;
@@ -72,7 +73,7 @@ public interface HandheldService {
* 修改订单工序
* @param json
*/
void updateRegionCodeByOrder(JSONObject json);
void updateRegionCodeByOrder(JSONArray json);
/**
* 查询用户的关联设备
@@ -94,4 +95,10 @@ public interface HandheldService {
* @return
*/
String selectVehicleByPoint(JSONObject json);
/**
* 修改路线状态
* @param json
*/
void updateRoute(JSONObject json);
}

View File

@@ -14,11 +14,16 @@ import org.nl.common.enums.VehicleTypeEnum;
import org.nl.common.enums.region.RegionEnum;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.RedisUtils;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.param.dao.Param;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.system.service.user.ISysUserService;
import org.nl.system.service.user.dao.SysUser;
import org.nl.wms.database.vehicle.service.IMdBaseVehicleService;
import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.ext.connector.service.WmsToConnectorService;
import org.nl.wms.ext.handheld.handheldEnum.RouteEnum;
import org.nl.wms.ext.handheld.service.HandheldService;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
@@ -35,6 +40,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* @author LENOVO
@@ -60,6 +66,8 @@ public class HandheldServiceImpl implements HandheldService {
private ISysUserService iSysUserService;
@Autowired
private RedisUtils redisUtils;
@Autowired
private WmsToAcsService wmsToAcsService;
@Override
@@ -180,6 +188,11 @@ public class HandheldServiceImpl implements HandheldService {
public void cageBlankingTask(JSONObject param) {
Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_code")},
"当前点位或目的地不能为空!");
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(param.getString("device_code"));
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!");
if (schBasePoint.getIs_lock()) {
throw new BadRequestException("该点位正在执行任务,请稍后再试!");
}
String region_code = param.getString("region_code");
String device_code = param.getString("device_code");
String vehicle_code = param.getString("vehicle_code");
@@ -187,7 +200,7 @@ public class HandheldServiceImpl implements HandheldService {
AbstractTask connectorTask = taskFactory.getTask("BLANKINGTask");
switch (type) {
case "1":
goShelves(param, region_code, device_code, vehicle_code, connectorTask);
goShelves(schBasePoint, param, region_code, device_code, vehicle_code, connectorTask);
break;
case "2":
goWxOrNx(param, region_code, device_code, vehicle_code, connectorTask);
@@ -209,11 +222,9 @@ public class HandheldServiceImpl implements HandheldService {
* @param vehicle_code
* @param connectorTask
*/
private void goShelves(JSONObject param, String region_code, String device_code, String vehicle_code, AbstractTask connectorTask) {
private void goShelves(SchBasePoint schBasePoint, JSONObject param, String region_code, String device_code, String vehicle_code, AbstractTask connectorTask) {
Assert.noNullElements(param.getJSONArray("material"), "参数不能为空!");
JSONArray materials = param.getJSONArray("material");
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code);
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!");
JSONObject jo = new JSONObject();
if (StrUtil.isBlank(region_code)) {
JSONObject json = new JSONObject();
@@ -451,15 +462,14 @@ public class HandheldServiceImpl implements HandheldService {
@Override
public void updateRegionCodeByOrder(JSONObject json) {
Assert.noNullElements((Collection<?>) json, "参数不能为空!");
JSONArray material_info = json.getJSONArray("material_info");
material_info.stream().forEach(material -> {
JSONObject jsonObject = JSONObject.parseObject(StrUtil.toString(material));
public void updateRegionCodeByOrder(JSONArray json) {
Assert.noNullElements(json, "参数不能为空!");
json.stream().forEach(material -> {
cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(material);
iSchBaseVehiclematerialgroupService.update(Wrappers.lambdaUpdate(SchBaseVehiclematerialgroup.class)
.eq(SchBaseVehiclematerialgroup::getOrder_code, jsonObject.getString("order_code"))
.set(SchBaseVehiclematerialgroup::getDue_date, jsonObject.getString("due_date"))
.set(SchBaseVehiclematerialgroup::getRegion_code, jsonObject.getString("region_code"))
.eq(SchBaseVehiclematerialgroup::getOrder_code, jsonObject.getStr("order_code"))
.set(SchBaseVehiclematerialgroup::getDue_date, jsonObject.getStr("due_date"))
.set(SchBaseVehiclematerialgroup::getRegion_code, jsonObject.getStr("region_code"))
);
});
}
@@ -493,7 +503,13 @@ public class HandheldServiceImpl implements HandheldService {
if (regin_code != null) {
throw new BadRequestException("当前设备工序已经登陆,无法继续选择");
} else {
redisUtils.set("mobile:" + json.getString("device_code"), json.getString("device_code"));
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
Param isInvokeConnector = sysParamService.findByCode(GeneralDefinition.HANDHELD_LOGIN_TIME);
int loginTime = 3;
if(ObjectUtil.isNotEmpty(isInvokeConnector)){
loginTime = Integer.parseInt(isInvokeConnector.getValue());
}
redisUtils.set("mobile:" + json.getString("device_code"), json.getString("device_code"),loginTime, TimeUnit.HOURS);
}
}
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(json.getString("device_code"));
@@ -517,5 +533,22 @@ public class HandheldServiceImpl implements HandheldService {
return schBasePoint.getVehicle_code();
}
@Override
public void updateRoute(JSONObject json) {
Assert.noNullElements(new String[]{json.getString("type"), json.getString("status")}, "参数不能为空!");
switch(json.getString("type")){
case "1":
JSONObject jsonObject = new JSONObject();
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
Param isConnectConnector = sysParamService.findByCode(GeneralDefinition.ADD_ROUTE_DOOR_1);
jsonObject.put("pointCode",isConnectConnector.getValue());
jsonObject.put("status",json.getString("status"));
wmsToAcsService.notifyAcs1(jsonObject);
break;
default:
break;
}
}
}

View File

@@ -59,10 +59,18 @@ public class GeneralDefinition {
/** 是否连接 */
public static final String IS_CONNECT_ACS = "is_connect_acs";
public static final String IS_CONNECT_CONNECTOR = "is_connect_connector";
/**
* 外协区到冲床一自动门
*/
public static final String ADD_ROUTE_DOOR_1 = "add_route_door_1";
/**
* 是否调用connector小插件
*/
public static final String IS_INVOKE_CONNECTOR = "is_invoke_connector";
/**
* 手持登录时间
*/
public static final String HANDHELD_LOGIN_TIME = "handheld_login_time";
/** ACS路径 */
public static final String ACS_URL = "acs_url";
/**

View File

@@ -55,13 +55,13 @@ public class CNTTask extends AbstractTask {
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
// 定义按数字后缀排序的比较器
Comparator<SchBaseTask> numericSuffixComparator = (s1, s2) -> {
/*Comparator<SchBaseTask> numericSuffixComparator = (s1, s2) -> {
Integer suffix1 = getNumericSuffix(s1.getPoint_code1());
Integer suffix2 = getNumericSuffix(s2.getPoint_code1());
return suffix1.compareTo(suffix2);
};
List<SchBaseTask> collect = tasks.stream().sorted(numericSuffixComparator).collect(Collectors.toList());
for (SchBaseTask task : collect) {
List<SchBaseTask> collect = tasks.stream().sorted(numericSuffixComparator).collect(Collectors.toList());*/
for (SchBaseTask task : tasks) {
TaskUtils.setUpdateByAcs(task);
// 找起点
SchBasePoint schBasePoint = null;

View File

@@ -26,7 +26,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Component(value = "FTGTask")
@@ -52,13 +54,15 @@ public class FTGTask extends AbstractTask {
protected void create() throws BadRequestException {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
for (SchBaseTask task : tasks) {
TaskUtils.setUpdateByAcs(task);
// 找起点
String requestParam = task.getRequest_param();
JSONObject jsonObject = JSONObject.parseObject(requestParam);
Comparator<SchBaseTask> numericSuffixComparator = (s1, s2) -> {
Integer suffix1 = getNumericSuffix(s1.getPoint_code1());
Integer suffix2 = getNumericSuffix(s2.getPoint_code1());
return suffix1.compareTo(suffix2);
};
List<SchBaseTask> collect = tasks.stream().sorted(numericSuffixComparator).collect(Collectors.toList());
for (SchBaseTask task : collect) {
// 查找空载具点位
SchBasePoint schBasePoint = schBasePointService.selectEmpVehicleByRegionCode(null,task.getVehicle_type());
SchBasePoint schBasePoint = schBasePointService.selectEmpVehicleByRegionCode(RegionEnum.LAG_ROBOT_BEANDING_CELL.getRegion_code(),task.getVehicle_type());
if (ObjectUtil.isEmpty(schBasePoint)) {
task.setRemark("未找到所需点位!");
taskService.updateById(task);
@@ -74,6 +78,7 @@ public class FTGTask extends AbstractTask {
task.setVehicle_code(schBasePoint.getVehicle_code());
task.setRemark("");
task.setTask_status(TaskStatus.CREATED.getCode());
TaskUtils.setUpdateByAcs(task);
taskService.updateById(task);
schBasePoint.setIs_lock(true);
@@ -82,6 +87,12 @@ public class FTGTask extends AbstractTask {
pointService.updateById(schBasePoint);
}
}
private static Integer getNumericSuffix(String filename) {
// 提取数字后缀
String suffix = filename.replaceAll(".*?(\\d+)$", "$1");
// 将后缀转换为整数默认值为0
return suffix.isEmpty() ? 0 : Integer.parseInt(suffix);
}
@Override
protected void updateStatus(String task_code, TaskStatus status) {