Browse Source

opt:优化穿拔轴区定时器逻辑

master
张东升 2 weeks ago
parent
commit
6fa1a71f9e
  1. 13
      lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java
  2. 91
      lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/StockingIvtServiceImpl.java
  3. 10
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java
  4. 12
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java
  5. 57
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java
  6. 2
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java

13
lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java

@ -9,8 +9,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.bst.ivt.paper.service.dao.MdPbPaper;
import org.nl.b_lms.bst.ivt.paper.service.dao.mapper.MdPbPaperMapper;
import org.nl.b_lms.bst.ivt.papervehicle.service.IMdPbPapervehicleService; import org.nl.b_lms.bst.ivt.papervehicle.service.IMdPbPapervehicleService;
import org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle; import org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle;
import org.nl.b_lms.bst.ivt.stockingivt.service.IBstIvtStockingivtService; import org.nl.b_lms.bst.ivt.stockingivt.service.IBstIvtStockingivtService;
@ -22,19 +20,12 @@ import org.nl.b_lms.pdm.info.service.IPdmBiOrderbominfoService;
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant;
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubeMovePointDto; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubeMovePointDto;
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubePointDto; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubePointDto;
import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil;
import org.nl.b_lms.storage_manage.md.service.MaterialbaseService;
import org.nl.common.domain.query.PageQuery; import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.basedata.master.service.dto.MaterialbaseDto;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -54,10 +45,6 @@ public class BstIvtStockingivtServiceImpl extends ServiceImpl<BstIvtStockingivtM
@Autowired @Autowired
private IMdPbPapervehicleService papervehicleService; private IMdPbPapervehicleService papervehicleService;
@Autowired @Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private MaterialbaseService materialbaseService;
@Autowired
private IPdmBiOrderbominfoService pdmBiOrderbominfoService; private IPdmBiOrderbominfoService pdmBiOrderbominfoService;
@Override @Override

91
lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/StockingIvtServiceImpl.java

