13 changed files with 272 additions and 1224 deletions
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 120 KiB |
@ -1,232 +0,0 @@ |
|||||
package org.nl.wms.sch.task_manage.task.tasks; |
|
||||
|
|
||||
import cn.hutool.core.date.DateUtil; |
|
||||
import cn.hutool.core.util.IdUtil; |
|
||||
import cn.hutool.core.util.ObjectUtil; |
|
||||
import com.alibaba.fastjson.JSONObject; |
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
||||
import lombok.extern.slf4j.Slf4j; |
|
||||
import org.nl.common.exception.BadRequestException; |
|
||||
import org.nl.config.MapOf; |
|
||||
import org.nl.wms.ext.service.WmsToAcsService; |
|
||||
import org.nl.wms.ext.service.dto.to.BaseResponse; |
|
||||
import org.nl.wms.pdm.service.IPdmBdWorkorderService; |
|
||||
import org.nl.wms.pdm.service.dao.PdmBdWorkorder; |
|
||||
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.ISchBaseTaskconfigService; |
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask; |
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; |
|
||||
import org.nl.wms.sch.task_manage.AbstractTask; |
|
||||
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.task.TaskType; |
|
||||
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.context.annotation.Lazy; |
|
||||
import org.springframework.stereotype.Component; |
|
||||
|
|
||||
import java.math.BigDecimal; |
|
||||
import java.util.Arrays; |
|
||||
import java.util.List; |
|
||||
import java.util.stream.Collectors; |
|
||||
|
|
||||
/** |
|
||||
* @Author: psh |
|
||||
* @Description: 空固化架入库 |
|
||||
* @Date: 2023/9/28 |
|
||||
*/ |
|
||||
@Slf4j |
|
||||
@Component |
|
||||
@TaskType("KGHJRKTask") |
|
||||
@Lazy |
|
||||
public class KGHJRKTask extends AbstractTask { |
|
||||
private static String TASK_CONFIG_CODE = "KGHJRKTask"; |
|
||||
/** |
|
||||
* 入口 |
|
||||
*/ |
|
||||
private static String ENTRANCE = "1"; |
|
||||
@Autowired |
|
||||
private ISchBasePointService pointService; |
|
||||
@Autowired |
|
||||
private ISchBaseTaskService taskService; |
|
||||
@Autowired |
|
||||
private ISchBaseTaskconfigService taskConfigService; |
|
||||
@Autowired |
|
||||
private IPdmBdWorkorderService workorderService; |
|
||||
@Autowired |
|
||||
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; |
|
||||
@Autowired |
|
||||
private PointMapper pointMapper; |
|
||||
@Autowired |
|
||||
private WmsToAcsService wmsToAcsService; |
|
||||
|
|
||||
@Override |
|
||||
// @Transactional(rollbackFor = Exception.class)
|
|
||||
protected void create() throws BadRequestException { |
|
||||
// 获取任务
|
|
||||
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); |
|
||||
|
|
||||
for (SchBaseTask task : tasks) { |
|
||||
// 找终点
|
|
||||
SchBasePoint startPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>() |
|
||||
.eq(SchBasePoint::getPoint_code, task.getPoint_code1())); |
|
||||
SchBasePoint point = findNextPoint(startPoint,task.getVehicle_type()); |
|
||||
if (ObjectUtil.isEmpty(point)) { |
|
||||
task.setRemark("未找到所需点位!"); |
|
||||
taskService.update(task); |
|
||||
// 消息通知
|
|
||||
log.info("空固化架入库未找到当前符合条件的点位"); |
|
||||
continue; |
|
||||
} |
|
||||
// 设置终点并修改创建成功状态
|
|
||||
if("1".equals(task.getVehicle_type())){ |
|
||||
task.setTask_type("11"); |
|
||||
}else{ |
|
||||
task.setTask_type("12"); |
|
||||
} |
|
||||
task.setPoint_code2(point.getNext_wait_point()); |
|
||||
task.setTask_status(TaskStatus.CREATED.getCode()); |
|
||||
task.setRemark(""); |
|
||||
taskService.update(task); |
|
||||
|
|
||||
// //发起任务时先把点位占用,防止发起重复任务
|
|
||||
// point.setIng_task_code(task.getTask_code());
|
|
||||
// pointService.update(point);
|
|
||||
|
|
||||
//下发
|
|
||||
this.renotifyAcs(task); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 判断目标点位 |
|
||||
* 1.A区的去A区缓存点,B区的去B区 |
|
||||
* 2.倒叙查找,找到满足当前位置数量不足3的即可 |
|
||||
*/ |
|
||||
private SchBasePoint findNextPoint(SchBasePoint startPoint,String vehicleType) { |
|
||||
String regionCode = null; |
|
||||
if ("A1".equals(startPoint.getWorkshop_code())) { |
|
||||
//A1空架到HCQ1
|
|
||||
regionCode = "HCQ1"; |
|
||||
if("1".equals(vehicleType)){ |
|
||||
regionCode="ZJBKGHJDJW"; |
|
||||
} |
|
||||
|
|
||||
} else if ("A2".equals(startPoint.getWorkshop_code())) { |
|
||||
//A1空架到KGHJ2
|
|
||||
regionCode = "KGHJ2"; |
|
||||
} |
|
||||
List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion(regionCode,"1"); |
|
||||
//从前往后判断,直到发现点位有货,取前一个
|
|
||||
SchBasePoint schBasePoint=null; |
|
||||
if(!"ZJBKGHJDJW".equals(regionCode)) { |
|
||||
for (int i = schBasePointList.size() - 1; i >= 0; i--) { |
|
||||
SchBasePoint temp = schBasePointList.get(i); |
|
||||
if (temp.getVehicle_qty() == 1 && |
|
||||
ObjectUtil.isEmpty(temp.getIng_task_code())) { |
|
||||
if (schBasePoint != null) { |
|
||||
log.info("空固化架放货找到当前点位有货:{},取上一个空位:{}", temp.getPoint_code(), schBasePoint.getPoint_code()); |
|
||||
} else { |
|
||||
log.info("当前区域:"+regionCode+"所有点位均已放满,暂时跳过"); |
|
||||
} |
|
||||
break; |
|
||||
} |
|
||||
schBasePoint = temp; |
|
||||
} |
|
||||
}else{ |
|
||||
for (int i = schBasePointList.size() - 1; i >= 0; i--) { |
|
||||
SchBasePoint temp = schBasePointList.get(i); |
|
||||
if (temp.getVehicle_qty() <3 && |
|
||||
ObjectUtil.isEmpty(temp.getIng_task_code())) { |
|
||||
schBasePoint = temp; |
|
||||
} |
|
||||
} |
|
||||
if (schBasePoint==null){ |
|
||||
log.info("当前区域:"+regionCode+"所有点位均已放满,暂时跳过"); |
|
||||
} |
|
||||
} |
|
||||
return schBasePoint; |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
// @Transactional(rollbackFor = Exception.class)
|
|
||||
protected void updateStatus(String task_code, TaskStatus status) { |
|
||||
// 校验任务
|
|
||||
SchBaseTask taskObj = taskService.getById(task_code); |
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { |
|
||||
throw new BadRequestException("该任务已完成!"); |
|
||||
} |
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { |
|
||||
throw new BadRequestException("该任务已取消!"); |
|
||||
} |
|
||||
|
|
||||
String startPoint = taskObj.getPoint_code1(); // 获取起点
|
|
||||
String endPoint = taskObj.getPoint_code2(); // 获取终点
|
|
||||
SchBasePoint startPointObj = pointService.getById(startPoint); |
|
||||
SchBasePoint endPointObj = pointService.getById(endPoint); |
|
||||
// 根据传来的类型去对任务进行操作
|
|
||||
if (status.equals(TaskStatus.EXECUTING)) { // 执行中
|
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); |
|
||||
taskObj.setRemark("执行中"); |
|
||||
} |
|
||||
if (status.equals(TaskStatus.FINISHED)) { // 完成
|
|
||||
// 终点解锁,库存增加
|
|
||||
startPointObj.setIng_task_code(""); |
|
||||
//正极板对接位通过plc信号同步,任务完成不增加
|
|
||||
if(!"ZJBKGHJDJW".equals(startPointObj.getRegion_code())) { |
|
||||
startPointObj.setVehicle_qty(startPointObj.getVehicle_qty() + 1); |
|
||||
} |
|
||||
pointService.update(endPointObj); |
|
||||
|
|
||||
// 任务完成
|
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
|
||||
taskObj.setRemark("任务完成"); |
|
||||
} |
|
||||
if (status.equals(TaskStatus.CANCELED)) { // 取消
|
|
||||
// 终点解锁
|
|
||||
if (ObjectUtil.isNotEmpty(endPointObj)) { |
|
||||
endPointObj.setIng_task_code(""); |
|
||||
pointService.update(endPointObj); |
|
||||
} |
|
||||
taskObj.setRemark("任务取消"); |
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
|
||||
} |
|
||||
taskService.update(taskObj); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void forceFinish(String task_code) { |
|
||||
this.updateStatus(task_code, TaskStatus.FINISHED); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void cancel(String task_code) { |
|
||||
this.updateStatus(task_code, TaskStatus.CANCELED); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { |
|
||||
//重新计算固化室放货点位
|
|
||||
JSONObject extGroupData = JSONObject.parseObject(schBaseTask.getExt_group_data()); |
|
||||
SchBasePoint startPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>() |
|
||||
.eq(SchBasePoint::getPoint_code, schBaseTask.getPoint_code1())); |
|
||||
SchBasePoint point = findNextPoint(startPoint, schBaseTask.getVehicle_type()); |
|
||||
if("ZJBKGHJDJW".equals(point.getRegion_code())) { |
|
||||
schBaseTask.setPoint_code2(point.getPoint_code() + "0" + (point.getVehicle_qty() + 1)); |
|
||||
}else{ |
|
||||
schBaseTask.setPoint_code2(point.getPoint_code().replace("HCQ","QHQ")); |
|
||||
if(ObjectUtil.isNotEmpty(point.getIng_task_code())&&!schBaseTask.getTask_code().equals(point.getIng_task_code())){ |
|
||||
throw new BadRequestException("当前空架点位有任务,暂不反馈!"); |
|
||||
} |
|
||||
//重算点位时把点位占用
|
|
||||
point.setIng_task_code(schBaseTask.getTask_code()); |
|
||||
pointService.update(point); |
|
||||
} |
|
||||
} |
|
||||
} |
|
@ -0,0 +1,253 @@ |
|||||
|
package org.nl.wms.sch.task_manage.task.tasks; |
||||
|
|
||||
|
import cn.hutool.core.date.DateUtil; |
||||
|
import cn.hutool.core.util.ObjectUtil; |
||||
|
import com.alibaba.fastjson.JSONObject; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
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.pdm.service.IPdmBdWorkorderService; |
||||
|
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.ISchBaseTaskconfigService; |
||||
|
import org.nl.wms.sch.task.service.dao.SchBaseTask; |
||||
|
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; |
||||
|
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.task.TaskType; |
||||
|
import org.nl.wms.sch.task_manage.task.core.TaskStatus; |
||||
|
import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.context.annotation.Lazy; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import java.util.Arrays; |
||||
|
import java.util.List; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
/** |
||||
|
* @Author: psh |
||||
|
* @Description: 点对点任务 |
||||
|
* @Date: 2023/1/24 |
||||
|
*/ |
||||
|
@Slf4j |
||||
|
@Component |
||||
|
@TaskType("POINTTask") |
||||
|
@Lazy |
||||
|
public class POINTTask extends AbstractTask { |
||||
|
private static String TASK_CONFIG_CODE = "POINTTask"; |
||||
|
/** |
||||
|
* 入口 |
||||
|
*/ |
||||
|
private static String ENTRANCE = "1"; |
||||
|
@Autowired |
||||
|
private ISchBasePointService pointService; |
||||
|
@Autowired |
||||
|
private ISchBaseTaskService taskService; |
||||
|
@Autowired |
||||
|
private ISchBaseTaskconfigService taskConfigService; |
||||
|
@Autowired |
||||
|
private IPdmBdWorkorderService workorderService; |
||||
|
@Autowired |
||||
|
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; |
||||
|
@Autowired |
||||
|
private PointMapper pointMapper; |
||||
|
@Autowired |
||||
|
private WmsToAcsService wmsToAcsService; |
||||
|
|
||||
|
@Override |
||||
|
// @Transactional(rollbackFor = Exception.class)
|
||||
|
protected void create() throws BadRequestException { |
||||
|
// 获取任务
|
||||
|
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); |
||||
|
// 配置信息
|
||||
|
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() |
||||
|
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); |
||||
|
for (SchBaseTask task : tasks) { |
||||
|
String extGroupData = task.getExt_group_data(); |
||||
|
JSONObject jsonObject = JSONObject.parseObject(extGroupData); |
||||
|
String materialType = jsonObject.getString("material_type"); |
||||
|
SchBasePoint point = findNextPoint(jsonObject,task); |
||||
|
if (ObjectUtil.isEmpty(point)) { |
||||
|
task.setRemark("未找到所需点位!"); |
||||
|
taskService.update(task); |
||||
|
// 消息通知
|
||||
|
log.info("包片上料未找到当前符合条件的点位materialType:{},",materialType); |
||||
|
continue; |
||||
|
} |
||||
|
// 设置起点并修改创建成功状态
|
||||
|
// 取料先去等待点
|
||||
|
task.setTask_type("3"); |
||||
|
task.setPoint_code1(point.getNext_wait_point()); |
||||
|
task.setTask_status(TaskStatus.CREATED.getCode()); |
||||
|
task.setRemark(""); |
||||
|
taskService.update(task); |
||||
|
|
||||
|
//发起任务时先把点位占用,防止发起重复任务
|
||||
|
// point.setIng_task_code(task.getTask_code());
|
||||
|
// point.setVehicle_qty(point.getVehicle_qty() - 1);
|
||||
|
// point.setVehicle_type(materialType);
|
||||
|
// pointService.update(point);
|
||||
|
|
||||
|
//下发
|
||||
|
this.renotifyAcs(task); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 判断目标点位 |
||||
|
* 从10-1查找可以物料一致且有货的点位 |
||||
|
* |
||||
|
* @param extGroupData |
||||
|
* @return |
||||
|
*/ |
||||
|
private SchBasePoint findNextPoint(JSONObject extGroupData,SchBaseTask task) { |
||||
|
String regionCode = ""; |
||||
|
String materialType = extGroupData.getString("material_type"); |
||||
|
if("1".equals(materialType)){ |
||||
|
regionCode="ZJBDJW"; |
||||
|
}else if("2".equals(materialType)){ |
||||
|
regionCode="HCQ2"; |
||||
|
}else if ("3".equals(materialType)){ |
||||
|
regionCode="HCQ3"; |
||||
|
} |
||||
|
List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion(regionCode,"1"); |
||||
|
for(int i=schBasePointList.size()-1;i>=0;i--){ |
||||
|
SchBasePoint schBasePoint=schBasePointList.get(i); |
||||
|
//已锁定直接返回
|
||||
|
if(task.getTask_code().equals(schBasePoint.getIng_task_code())){ |
||||
|
return schBasePoint; |
||||
|
} |
||||
|
if (!"2".equals(schBasePoint.getPoint_type())&&schBasePoint.getVehicle_qty()!=0 |
||||
|
&&ObjectUtil.isEmpty(schBasePoint.getIng_task_code()) |
||||
|
&&(ObjectUtil.isEmpty(schBasePoint.getVehicle_type())||materialType.equals(schBasePoint.getVehicle_type()))){ |
||||
|
log.info("包片上料任务找到当前符合条件的缓存区位置{}",schBasePoint.getPoint_code()); |
||||
|
return schBasePoint; |
||||
|
} |
||||
|
} |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 1.取货完毕后起点减少最后一份组盘,并且该组盘视为已结束 |
||||
|
* 2.包片机LMS不记录点位信息,由人工对组盘进行操作 |
||||
|
*/ |
||||
|
@Override |
||||
|
// @Transactional(rollbackFor = Exception.class)
|
||||
|
protected void updateStatus(String task_code, TaskStatus status) { |
||||
|
// 校验任务
|
||||
|
SchBaseTask taskObj = taskService.getById(task_code); |
||||
|
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { |
||||
|
throw new BadRequestException("该任务已完成!"); |
||||
|
} |
||||
|
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { |
||||
|
throw new BadRequestException("该任务已取消!"); |
||||
|
} |
||||
|
String startPoint = taskObj.getPoint_code1(); // 获取起点
|
||||
|
String endPoint = taskObj.getPoint_code2(); // 获取终点
|
||||
|
SchBasePoint startPointObj = pointService.getById(startPoint); |
||||
|
SchBasePoint endPointObj = pointService.getById(endPoint); |
||||
|
// 根据传来的类型去对任务进行操作
|
||||
|
if (status.equals(TaskStatus.EXECUTING)) { // 执行中
|
||||
|
taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); |
||||
|
taskObj.setRemark("执行中"); |
||||
|
} |
||||
|
if (status.equals(TaskStatus.FINISHED)) { // 完成
|
||||
|
List<String> vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList()); |
||||
|
String vehicleCode=vehicleCodeList.get(vehicleCodeList.size()-1); |
||||
|
SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>() |
||||
|
.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) |
||||
|
.eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, |
||||
|
GroupBindMaterialStatusEnum.BOUND.getValue())); |
||||
|
if (ObjectUtil.isNotEmpty(one)) { |
||||
|
// throw new BadRequestException(vehicleCode + " => " + startPointObj.getVehicle_type() + "的组盘信息未找到");
|
||||
|
// }
|
||||
|
one.setTask_code(taskObj.getTask_code()); |
||||
|
one.setPoint_code(endPointObj.getPoint_code()); // 当前位置
|
||||
|
one.setPoint_name(endPointObj.getPoint_name()); |
||||
|
one.setMove_way(one.getMove_way() == null ? "" : (one.getMove_way() + " -> ") + endPointObj.getPoint_code()); |
||||
|
one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); |
||||
|
one.setUpdate_id(GeneralDefinition.ACS_ID); |
||||
|
one.setUpdate_name(GeneralDefinition.ACS_NAME); |
||||
|
one.setUpdate_time(DateUtil.now()); |
||||
|
vehiclematerialgroupService.updateById(one); |
||||
|
} |
||||
|
// 起点清空
|
||||
|
if (vehicleCodeList.size()==1) { |
||||
|
startPointObj.setVehicle_code(""); |
||||
|
}else{ |
||||
|
StringBuilder vehicle_code=new StringBuilder(); |
||||
|
for(int i=0;i<=vehicleCodeList.size()-2;i++){ |
||||
|
vehicle_code.append(vehicleCodeList.get(i)).append(','); |
||||
|
} |
||||
|
startPointObj.setVehicle_code(vehicle_code.toString()); |
||||
|
} |
||||
|
if (!startPointObj.getPoint_code().startsWith("ZJBDJW")) { |
||||
|
startPointObj.setVehicle_qty(startPointObj.getVehicle_qty() - 1); |
||||
|
} |
||||
|
startPointObj.setIng_task_code(""); |
||||
|
startPointObj.setUpdate_time(DateUtil.now()); |
||||
|
pointService.updateById(startPointObj); |
||||
|
//包片上料完毕后,整排打上记号只允许包片上料
|
||||
|
pointMapper.updatePointType(endPointObj.getPoint_code().substring(0,endPointObj.getPoint_code().length()-2),"1"); |
||||
|
// 任务完成
|
||||
|
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
||||
|
taskObj.setGroup_id(one.getGroup_id()); |
||||
|
taskObj.setRemark("任务完成"); |
||||
|
} |
||||
|
if (status.equals(TaskStatus.CANCELED)) { // 取消
|
||||
|
// 终点解锁
|
||||
|
if (ObjectUtil.isNotEmpty(endPointObj)) { |
||||
|
endPointObj.setIng_task_code(""); |
||||
|
pointService.update(endPointObj); |
||||
|
} |
||||
|
// 起点解锁
|
||||
|
if (ObjectUtil.isNotEmpty(startPointObj)) { |
||||
|
startPointObj.setIng_task_code(""); |
||||
|
if (startPointObj.getPoint_code().startsWith("ZJBDJW")) { |
||||
|
startPointObj.setVehicle_qty(startPointObj.getVehicle_qty() + 1); |
||||
|
} |
||||
|
pointService.update(endPointObj); |
||||
|
} |
||||
|
taskObj.setRemark("任务取消"); |
||||
|
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
||||
|
} |
||||
|
taskService.update(taskObj); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void forceFinish(String task_code) { |
||||
|
this.updateStatus(task_code, TaskStatus.FINISHED); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void cancel(String task_code) { |
||||
|
this.updateStatus(task_code, TaskStatus.CANCELED); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { |
||||
|
//重算最优点
|
||||
|
JSONObject jsonObject = JSONObject.parseObject(schBaseTask.getExt_group_data()); |
||||
|
SchBasePoint point = this.findNextPoint(jsonObject,schBaseTask); |
||||
|
//正极板现在不堆叠
|
||||
|
if( "1".equals(jsonObject.getString("material_type"))) { |
||||
|
schBaseTask.setPoint_code1(point.getPoint_code()+"0"+(point.getVehicle_qty())); |
||||
|
}else{ |
||||
|
schBaseTask.setPoint_code1(point.getPoint_code().replace("HCQ","QHQ")); |
||||
|
} |
||||
|
//重算点位时把点位占用
|
||||
|
point.setIng_task_code(schBaseTask.getTask_code()); |
||||
|
//如果是正极板对接位则直接减库存
|
||||
|
if ((point.getPoint_code().startsWith("ZJBDJW"))) { |
||||
|
point.setVehicle_qty(point.getVehicle_qty() - 1); |
||||
|
} |
||||
|
pointService.update(point); |
||||
|
} |
||||
|
} |
@ -1,215 +0,0 @@ |
|||||
package org.nl.wms.sch.task_manage.task.tasks; |
|
||||
|
|
||||
import cn.hutool.core.date.DateUtil; |
|
||||
import cn.hutool.core.util.IdUtil; |
|
||||
import cn.hutool.core.util.ObjectUtil; |
|
||||
import com.alibaba.fastjson.JSONObject; |
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
||||
import lombok.extern.slf4j.Slf4j; |
|
||||
import org.nl.common.exception.BadRequestException; |
|
||||
import org.nl.config.MapOf; |
|
||||
import org.nl.wms.ext.service.WmsToAcsService; |
|
||||
import org.nl.wms.ext.service.dto.to.BaseResponse; |
|
||||
import org.nl.wms.pdm.service.IPdmBdWorkorderService; |
|
||||
import org.nl.wms.pdm.service.dao.PdmBdWorkorder; |
|
||||
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.ISchBaseTaskconfigService; |
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask; |
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; |
|
||||
import org.nl.wms.sch.task_manage.AbstractTask; |
|
||||
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.task.TaskType; |
|
||||
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.context.annotation.Lazy; |
|
||||
import org.springframework.stereotype.Component; |
|
||||
|
|
||||
import java.math.BigDecimal; |
|
||||
import java.util.Arrays; |
|
||||
import java.util.List; |
|
||||
import java.util.stream.Collectors; |
|
||||
|
|
||||
/** |
|
||||
* @Author: psh |
|
||||
* @Description: 涂板线补空架 |
|
||||
* @Date: 2023/9/28 |
|
||||
*/ |
|
||||
@Slf4j |
|
||||
@Component |
|
||||
@TaskType("TBXBKJTask") |
|
||||
@Lazy |
|
||||
public class TBXBKJTask extends AbstractTask { |
|
||||
private static String TASK_CONFIG_CODE = "TBXBKJTask"; |
|
||||
/** |
|
||||
* 入口 |
|
||||
*/ |
|
||||
private static String ENTRANCE = "1"; |
|
||||
@Autowired |
|
||||
private ISchBasePointService pointService; |
|
||||
@Autowired |
|
||||
private ISchBaseTaskService taskService; |
|
||||
@Autowired |
|
||||
private ISchBaseTaskconfigService taskConfigService; |
|
||||
@Autowired |
|
||||
private IPdmBdWorkorderService workorderService; |
|
||||
@Autowired |
|
||||
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; |
|
||||
@Autowired |
|
||||
private PointMapper pointMapper; |
|
||||
@Autowired |
|
||||
private WmsToAcsService wmsToAcsService; |
|
||||
|
|
||||
/** |
|
||||
* 涂版线工位发起叫料请求 |
|
||||
* 从对应AB区的空固化架缓存位生成搬运任务 |
|
||||
* 不记录组盘,不考虑点位状态 |
|
||||
*/ |
|
||||
@Override |
|
||||
// @Transactional(rollbackFor = Exception.class)
|
|
||||
protected void create() throws BadRequestException { |
|
||||
// 获取任务
|
|
||||
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); |
|
||||
// 配置信息
|
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() |
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); |
|
||||
for (SchBaseTask task : tasks) { |
|
||||
// 找起点
|
|
||||
SchBasePoint startPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>() |
|
||||
.eq(SchBasePoint::getPoint_code, task.getPoint_code2())); |
|
||||
SchBasePoint point = findNextPoint(startPoint,task); |
|
||||
if (ObjectUtil.isEmpty(point)) { |
|
||||
task.setRemark("未找到所需点位!"); |
|
||||
taskService.update(task); |
|
||||
// 消息通知
|
|
||||
log.info("涂板线补空架未找到空架缓存点存在空架!"); |
|
||||
continue; |
|
||||
} |
|
||||
// 设置终点并修改创建成功状态
|
|
||||
if("TBX1".equals(startPoint.getRegion_code())) { |
|
||||
task.setTask_type("4"); |
|
||||
}else{ |
|
||||
task.setTask_type("7"); |
|
||||
} |
|
||||
task.setPoint_code1(point.getStart_wait_point()); |
|
||||
task.setTask_status(TaskStatus.CREATED.getCode()); |
|
||||
task.setRemark(""); |
|
||||
taskService.update(task); |
|
||||
|
|
||||
//下发
|
|
||||
this.renotifyAcs(task); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
|
|
||||
/** |
|
||||
* 从01到10顺序判断最先有货的工位 |
|
||||
*/ |
|
||||
private SchBasePoint findNextPoint(SchBasePoint startPoint,SchBaseTask task) { |
|
||||
String regionCode = null; |
|
||||
if ("TBX1".equals(startPoint.getRegion_code())) { |
|
||||
//TBX1找A区
|
|
||||
regionCode = "HCQ1"; |
|
||||
|
|
||||
} else if ("TBX2".equals(startPoint.getRegion_code())) { |
|
||||
//TBX2找B区
|
|
||||
regionCode = "HCQ5"; |
|
||||
} |
|
||||
SchBasePoint temp = null; |
|
||||
List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion(regionCode, "1"); |
|
||||
for (SchBasePoint schBasePoint : schBasePointList) { |
|
||||
//如果当前任务已锁定则直接返回
|
|
||||
if(task.getTask_code().equals(schBasePoint.getIng_task_code())){ |
|
||||
return schBasePoint; |
|
||||
} |
|
||||
if (schBasePoint.getVehicle_qty() > 0 && |
|
||||
(ObjectUtil.isEmpty(schBasePoint.getIng_task_code()))) { |
|
||||
if (temp == null || |
|
||||
schBasePoint.getPoint_code().startsWith(temp.getPoint_code().substring(0, temp.getPoint_code().length() - 2)) |
|
||||
&&schBasePoint.getPoint_code().compareTo(temp.getPoint_code())>0){ |
|
||||
temp=schBasePoint; |
|
||||
log.info("涂板线补空架找到当前符合条件的点位{}", schBasePoint.getPoint_code()); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
return temp; |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
// @Transactional(rollbackFor = Exception.class)
|
|
||||
protected void updateStatus(String task_code, TaskStatus status) { |
|
||||
// 校验任务
|
|
||||
SchBaseTask taskObj = taskService.getById(task_code); |
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { |
|
||||
throw new BadRequestException("该任务已完成!"); |
|
||||
} |
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { |
|
||||
throw new BadRequestException("该任务已取消!"); |
|
||||
} |
|
||||
|
|
||||
String startPoint = taskObj.getPoint_code1(); // 获取起点
|
|
||||
String endPoint = taskObj.getPoint_code2(); // 获取终点
|
|
||||
SchBasePoint startPointObj = pointService.getById(startPoint); |
|
||||
SchBasePoint endPointObj = pointService.getById(endPoint); |
|
||||
// 根据传来的类型去对任务进行操作
|
|
||||
if (status.equals(TaskStatus.EXECUTING)) { // 执行中
|
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); |
|
||||
taskObj.setRemark("执行中"); |
|
||||
} |
|
||||
if (status.equals(TaskStatus.FINISHED)) { // 完成
|
|
||||
// 起点解锁,库存减少
|
|
||||
startPointObj.setIng_task_code(""); |
|
||||
startPointObj.setVehicle_qty(startPointObj.getVehicle_qty() - 1); |
|
||||
pointService.update(startPointObj); |
|
||||
|
|
||||
// 任务完成
|
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
|
||||
taskObj.setRemark("任务完成"); |
|
||||
} |
|
||||
if (status.equals(TaskStatus.CANCELED)) { // 取消
|
|
||||
// 起点解锁
|
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) { |
|
||||
startPointObj.setIng_task_code(""); |
|
||||
pointService.update(endPointObj); |
|
||||
} |
|
||||
// 终点解锁
|
|
||||
if (ObjectUtil.isNotEmpty(endPointObj)) { |
|
||||
endPointObj.setIng_task_code(""); |
|
||||
pointService.update(endPointObj); |
|
||||
} |
|
||||
taskObj.setRemark("任务取消"); |
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
|
||||
} |
|
||||
taskService.update(taskObj); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void forceFinish(String task_code) { |
|
||||
this.updateStatus(task_code, TaskStatus.FINISHED); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void cancel(String task_code) { |
|
||||
this.updateStatus(task_code, TaskStatus.CANCELED); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { |
|
||||
//todo 重算最优点
|
|
||||
SchBasePoint startPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>() |
|
||||
.eq(SchBasePoint::getPoint_code, schBaseTask.getPoint_code2())); |
|
||||
SchBasePoint point = this.findNextPoint(startPoint,schBaseTask); |
|
||||
schBaseTask.setPoint_code1(point.getPoint_code()); |
|
||||
//重算点位时把点位占用,防止发起重复任务
|
|
||||
point.setIng_task_code(schBaseTask.getTask_code()); |
|
||||
// //空固化架区别于组盘,任务完成后再扣除库存
|
|
||||
//// point.setVehicle_qty(point.getVehicle_qty() - 1);
|
|
||||
pointService.update(point); |
|
||||
} |
|
||||
} |
|
@ -1,99 +0,0 @@ |
|||||
package org.nl.wms.sch.task_manage.task.tasks; |
|
||||
|
|
||||
import cn.hutool.core.date.DateUtil; |
|
||||
import cn.hutool.core.util.IdUtil; |
|
||||
import cn.hutool.core.util.ObjectUtil; |
|
||||
import com.alibaba.fastjson.JSONObject; |
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
||||
import lombok.extern.slf4j.Slf4j; |
|
||||
import org.nl.common.exception.BadRequestException; |
|
||||
import org.nl.config.MapOf; |
|
||||
import org.nl.wms.ext.service.WmsToAcsService; |
|
||||
import org.nl.wms.ext.service.dto.to.BaseResponse; |
|
||||
import org.nl.wms.pdm.service.IPdmBdWorkorderService; |
|
||||
import org.nl.wms.pdm.service.dao.PdmBdWorkorder; |
|
||||
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.ISchBaseTaskconfigService; |
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask; |
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; |
|
||||
import org.nl.wms.sch.task_manage.AbstractTask; |
|
||||
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.task.TaskType; |
|
||||
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.context.annotation.Lazy; |
|
||||
import org.springframework.stereotype.Component; |
|
||||
|
|
||||
import java.math.BigDecimal; |
|
||||
import java.util.Arrays; |
|
||||
import java.util.List; |
|
||||
import java.util.stream.Collectors; |
|
||||
|
|
||||
/** |
|
||||
* @Author: psh |
|
||||
* @Description: 正极板转库堆叠 |
|
||||
* @Date: 2023/9/28 |
|
||||
*/ |
|
||||
@Slf4j |
|
||||
@Component |
|
||||
@TaskType("ZJBZKDDTask") |
|
||||
@Lazy |
|
||||
public class ZJBZKDDTask extends AbstractTask { |
|
||||
private static String TASK_CONFIG_CODE = "ZJBZKDDTask"; |
|
||||
/** |
|
||||
* 入口 |
|
||||
*/ |
|
||||
private static String ENTRANCE = "1"; |
|
||||
@Autowired |
|
||||
private ISchBasePointService pointService; |
|
||||
@Autowired |
|
||||
private ISchBaseTaskService taskService; |
|
||||
@Autowired |
|
||||
private ISchBaseTaskconfigService taskConfigService; |
|
||||
@Autowired |
|
||||
private IPdmBdWorkorderService workorderService; |
|
||||
@Autowired |
|
||||
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; |
|
||||
@Autowired |
|
||||
private PointMapper pointMapper; |
|
||||
@Autowired |
|
||||
private WmsToAcsService wmsToAcsService; |
|
||||
|
|
||||
@Override |
|
||||
// @Transactional(rollbackFor = Exception.class)
|
|
||||
protected void create() throws BadRequestException { |
|
||||
|
|
||||
} |
|
||||
|
|
||||
|
|
||||
private SchBasePoint findNextPoint(SchBasePoint startPoint) { |
|
||||
return null; |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
// @Transactional(rollbackFor = Exception.class)
|
|
||||
protected void updateStatus(String task_code, TaskStatus status) { |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void forceFinish(String task_code) { |
|
||||
this.updateStatus(task_code, TaskStatus.FINISHED); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void cancel(String task_code) { |
|
||||
this.updateStatus(task_code, TaskStatus.CANCELED); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { |
|
||||
//todo 重算最优点
|
|
||||
} |
|
||||
} |
|
@ -1,294 +0,0 @@ |
|||||
package org.nl.wms.sch.task_manage.task.tasks.ghs; |
|
||||
|
|
||||
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 com.alibaba.fastjson.JSONObject; |
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
||||
import lombok.extern.slf4j.Slf4j; |
|
||||
import org.nl.common.exception.BadRequestException; |
|
||||
import org.nl.config.MapOf; |
|
||||
import org.nl.wms.database.material.service.dao.MdBaseMaterial; |
|
||||
import org.nl.wms.ext.service.WmsToAcsService; |
|
||||
import org.nl.wms.ext.service.dto.to.BaseResponse; |
|
||||
import org.nl.wms.pdm.service.IPdmBdWorkorderService; |
|
||||
import org.nl.wms.pdm.service.dao.PdmBdWorkorder; |
|
||||
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.ISchBaseTaskconfigService; |
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask; |
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; |
|
||||
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.enums.WorkOrderStatusEnum; |
|
||||
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.tasks.mapper.PointMapper; |
|
||||
import org.nl.wms.util.PointUtils; |
|
||||
import org.nl.wms.util.TaskUtils; |
|
||||
import org.springframework.beans.factory.annotation.Autowired; |
|
||||
import org.springframework.context.annotation.Lazy; |
|
||||
import org.springframework.stereotype.Component; |
|
||||
|
|
||||
import java.math.BigDecimal; |
|
||||
import java.util.Arrays; |
|
||||
import java.util.List; |
|
||||
import java.util.stream.Collectors; |
|
||||
|
|
||||
/** |
|
||||
* @Author: psh |
|
||||
* @Description: 固化室起始站点放满后自动生成搬运到内部的任务,优先级为8 |
|
||||
* @Date: 2023/9/28 |
|
||||
*/ |
|
||||
@Slf4j |
|
||||
@Component |
|
||||
@TaskType("GHSFMTask") |
|
||||
@Lazy |
|
||||
public class GHSFMTask extends AbstractTask { |
|
||||
private static String TASK_CONFIG_CODE = "GHSFMTask"; |
|
||||
/** |
|
||||
* 入口 |
|
||||
*/ |
|
||||
private static String ENTRANCE = "1"; |
|
||||
@Autowired |
|
||||
private ISchBasePointService pointService; |
|
||||
@Autowired |
|
||||
private ISchBaseTaskService taskService; |
|
||||
@Autowired |
|
||||
private ISchBaseTaskconfigService taskConfigService; |
|
||||
@Autowired |
|
||||
private IPdmBdWorkorderService workorderService; |
|
||||
@Autowired |
|
||||
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; |
|
||||
@Autowired |
|
||||
private PointMapper pointMapper; |
|
||||
@Autowired |
|
||||
private WmsToAcsService wmsToAcsService; |
|
||||
|
|
||||
/** |
|
||||
* 1.扫描每个允许放货的固化室01和06位置是否满足三列均已放满,开始下一层判断 |
|
||||
* 2.如果当列1-5或6-10总15个位置已经放满,则进行下一层判断 |
|
||||
* 3.如果该固化室30个位置全部放满,则通知acs告知固化室开始固化 |
|
||||
* 4.如果内部2-5或7-10仍有空列,则生成1-(2-5),6-(7-10)的任务,优先级为8最高 |
|
||||
*/ |
|
||||
@Override |
|
||||
// @Transactional(rollbackFor = Exception.class)
|
|
||||
protected void create() throws BadRequestException { |
|
||||
List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion("GHS", "2"); |
|
||||
for (SchBasePoint schBasePoint : schBasePointList) { |
|
||||
if (!schBasePoint.getPoint_code().endsWith("01") && |
|
||||
!schBasePoint.getPoint_code().endsWith("06")) { |
|
||||
continue; |
|
||||
} |
|
||||
if (schBasePoint.getVehicle_qty() == 3 && ObjectUtil.isEmpty(schBasePoint.getIng_task_code())) { |
|
||||
log.info("固化室对接位{}已经放满,开始进行后续判断", schBasePoint.getPoint_code()); |
|
||||
String first = schBasePoint.getPoint_code().substring(0, schBasePoint.getPoint_code().length() - 2); |
|
||||
String last = schBasePoint.getPoint_code().substring(schBasePoint.getPoint_code().length() - 1); |
|
||||
String middle = schBasePoint.getPoint_code().substring(schBasePoint.getPoint_code().length() - 4, schBasePoint.getPoint_code().length() - 2); |
|
||||
boolean flag = false; |
|
||||
String pointCode = null; |
|
||||
//倒叙检查是否有符合要求的终点
|
|
||||
for (int i = 4; i > 0; i--) { |
|
||||
pointCode = first + String.format("%02d", Integer.valueOf(last) + i); |
|
||||
for (SchBasePoint schBasePoint1 : schBasePointList) { |
|
||||
if (schBasePoint1.getPoint_code().equals(pointCode) |
|
||||
&& schBasePoint1.getVehicle_qty() == 0 && ObjectUtil.isEmpty(schBasePoint1.getIng_task_code())) { |
|
||||
log.info("找到当前列内部存在空位{}", pointCode); |
|
||||
flag = true; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
if (flag) { |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
if (flag) { |
|
||||
//生成任务并下发
|
|
||||
this.createTask(schBasePoint, pointCode); |
|
||||
} else { |
|
||||
//如果当列均已放满,检查隔壁列是否已全部放满
|
|
||||
if ("1".equals(last)) { |
|
||||
last = "6"; |
|
||||
} |
|
||||
for (int i = 0; i <= 4; i++) { |
|
||||
pointCode = first + String.format("%02d", Integer.valueOf(last) + i); |
|
||||
for (SchBasePoint schBasePoint1 : schBasePointList) { |
|
||||
if (schBasePoint1.getPoint_code().equals(pointCode) |
|
||||
&& (schBasePoint1.getVehicle_qty() != 3 || ObjectUtil.isNotEmpty(schBasePoint1.getIng_task_code()))) { |
|
||||
log.info("检查当前固化室{}隔壁列,找到当前列内部存在空位{},不发送固化请求", schBasePoint.getPoint_code(), pointCode); |
|
||||
flag = true; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
if (!flag) { |
|
||||
//通知acs已经放满,固化室可以进行固化
|
|
||||
String device_code = "ZDM" + middle; |
|
||||
log.info("当前固化室已经全部放满,通知固化室的自动门{}开始固化", device_code); |
|
||||
JSONObject map = new JSONObject(); |
|
||||
map.put("device_code", device_code); |
|
||||
map.put("type", "1"); |
|
||||
wmsToAcsService.notifyAcs(map); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 创建任务并下发 |
|
||||
* |
|
||||
* @param schBasePoint |
|
||||
* @param endPoint |
|
||||
* @return |
|
||||
*/ |
|
||||
private void createTask(SchBasePoint schBasePoint, String endPoint) { |
|
||||
// 申请任务
|
|
||||
SchBaseTask task = new SchBaseTask(); // 任务实体
|
|
||||
String apply_point_code = schBasePoint.getPoint_code(); // 请求点
|
|
||||
String config_code = "GHSFMTask"; |
|
||||
// 1、校验数据
|
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() |
|
||||
.eq(SchBaseTaskconfig::getConfig_code, config_code)); |
|
||||
Assert.notNull(taskConfig, "找不到配置文件,请确认[" + config_code + "]配置是否存在!"); |
|
||||
// 最大任务数
|
|
||||
Integer tcmn = taskConfig.getTask_create_max_num(); |
|
||||
// 获取执行中的任务
|
|
||||
List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig( |
|
||||
taskConfig.getConfig_code(), apply_point_code + "01", taskConfig.getTask_direction()); |
|
||||
|
|
||||
Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, |
|
||||
"该点位申请的任务未完成数已超过上限,无法申请任务"); |
|
||||
// 获取对接位点位对象
|
|
||||
SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>() |
|
||||
.eq(SchBasePoint::getPoint_code, apply_point_code)); |
|
||||
// 校验是否需要自动agv
|
|
||||
if (!pointObj.getIs_auto()) { |
|
||||
// 如果不需要自动,则不创建任务
|
|
||||
return; |
|
||||
} |
|
||||
// 2、创建申请任务
|
|
||||
task.setConfig_code(config_code); |
|
||||
task.setCreate_mode(GeneralDefinition.ACS_CREATION); |
|
||||
task.setVehicle_code(schBasePoint.getVehicle_code()); |
|
||||
task.setVehicle_qty(schBasePoint.getVehicle_qty()); |
|
||||
task.setTask_status(TaskStatus.APPLY.getCode()); |
|
||||
task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码
|
|
||||
//acs固化室首位不存在01和06整体概念,需要补充01生成第一个点位的任务
|
|
||||
task.setPoint_code1(apply_point_code + "01"); |
|
||||
task.setTask_type("2"); |
|
||||
task.setPoint_code2(endPoint); |
|
||||
task.setTask_status(TaskStatus.CREATED.getCode()); |
|
||||
task.setRemark(""); |
|
||||
// 设置起/终点
|
|
||||
// this.setTaskPoint(taskConfig, task, apply_point_code);
|
|
||||
taskService.create(task); |
|
||||
|
|
||||
//下发
|
|
||||
this.renotifyAcs(task); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 修改任务状态 |
|
||||
* 1.任务完成时,无需再次组盘,将点位表起点货位三个组盘信息移动到终点 |
|
||||
* 2.组盘表中三个点位增加移动动作,并且修改当前点位到目标地点 |
|
||||
* 3. |
|
||||
* |
|
||||
* @param task_code |
|
||||
* @param status |
|
||||
* @return |
|
||||
*/ |
|
||||
@Override |
|
||||
// @Transactional(rollbackFor = Exception.class)
|
|
||||
protected void updateStatus(String task_code, TaskStatus status) { |
|
||||
// 校验任务
|
|
||||
SchBaseTask taskObj = taskService.getById(task_code); |
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { |
|
||||
throw new BadRequestException("该任务已完成!"); |
|
||||
} |
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { |
|
||||
throw new BadRequestException("该任务已取消!"); |
|
||||
} |
|
||||
String startPoint = taskObj.getPoint_code1().substring(0, taskObj.getPoint_code1().length() - 2); // 获取起点
|
|
||||
String endPoint = taskObj.getPoint_code2(); // 获取终点
|
|
||||
SchBasePoint startPointObj = pointService.getById(startPoint); |
|
||||
SchBasePoint endPointObj = pointService.getById(endPoint); |
|
||||
// 根据传来的类型去对任务进行操作
|
|
||||
if (status.equals(TaskStatus.EXECUTING)) { // 执行中
|
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); |
|
||||
taskObj.setRemark("执行中"); |
|
||||
} |
|
||||
if (status.equals(TaskStatus.FINISHED)) { // 完成
|
|
||||
StringBuilder group_id = new StringBuilder(); |
|
||||
// 终点解锁
|
|
||||
endPointObj.setIng_task_code(""); |
|
||||
endPointObj.setVehicle_type(startPointObj.getVehicle_type()); |
|
||||
endPointObj.setVehicle_code(startPointObj.getVehicle_code()); |
|
||||
endPointObj.setVehicle_qty(startPointObj.getVehicle_qty()); |
|
||||
endPointObj.setUpdate_time(DateUtil.now()); |
|
||||
pointService.update(endPointObj); |
|
||||
List<String> vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList()); |
|
||||
for (String vehicleCode : vehicleCodeList) { |
|
||||
SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>() |
|
||||
.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) |
|
||||
.eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, |
|
||||
GroupBindMaterialStatusEnum.BOUND.getValue())); |
|
||||
if (ObjectUtil.isNotEmpty(one)) { |
|
||||
// throw new BadRequestException(vehicleCode + " => " + startPointObj.getVehicle_type() + "的组盘信息未找到");
|
|
||||
// }
|
|
||||
one.setTask_code(taskObj.getTask_code()); |
|
||||
one.setPoint_code(endPointObj.getPoint_code()); // 当前位置
|
|
||||
one.setPoint_name(endPointObj.getPoint_name()); |
|
||||
one.setMove_way(one.getMove_way() == null ? "" : (one.getMove_way() + " -> ") + endPointObj.getPoint_code()); |
|
||||
one.setUpdate_id(GeneralDefinition.ACS_ID); |
|
||||
one.setUpdate_name(GeneralDefinition.ACS_NAME); |
|
||||
one.setUpdate_time(DateUtil.now()); |
|
||||
vehiclematerialgroupService.updateById(one); |
|
||||
group_id.append(one.getGroup_id()).append(','); |
|
||||
} |
|
||||
} |
|
||||
// 起点清空
|
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) { |
|
||||
PointUtils.clearPoint(startPointObj); |
|
||||
} |
|
||||
// 任务完成
|
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
|
||||
taskObj.setGroup_id(group_id.toString()); |
|
||||
taskObj.setRemark("任务完成"); |
|
||||
} |
|
||||
if (status.equals(TaskStatus.CANCELED)) { // 取消
|
|
||||
// 终点解锁
|
|
||||
if (ObjectUtil.isNotEmpty(endPointObj)) { |
|
||||
endPointObj.setIng_task_code(""); |
|
||||
pointService.update(endPointObj); |
|
||||
} |
|
||||
taskObj.setRemark("任务取消"); |
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
|
||||
} |
|
||||
taskService.update(taskObj); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void forceFinish(String task_code) { |
|
||||
this.updateStatus(task_code, TaskStatus.FINISHED); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void cancel(String task_code) { |
|
||||
this.updateStatus(task_code, TaskStatus.CANCELED); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
@Override |
|
||||
protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { |
|
||||
//todo 重算最优点
|
|
||||
} |
|
||||
} |
|
@ -1,347 +0,0 @@ |
|||||
package org.nl.wms.sch.task_manage.task.tasks.ghs; |
|
||||
|
|
||||
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 com.alibaba.fastjson.JSONObject; |
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
||||
import lombok.SneakyThrows; |
|
||||
import lombok.extern.slf4j.Slf4j; |
|
||||
import org.nl.common.exception.BadRequestException; |
|
||||
import org.nl.config.MapOf; |
|
||||
import org.nl.wms.ext.service.WmsToAcsService; |
|
||||
import org.nl.wms.ext.service.dto.to.BaseResponse; |
|
||||
import org.nl.wms.pdm.service.IPdmBdWorkorderService; |
|
||||
import org.nl.wms.pdm.service.dao.PdmBdWorkorder; |
|
||||
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.ISchBaseTaskconfigService; |
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask; |
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; |
|
||||
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.task.TaskType; |
|
||||
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.context.annotation.Lazy; |
|
||||
import org.springframework.stereotype.Component; |
|
||||
|
|
||||
import java.math.BigDecimal; |
|
||||
import java.util.Arrays; |
|
||||
import java.util.List; |
|
||||
import java.util.stream.Collectors; |
|
||||
|
|
||||
/** |
|
||||
* @Author: psh |
|
||||
* @Description: 固化室通知取货后将十个点位增加到取货队列,固化室发起自动取货任务,当前固化室十个点位取货完毕后通知固化室取货完毕 |
|
||||
* @Date: 2023/9/28 |
|
||||
*/ |
|
||||
@Slf4j |
|
||||
@Component |
|
||||
@TaskType("GHSQHTask") |
|
||||
@Lazy |
|
||||
public class GHSQHTask extends AbstractTask { |
|
||||
private static String TASK_CONFIG_CODE = "GHSQHTask"; |
|
||||
/** |
|
||||
* 入口 |
|
||||
*/ |
|
||||
private static String ENTRANCE = "1"; |
|
||||
@Autowired |
|
||||
private ISchBasePointService pointService; |
|
||||
@Autowired |
|
||||
private ISchBaseTaskService taskService; |
|
||||
@Autowired |
|
||||
private ISchBaseTaskconfigService taskConfigService; |
|
||||
@Autowired |
|
||||
private IPdmBdWorkorderService workorderService; |
|
||||
@Autowired |
|
||||
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; |
|
||||
@Autowired |
|
||||
private PointMapper pointMapper; |
|
||||
@Autowired |
|
||||
private WmsToAcsService wmsToAcsService; |
|
||||
|
|
||||
/** |
|
||||
* 1.扫描每个允许取货的固化室从1-10的顺序开始进行取货 |
|
||||
*/ |
|
||||
@Override |
|
||||
// @Transactional(rollbackFor = Exception.class)
|
|
||||
protected void create() throws BadRequestException { |
|
||||
|
|
||||
List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion("GHS", "3"); |
|
||||
if (schBasePointList.size() == 0) { |
|
||||
// 消息通知
|
|
||||
log.info("未找到当前符合允许取货的固化室点位,暂不生成任务"); |
|
||||
return; |
|
||||
} |
|
||||
SchBasePoint schBasePoint = null; |
|
||||
//按顺序查找第一个符合条件的固化室位置,发起任务
|
|
||||
for (SchBasePoint schBasePoint1 : schBasePointList) { |
|
||||
if (schBasePoint1.getVehicle_qty() == 3 && ObjectUtil.isEmpty(schBasePoint1.getIng_task_code())) { |
|
||||
schBasePoint = schBasePoint1; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
if (ObjectUtil.isEmpty(schBasePoint)) { |
|
||||
// 消息通知
|
|
||||
log.info("未找到当前符合允许取货的固化室点位,暂不生成任务"); |
|
||||
return; |
|
||||
} |
|
||||
SchBasePoint nextPoint = this.findNextPoint(schBasePoint); |
|
||||
if (ObjectUtil.isEmpty(nextPoint)) { |
|
||||
// 消息通知
|
|
||||
log.info("未找到当前符合允许放货的缓存点,暂不生成任务Vehicle_type:{}", schBasePoint.getVehicle_type()); |
|
||||
return; |
|
||||
} |
|
||||
// 放料先去等待点
|
|
||||
this.createTask(schBasePoint, nextPoint.getStart_wait_point()); |
|
||||
|
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 创建任务并下发 |
|
||||
* |
|
||||
* @param schBasePoint |
|
||||
* @param endPoint |
|
||||
* @return |
|
||||
*/ |
|
||||
private void createTask(SchBasePoint schBasePoint, String endPoint) { |
|
||||
// 申请任务
|
|
||||
SchBaseTask task = new SchBaseTask(); // 任务实体
|
|
||||
String apply_point_code = schBasePoint.getPoint_code(); // 请求点
|
|
||||
// 获取对接位点位对象
|
|
||||
SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>() |
|
||||
.eq(SchBasePoint::getPoint_code, apply_point_code)); |
|
||||
//首位01或06生成任务需要补01,例如GHS0101下发需要改成GHS010101
|
|
||||
if(apply_point_code.endsWith("01")||apply_point_code.endsWith("06")) { |
|
||||
apply_point_code+="01"; |
|
||||
} |
|
||||
String config_code = "GHSQHTask"; |
|
||||
// 1、校验数据
|
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() |
|
||||
.eq(SchBaseTaskconfig::getConfig_code, config_code)); |
|
||||
Assert.notNull(taskConfig, "找不到配置文件,请确认[" + config_code + "]配置是否存在!"); |
|
||||
// 最大任务数
|
|
||||
Integer tcmn = taskConfig.getTask_create_max_num(); |
|
||||
// 获取执行中的任务
|
|
||||
List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig( |
|
||||
taskConfig.getConfig_code(), apply_point_code, taskConfig.getTask_direction()); |
|
||||
|
|
||||
Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, |
|
||||
"该点位申请的任务未完成数已超过上限,无法申请任务"); |
|
||||
// 校验是否需要自动agv
|
|
||||
if (!pointObj.getIs_auto()) { |
|
||||
// 如果不需要自动,则不创建任务
|
|
||||
return; |
|
||||
} |
|
||||
// 2、创建申请任务
|
|
||||
task.setConfig_code(config_code); |
|
||||
task.setCreate_mode(GeneralDefinition.ACS_CREATION); |
|
||||
task.setVehicle_code(schBasePoint.getVehicle_code()); |
|
||||
task.setVehicle_qty(schBasePoint.getVehicle_qty()); |
|
||||
// task.setTask_status(TaskStatus.APPLY.getCode());
|
|
||||
task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码
|
|
||||
//首位01或06生成任务需要补01,例如GHS0101下发需要改成GHS010101
|
|
||||
task.setPoint_code1(apply_point_code); |
|
||||
task.setPoint_code2(endPoint); |
|
||||
task.setTask_status(TaskStatus.CREATED.getCode()); |
|
||||
task.setRemark(""); |
|
||||
if("GHS1".equals(schBasePoint.getRegion_code())) { |
|
||||
task.setTask_type("6"); |
|
||||
}else{ |
|
||||
task.setTask_type("10"); |
|
||||
} |
|
||||
// 设置起/终点
|
|
||||
// this.setTaskPoint(taskConfig, task, apply_point_code);
|
|
||||
taskService.create(task); |
|
||||
|
|
||||
//下发
|
|
||||
this.renotifyAcs(task); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 1.根据当前固化室所处区域,判断到哪个区的缓存位 |
|
||||
* 正极板到HCQ4,负极板到HCQ2,边负极板到HCQ3 |
|
||||
* 2.从1010列到0101列倒叙判断当前列物料类型是否与起点一致且存在空位 |
|
||||
* 3.将当前点位设置为目标点 |
|
||||
* 4.如果没有符合条件的点位,跳过执行暂时等待 |
|
||||
*/ |
|
||||
private SchBasePoint findNextPoint(SchBasePoint startPoint) { |
|
||||
String regionCode = null; |
|
||||
String materialType = startPoint.getVehicle_type(); |
|
||||
if ("1".equals(startPoint.getVehicle_type())) { |
|
||||
//正极板到缓存区4
|
|
||||
regionCode = "HCQ4"; |
|
||||
|
|
||||
} else if ("2".equals(startPoint.getVehicle_type())) { |
|
||||
//负极板到缓存区2
|
|
||||
regionCode = "HCQ2"; |
|
||||
} else if ("3".equals(startPoint.getVehicle_type())) { |
|
||||
//边负极板到缓存区3
|
|
||||
regionCode = "HCQ3"; |
|
||||
} |
|
||||
List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion(regionCode, "1"); |
|
||||
for (int i = schBasePointList.size() - 1; i >= 0; i--) { |
|
||||
SchBasePoint schBasePoint = schBasePointList.get(i); |
|
||||
SchBasePoint temp = null; |
|
||||
if (schBasePoint.getVehicle_qty() == 0 |
|
||||
&& ObjectUtil.isEmpty(schBasePoint.getIng_task_code()) |
|
||||
//放货三拖一起放,只能到01位置
|
|
||||
&& schBasePoint.getPoint_code().endsWith("01") |
|
||||
&& (ObjectUtil.isEmpty(schBasePoint.getVehicle_type()) || materialType.equals(schBasePoint.getVehicle_type()))) { |
|
||||
//发现有空位时暂存当前位置,检查当前列前面是否存在已放货位置,找最前面无货的位置
|
|
||||
//如果当列其他位置均已放满,则继续找下一列
|
|
||||
List<SchBasePoint> tempList = pointMapper.findPointByParentPoint(schBasePoint.getParent_point_code()); |
|
||||
|
|
||||
for (SchBasePoint tempPoint : tempList) { |
|
||||
if ((tempPoint.getVehicle_qty() != 0 || ObjectUtil.isNotEmpty(schBasePoint.getIng_task_code())) |
|
||||
) { |
|
||||
break; // 如果当前库位非空,则跳出循环
|
|
||||
} else { |
|
||||
if(tempPoint.getPoint_code().endsWith("01")) { |
|
||||
temp = tempPoint; // 更新最大空库位
|
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
if (temp != null) { |
|
||||
log.info("固化室取货任务找到当前符合条件的缓存区位置{}", schBasePoint.getPoint_code()); |
|
||||
} |
|
||||
return temp; |
|
||||
} |
|
||||
} |
|
||||
return null; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 1.如果起点点位为10结尾视为最后该固化室最后一个任务,取完后通知acs取货完毕 |
|
||||
*/ |
|
||||
@Override |
|
||||
// @Transactional(rollbackFor = Exception.class)
|
|
||||
protected void updateStatus(String task_code, TaskStatus status) { |
|
||||
// 校验任务
|
|
||||
SchBaseTask taskObj = taskService.getById(task_code); |
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { |
|
||||
throw new BadRequestException("该任务已完成!"); |
|
||||
} |
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { |
|
||||
throw new BadRequestException("该任务已取消!"); |
|
||||
} |
|
||||
String startPoint = taskObj.getPoint_code1(); // 获取起点
|
|
||||
if(startPoint.endsWith("0101")||startPoint.endsWith("0601")){ |
|
||||
startPoint=startPoint.substring(0,startPoint.length()-2); |
|
||||
} |
|
||||
String endPoint = taskObj.getPoint_code2(); // 获取终点
|
|
||||
SchBasePoint startPointObj = pointService.getById(startPoint); |
|
||||
SchBasePoint endPointObj = pointService.getById(endPoint); |
|
||||
// 根据传来的类型去对任务进行操作
|
|
||||
if (status.equals(TaskStatus.EXECUTING)) { // 执行中
|
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); |
|
||||
taskObj.setRemark("执行中"); |
|
||||
} |
|
||||
if (status.equals(TaskStatus.FINISHED)) { // 完成
|
|
||||
StringBuilder group_id = new StringBuilder(); |
|
||||
// 终点解锁,缓存区现在由一个点位改为三个点位,所以将物料存在010203三个位置上
|
|
||||
for(int i=1;i<=3;i++) { |
|
||||
SchBasePoint point = pointService.getById(endPoint.substring(0,endPoint.length()-1)+i); |
|
||||
point.setIng_task_code(""); |
|
||||
List<String> vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList()); |
|
||||
point.setVehicle_code(vehicleCodeList.get(i-1)); |
|
||||
point.setVehicle_type(startPointObj.getVehicle_type()); |
|
||||
point.setVehicle_qty(1); |
|
||||
point.setUpdate_time(DateUtil.now()); |
|
||||
pointService.update(point); |
|
||||
} |
|
||||
//固化室放料完毕后,将当前一整排都标记上物料信息,防止出现混放情况
|
|
||||
pointMapper.updateVehicleType(endPointObj.getPoint_code().substring(0, endPointObj.getPoint_code().length() - 2), endPointObj.getVehicle_type()); |
|
||||
List<String> vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList()); |
|
||||
for (int i=0;i<vehicleCodeList.size();i++) { |
|
||||
String vehicleCode=vehicleCodeList.get(i); |
|
||||
SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>() |
|
||||
.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) |
|
||||
.eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, |
|
||||
GroupBindMaterialStatusEnum.BOUND.getValue())); |
|
||||
if (ObjectUtil.isNotEmpty(one)) { |
|
||||
one.setTask_code(taskObj.getTask_code()); |
|
||||
one.setPoint_code(endPointObj.getPoint_code().substring(0, endPointObj.getPoint_code().length() - 1) + (i + 1)); // 当前位置
|
|
||||
one.setPoint_name(endPointObj.getPoint_name().substring(0, endPointObj.getPoint_name().length() - 1) + (i + 1)); |
|
||||
one.setMove_way(one.getMove_way() == null ? "" : (one.getMove_way() + " -> ") + endPointObj.getPoint_code().substring(0, endPointObj.getPoint_code().length() - 1) + (i + 1)); |
|
||||
one.setUpdate_id(GeneralDefinition.ACS_ID); |
|
||||
one.setUpdate_name(GeneralDefinition.ACS_NAME); |
|
||||
one.setUpdate_time(DateUtil.now()); |
|
||||
vehiclematerialgroupService.updateById(one); |
|
||||
group_id.append(one.getGroup_id()).append(','); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
// 起点清空
|
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) { |
|
||||
PointUtils.clearPoint(startPointObj); |
|
||||
} |
|
||||
// 任务完成
|
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
|
||||
taskObj.setGroup_id(group_id.toString()); |
|
||||
taskObj.setRemark("任务完成"); |
|
||||
|
|
||||
//如果起点点位为10结尾视为最后该固化室最后一个任务,取完后通知acs取货完毕
|
|
||||
// (如果不放满的情况可以固化,可能逻辑需要改成任务完成时检测当前固化室所有点位是否已完成)
|
|
||||
if (taskObj.getPoint_code1().endsWith("10")) { |
|
||||
String middle = taskObj.getPoint_code1().substring(taskObj.getPoint_code1().length() - 4, taskObj.getPoint_code1().length() - 2); |
|
||||
//通知acs已经放满,固化室可以进行固化
|
|
||||
String device_code = "ZDM" + middle; |
|
||||
log.info("当前固化室已经全部取完,通知固化室的自动门{}取货完毕", device_code); |
|
||||
JSONObject map = new JSONObject(); |
|
||||
map.put("device_code", device_code); |
|
||||
map.put("type", "2"); |
|
||||
wmsToAcsService.notifyAcs(map); |
|
||||
} |
|
||||
} |
|
||||
if (status.equals(TaskStatus.CANCELED)) { // 取消
|
|
||||
// 终点解锁
|
|
||||
if (ObjectUtil.isNotEmpty(endPointObj)) { |
|
||||
endPointObj.setIng_task_code(""); |
|
||||
pointService.update(endPointObj); |
|
||||
} |
|
||||
taskObj.setRemark("任务取消"); |
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
|
||||
} |
|
||||
taskService.update(taskObj); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void forceFinish(String task_code) { |
|
||||
this.updateStatus(task_code, TaskStatus.FINISHED); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void cancel(String task_code) { |
|
||||
this.updateStatus(task_code, TaskStatus.CANCELED); |
|
||||
} |
|
||||
|
|
||||
@SneakyThrows |
|
||||
@Override |
|
||||
protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { |
|
||||
//todo 重算最优点
|
|
||||
String schBasePoint=schBaseTask.getPoint_code1(); |
|
||||
if(schBasePoint.endsWith("0101")||schBasePoint.endsWith("0601")){ |
|
||||
schBasePoint=schBasePoint.substring(0,schBasePoint.length()-2); |
|
||||
} |
|
||||
SchBasePoint startPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>() |
|
||||
.eq(SchBasePoint::getPoint_code, schBasePoint)); |
|
||||
SchBasePoint nextPoint = this.findNextPoint(startPoint); |
|
||||
if (ObjectUtil.isEmpty(nextPoint)) { |
|
||||
throw new Exception("当前起点" + schBaseTask.getPoint_code1() + "未找到合适的放货点位"); |
|
||||
} |
|
||||
//上位记的是整一个缓存区三个点
|
|
||||
schBaseTask.setPoint_code2(nextPoint.getPoint_code()); |
|
||||
nextPoint.setIng_task_code(schBaseTask.getTask_code()); |
|
||||
pointService.update(nextPoint); |
|
||||
} |
|
||||
} |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 120 KiB |
Loading…
Reference in new issue