opt:分切单下空轴优化,子卷下线逻辑优化
This commit is contained in:
@@ -3,6 +3,7 @@ package org.nl.b_lms.bst.ivt.cutpointivt.service;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.BstIvtCutpointivtQuery;
|
||||
import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.CutpointAirShhaftDto;
|
||||
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
|
||||
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
@@ -65,13 +66,12 @@ public interface IBstIvtCutpointivtService extends IService<BstIvtCutpointivt> {
|
||||
List<BstIvtCutpointivt> getAreaNotTaskPointByStatusNotCheckPickUpCompleted(String type, String pointStatus, String area, String sort);
|
||||
|
||||
/**
|
||||
* 获取同尺寸的气涨轴
|
||||
* @param type 点位类型:1套轴对接位,2分切缓存位,3分切对接位,4套轴异常位
|
||||
* @param size 气涨轴尺寸
|
||||
* @param generation 代数(4:小,5:大)
|
||||
* 获取空的子卷下线满轴位点
|
||||
* @param point_status 点位类型:1套轴对接位,2分切缓存位,3分切对接位,4套轴异常位
|
||||
* @param ivt_status 气涨轴尺寸
|
||||
* @return /
|
||||
*/
|
||||
List<BstIvtCutpointivt> getPointByTypeAndShaftSize(String type, String size, String generation);
|
||||
List<BstIvtPackageinfoivt> getPointByStatus(String point_status, String ivt_status);
|
||||
|
||||
/**
|
||||
* 根据桁架对应的点位编码获取点位实体
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.nl.b_lms.bst.ivt.cutpointivt.service.dao.mapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
|
||||
import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.CutpointAirShhaftDto;
|
||||
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
|
||||
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto;
|
||||
|
||||
import java.util.List;
|
||||
@@ -15,7 +16,7 @@ public interface BstIvtCutpointivtMapper extends BaseMapper<BstIvtCutpointivt> {
|
||||
|
||||
List<BstIvtCutpointivt> getAreaNotTaskPointByStatus(String type, String pointStatus, String area, String sort);
|
||||
|
||||
List<BstIvtCutpointivt> getPointByTypeAndShaftSize(String type, String size, String generation);
|
||||
List<BstIvtPackageinfoivt> getPointByStatus(String point_status, String ivt_status);
|
||||
|
||||
List<BstIvtCutpointivt> getAreaNotTaskPointByLocationAreaAndStatus(String location);
|
||||
|
||||
|
||||
@@ -26,26 +26,19 @@
|
||||
</if>
|
||||
|
||||
</select>
|
||||
<select id="getPointByTypeAndShaftSize"
|
||||
resultType="org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt">
|
||||
<select id="getPointByStatus"
|
||||
resultType="org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt">
|
||||
SELECT bc.*
|
||||
FROM `bst_ivt_cutpointivt` bc
|
||||
LEFT JOIN pdm_bi_slittingproductionplan pp ON pp.qzzno = bc.qzz_no1
|
||||
OR pp.qzzno = bc.qzz_no2
|
||||
WHERE bc.point_type = #{type}
|
||||
AND IFNULL(pp.qzzno,'') <![CDATA[ <> ]]> ''
|
||||
AND pp.qzz_size = #{size}
|
||||
<if test="size == '3'">
|
||||
AND pp.qzz_generation = #{generation}
|
||||
</if>
|
||||
FROM `bst_ivt_packageinfoivt` bc
|
||||
WHERE bc.point_status = #{point_status}
|
||||
AND bc.ivt_status = #{ivt_status}
|
||||
AND bc.is_used = '1'
|
||||
AND bc.point_status = '3'
|
||||
AND IFNULL(pp.workorder_id,'') <![CDATA[ <> ]]> ''
|
||||
AND 0 = (SELECT COUNT(*)
|
||||
FROM sch_base_task t
|
||||
WHERE t.task_status <![CDATA[ < ]]> '07'
|
||||
AND t.is_delete = '0'
|
||||
AND (t.point_code1 = bc.truss_point_code1 OR t.point_code1 = bc.truss_point_code2))
|
||||
AND (t.point_code1 = bc.point_code OR t.point_code2 = bc.point_code OR t.point_code3 = bc.point_code OR t.point_code4 = bc.point_code))
|
||||
order by bc.sort_seq
|
||||
</select>
|
||||
<select id="getAreaNotTaskPointByLocationAreaAndStatus"
|
||||
resultType="org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt">
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
|
||||
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.mapper.BstIvtCutpointivtMapper;
|
||||
import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.BstIvtCutpointivtQuery;
|
||||
import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.CutpointAirShhaftDto;
|
||||
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
|
||||
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant;
|
||||
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
@@ -102,8 +103,8 @@ public class BstIvtCutpointivtServiceImpl extends ServiceImpl<BstIvtCutpointivtM
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BstIvtCutpointivt> getPointByTypeAndShaftSize(String type, String size, String generation) {
|
||||
return bstIvtCutpointivtMapper.getPointByTypeAndShaftSize(type, size, generation);
|
||||
public List<BstIvtPackageinfoivt> getPointByStatus(String point_status, String ivt_status) {
|
||||
return bstIvtCutpointivtMapper.getPointByStatus(point_status, ivt_status);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -43,6 +43,12 @@ public class SlitterPdaController {
|
||||
public ResponseEntity<Object> downRolls2(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(slitterService.downRolls2(param), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/downShafts")
|
||||
@Log("下轴")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> downShafts(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(slitterService.downShafts(param), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/downRollsCheck")
|
||||
@Log("下卷2提示确认")
|
||||
@SaIgnore
|
||||
|
||||
@@ -328,6 +328,13 @@ public interface SlitterService {
|
||||
*/
|
||||
JSONObject downRolls2(JSONObject param);
|
||||
|
||||
/**
|
||||
* 子卷下料2
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
JSONObject downShafts(JSONObject param);
|
||||
|
||||
/**
|
||||
* 母卷暂存架管理
|
||||
* @param param
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproducti
|
||||
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
|
||||
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
|
||||
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService;
|
||||
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
|
||||
import org.nl.b_lms.sch.point.dao.StIvtCutpointivt;
|
||||
import org.nl.b_lms.sch.point.service.IstIvtCutpointivtService;
|
||||
import org.nl.b_lms.sch.task.dao.SchBaseTask;
|
||||
@@ -42,6 +43,7 @@ import org.nl.b_lms.sch.tasks.slitter.mapper.dto.CallPlanViewVO;
|
||||
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.GxQtyDto;
|
||||
import org.nl.b_lms.sch.tasks.slitter.service.SlitterService;
|
||||
import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil;
|
||||
import org.nl.common.enums.PackageInfoIvtEnum;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.common.utils.TaskUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
@@ -124,6 +126,9 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
private UpShaftTrussTask upShaftTrussTask;
|
||||
@Autowired
|
||||
private ReturnShaftAgvTask returnShaftAgvTask;
|
||||
@Autowired
|
||||
private DownShaftTrussTask downShaftTrussTask;
|
||||
|
||||
|
||||
@Override
|
||||
|
||||
@@ -781,15 +786,26 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
}
|
||||
log.info("分切计划数据:{}", plan);
|
||||
String point_type = "5".equals(plan.getLevel()) ? "5" : "4";
|
||||
// todo 如果是成品称重,需要Lms分配一个空位point_code2
|
||||
// 查找终点 确认是废箔还是成品: 根据分切计划的子卷等级来区分,5为报废
|
||||
BstIvtShafttubeivt one = shafttubeivtService.getOne(new LambdaQueryWrapper<BstIvtShafttubeivt>()
|
||||
.eq(BstIvtShafttubeivt::getPoint_type, point_type)
|
||||
.eq(BstIvtShafttubeivt::getPoint_location, device.getPoint_location())
|
||||
.eq(BstIvtShafttubeivt::getIs_used, SlitterConstant.SLITTER_YES));
|
||||
JSONObject taskParam = new JSONObject();
|
||||
//
|
||||
taskParam.put("point_code2", one.getPoint_code());
|
||||
// 查找终点 确认是废箔还是成品: 根据分切计划的子卷等级来区分,5为报废
|
||||
//成品
|
||||
if(point_type.equals("4")){
|
||||
//设置目的点为有架子的点
|
||||
List<BstIvtPackageinfoivt> mzPointList = bcutpointivtService.getPointByStatus(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"),PackageInfoIvtEnum.IVT_STATUS.code("空"));
|
||||
if(mzPointList.size() == 0){
|
||||
throw new BadRequestException("内包间无空闲满轴缓存位!");
|
||||
}
|
||||
//设置目的点为满轴位
|
||||
taskParam.put("point_code2", mzPointList.get(0).getPoint_code());
|
||||
}else{//废箔
|
||||
BstIvtShafttubeivt one = shafttubeivtService.getOne(new LambdaQueryWrapper<BstIvtShafttubeivt>()
|
||||
.eq(BstIvtShafttubeivt::getPoint_type, point_type)
|
||||
.eq(BstIvtShafttubeivt::getPoint_location, device.getPoint_location())
|
||||
.eq(BstIvtShafttubeivt::getIs_used, SlitterConstant.SLITTER_YES));
|
||||
//设置目的点为废箔称重
|
||||
taskParam.put("point_code2", one.getPoint_code());
|
||||
}
|
||||
|
||||
taskParam.put("material_code", plan.getContainer_name());
|
||||
//是否打印标签
|
||||
taskParam.put("to_is_labeling", "0");
|
||||
@@ -2323,6 +2339,91 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject downShafts(JSONObject param) {
|
||||
log.info("下轴的输入参数为:{}", param);
|
||||
// param: device_code, container: [{"site":"上下轴(1/2)"}]
|
||||
String device_code = param.getString("device_code");
|
||||
JSONArray conArray = param.getJSONArray("container");
|
||||
if (conArray.size() == 0) {
|
||||
log.error("下空轴参数不能为空!");
|
||||
throw new BadRequestException("下空轴参数不能为空!");
|
||||
}
|
||||
// 获得设备
|
||||
StIvtCutpointivt device = cutpointivtService.getOne(new LambdaQueryWrapper<StIvtCutpointivt>()
|
||||
.eq(StIvtCutpointivt::getExt_code, device_code));
|
||||
|
||||
List<SchBaseTask> tasks = taskService.checkHaveTrussTask(Arrays.asList(device.getUp_point_code(), device.getDown_point_code()));
|
||||
if (tasks.size() > 0) {
|
||||
throw new BadRequestException("分切机" + device_code + " 已经有存在的任务");
|
||||
}
|
||||
|
||||
List<String> containerList = new ArrayList<>();
|
||||
for (int i = 0; i < conArray.size(); i++) {
|
||||
JSONObject container = conArray.getJSONObject(i);
|
||||
containerList.add(container.getString("site"));
|
||||
//上轴要下,且气胀轴字段为空
|
||||
if(StrUtil.equals(container.getString("site"),"1") && ObjectUtil.isEmpty(device.getUp_point_code())){
|
||||
throw new BadRequestException("分切机上轴无气胀轴信息,无法生成下空轴任务!");
|
||||
}
|
||||
//下轴要下,且气胀轴字段为空
|
||||
if(StrUtil.equals(container.getString("site"),"2") && ObjectUtil.isEmpty(device.getDown_point_code())){
|
||||
throw new BadRequestException("分切机下轴无气胀轴信息,无法生成下空轴任务!");
|
||||
}
|
||||
//下轴要单下,上轴检测有货
|
||||
if(StrUtil.equals(container.getString("site"),"2") && ObjectUtil.isNotEmpty(device.getUp_point_code()) && (conArray.size() == 1)){
|
||||
throw new BadRequestException("分切机上轴有货,无法生成单下空轴任务!");
|
||||
}
|
||||
}
|
||||
|
||||
StIvtCutpointivt actualDevice = device;
|
||||
String area = device.getProduct_area();
|
||||
// 获取当前分切机的下一组分切计划(最多四条分切计划)
|
||||
// 任务参数
|
||||
JSONObject taskParam = new JSONObject();
|
||||
taskParam.put("containers", containerList);
|
||||
// 如果没有下一组的分切计划,就只做下卷任务(判断下单/下双)
|
||||
// 获取分切对接位没任务的空位置
|
||||
List<BstIvtCutpointivt> emptyPoints = slitterMapper.getEmptyCutPointNotTask(area,
|
||||
device.getSort_seq(),
|
||||
getPointLocationInCutDevice(getNumberByResourceCode(device_code), area));
|
||||
//必须两个位置都为空
|
||||
if (emptyPoints.size() == 0 ) {
|
||||
log.error("分切机【" + device.getExt_code() + "】对接位不全为空位, 或已存在任务!");
|
||||
throw new BadRequestException("分切机【" + device.getExt_code() + "】对接位不全为空位,或已存在任务!");
|
||||
}
|
||||
// 枷锁
|
||||
BstIvtCutpointivt emptyPoint = emptyPoints.get(0);
|
||||
// 创建任务
|
||||
if (containerList.size() == 2) {
|
||||
// 双轴任务 下双
|
||||
taskParam.put("point_code1", actualDevice.getUp_point_code());
|
||||
taskParam.put("point_code2", emptyPoint.getTruss_point_code1());
|
||||
taskParam.put("point_code3", actualDevice.getDown_point_code());
|
||||
taskParam.put("point_code4", emptyPoint.getTruss_point_code2());
|
||||
taskParam.put("truss_type", "1");
|
||||
taskParam.put("empty_site", "0");
|
||||
} else if (containerList.size() == 1) {
|
||||
// 单轴任务 下单
|
||||
taskParam.put("point_code1", containerList.get(0) == "2"
|
||||
? actualDevice.getDown_point_code() : actualDevice.getUp_point_code());
|
||||
taskParam.put("point_code2", containerList.get(0) == "2"
|
||||
? emptyPoint.getTruss_point_code2() : emptyPoint.getTruss_point_code1());
|
||||
taskParam.put("truss_type", "1");
|
||||
taskParam.put("empty_site", "0");
|
||||
}
|
||||
taskParam.put("task_type", SlitterEnum.TASK_TYPE.code("分切机下气胀轴"));
|
||||
taskParam.put("product_area", device.getProduct_area());
|
||||
// 创建任务
|
||||
downShaftTrussTask.createTask(taskParam);
|
||||
|
||||
JSONObject res = new JSONObject();
|
||||
res.put("status", HttpStatus.HTTP_OK);
|
||||
res.put("message", "下轴任务生成成功!");
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject rollCacheManage(JSONObject param) {
|
||||
// param: point_code、flag(1:清除,2:有空轴)
|
||||
|
||||
@@ -160,7 +160,7 @@ public class AcsToWmsController {
|
||||
}
|
||||
|
||||
@PostMapping("/sendSubVolumeApply")
|
||||
@Log(value = "二期内包间送子卷请求", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
|
||||
@Log(value = "二期套管工位请求判断去成品还是废箔", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> sendSubVolumeApply(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(acsToWmsService.sendSubVolumeApply(param), HttpStatus.OK);
|
||||
|
||||
Reference in New Issue
Block a user