@ -3,6 +3,7 @@ package org.nl.b_lms.pda.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@ -27,7 +28,6 @@ import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dao.Dict;
import org.nl.system.service.dict.dao.mapper.SysDictMapper; import org.nl.system.service.dict.dao.mapper.SysDictMapper;
import org.nl.wms.basedata.master.service.dto.MaterialbaseDto;
import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -127,7 +127,7 @@ public class StockingIvtServiceImpl implements StockingIvtService {
log.info("手持入管芯库的数据:{}", jo); log.info("手持入管芯库的数据:{}", jo);
String pointCode = jo.getString("point_code"); String pointCode = jo.getString("point_code");
String vehicleCode = jo.getString("vehicle_code"); String vehicleCode = jo.getString("vehicle_code");
//入库operate_type=1 //托盘入库operate_type=1;托盘出库operate_type=0
String operate_type = jo.getString("operate_type"); String operate_type = jo.getString("operate_type");
BstIvtStockingivt pointByCode = stockingivtService.getPointByCode(pointCode, true); BstIvtStockingivt pointByCode = stockingivtService.getPointByCode(pointCode, true);
@ -140,10 +140,12 @@ public class StockingIvtServiceImpl implements StockingIvtService {
if (!vehicleCode.contains("GX")) { if (!vehicleCode.contains("GX")) {
throw new BadRequestException("请扫描或输入正确的托盘码!"); throw new BadRequestException("请扫描或输入正确的托盘码!");
} }
//管芯入库
if(operate_type.equals("1")){
//点位类型必须为入库点,point_type = 0 //点位类型必须为入库点,point_type = 0
String point_type = pointByCode.getPoint_type(); String point_type = pointByCode.getPoint_type();
if (!point_type.equals("0")) { if (!point_type.equals("0")) {
throw new BadRequestException("请扫描管芯库入库点!"); throw new BadRequestException("请扫描一楼管芯库入库限位点!");
} }
//校验所扫点位上托盘是否和扫码托盘一致 //校验所扫点位上托盘是否和扫码托盘一致
if (!vehicleCode.equals(pointByCode.getVehicle_code())) { if (!vehicleCode.equals(pointByCode.getVehicle_code())) {
@ -164,13 +166,50 @@ public class StockingIvtServiceImpl implements StockingIvtService {
param.put("point_code1", pointByCode.getPoint_code()); param.put("point_code1", pointByCode.getPoint_code());
param.put("point_code2", endPoint.getPoint_code()); param.put("point_code2", endPoint.getPoint_code());
param.put("vehicle_code", vehicleCode); param.put("vehicle_code", vehicleCode);
param.put("operate_type", operate_type);
param.put("task_type", SlitterEnum.TASK_TYPE.code("托盘入管芯库任务")); param.put("task_type", SlitterEnum.TASK_TYPE.code("托盘入管芯库任务"));
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
instorStockAgvTask.createTask(param); instorStockAgvTask.createTask(param);
}else if(operate_type.equals("0")){
//空盘回收
//点位类型必须为入库点,point_type = 0
String point_type = pointByCode.getPoint_type();
if (!point_type.equals("3")) {
throw new BadRequestException("请扫描二楼备货区点位!");
}
//校验所扫点位上托盘是否和扫码托盘一致
if (!vehicleCode.equals(pointByCode.getVehicle_code())) {
throw new BadRequestException("点位:"+pointCode+"已存在托盘"+pointByCode.getVehicle_code()+",与扫码托盘不一致!");
}
//判断是否已经下发了任务
JSONObject task1 = isSingleTask(pointCode);
if ( ObjectUtil.isNotEmpty(task1)) {
throw new BadRequestException("点位:" + pointCode + "存在未完成的任务:"+task1.getString("task_code"));
}
//生成空盘回收任务,两个点
List<BstIvtStockingivt> list = stockingivtService.getEmptyPointNotTask("0");
//优先分配一楼入库限位点,若没有再查询一楼管芯库点
if (list.size() == 0) {
list = stockingivtService.getEmptyPointNotTask("1");
if(list.size() == 0){
throw new BadRequestException("管芯库暂无空闲点位回收空托盘!");
}
}
BstIvtStockingivt endPoint = list.get(0);
JSONObject param = new JSONObject();
param.put("point_code1", pointByCode.getPoint_code());
param.put("point_code2", endPoint.getPoint_code());
param.put("vehicle_code", vehicleCode);
param.put("operate_type", operate_type);
param.put("task_type", SlitterEnum.TASK_TYPE.code("托盘回收任务"));
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
instorStockAgvTask.createTask(param);
}
JSONObject res = new JSONObject(); JSONObject res = new JSONObject();
res.put("status", HttpStatus.HTTP_OK); res.put("status", HttpStatus.HTTP_OK);
res.put("message", "入管芯库任务生成成功!"); res.put("message", "操作成功!");
return res; return res;
} }
@ -191,6 +230,9 @@ public class StockingIvtServiceImpl implements StockingIvtService {
public JSONObject moveStock(JSONObject jo) { public JSONObject moveStock(JSONObject jo) {
// param: point_code vehicle_code // param: point_code vehicle_code
log.info("手持管芯备货的数据:{}", jo); log.info("手持管芯备货的数据:{}", jo);
if (ObjectUtil.isEmpty(jo)) {
throw new BadRequestException("数据不能为空,请选择一条记录后再操作!");
}
String pointCode = jo.getString("point_code"); String pointCode = jo.getString("point_code");
String vehicleCode = jo.getString("vehicle_code"); String vehicleCode = jo.getString("vehicle_code");
@ -308,11 +350,20 @@ public class StockingIvtServiceImpl implements StockingIvtService {
if (ObjectUtil.isNotEmpty(papervehicle) && !papervehicle.getMaterial_code().equals(material_code)) { if (ObjectUtil.isNotEmpty(papervehicle) && !papervehicle.getMaterial_code().equals(material_code)) {
throw new BadRequestException("当前排-列已有物料为【" + papervehicle.getMaterial_code() + "】,如需要修改请先清除库存,再进行绑定!"); throw new BadRequestException("当前排-列已有物料为【" + papervehicle.getMaterial_code() + "】,如需要修改请先清除库存,再进行绑定!");
} }
//查询当前物料是否和之前排同类型物料,不一致提示报错
List<MdPbPapervehicle> papers = papervehicleService.list(new LambdaQueryWrapper<MdPbPapervehicle>()
.eq(MdPbPapervehicle::getVehicle_code, vehicle_code)
.eq(MdPbPapervehicle::getRow_num, row_num));
if(papers.size()>0){
if(! StrUtil.equals(papers.get(0).getMaterial_code(), material_code)){
throw new BadRequestException("当前排已有物料为【" + papers.get(0).getMaterial_code() + "】,不允许添加其他类型物料!");
}
}
//查询当前管芯编码是否在托盘中 //查询当前管芯编码是否在托盘中
MdPbPapervehicle papervehicle_flag = papervehicleService.getOne(new LambdaQueryWrapper<MdPbPapervehicle>() MdPbPapervehicle papervehicle_flag = papervehicleService.getOne(new LambdaQueryWrapper<MdPbPapervehicle>()
.eq(MdPbPapervehicle::getPaper_code, paper_code)); .eq(MdPbPapervehicle::getPaper_code, paper_code));
if (ObjectUtil.isNotEmpty(papervehicle_flag)) { if (ObjectUtil.isNotEmpty(papervehicle_flag)) {
throw new BadRequestException("当前管芯编码已存在托盘上:" + papervehicle_flag.getVehicle_code() + "所在位置排列:"+papervehicle_flag.getRow_num()+"-"+papervehicle_flag.getCol_num()); throw new BadRequestException("当前管芯编码已存在托盘上:" + papervehicle_flag.getVehicle_code() + ",位置排列:"+papervehicle_flag.getRow_num()+"-"+papervehicle_flag.getCol_num());
} }
//获取当前纸管的高度 //获取当前纸管的高度
// 解析描述数组 // 解析描述数组
@ -322,44 +373,30 @@ public class StockingIvtServiceImpl implements StockingIvtService {
//校验高度差要大于50MM,否则不允许进行绑定 //校验高度差要大于50MM,否则不允许进行绑定
int num = Integer.parseInt(row_num); int num = Integer.parseInt(row_num);
if (num == 1) { if (num > 0) {
//只判断第二排的纸管长度
int nextNum = num + 1;
MdPbPapervehicle nextPaper = papervehicleService.getOne(new LambdaQueryWrapper<MdPbPapervehicle>().eq(MdPbPapervehicle::getVehicle_code, vehicle_code)
.eq(MdPbPapervehicle::getRow_num, nextNum));
if (ObjectUtil.isNotEmpty(nextPaper)) {
//获取第二排的纸管高度和纸管类型
String nextMaterialName = nextPaper.getMaterial_name();
String[] nextArray = nextMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|");
int nextLength = Integer.parseInt(nextArray[nextArray.length - 1]);
if (Math.abs(nextLength - currLength) <= 50 && !material_code.equals(nextPaper.getMaterial_code())) {
throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!");
}
}
} else {
//判断后一排的纸管高度 //判断后一排的纸管高度
int nextNum = num + 1; int nextNum = num + 1;
MdPbPapervehicle nextPaper = papervehicleService.getOne(new LambdaQueryWrapper<MdPbPapervehicle>().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) List<MdPbPapervehicle> nextPaper = papervehicleService.list(new LambdaQueryWrapper<MdPbPapervehicle>().eq(MdPbPapervehicle::getVehicle_code, vehicle_code)
.eq(MdPbPapervehicle::getRow_num, nextNum)); .eq(MdPbPapervehicle::getRow_num, nextNum));
if (ObjectUtil.isNotEmpty(nextPaper)) { if (nextPaper.size()>0) {
//获取后一排的纸管高度和纸管类型 //获取后一排的纸管高度和纸管类型
String nextMaterialName = nextPaper.getMaterial_name(); String nextMaterialName = nextPaper.get(0).getMaterial_name();
String[] nextArray = nextMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); String[] nextArray = nextMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|");
int nextLength = Integer.parseInt(nextArray[nextArray.length - 1]); int nextLength = Integer.parseInt(nextArray[nextArray.length - 1]);
if (Math.abs(nextLength - currLength) <= 50 && !material_code.equals(nextPaper.getMaterial_code())) { if (Math.abs(nextLength - currLength) <= 50 && !material_code.equals(nextPaper.get(0).getMaterial_code())) {
throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!"); throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!");
} }
} }
//判断前一排的纸管高度 //判断前一排的纸管高度
int preNum = num - 1; int preNum = num - 1;
MdPbPapervehicle prePaper = papervehicleService.getOne(new LambdaQueryWrapper<MdPbPapervehicle>().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) List<MdPbPapervehicle> prePaper = papervehicleService.list(new LambdaQueryWrapper<MdPbPapervehicle>().eq(MdPbPapervehicle::getVehicle_code, vehicle_code)
.eq(MdPbPapervehicle::getRow_num, preNum)); .eq(MdPbPapervehicle::getRow_num, preNum));
if (ObjectUtil.isNotEmpty(prePaper)) { if (ObjectUtil.isNotEmpty(prePaper)) {
//获取后一排的纸管高度和纸管类型 //获取后一排的纸管高度和纸管类型
String preMaterialName = prePaper.getMaterial_name(); String preMaterialName = prePaper.get(0).getMaterial_name();
String[] preArray = preMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); String[] preArray = preMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|");
int preLength = Integer.parseInt(preArray[preArray.length - 1]); int preLength = Integer.parseInt(preArray[preArray.length - 1]);
if (Math.abs(preLength - currLength) <= 50 && !material_code.equals(prePaper.getMaterial_code())) { if (Math.abs(preLength - currLength) <= 50 && !material_code.equals(prePaper.get(0).getMaterial_code())) {
throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!"); throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!");
} }
} }

10
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java

@ -5,21 +5,16 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.bst.ivt.papervehicle.service.IMdPbPapervehicleService;
import org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle;
import org.nl.b_lms.bst.ivt.stockingivt.service.IBstIvtStockingivtService; import org.nl.b_lms.bst.ivt.stockingivt.service.IBstIvtStockingivtService;
import org.nl.b_lms.bst.ivt.stockingivt.service.dao.BstIvtStockingivt; import org.nl.b_lms.bst.ivt.stockingivt.service.dao.BstIvtStockingivt;
import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.TaskUtils; import org.nl.common.utils.TaskUtils;
import org.nl.modules.wql.WQL; import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.AcsTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.manage.TaskStatusEnum;
@ -27,7 +22,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -44,10 +38,6 @@ public class StockAreaCallTubeTask extends AbstractAcsTask {
private IschBaseTaskService taskService; private IschBaseTaskService taskService;
@Autowired @Autowired
private IBstIvtStockingivtService stockingivtService; private IBstIvtStockingivtService stockingivtService;
@Autowired
private IMdPbPapervehicleService mdPbPapervehicleService;
@Autowired
private WmsToAcsService wmsToAcsService;
@Override @Override
public List<AcsTaskDto> addTask() { public List<AcsTaskDto> addTask() {

12
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java

@ -92,6 +92,17 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask {
String endPoint = task.getPoint_code2(); String endPoint = task.getPoint_code2();
BstIvtStockingivt startPointObj = stockingivtService.getPointByCode(startPoint, false); BstIvtStockingivt startPointObj = stockingivtService.getPointByCode(startPoint, false);
BstIvtStockingivt endPointObj = stockingivtService.getPointByCode(endPoint, false); BstIvtStockingivt endPointObj = stockingivtService.getPointByCode(endPoint, false);
if (SlitterEnum.TASK_TYPE.code("备货区单独送空载具").equals(task.getTask_type())) {
// 终点赋值
endPointObj.setIvt_status("1");
endPointObj.setVehicle_code(task.getVehicle_code());
TaskUtils.updateOptMessageByBStockingPoint(endPointObj);
stockingivtService.update(endPointObj);
startPointObj.setVehicle_code("");
startPointObj.setIvt_status("0");
TaskUtils.updateOptMessageByBStockingPoint(startPointObj);
stockingivtService.update(startPointObj);
} else {
// 互换资源 (交换载具号) // 互换资源 (交换载具号)
endPointObj.setIvt_status("1"); endPointObj.setIvt_status("1");
endPointObj.setVehicle_code(task.getVehicle_code()); endPointObj.setVehicle_code(task.getVehicle_code());
@ -119,6 +130,7 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask {
doSavePaperInfos(paperList, param); doSavePaperInfos(paperList, param);
stockAreaCallTubeTask.createTask(param); stockAreaCallTubeTask.createTask(param);
} }
}
// 取消 // 取消
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
task.setTask_status(TaskStatusEnum.FINISHED.getCode()); task.setTask_status(TaskStatusEnum.FINISHED.getCode());

57
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java

@ -1,5 +1,6 @@
package org.nl.b_lms.sch.tasks.slitter.auto; package org.nl.b_lms.sch.tasks.slitter.auto;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@ -40,7 +41,7 @@ import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -83,6 +84,8 @@ public class AutoCallAirShaftTask extends Prun {
private IschBaseTaskService taskService; private IschBaseTaskService taskService;
@Autowired @Autowired
private ISysParamService paramService; private ISysParamService paramService;
@Autowired
private IMdPbPapervehicleService papervehicleService;
public final static String PARAM_CODE_PLAN_AREA = "PARAM_CODE_PLAN_AREA"; public final static String PARAM_CODE_PLAN_AREA = "PARAM_CODE_PLAN_AREA";
public final static String IS_ONLY_PULLING = "IS_ONLY_PULLING"; public final static String IS_ONLY_PULLING = "IS_ONLY_PULLING";
@ -124,7 +127,7 @@ public class AutoCallAirShaftTask extends Prun {
public void doCallShaft(Param isOnlyPulling, Param tzDay, Param tzArea, Param useXn, Param max_qzz_num) { public void doCallShaft(Param isOnlyPulling, Param tzDay, Param tzArea, Param useXn, Param max_qzz_num) {
//查询套轴缓存位:点位启用、有子卷、气胀轴字段不为空、且无未完成的任务 //查询套轴缓存位:点位启用、有子卷、气胀轴字段不为空、且无未完成的任务
List<CutpointAirShhaftDto> notTaskPoints = bcutpointivtService.getAreaNotTaskPointByTcQzzPoint(""); List<CutpointAirShhaftDto> notTaskPoints = bcutpointivtService.getAreaNotTaskPointByTcQzzPoint("");
//若有拔轴任务,则会执行本段代码 //(1)若有拔轴任务,则会执行本段代码
//对满足的需拔轴子卷遍历下发任务,同时每次拔轴下发前判断是否有可以接续的套轴计划 //对满足的需拔轴子卷遍历下发任务,同时每次拔轴下发前判断是否有可以接续的套轴计划
for(int i= 0;i<notTaskPoints.size();i++){ for(int i= 0;i<notTaskPoints.size();i++){
//获取需拔轴子卷信息 //获取需拔轴子卷信息
@ -300,7 +303,7 @@ public class AutoCallAirShaftTask extends Prun {
slittingproductionplanService.updateBatchById(needPlans); slittingproductionplanService.updateBatchById(needPlans);
}//拔轴任务循环已结束 }//拔轴任务循环已结束
//拔轴任务循环已结束,判断系统参数是否只做拔轴,若否进入套轴计划判断循环 //(2)拔轴任务循环已结束,判断系统参数是否只做拔轴,若否进入套轴计划判断循环
if (!(ObjectUtil.isNotEmpty(isOnlyPulling) && SlitterConstant.SLITTER_YES.equals(isOnlyPulling.getValue()))) { if (!(ObjectUtil.isNotEmpty(isOnlyPulling) && SlitterConstant.SLITTER_YES.equals(isOnlyPulling.getValue()))) {
log.error("系统设置了只做拔轴,详细看参数表:" + IS_ONLY_PULLING); log.error("系统设置了只做拔轴,详细看参数表:" + IS_ONLY_PULLING);
//获取可下发的分切计划 //获取可下发的分切计划
@ -370,6 +373,48 @@ public class AutoCallAirShaftTask extends Prun {
saveCutPlanMessage(emptyPoints.get(0), needPlans, qzzSize, qzz_generation); saveCutPlanMessage(emptyPoints.get(0), needPlans, qzzSize, qzz_generation);
} }
} }
//(3)套轴区自动移出空盘
//判断是否有可移出空盘:有库存、已启用、且属于套轴区点位
LambdaQueryWrapper<BstIvtStockingivt> stockLam = new LambdaQueryWrapper<>();
stockLam.eq(BstIvtStockingivt::getIvt_status,SlitterConstant.SLITTER_YES)
.eq(BstIvtStockingivt::getIs_used,SlitterConstant.SLITTER_YES)
.eq(BstIvtStockingivt::getPoint_type,"2");
List<BstIvtStockingivt> stockList = stockingivtService.list(stockLam);
for(int i=0;i<stockList.size();i++){
BstIvtStockingivt stockNow = stockList.get(i);
//载具号
String vehicleCode = stockNow.getVehicle_code();
//点位号
String point_code = stockNow.getPoint_code();
// 如果qty=0,创建AGV送空任务,(新的task_type 010816)、后期优化可以新增诺宝取货完成提前释放货位,任务状态变成071
List<MdPbPapervehicle> papers = papervehicleService.list(new LambdaQueryWrapper<MdPbPapervehicle>()
.eq(MdPbPapervehicle::getVehicle_code, vehicleCode)
.ne(MdPbPapervehicle::getQty, 0));
if (papers.size() <= 0) {
// 搬走
List<SchBaseTask> unFinishtasks = taskService.checkHaveTask(point_code);
if (CollectionUtil.isEmpty(unFinishtasks)) {
// 查找一个没有任务的空位
List<BstIvtStockingivt> list = stockingivtService.getEmptyPointNotTask("3");
if (list.size() == 0) {
log.warn("备货区找不到空位置搬运!");
break;
}
BstIvtStockingivt moveEmptyPoint = list.get(0);
JSONObject moveTaskParam = new JSONObject();
moveTaskParam.put("point_code1", point_code);
moveTaskParam.put("point_code2", moveEmptyPoint.getPoint_code());
moveTaskParam.put("vehicle_code", vehicleCode);
moveTaskParam.put("task_type", SlitterEnum.TASK_TYPE.code("备货区单独送空载具"));
moveTaskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
stockAreaSendVehicleTask.createTask(moveTaskParam);
//下发一个就行
break;
}
}
}
} }
/** /**
@ -577,9 +622,9 @@ public class AutoCallAirShaftTask extends Prun {
// 兜底 // 兜底
needQuantity = needTemp > 0 ? needTemp : 1; needQuantity = needTemp > 0 ? needTemp : 1;
} }
// todo: 要考虑type=0的正在搬运往套轴区三个点的托盘是否有该库存,如有直接返回true // todo: 要考虑type=3的正在搬运往套轴区三个点的托盘是否有该库存,如有直接返回true
// 查找type=0的位置(待命的托盘)中是否存在(需要判断的是单独一个托盘) 校验了不在搬运中 // 查找type=3的位置(待命的托盘)中是否存在(需要判断的是单独一个托盘) 校验了不在搬运中
List<BhTubePointDto> stockingivtList = stockingivtService.getNeedPaperTubePoint("0", tubes.get(0), location); List<BhTubePointDto> stockingivtList = stockingivtService.getNeedPaperTubePoint("3", tubes.get(0), location);
// 找一个点位: 目的需要的点位 // 找一个点位: 目的需要的点位
// 筛选单独托盘有超过所需数 // 筛选单独托盘有超过所需数
BhTubePointDto needPoint = null; BhTubePointDto needPoint = null;

2
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java

@ -23,7 +23,7 @@ public enum SlitterEnum {
, "分切机下料AGV任务", "010804", "分切机上气胀轴", "010805", "分切机下气胀轴", "010806", "备货区送载具", "010807" , "分切机下料AGV任务", "010804", "分切机上气胀轴", "010805", "分切机下气胀轴", "010806", "备货区送载具", "010807"
, "备货区送纸管", "010808", "分切机下料桁架任务", "010809", "分切机下料AGV到内包间", "010810", "套轴异常处理AGV任务", "010811" , "备货区送纸管", "010808", "分切机下料桁架任务", "010809", "分切机下料AGV到内包间", "010810", "套轴异常处理AGV任务", "010811"
, "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815", , "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815",
"托盘入管芯库任务", "010816","管芯备货任务", "010817")); "托盘入管芯库任务", "010816","管芯备货任务", "010817","托盘回收任务", "010818"));
private Map<String, String> code; private Map<String, String> code;
public String code(String desc) { public String code(String desc) {

Loading…
Cancel
Save