|
@ -1,15 +1,17 @@ |
|
|
package org.nl.wms.sch.task_manage.task.tasks; |
|
|
package org.nl.wms.sch.task_manage.task.tasks.qt; |
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil; |
|
|
import cn.hutool.core.date.DateUtil; |
|
|
|
|
|
import cn.hutool.core.util.IdUtil; |
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
|
import org.apache.commons.lang.StringUtils; |
|
|
import org.nl.common.exception.BadRequestException; |
|
|
import org.nl.common.exception.BadRequestException; |
|
|
import org.nl.wms.ext.service.WmsToAcsService; |
|
|
|
|
|
import org.nl.wms.ext.service.dto.to.BaseResponse; |
|
|
import org.nl.wms.ext.service.dto.to.BaseResponse; |
|
|
import org.nl.wms.pdm.service.IPdmBdWorkorderService; |
|
|
import org.nl.wms.pdm.service.IPdmBdWorkorderService; |
|
|
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; |
|
|
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.ISchBasePointService; |
|
|
import org.nl.wms.sch.point.service.dao.SchBasePoint; |
|
|
import org.nl.wms.sch.point.service.dao.SchBasePoint; |
|
|
import org.nl.wms.sch.task.service.ISchBaseTaskService; |
|
|
import org.nl.wms.sch.task.service.ISchBaseTaskService; |
|
@ -17,27 +19,30 @@ import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; |
|
|
import org.nl.wms.sch.task.service.dao.SchBaseTask; |
|
|
import org.nl.wms.sch.task.service.dao.SchBaseTask; |
|
|
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; |
|
|
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; |
|
|
import org.nl.wms.sch.task_manage.AbstractTask; |
|
|
import org.nl.wms.sch.task_manage.AbstractTask; |
|
|
import org.nl.wms.sch.task_manage.GeneralDefinition; |
|
|
import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; |
|
|
|
|
|
import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; |
|
|
|
|
|
import org.nl.wms.sch.task_manage.enums.PointStatusEnum; |
|
|
import org.nl.wms.sch.task_manage.task.TaskType; |
|
|
import org.nl.wms.sch.task_manage.task.TaskType; |
|
|
import org.nl.wms.sch.task_manage.task.core.TaskStatus; |
|
|
import org.nl.wms.sch.task_manage.task.core.TaskStatus; |
|
|
import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; |
|
|
import org.nl.wms.util.PointUtils; |
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
import org.springframework.context.annotation.Lazy; |
|
|
import org.springframework.context.annotation.Lazy; |
|
|
import org.springframework.stereotype.Component; |
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
|
|
|
|
|
|
|
import java.util.Arrays; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @Author: sxp |
|
|
* @Author: sxp |
|
|
* @Description: 成叠笼框转运 |
|
|
* @Description: 其他加工送料 |
|
|
* @Date: 2023/1/24 |
|
|
* @Date: 2024/3/11 |
|
|
*/ |
|
|
*/ |
|
|
@Slf4j |
|
|
@Slf4j |
|
|
@Component |
|
|
@Component |
|
|
@TaskType("LKZYTask") |
|
|
@TaskType("QTSLTask") |
|
|
@Lazy |
|
|
@Lazy |
|
|
public class LKZYTask extends AbstractTask { |
|
|
public class QTSLTask extends AbstractTask { |
|
|
private static String TASK_CONFIG_CODE = "LKZYTask"; |
|
|
private static String TASK_CONFIG_CODE = "QTSLTask"; |
|
|
/** |
|
|
/** |
|
|
* 入口 |
|
|
* 入口 |
|
|
*/ |
|
|
*/ |
|
@ -52,60 +57,52 @@ public class LKZYTask extends AbstractTask { |
|
|
private IPdmBdWorkorderService workorderService; |
|
|
private IPdmBdWorkorderService workorderService; |
|
|
@Autowired |
|
|
@Autowired |
|
|
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; |
|
|
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; |
|
|
@Autowired |
|
|
|
|
|
private PointMapper pointMapper; |
|
|
|
|
|
@Autowired |
|
|
|
|
|
private WmsToAcsService wmsToAcsService; |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
// @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
|
protected void create() throws BadRequestException { |
|
|
protected void create() throws BadRequestException { |
|
|
// 获取任务
|
|
|
|
|
|
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); |
|
|
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); |
|
|
// 配置信息
|
|
|
|
|
|
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() |
|
|
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() |
|
|
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); |
|
|
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); |
|
|
for (SchBaseTask task : tasks) { |
|
|
for (SchBaseTask task : tasks) { |
|
|
SchBasePoint point = findStartPoint(taskConfig.getStart_region_str()); |
|
|
SchBasePoint point = findNextPoint(taskConfig.getNext_region_str()); |
|
|
if (ObjectUtil.isEmpty(point)) { |
|
|
if (ObjectUtil.isEmpty(point)) { |
|
|
task.setRemark("未找到所需点位!"); |
|
|
task.setRemark("未找到所需点位!"); |
|
|
taskService.update(task); |
|
|
taskService.update(task); |
|
|
// 消息通知
|
|
|
log.info("成叠笼框暂存点未找到当前符合条件的点位!"); |
|
|
log.info("冲压机叫空盘未找到所需点位!"); |
|
|
|
|
|
continue; |
|
|
continue; |
|
|
} |
|
|
} |
|
|
// 设置起点并修改创建成功状态
|
|
|
task.setPoint_code2(point.getPoint_code()); |
|
|
task.setPoint_code1(point.getPoint_code()); |
|
|
|
|
|
task.setTask_status(TaskStatus.CREATED.getCode()); |
|
|
task.setTask_status(TaskStatus.CREATED.getCode()); |
|
|
task.setRemark(""); |
|
|
task.setRemark(""); |
|
|
taskService.update(task); |
|
|
taskService.update(task); |
|
|
//发起任务时先把点位占用,防止发起重复任务
|
|
|
//发起任务时先把点位占用,防止发起重复任务
|
|
|
point.setIng_task_code(task.getTask_code()); |
|
|
point.setIng_task_code(task.getTask_code()); |
|
|
point.setUpdate_id(GeneralDefinition.ACS_ID); |
|
|
|
|
|
point.setUpdate_name(GeneralDefinition.ACS_NAME); |
|
|
|
|
|
point.setUpdate_time(DateUtil.now()); |
|
|
|
|
|
pointService.update(point); |
|
|
pointService.update(point); |
|
|
//下发
|
|
|
|
|
|
this.renotifyAcs(task); |
|
|
this.renotifyAcs(task); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//查找待分拣物料
|
|
|
/** |
|
|
private SchBasePoint findStartPoint(String startRegionStr) { |
|
|
* 判断目标点位 |
|
|
|
|
|
* |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
private SchBasePoint findNextPoint(String nextReginStr) { |
|
|
|
|
|
//分配空库位
|
|
|
|
|
|
String[] reginList = nextReginStr.split(","); |
|
|
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>(); |
|
|
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>(); |
|
|
lam.in(SchBasePoint::getRegion_code, startRegionStr) |
|
|
lam.in(SchBasePoint::getRegion_code, Arrays.asList(reginList)) |
|
|
.and(la -> la.isNull(SchBasePoint::getIng_task_code) |
|
|
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) |
|
|
|
|
|
.and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住
|
|
|
.or() |
|
|
.or() |
|
|
.eq(SchBasePoint::getIng_task_code, "")) |
|
|
.eq(SchBasePoint::getIng_task_code, "")) |
|
|
.eq(SchBasePoint::getIs_used, true); |
|
|
.eq(SchBasePoint::getIs_used, true) |
|
|
|
|
|
.orderByAsc(SchBasePoint::getIn_order_seq) |
|
|
|
|
|
.orderByAsc(SchBasePoint::getPoint_code); |
|
|
List<SchBasePoint> schBasePoints = pointService.list(lam); |
|
|
List<SchBasePoint> schBasePoints = pointService.list(lam); |
|
|
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; |
|
|
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* todo 任务完成设置完成时间为开始固化时间 |
|
|
|
|
|
*/ |
|
|
|
|
|
@Override |
|
|
@Override |
|
|
// @Transactional(rollbackFor = Exception.class)
|
|
|
// @Transactional(rollbackFor = Exception.class)
|
|
|
protected void updateStatus(String task_code, TaskStatus status) { |
|
|
protected void updateStatus(String task_code, TaskStatus status) { |
|
@ -117,8 +114,23 @@ public class LKZYTask extends AbstractTask { |
|
|
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { |
|
|
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { |
|
|
throw new BadRequestException("该任务已取消!"); |
|
|
throw new BadRequestException("该任务已取消!"); |
|
|
} |
|
|
} |
|
|
|
|
|
// 获取参数
|
|
|
|
|
|
JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) |
|
|
|
|
|
? JSONObject.parseObject(taskObj.getExt_group_data()) |
|
|
|
|
|
: null; |
|
|
|
|
|
// 载具编码:没有就创建一个
|
|
|
|
|
|
String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code()) |
|
|
|
|
|
? taskObj.getVehicle_code() |
|
|
|
|
|
: IdUtil.getSnowflake(1, 1).nextIdStr(); |
|
|
|
|
|
// PdmBdWorkorder workorderCode = null;
|
|
|
|
|
|
// if (extGroupData != null) {
|
|
|
|
|
|
// workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code"))
|
|
|
|
|
|
// ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
|
|
|
|
|
|
// .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code")))
|
|
|
|
|
|
// : null;
|
|
|
|
|
|
// }
|
|
|
String startPoint = taskObj.getPoint_code1(); // 获取起点
|
|
|
String startPoint = taskObj.getPoint_code1(); // 获取起点
|
|
|
String endPoint = taskObj.getPoint_code2(); // 获取终点
|
|
|
String endPoint = ObjectUtil.isNotEmpty(taskObj.getPoint_code2()) ? taskObj.getPoint_code2().substring(0, taskObj.getPoint_code2().length() - 2) : "0"; // 获取终点
|
|
|
SchBasePoint startPointObj = pointService.getById(startPoint); |
|
|
SchBasePoint startPointObj = pointService.getById(startPoint); |
|
|
SchBasePoint endPointObj = pointService.getById(endPoint); |
|
|
SchBasePoint endPointObj = pointService.getById(endPoint); |
|
|
// 根据传来的类型去对任务进行操作
|
|
|
// 根据传来的类型去对任务进行操作
|
|
@ -127,34 +139,63 @@ public class LKZYTask extends AbstractTask { |
|
|
taskObj.setRemark("执行中"); |
|
|
taskObj.setRemark("执行中"); |
|
|
} |
|
|
} |
|
|
if (status.equals(TaskStatus.FINISHED)) { // 完成
|
|
|
if (status.equals(TaskStatus.FINISHED)) { // 完成
|
|
|
|
|
|
// 起点清空
|
|
|
|
|
|
if (ObjectUtil.isNotEmpty(startPointObj)) { |
|
|
|
|
|
PointUtils.clearPoint(startPointObj); |
|
|
|
|
|
} |
|
|
// 终点解锁
|
|
|
// 终点解锁
|
|
|
endPointObj.setIng_task_code(""); |
|
|
endPointObj.setIng_task_code(""); |
|
|
endPointObj.setVehicle_code(taskObj.getVehicle_code()); |
|
|
endPointObj.setVehicle_code(ObjectUtil.isEmpty(endPointObj.getVehicle_code()) ? vehicle_code + "," : endPointObj.getVehicle_code() + vehicle_code + ","); |
|
|
endPointObj.setVehicle_code2(taskObj.getVehicle_code2()); |
|
|
|
|
|
endPointObj.setVehicle_qty(1); |
|
|
endPointObj.setVehicle_qty(1); |
|
|
endPointObj.setUpdate_time(DateUtil.now()); |
|
|
|
|
|
pointService.update(endPointObj); |
|
|
pointService.update(endPointObj); |
|
|
// 起点清空
|
|
|
// 要把数据存到组盘表
|
|
|
startPointObj.setVehicle_code(""); |
|
|
//todo 组盘信息
|
|
|
startPointObj.setVehicle_code2(""); |
|
|
SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); |
|
|
startPointObj.setIng_task_code(""); |
|
|
groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr()); |
|
|
startPointObj.setUpdate_time(DateUtil.now()); |
|
|
groupEntity.setCreate_id("2"); |
|
|
pointService.updateById(startPointObj); |
|
|
groupEntity.setCreate_name("ACS"); |
|
|
|
|
|
groupEntity.setCreate_time(DateUtil.now()); |
|
|
|
|
|
// groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode)
|
|
|
|
|
|
// ? workorderCode.getMaterial_id()
|
|
|
|
|
|
// : "");
|
|
|
|
|
|
// groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode)
|
|
|
|
|
|
// ? workorderCode.getStanding_time()
|
|
|
|
|
|
// : 0);
|
|
|
|
|
|
// groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData)
|
|
|
|
|
|
// ? extGroupData.getBigDecimal("material_qty")
|
|
|
|
|
|
// : BigDecimal.valueOf(0));
|
|
|
|
|
|
// groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode)
|
|
|
|
|
|
// ? workorderCode.getWorkorder_code()
|
|
|
|
|
|
// : "");
|
|
|
|
|
|
groupEntity.setVehicle_code(vehicle_code); |
|
|
|
|
|
groupEntity.setVehicle_type(taskObj.getVehicle_type()); |
|
|
|
|
|
groupEntity.setPoint_code(startPoint); |
|
|
|
|
|
groupEntity.setPoint_name(startPointObj.getPoint_name()); |
|
|
|
|
|
groupEntity.setPcsn(DateUtil.format(DateUtil.date(), "yyyyMMdd")); |
|
|
|
|
|
groupEntity.setInstorage_time(DateUtil.now()); |
|
|
|
|
|
groupEntity.setTask_code(taskObj.getTask_code()); |
|
|
|
|
|
groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定
|
|
|
|
|
|
groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。
|
|
|
|
|
|
groupEntity.setIs_delete(false); |
|
|
|
|
|
groupEntity.setMove_way(startPoint); |
|
|
|
|
|
vehiclematerialgroupService.save(groupEntity); |
|
|
// 任务完成
|
|
|
// 任务完成
|
|
|
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
|
|
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
|
|
|
|
|
taskObj.setGroup_id(groupEntity.getGroup_id()); |
|
|
taskObj.setRemark("任务完成"); |
|
|
taskObj.setRemark("任务完成"); |
|
|
|
|
|
try { |
|
|
|
|
|
//todo 入库成功后上报mes
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
log.error("原材料入库上报MES失败{}", e.getMessage(), e); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
if (status.equals(TaskStatus.CANCELED)) { // 取消
|
|
|
if (status.equals(TaskStatus.CANCELED)) { // 取消
|
|
|
// 终点解锁
|
|
|
// 终点解锁
|
|
|
if (ObjectUtil.isNotEmpty(endPointObj)) { |
|
|
if (ObjectUtil.isNotEmpty(endPointObj)) { |
|
|
endPointObj.setIng_task_code(""); |
|
|
endPointObj.setIng_task_code(""); |
|
|
|
|
|
//任务取消把原先占用的位置释放
|
|
|
pointService.update(endPointObj); |
|
|
pointService.update(endPointObj); |
|
|
} |
|
|
} |
|
|
// 起点解锁
|
|
|
|
|
|
if (ObjectUtil.isNotEmpty(startPointObj)) { |
|
|
|
|
|
startPointObj.setIng_task_code(""); |
|
|
|
|
|
pointService.update(startPointObj); |
|
|
|
|
|
} |
|
|
|
|
|
taskObj.setRemark("任务取消"); |
|
|
taskObj.setRemark("任务取消"); |
|
|
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
|
|
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
|
|
} |
|
|
} |