Browse Source

opt:分切单下空轴优化,子卷下线逻辑优化

master
张东升 1 day ago
parent
commit
58308cc1a4
  1. 10
      lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java
  2. 3
      lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java
  3. 21
      lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml
  4. 5
      lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java
  5. 6
      lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java
  6. 7
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java
  7. 117
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java
  8. 2
      lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java

10
lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java

@ -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 代数45
* 获取空的子卷下线满轴位点
* @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
lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java

@ -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);

21
lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml

@ -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">

5
lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java

@ -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

6
lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java

@ -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

7
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java

@ -328,6 +328,13 @@ public interface SlitterService {
*/
JSONObject downRolls2(JSONObject param);
/**
* 子卷下料2
* @param param
* @return
*/
JSONObject downShafts(JSONObject param);
/**
* 母卷暂存架管理
* @param param

117
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java

@ -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:有空轴)

2
lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java

@ -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);

Loading…
Cancel
Save