opt: 优化connector交互逻辑

This commit is contained in:
yanps
2024-08-07 20:09:12 +08:00
parent 220c5aab4b
commit e51f6c74dc
20 changed files with 252 additions and 86 deletions

View File

@@ -107,4 +107,16 @@ public class AcsToWmsController {
public ResponseEntity<Object> feedAgvAgain(@RequestBody JSONObject param) {
return new ResponseEntity<>(acsToWmsService.feedAgvAgain(param), HttpStatus.OK);
}
@PostMapping("/taskStatus")
@Log("acs反馈LMS任务状态")
@ApiOperation("acs反馈LMS任务状态")
@SaIgnore
@Deprecated
public ResponseEntity<Object> feedTaskStatus(@RequestBody JSONObject param) {
return new ResponseEntity<>(acsToWmsService.feedTaskStatus(param), HttpStatus.OK);
}
}

View File

@@ -42,4 +42,11 @@ public interface AcsToWmsService {
* @return
*/
Object feedAgvAgain(JSONObject param);
/**
* acs反馈LMS任务状态
* @param param
* @return
*/
Object feedTaskStatus(JSONObject param);
}

View File

@@ -19,6 +19,8 @@ import org.nl.common.exception.BadRequestException;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.cockpit.service.dao.DasDeviceFault;
import org.nl.wms.cockpit.service.mapper.CockpitMapper;
import org.nl.wms.database.material.service.IMdBaseMaterialService;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
import org.nl.wms.database.vehicle.service.IMdBaseVehicleService;
import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle;
import org.nl.wms.ext.acs.service.AcsToWmsService;
@@ -95,6 +97,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private WmsToSortingService sortingService;
@Autowired
private IMdBaseVehicleService iMdBaseVehicleService;
@Autowired
private IMdBaseMaterialService iMdBaseMaterialService;
/**
* 初始化反射方法
@@ -315,27 +319,58 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Override
public Object feedAgvAgain(JSONObject param) {
if(ObjectUtil.isNotEmpty(param)){
if (ObjectUtil.isNotEmpty(param)) {
String task_id = param.getString("task_id");
String device_code = param.getString("device_code");
if(StrUtil.isEmpty(task_id) || StrUtil.isEmpty(device_code)){
if (StrUtil.isEmpty(task_id) || StrUtil.isEmpty(device_code)) {
throw new BadRequestException("task_id或device_code为空!");
}
SchBaseTask schBaseTask = taskService.getById(task_id);
if(ObjectUtil.isEmpty(schBaseTask)){
if (ObjectUtil.isEmpty(schBaseTask)) {
throw new BadRequestException("任务不存在!task_id" + task_id);
}
if(device_code.equals(schBaseTask.getPoint_code2())) throw new BadRequestException("设备号与任务设备不匹配!");
if (device_code.equals(schBaseTask.getPoint_code2())) throw new BadRequestException("设备号与任务设备不匹配!");
//查询点位是否存在
SchBasePoint schBasePoint = pointService.selectByPointCode(device_code);
if(ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("点位不存在!device_code" + device_code);
SchBasePoint schBasePoint1 = pointService.selectByNextWaitPoint(device_code,schBaseTask.getVehicle_code());
if(ObjectUtil.isEmpty(schBasePoint1)) throw new BadRequestException("未查询到可用点位!等待点位:"+device_code);
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("点位不存在!device_code" + device_code);
SchBasePoint schBasePoint1 = pointService.selectByNextWaitPoint(device_code, schBaseTask.getVehicle_code());
if (ObjectUtil.isEmpty(schBasePoint1)) throw new BadRequestException("未查询到可用点位!等待点位:" + device_code);
return schBasePoint;
}
return null;
}
@Override
public Object feedTaskStatus(JSONObject param) {
if(ObjectUtil.isNotEmpty(param)){
String task_code = param.getString("task_code");
String task_status = param.getString("task_status");
if(StrUtil.isEmpty(task_code) || StrUtil.isEmpty(task_status)){
throw new BadRequestException("task_code或task_status为空!");
}
SchBaseTask schBaseTask = taskService.getOne(Wrappers.lambdaQuery(SchBaseTask.class)
.eq(SchBaseTask::getTask_code, task_code).in(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode(), TaskStatus.ISSUED.getCode()));
if(ObjectUtil.isEmpty(schBaseTask)) throw new BadRequestException("任务不存在!task_code" + task_code);
switch (task_status) {
case "1":
//执行中
taskService.update(Wrappers.lambdaUpdate(SchBaseTask.class)
.set(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode())
.eq(SchBaseTask::getTask_code, task_code));
break;
case "2":
//任务完成
AbstractTask connectorTask = taskFactory.getTask(schBaseTask.getConfig_code());
connectorTask.forceFinish(schBaseTask.getTask_code());
break;
default:
break;
}
}
return null;
}
/**
* 放货完成
*
@@ -372,8 +407,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private void finishTask(String task_code, String point_code) {
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code)
.set(SchBasePoint::getIs_lock, false));
taskService.update(Wrappers.lambdaUpdate(SchBaseTask.class).eq(SchBaseTask::getTask_code, task_code)
.set(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()));
/*taskService.update(Wrappers.lambdaUpdate(SchBaseTask.class).eq(SchBaseTask::getTask_code, task_code)
.set(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()));*/
}
/**
@@ -426,35 +461,34 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private void requestPickup(SchBaseTask schBaseTask, String status, String is_connector) {
if ("1".equals(is_connector)) {
//反馈connector申请取货
/*SchBaseTaskconfig schBaseTaskconfig = taskConfigService.selectByConfigCode(schBaseTask.getConfig_code());*/
JSONObject json = new JSONObject();
// if (GoodsEnum.PICK_UP.getValue().equals(schBaseTaskconfig.getTask_qf_type())) {
// json.put("vehicle_code", schBaseTask.getVehicle_code());
// json.put("status", status);
// json.put("device_code", schBaseTask.getPoint_code2());
// json.put("task_code", schBaseTask.getTask_code());
// } else if (GoodsEnum.DELIVER_GOODS.getValue().equals(schBaseTaskconfig.getTask_qf_type())) {
json.put("vehicle_code", schBaseTask.getVehicle_code());
json.put("status", status);
json.put("device_code", schBaseTask.getPoint_code1());
json.put("task_code", schBaseTask.getTask_code());
boolean flag = true;
while (flag) {
AcsResponse acsResponse = connectorService.feedAgvTaskStatus(json);
if (acsResponse.getStatus() == 200 && StrUtil.isNotEmpty(acsResponse.getData())) {
JSONArray objects = JSONObject.parseArray(acsResponse.getData());
List<ConnectorDto> connectorDtos = BeanUtil.copyToList(objects, 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.getProductionOrder());
iSchBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
AcsResponse acsResponse = connectorService.feedAgvTaskStatus(json);
if (acsResponse.getStatus() == 200 && StrUtil.isNotEmpty(acsResponse.getData())) {
JSONArray objects = JSONObject.parseArray(acsResponse.getData());
List<ConnectorDto> connectorDtos = BeanUtil.copyToList(objects, ConnectorDto.class);
for (ConnectorDto connectorDto : connectorDtos) {
if (schBaseTask.getVehicle_code().equals(connectorDto.getVehicle_code())) {
//TODO:载具号不同
}
// vehiclematerialgroupService.updateByVehicleCode(schBaseTask.getVehicle_code(), acsResponse.getData());
flag = false;
MdBaseMaterial mdBaseMaterial = iMdBaseMaterialService.getOne(Wrappers.lambdaQuery(MdBaseMaterial.class)
.eq(MdBaseMaterial::getMaterial_code, connectorDto.getProductID()));
if (ObjectUtil.isEmpty(mdBaseMaterial)) {
//TODO:物料不存在
}
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(connectorDto.toString());
schBaseVehiclematerialgroup.setOrder_code(connectorDto.getProductionOrder());
iSchBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
}
}
}

View File

@@ -8,6 +8,8 @@ import lombok.extern.slf4j.Slf4j;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.ext.connector.service.ConnectorToWmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -28,9 +30,9 @@ public class ConnectorToWmsController {
@ApiOperation("connector下发agv任务")
@SaIgnore
@PostMapping("/wms/task")
public Object createTaskByConnector(@RequestBody JSONArray jsonArray){
public ResponseEntity<Object> createTaskByConnector(@RequestBody JSONArray jsonArray){
Object taskByConnector = connectorService.createTaskByConnector(jsonArray);
return taskByConnector;
return new ResponseEntity(connectorService.createTaskByConnector(jsonArray), HttpStatus.OK);
}
}

View File

@@ -39,7 +39,7 @@ public class ConnectorToWmsServiceImpl implements ConnectorToWmsService {
private TaskFactory taskFactory;
@Override
public Object createTaskByConnector(JSONArray jsonArray) {
public Map createTaskByConnector(JSONArray jsonArray) {
log.info("connector下发agv任务请求参数:{}", jsonArray);
Map map = new HashMap();
com.alibaba.fastjson.JSONArray objects = new com.alibaba.fastjson.JSONArray();
@@ -47,7 +47,7 @@ public class ConnectorToWmsServiceImpl implements ConnectorToWmsService {
map.put("status", HttpStatus.HTTP_INTERNAL_ERROR);
map.put("message", "请求参数为空!");
objects.add(map);
return objects;
return map;
}
try {
for (Object jsonObject : jsonArray) {
@@ -96,19 +96,21 @@ public class ConnectorToWmsServiceImpl implements ConnectorToWmsService {
param.put("remark", remark);
param.put("ext_data", data);
connectorTask.apply(param);
/*schBasePoint.setIs_lock(true);
schBasePointService.updateById(schBasePoint);*/
schBasePoint.setIs_lock(true);
schBasePointService.updateById(schBasePoint);
map1.put("task_code", task_code);
map1.put("status", HttpStatus.HTTP_OK);
map1.put("message", "操作成功!");
objects.add(map1);
}
map.put("status", HttpStatus.HTTP_OK);
map.put("message", "操作成功!");
} catch (Exception e) {
map.put("status", HttpStatus.HTTP_INTERNAL_ERROR);
map.put("message", e.getMessage());
objects.add(map);
return objects;
return map;
}
return objects;
return map;
}
}

View File

@@ -44,9 +44,11 @@ public class SchBaseVehiclematerialgroup implements Serializable {
@ApiModelProperty(value = "来源载具编码")
private String source_vehicle_code;
@TableField(exist = false)
@ApiModelProperty(value = "点位编码")
private String point_code;
@TableField(exist = false)
@ApiModelProperty(value = "点位名称")
private String point_name;
@@ -72,7 +74,7 @@ public class SchBaseVehiclematerialgroup implements Serializable {
private BigDecimal material_weight;
@ApiModelProperty(value = "搬运工单编码")
private String workorder_code;
private String order_code;
@ApiModelProperty(value = "组盘次数")
private Integer group_number;

View File

@@ -10,7 +10,7 @@
, po.region_name
FROM sch_base_vehiclematerialgroup vg
LEFT JOIN md_base_material ma ON vg.material_id = ma.material_id
LEFT JOIN sch_base_point po ON po.point_code = vg.point_code
LEFT JOIN sch_base_point po ON vg.region_code = po.region_code
WHERE 1 = 1
<if test="query.vehicle_code != null">
AND vg.vehicle_code = #{query.vehicle_code}

View File

@@ -3,6 +3,8 @@ package org.nl.wms.sch.group.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -15,11 +17,14 @@ import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.database.material.service.IMdBaseMaterialService;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.group.service.dao.mapper.SchBaseVehiclematerialgroupMapper;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -39,14 +44,38 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
@Autowired
private SchBaseVehiclematerialgroupMapper vehiclematerialgroupMapper;
@Autowired
private IMdBaseMaterialService iMdBaseMaterialService;
@Autowired
private ISchBasePointService pointService;
@Override
public IPage<SchBaseVehiclematerialgroup> queryAll(SchBaseVehiclematerialgroupQuery whereJson, PageQuery page){
IPage<SchBaseVehiclematerialgroup> pages = new Page<>(page.getPage() + 1, page.getSize());
pages = vehiclematerialgroupMapper.selectPageLeftJoin(pages, whereJson);
return pages;
IPage<SchBaseVehiclematerialgroup> schBaseVehiclematerialgroupIPage = vehiclematerialgroupMapper.selectPage(pages, Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class)
.eq(StrUtil.isNotBlank(whereJson.getVehicle_code()), SchBaseVehiclematerialgroup::getVehicle_code, whereJson.getVehicle_code())
.eq(StrUtil.isNotBlank(whereJson.getWorkshop_code()), SchBaseVehiclematerialgroup::getWorkshop_code, whereJson.getWorkshop_code())
.eq(StrUtil.isNotBlank(whereJson.getGroup_bind_material_status()), SchBaseVehiclematerialgroup::getGroup_bind_material_status, whereJson.getGroup_bind_material_status())
.eq(StrUtil.isNotBlank(whereJson.getRegion_code()), SchBaseVehiclematerialgroup::getRegion_code, whereJson.getRegion_code()));
schBaseVehiclematerialgroupIPage.getRecords().forEach(item -> {
if(StrUtil.isNotBlank(item.getMaterial_id()))
{
MdBaseMaterial mdBaseMaterial = iMdBaseMaterialService.getOne(Wrappers.lambdaQuery(MdBaseMaterial.class)
.eq(MdBaseMaterial::getMaterial_code, item.getMaterial_id()));
if(ObjectUtil.isNotEmpty(mdBaseMaterial)){
item.setMaterial_name(mdBaseMaterial.getMaterial_name());
item.setMaterial_spec(mdBaseMaterial.getMaterial_spec());
item.setMaterial_code(mdBaseMaterial.getMaterial_code());
}
}
if(StrUtil.isNotBlank(item.getRegion_code()))
{
item.setRegion_name(pointService.list(Wrappers.lambdaQuery(SchBasePoint.class).eq(SchBasePoint::getRegion_code, item.getRegion_code())).get(0).getRegion_name());
}
});
// pages = vehiclematerialgroupMapper.selectPageLeftJoin(pages, whereJson);
return schBaseVehiclematerialgroupIPage;
}
@Override

View File

@@ -132,13 +132,15 @@ public class CNTTask extends AbstractTask {
// 起点清空
if (ObjectUtil.isNotEmpty(schBasePoint)) {
PointUtils.updateByIngTaskCode(schBasePoint);
pointService.updateById(schBasePoint);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, startPoint)
.set(SchBasePoint::getIs_lock, false).set(SchBasePoint::getVehicle_code, null));
}
String point_code2 = taskObj.getPoint_code2();
SchBasePoint schBasePoint2 = pointService.selectByPointCode(point_code2);
if (ObjectUtil.isNotEmpty(schBasePoint2)) {
PointUtils.updateByIngTaskCode(schBasePoint2);
pointService.updateById(schBasePoint2);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code2)
.set(SchBasePoint::getIs_lock, false).set(SchBasePoint::getVehicle_code, null));
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());

View File

@@ -3,6 +3,7 @@ package org.nl.wms.sch.task_manage.task.tasks.cnt;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.GoodsEnum;
import org.nl.common.enums.region.RegionEnum;
@@ -26,6 +27,7 @@ import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -49,6 +51,7 @@ public class FTGTask extends AbstractTask {
private ISchBaseVehiclematerialgroupService schBaseVehiclematerialgroupService;
@Override
@Transactional(rollbackFor = Exception.class)
protected void create() throws BadRequestException {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
@@ -68,10 +71,10 @@ public class FTGTask extends AbstractTask {
continue;
}
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
/*SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
schBaseVehiclematerialgroup.setVehicle_code(task.getVehicle_code());
schBaseVehiclematerialgroup.setPoint_code(schBasePoint.getPoint_code());
schBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
schBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);*/
// 设置终点并修改创建成功状态
task.setPoint_code1(schBasePoint.getPoint_code());
@@ -124,13 +127,15 @@ public class FTGTask extends AbstractTask {
// 起点清空
if (ObjectUtil.isNotEmpty(schBasePoint)) {
PointUtils.updateByIngTaskCode(schBasePoint);
pointService.updateById(schBasePoint);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, startPoint)
.set(SchBasePoint::getIs_lock, false).set(SchBasePoint::getVehicle_code, null));
}
String point_code2 = taskObj.getPoint_code2();
SchBasePoint schBasePoint2 = pointService.selectByPointCode(point_code2);
if (ObjectUtil.isNotEmpty(schBasePoint2)) {
PointUtils.updateByIngTaskCode(schBasePoint2);
pointService.updateById(schBasePoint2);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code2)
.set(SchBasePoint::getIs_lock, false).set(SchBasePoint::getVehicle_code, null));
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());

View File

@@ -318,7 +318,7 @@ public class TBXMLTask extends AbstractTask {
groupEntity.setStanding_time(ObjectUtil.isNotEmpty(orderObject)
? orderObject.getStanding_time()
: 0);
groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(orderObject)
groupEntity.setOrder_code(ObjectUtil.isNotEmpty(orderObject)
? orderObject.getWorkorder_code()
: "");
groupEntity.setMaterial_qty(ObjectUtil.isNotEmpty(qty) && qty > 0