Compare commits

...

2 Commits

Author SHA1 Message Date
李帅 1f07d79d7d Commit message 1 week ago
李帅 4dcda1a79b add 质检装箱 1 week ago
  1. 144
      lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java
  2. 127
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java
  3. 73
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java
  4. 75
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueue.java
  5. 2
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.java
  6. 17
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.xml
  7. 44
      lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java
  8. 2
      lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RawAssistIStorService.java
  9. 101
      lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java

144
lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java

@ -138,6 +138,8 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
@Autowired
private ISysParamService iSysParamService;
@Resource
@Qualifier("threadPoolExecutor")
private ThreadPoolExecutor pool;
@ -232,6 +234,8 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
}
// 调用方法获取木箱料号:输入:子卷号、输出:木箱信息
r.setBox_type("");
//
PdmBiOrderbominfo bomInfoDao = iPdmBiOrderbominfoService.getBiOrderbominfoByContainer(r.getContainer_name());
if (ObjectUtil.isNotEmpty(bomInfoDao)) {
r.setBox_type(bomInfoDao.getProductName());
@ -329,11 +333,33 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
.map(Integer::parseInt)
.max(Integer::compareTo)
.orElse(0) + 1;
//木箱出库任务
outBox(workIdList, containerNameList, deviceCode, maxBoxGroup, whereJson, totalWeight);
List<Long> collect = ivtList.stream().map(a -> a.getIvt_id()).collect(Collectors.toList());
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>()
.set("update_time", DateUtil.now())
.in("ivt_id",collect));
List<PdmBiSubpackagerelation> subList = this.list(new QueryWrapper<PdmBiSubpackagerelation>()
.eq("status", "0")
.in("container_name", containerNameList));
Set<String> containers = subList.stream().map(PdmBiSubpackagerelation::getContainer_name).collect(Collectors.toSet());
String boxSn = subList.get(0).getPackage_box_sn();
//子卷到装箱区
agvTransfer(containers, deviceCode);
PdmBiContainerinbound pdmBiContainerinbound = new PdmBiContainerinbound();
pdmBiContainerinbound.setId(org.nl.common.utils.IdUtil.getStringId());
pdmBiContainerinbound.setContainer_name(String.join(",", containerNameList));
pdmBiContainerinbound.setBox(boxSn);
Boolean inbound = whereJson.getBoolean("inbound");
if (inbound!=null){
pdmBiContainerinbound.setInbound(inbound);
}
iPdmBiContainerinboundService.save(pdmBiContainerinbound);
}
@Override
@ -363,6 +389,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
throw new BadRequestException("子卷编码不能为空");
}
String deviceCode = "ZXQ_1_1";
/** 任务数校验按照现场情况
int count = taskService.count(new QueryWrapper<SchBaseTask>()
.eq("task_type", "010908")
.eq("is_delete", "0")
@ -373,7 +400,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if (count+count2>8){
throw new BadRequestException("当前装箱区木箱任务已满,稍后再试");
}
**/
String[] split = containerName.split(",");
//理论毛重
List<PdmBiSubpackagerelation> subList = this.list(new QueryWrapper<PdmBiSubpackagerelation>()
@ -383,7 +410,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
throw new BadRequestException("子卷包装信息与子卷不相符合");
}
Set<String> collect = subList.stream().map(PdmBiSubpackagerelation::getPackage_box_sn).collect(Collectors.toSet());
Set<String> containers = subList.stream().map(PdmBiSubpackagerelation::getContainer_name).collect(Collectors.toSet());
List<String> containerList = subList.stream().map(PdmBiSubpackagerelation::getContainer_name).collect(Collectors.toList());
if (collect.size() == 0){
throw new BadRequestException("当前子卷还未进行装箱组盘操作");
@ -394,89 +420,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if (subList.get(0).getQuanlity_in_box().intValue()!= split.length){
throw new BadRequestException("当前木箱"+subList.get(0).getQuanlity_in_box()+"要装箱的子卷"+split.length+"未装完");
}
String boxSn = subList.get(0).getPackage_box_sn();
//查询木箱所在货位
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
JSONArray boxAttrs = attrTab.query("storagevehicle_code = '" + boxSn + "' and sect_id = '1748219897940414464'").getResultJSONArray(0);
if (boxAttrs.size() == 0){
throw new BadRequestException("当前木箱"+boxSn+"库存信息查询不到,请确认");
}
JSONObject boxAttr = boxAttrs.getJSONObject(0);
List<SchBaseTask> hasTask = taskService.list(new QueryWrapper<SchBaseTask>()
.select("point_code2")
.eq("is_delete", "0")
.eq("point_code1", boxAttr.getString("struct_code"))
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
if (!CollectionUtils.isEmpty(hasTask)){
boolean zxq = hasTask.stream().map(a -> a.getPoint_code2()).filter(a -> a.contains("ZXQ")).findAny().isPresent();
if (zxq){
throw new BadRequestException("当前子卷正在执行装箱入库操作");
}else{
throw new BadRequestException("当前空木箱"+boxSn+"存在正在执行的任务,稍后再操作");
}
}
// 查询木箱对应的托盘号
JSONObject jsonVeExt = WQLObject.getWQLObject("md_pb_storagevehicleext").query("pcsn = '" + boxSn + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(jsonVeExt)) {
throw new BadRequestException("此木箱没有绑定托盘号!"+boxSn);
}
//子卷到装箱区
agvTransfer(containers, deviceCode, boxSn);
String task_group_id = null;
if (boxAttr.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) {
JSONObject 浅Attr = attrTab
.query("zdepth = '1' and row_num = '"+boxAttr.getString("row_num")+"' and col_num = '" + boxAttr.getString("col_num") + "' and layer_num = '"+boxAttr.getString("layer_num")+"'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(浅Attr)){
throw new BadRequestException(boxAttr.getString("struct_code")+"对应浅货位信息不正确");
}
if (ObjectUtil.isEmpty(浅Attr.getString("storagevehicle_code"))){
if (!浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
throw new BadRequestException("木箱货位"+boxAttr.getString("struct_code")+"的浅货位存在正在执行的任务");
}
}else {
if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
// 判断浅货位木箱和深货位木箱是否相同规格
task_group_id = outBoxManageService.createBoxMove(浅Attr);
} else if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("验箱出库锁"))) {
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("is_delete", "0")
.eq("point_code1", 浅Attr.getString("struct_code"))
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前木箱所在货位"+boxAttr.getString("struct_code")+"对应浅货位存在任务"+浅Attr.getString("task_code"));
}
}else {
throw new BadRequestException("当前木箱所在货位"+boxAttr.getString("struct_code")+"对应浅货位存在任务"+浅Attr.getString("task_code"));
}
}
}
PdmBiContainerinbound pdmBiContainerinbound = new PdmBiContainerinbound();
pdmBiContainerinbound.setId(org.nl.common.utils.IdUtil.getStringId());
pdmBiContainerinbound.setContainer_name(containerName);
pdmBiContainerinbound.setBox(boxSn);
Boolean inbound = param.getBoolean("inbound");
if (inbound!=null){
pdmBiContainerinbound.setInbound(inbound);
}
iPdmBiContainerinboundService.save(pdmBiContainerinbound);
// 生成任务
JSONObject jsonTaskParam = new JSONObject();
jsonTaskParam.put("task_type", "010704");
jsonTaskParam.put("start_device_code", boxAttr.getString("struct_code"));
jsonTaskParam.put("next_device_code", deviceCode);
jsonTaskParam.put("vehicle_code", boxAttr.getString("storagevehicle_code"));
jsonTaskParam.put("vehicle_code2", jsonVeExt.getString("storagevehicle_code"));
jsonTaskParam.put("task_group_id", task_group_id);
JSONObject request_param = new JSONObject();
request_param.put("containerType", boxAttr.getString("storagevehicle_type"));
jsonTaskParam.put("request_param", request_param.toString());
// 锁定起点
boxAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("出库锁"));
attrTab.update(boxAttr);
twoOutBoxTask.createTask(jsonTaskParam);
twoOutBoxTask.immediateNotifyAcs(null);
PdmProductSpecServiceImpl.doRecord(SpecEnum.ZXRK,null,Boolean.TRUE,null,containerList);
}
@ -492,7 +435,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
throw new BadRequestException("无选中子卷信息");
}
if (!packagerelationList.get(0).getBox_type().equals(whereJson.getString("checked"))){
throw new BadRequestException("子卷订单bom的木箱规格与所选木箱规格不一致,请重新操作");
throw new BadRequestException("分切计划的木箱规格与所选木箱规格不一致,请重新操作");
}
//检查是否存在已分配规格的子卷号
if (packagerelationList.stream()
@ -552,19 +495,22 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
updateWrapper.set("status", "0");
updateWrapper.in("workorder_id", workIdList);
pdmBiSubpackagerelationMapper.update(null, updateWrapper);
//给MES传输子卷包装关系
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ,null,Boolean.TRUE,null,containerNameList.stream().collect(Collectors.toList()));
CompletableFuture.runAsync(() -> {
try {
log.error("----回传子卷包装关系----");
String isConnect2 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_CONNECT_MES2").getValue();
if ("1".equals(isConnect2)) {
transferBoxPackageToMes(false, whereJson, containerNameList, boxSn, weightTotal);
String isOnMes = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_on_mes").getValue();
if (isOnMes.equals(IOSEnum.IS_NOTANDYES.code("是"))) {
//给MES传输子卷包装关系
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ, null, Boolean.TRUE, null, containerNameList.stream().collect(Collectors.toList()));
CompletableFuture.runAsync(() -> {
try {
log.error("----回传子卷包装关系----");
String isConnect2 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_CONNECT_MES2").getValue();
if ("1".equals(isConnect2)) {
transferBoxPackageToMes(false, whereJson, containerNameList, boxSn, weightTotal);
}
} catch (Exception e) {
log.error("子卷装箱异常,transferBoxPackageToMes给MES传输子卷包装关系异常,木箱号为:" + boxSn + ",异常信息:" + e);
}
} catch (Exception e) {
log.error("子卷装箱异常,transferBoxPackageToMes给MES传输子卷包装关系异常,木箱号为:" + boxSn + ",异常信息:" + e);
}
}, pool);
}, pool);
}
}
/**
@ -736,7 +682,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
}
}
protected void agvTransfer(Set<String> containerNameList, String deviceCode, String boxSn) {
protected void agvTransfer(Set<String> containerNameList, String deviceCode) {
//待检区点位
List<BstIvtPackageinfoivt> djqPointList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()

127
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java

@ -2,6 +2,8 @@ package org.nl.b_lms.sch.point.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -1006,6 +1008,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
UpdateWrapper<BstIvtPackageinfoivt> updateWrapper = new UpdateWrapper<>();
//LMS获取MES称重后子卷信息
JSONObject jo = new JSONObject();
String isOnMes = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_on_mes").getValue();
//子卷质检合格品和管制品
if (StringUtils.isNotBlank(whereJson.getString("container_name")) && StringUtils.isBlank(whereJson.getString("pointCode"))) {
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("空")) || whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具")) || whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("有子卷"))) {
@ -1038,35 +1041,14 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
}
//获取子卷最新信息
jo.put("container_name", whereJson.getString("container_name"));
lmsToMesService.getInspectionResult(jo);
//子卷下料信息MES传递给LMS
iPdmBiContainerinfoService.createSubInfoByContainer(whereJson.getString("container_name"));
/*
* 自动打标
*/
// 判断是否自动打标
String auto_table = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("AUTO_PRINT_TABLE").getValue();
if (auto_table.equals(IOSEnum.IS_NOTANDYES.code("是"))) {
// 内标默认打印机
String within_table = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("WITHIN_PEINT_TWO").getValue();
JSONObject within_print = WQLObject.getWQLObject("pdm_bi_printinfo")
.query("print_name = '" + within_table + "'")
.uniqueResult(0);
// 管标默认打印机
String pipe_table = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("PIPE_PEINT_TWO").getValue();
JSONObject pipe_print = WQLObject.getWQLObject("pdm_bi_printinfo")
.query("print_name = '" + pipe_table + "'")
.uniqueResult(0);
// 组织数据
JSONObject param = new JSONObject();
param.put("pcsn", whereJson.getString("container_name"));
param.put("print_code", pipe_print.getString("print_id"));
printTableTwoService.pipeTable(param);
param.put("print_code", within_print.getString("print_id"));
printTableTwoService.withinTable(param);
//TODO:子卷下料信息MES传递给LMS
if (isOnMes.equals(IOSEnum.IS_NOTANDYES.code("是"))) {
lmsToMesService.getInspectionResult(jo);
//子卷下料信息MES传递给LMS
iPdmBiContainerinfoService.createSubInfoByContainer(whereJson.getString("container_name"));
} else {
packageData(whereJson);
}
}
PdmProductSpecServiceImpl.doRecord(SpecEnum.ZJ,MapOf.of("质检结果",whereJson.getString("ivt_status")),Boolean.TRUE,null, packageinfoivt.getContainer_name());
updateWrapper.set("container_name", packageinfoivt.getContainer_name());
@ -1078,9 +1060,13 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品"))) {
//获取子卷最新信息
jo.put("container_name", whereJson.getString("container_name"));
lmsToMesService.getInspectionResult(jo);
//子卷下料信息MES传递给LMS
iPdmBiContainerinfoService.createSubInfoByContainer(whereJson.getString("container_name"));
if (isOnMes.equals(IOSEnum.IS_NOTANDYES.code("是"))) {
lmsToMesService.getInspectionResult(jo);
//子卷下料信息MES传递给LMS
iPdmBiContainerinfoService.createSubInfoByContainer(whereJson.getString("container_name"));
} else {
packageData(whereJson);
}
updateWrapper.set("container_name", whereJson.getString("container_name"));
updateWrapper.set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("合格品"));
} else {
@ -1138,6 +1124,85 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
return result;
}
private void packageData(JSONObject whereJson) {
IPdmBiSlittingproductionplanService planService = SpringContextHolder.getBean(IPdmBiSlittingproductionplanService.class);
PdmBiSlittingproductionplan slittingproductionplan = planService.getOne(new LambdaQueryWrapper<PdmBiSlittingproductionplan>().eq(PdmBiSlittingproductionplan::getContainer_name, whereJson.get("container_name"))
.eq(PdmBiSlittingproductionplan::getIs_delete, "0"));
if (ObjectUtil.isEmpty(slittingproductionplan)) {
throw new BadRequestException("未查询到子卷【" + whereJson.get("container_name") + "】的分切计划!");
}
String quality_guaran_period = "";
if (slittingproductionplan.getMaterial_type().equals("FG1")) {
quality_guaran_period = "90天";
} else {
quality_guaran_period = "180天";
}
//插入包装关系
PdmBiSubpackagerelation subpackagerelation = subpackagerelationService.getOne(new LambdaQueryWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getContainer_name, whereJson.get("container_name")));
if (ObjectUtil.isEmpty(subpackagerelation)) {
subpackagerelation = new PdmBiSubpackagerelation();
subpackagerelation.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr());
subpackagerelation.setQuality_guaran_period(quality_guaran_period);
subpackagerelation.setSale_order_name((String) whereJson.get("sale_order_name"));
subpackagerelation.setCustomer_name((String) whereJson.get("customer_name"));
subpackagerelation.setCustomer_description((String) whereJson.get("customer_description"));
subpackagerelation.setProduct_name(slittingproductionplan.getProduct_name());
subpackagerelation.setProduct_description(slittingproductionplan.getDescription());
subpackagerelation.setDate_of_FG_inbound(DateUtil.format(DateUtil.date(), "yyyy-MM-dd"));
subpackagerelation.setContainer_name((String) whereJson.get("container_name"));
subpackagerelation.setWidth((String) whereJson.get("width"));
subpackagerelation.setThickness((String) whereJson.get("thickness"));
subpackagerelation.setNet_weight((String) whereJson.get("net_weight"));
subpackagerelation.setLength((String) whereJson.get("length"));
subpackagerelation.setStatus("99");
subpackagerelation.setIsRePrintPackageBoxLabel("0");
subpackagerelation.setIsUnPackBox("0");
subpackagerelation.setSap_pcsn((String) whereJson.get("sap_pcsn"));
subpackagerelation.setCreate_id(Long.parseLong(SecurityUtils.getCurrentUserId()));
subpackagerelation.setCreate_name(SecurityUtils.getCurrentNickName());
subpackagerelation.setCreate_time(DateUtil.now());
subpackagerelation.setCreate_id(Long.parseLong(SecurityUtils.getCurrentUserId()));
subpackagerelation.setExt_code("BC01");
subpackagerelation.setNeed_delete("99");
subpackagerelation.setJoint_type(slittingproductionplan.getJoint_type());
subpackagerelation.setMaterial_type(slittingproductionplan.getMaterial_type());
subpackagerelationService.save(subpackagerelation);
} else {
//更新入包装关系
subpackagerelation = new PdmBiSubpackagerelation();
subpackagerelation.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr());
subpackagerelation.setQuality_guaran_period(quality_guaran_period);
subpackagerelation.setSale_order_name((String) whereJson.get("sale_order_name"));
subpackagerelation.setCustomer_name((String) whereJson.get("customer_name"));
subpackagerelation.setCustomer_description((String) whereJson.get("customer_description"));
subpackagerelation.setProduct_name(slittingproductionplan.getProduct_name());
subpackagerelation.setProduct_description(slittingproductionplan.getDescription());
subpackagerelation.setDate_of_FG_inbound(DateUtil.format(DateUtil.date(), "yyyy-MM-dd"));
subpackagerelation.setContainer_name((String) whereJson.get("container_name"));
subpackagerelation.setWidth((String) whereJson.get("width"));
subpackagerelation.setLength((String) whereJson.get("length"));
subpackagerelation.setThickness((String) whereJson.get("thickness"));
subpackagerelation.setNet_weight((String) whereJson.get("net_weight"));
subpackagerelation.setStatus("99");
subpackagerelation.setIsRePrintPackageBoxLabel("0");
subpackagerelation.setIsUnPackBox("0");
subpackagerelation.setSap_pcsn((String) whereJson.get("sap_pcsn"));
subpackagerelation.setCreate_id(Long.parseLong(SecurityUtils.getCurrentUserId()));
subpackagerelation.setCreate_name(SecurityUtils.getCurrentNickName());
subpackagerelation.setCreate_time(DateUtil.now());
subpackagerelation.setCreate_id(Long.parseLong(SecurityUtils.getCurrentUserId()));
subpackagerelation.setExt_code("BC01");
subpackagerelation.setNeed_delete("99");
subpackagerelation.setJoint_type(slittingproductionplan.getJoint_type());
subpackagerelation.setMaterial_type(slittingproductionplan.getMaterial_type());
subpackagerelationService.save(subpackagerelation);
subpackagerelationService.update(subpackagerelation);
}
}
/**
* 获取移库任务目标点位
*

73
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java

@ -157,80 +157,7 @@ public class ZxqTask extends AbstractAcsTask {
}
private void zxqToZxw(SchBaseTask schBaseTask) {
PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService
.getOne(new LambdaUpdateWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getContainer_name, schBaseTask.getVehicle_code()), false);
if (pdmBiSubpackagerelation != null) {
//查询目标点位信息
BstIvtPackageinfoivt zxqPoint = packageinfoivtService.getOne(new LambdaUpdateWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getPoint_code, schBaseTask.getPoint_code2()));
//查询装箱对接位的木箱号和区域与子卷对应的木箱号与区域是否匹配
BstIvtPackageinfoivt zxdjwPoint = packageinfoivtService.getOne(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getContainer_name, pdmBiSubpackagerelation.getPackage_box_sn()).eq(BstIvtPackageinfoivt::getBlock, zxqPoint.getBlock()));
if (zxdjwPoint != null) {
//创建搬运任务到装箱位
JSONObject jo = new JSONObject();
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位"));
jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo.put("point_code1", schBaseTask.getPoint_code2());
jo.put("point_code2", zxdjwPoint.getPoint_code());
jo.put("vehicle_code", schBaseTask.getVehicle_code());
jo.put("is_send", "1");
List<PdmBiSlittingproductionplan> productionPlanList = pdmBiSlittingproductionplanMapper.selectList(new LambdaQueryWrapper<PdmBiSlittingproductionplan>().eq(PdmBiSlittingproductionplan::getContainer_name, schBaseTask.getVehicle_code()));
if (productionPlanList.isEmpty()) {
throw new BadRequestException("该子卷暂无分切计划信息");
}
//获取纸管长度
Integer maxNum = SlitterTaskUtil.getPaperLengthInt(productionPlanList.get(0));
String paperSize = SlitterTaskUtil.getPaperSize(productionPlanList.get(0));
//扩展参数
JSONObject param = new JSONObject();
//获取木箱信息,未包装的木箱
BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, schBaseTask.getVehicle_code2()).ne(BstIvtBoxinfo::getIs_packing, "1"));
if (bstIvtBoxinfo == null) {
throw new BadRequestException("找不到该木箱信息!");
}
//获取木箱高度等级
String height = "";
String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue();
String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue();
String box_high = bstIvtBoxinfo.getBox_high();
if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) {
height = "1";
} else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) {
height = "2";
} else {
height = "3";
}
//木箱高度等级
param.put("heightLevel", height);
//木箱最大数量
param.put("maxNo", bstIvtBoxinfo.getNum());
//托盘类型 1小托盘 2大托盘
param.put("containerType", bstIvtBoxinfo.getVehicle_type());
//查询是否为最后一个子卷,相同木箱号且状态为生成
List<PdmBiSubpackagerelation> packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getPackage_box_sn, schBaseTask.getVehicle_code2()).eq(PdmBiSubpackagerelation::getStatus, "0"));
PdmBiSubpackagerelation oneSub = packagerelationList.get(0);
String containerName = oneSub.getContainer_name();
if (packagerelationList.size() == 1 && containerName.equals(schBaseTask.getVehicle_code())) {
//最后子卷
param.put("lastOne", "1");
} else {
param.put("lastOne", "0");
}
//木箱放入子卷数量
param.put("boxNo", pdmBiSubpackagerelation.getQuanlity_in_box());
//子卷号
param.put("barcode", schBaseTask.getVehicle_code());
//子卷长度
param.put("len", maxNum);
param.put("frpModel", paperSize);
jo.put("request_param", param.toString());
zxDjwTask.createTask(jo);
}
}
}
/**
* 返回实体

75
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueue.java

@ -60,7 +60,7 @@ public class TaskQueue {
tasks.forEach(task -> {
redisUtils.pushToList(TASK_QUEUE_PREFIX + groupId, task);
//redisUtils.pushToList(TASK_QUEUE_PREFIX + groupId, task,3,TimeUnit.HOURS);
log.info("子卷装箱:待检区->装箱区agv任务组为:" + groupId + ",任务编号为:" + task.getTask_code() + "子卷号为:" + task.getVehicle_code() +"成功添加到任务队列。");
log.info("子卷装箱:待检区->装箱区agv任务组为:" + groupId + ",任务编号为:" + task.getTask_code() + "子卷号为:" + task.getVehicle_code() + "成功添加到任务队列。");
});
}
@ -78,71 +78,28 @@ public class TaskQueue {
.eq("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"))
.eq("is_delete", IOSEnum.IS_NOTANDYES.code("否"))
.orderByDesc("create_time", "task_step"));
log.info("当前zxq有起点任务数量"+list.size());
for (int i = 0; i < Math.min(empPointList.size(),list.size()); i++) {
log.info("当前zxq有起点任务数量" + list.size());
for (int i = 0; i < Math.min(empPointList.size(), list.size()); i++) {
String empPoin = empPointList.get(i);
SchBaseTask task = list.get(i);
executeTask(task,empPoin);
executeTask(task, empPoin);
}
}
}
private void executeTask(SchBaseTask task, String pointCode) {
//查询子卷号的货位
BstIvtPackageinfoivt newIvt = packageinfoivtService.list(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getContainer_name, task.getVehicle_code())).get(0);
String pointCode1 = newIvt.getPoint_code();
//是否深库位
if (newIvt.getDepth().equals(PackageInfoIvtEnum.DEPTH_TYPE.code("浅货位"))) {
//是浅货位,直接创建搬运任务
task.setPoint_code1(pointCode1);
task.setPoint_code2(pointCode);
task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
taskService.updateById(task);
log.info("子卷装箱:待检区->装箱区agv任务编号为:" + "子卷号为:" + task.getVehicle_code() + task.getTask_code() + ",任务状态为:" + task.getTask_status() + "下发完成。");
} else {
//是深货位,查询对应的浅货位
List<BstIvtPackageinfoivt> groupIvtList = packageinfoivtService.list(new LambdaQueryWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getCol_num, newIvt.getCol_num())).stream().filter(r -> r.getDepth().equals(PackageInfoIvtEnum.DEPTH_TYPE.code("浅货位"))).collect(Collectors.toList());
BstIvtPackageinfoivt shallowIvt = groupIvtList.get(0);
//库位为空,查询该点位是否存在放货任务,如果存在,先建立确定起点任务,则等任务完成后再确定终点与下发
if (shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) {
Set<String> pointCodes2 = new HashSet<>();
pointCodes2.add(shallowIvt.getPoint_code());
List<SchBaseTask> existTaskList = bstIvtPackageinfoivtMapper.getTaskList(null, pointCodes2, null, null).stream().filter(r -> !r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"))).collect(Collectors.toList());
//无放货任务,直接创建搬运任务
if (ObjectUtils.isEmpty(existTaskList)) {
task.setPoint_code1(pointCode1);
task.setPoint_code2(pointCode);
task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
taskService.updateById(task);
log.info("子卷装箱:待检区->装箱区agv任务编号为:" + "子卷号为:" + task.getVehicle_code() + task.getTask_code() + ",任务状态为:" + task.getTask_status() + "下发完成。");
}
} else {
//库位不为空,创建移库任务,查询该点位是否存在取货任务,如果存在,先更新搬运任务为确定终点任务,则等任务完成后再下发
Set<String> pointCodes2 = new HashSet<>();
pointCodes2.add(shallowIvt.getPoint_code());
List<SchBaseTask> existTaskList = bstIvtPackageinfoivtMapper.getTaskList(pointCodes2, null, null, null).stream().filter(r -> !r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"))).collect(Collectors.toList());
//存在取货任务
if (ObjectUtils.isEmpty(existTaskList)) {
//任务等下次在做
//直接创建移库任务
//获取移库任务目标点
JSONObject task1 = new JSONObject();
String pointCode2 = packageinfoivtService.getDjqShiftingPoint(shallowIvt, true);
task1.put("task_status", StringUtils.isBlank(pointCode2) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.START_AND_POINT.getCode());
task1.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
task1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务"));
task1.put("vehicle_code", shallowIvt.getContainer_name());
task1.put("point_code1", shallowIvt.getPoint_code());
task1.put("point_code2", pointCode2);
//任务组标识
task1.put("task_group_id", task.getTask_id());
task1.put("material_code", shallowIvt.getIvt_status());
//创建移库任务
shiftingTask.createTask(task1);
}
}
}
//查询子卷号的货位
BstIvtPackageinfoivt newIvt = packageinfoivtService.list(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getContainer_name, task.getVehicle_code())).get(0);
String pointCode1 = newIvt.getPoint_code();
//是浅货位,直接创建搬运任务
task.setPoint_code1(pointCode1);
task.setPoint_code2(pointCode);
task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
taskService.updateById(task);
log.info("子卷装箱:待检区->装箱区agv任务编号为:" + "子卷号为:" + task.getVehicle_code() + task.getTask_code() + ",任务状态为:" + task.getTask_status() + "下发完成。");
}
/**

2
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.java

@ -59,7 +59,7 @@ public interface StIvtIostorinvdisMapper extends BaseMapper<StIvtIostorinvdis> {
List<JSONObject> getNotCreateDis(JSONObject whereJson);
@Select("SELECT dis.* FROM st_ivt_iostorinvdis dis LEFT JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dis.iostorinv_id WHERE dis.box_no = #{boxNo} AND dis.work_status < '99' AND mst.is_delete = '0' AND mst.bill_status < '99'")
List<StIvtIostorinvdis> getstartAndDisRows(String boxNo);
JSONArray getDisDtls(@Param("boxNos") HashSet<String> vehicleSet,@Param("iostorinvId") String iostorinvId);

17
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.xml

@ -1099,6 +1099,23 @@
AND dis.struct_id #{param.struct_id}
</if>
</select>
<select id="getstartAndDisRows" resultType="org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis"
parameterType="java.lang.String">
SELECT
dis.*,
mst.bill_status AS mst_bill_status,
mst.is_delete AS mst_is_delete
FROM
st_ivt_iostorinvdis dis
LEFT JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dis.iostorinv_id
WHERE
dis.box_no = #{boxNo}
AND dis.work_status <![CDATA[ <= ]]> '99'
AND ( dis.struct_id IS NOT NULL AND dis.struct_id <![CDATA[ <> ]]> '' )
AND mst.is_delete = '0'
AND mst.bill_status <![CDATA[ <= ]]> '99'
</select>
</mapper>

44
lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java

@ -3,6 +3,8 @@ package org.nl.wms.st.inbill.rest;
import com.alibaba.fastjson.JSONArray;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService;
import org.nl.modules.logging.annotation.Log;
import org.nl.wms.st.inbill.service.RawAssistIStorService;
import org.springframework.beans.factory.annotation.Autowired;
@ -23,6 +25,12 @@ public class RawAssistIStorController {
@Autowired
private RawAssistIStorService rawAssistIStorService;
/**
* 二期入库服务
*/
@Autowired
private IStIvtIostorinvService iStIvtIostorinvService;
@GetMapping
@Log("查询入库单据")
@ -71,7 +79,9 @@ public class RawAssistIStorController {
//@PreAuthorize("@el.check('structrelamaterial:edit')")
public ResponseEntity<Object> insertDtl(@RequestBody Map whereJson) {
rawAssistIStorService.insertDtl(whereJson);
if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) {
iStIvtIostorinvService.insertMst(whereJson);
}
return new ResponseEntity<>(HttpStatus.CREATED);
}
@ -83,17 +93,20 @@ public class RawAssistIStorController {
//@PreAuthorize("@el.check('sectattr:edit')")
public ResponseEntity<Object> update(@RequestBody Map whereJson) {
rawAssistIStorService.update(whereJson);
if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) {
iStIvtIostorinvService.update(whereJson);
}
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/divStruct")
@Log("分配货位")
//@PreAuthorize("@el.check('materialtype:list')")
public ResponseEntity<Object> divStruct(@RequestBody Map whereJson) {
rawAssistIStorService.divStruct(whereJson);
if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) {
iStIvtIostorinvService.divStruct(whereJson);
}
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@ -110,4 +123,27 @@ public class RawAssistIStorController {
@PostMapping("/divPoint")
@Log("设置起点")
//@PreAuthorize("@el.check('materialtype:list')")
public ResponseEntity<Object> divPoint(@RequestBody Map whereJson) {
if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) {
iStIvtIostorinvService.setPoint(whereJson);
}
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/unDivStruct")
@Log("取消分配货位")
//@PreAuthorize("@el.check('materialtype:list')")
public ResponseEntity<Object> unDivStruct(@RequestBody Map whereJson) {
if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) {
iStIvtIostorinvService.unDivStruct(whereJson);
}
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}

2
lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RawAssistIStorService.java

@ -35,4 +35,6 @@ public interface RawAssistIStorService {
JSONArray queryBoxMater(JSONArray rows);
void divPoint(Map whereJson);
}

101
lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java

@ -43,6 +43,7 @@ import org.nl.wms.basedata.st.service.dto.StorattrDto;
import org.nl.wms.basedata.st.service.impl.StructattrServiceImpl;
import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl;
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.service.PointService;
import org.nl.wms.sch.service.dto.PointDto;
import org.nl.wms.st.inbill.service.RawAssistIStorService;
@ -349,10 +350,10 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService {
QueryWrapper<PdmBiSubpackagerelation> wrapper = new QueryWrapper<>();
wrapper.eq("package_box_sn", dis.getBox_no())
.eq("status", "1"); // 原状态是 0 才更新
.eq("status", targetStatus); // 原状态是 0 才更新
PdmBiSubpackagerelation relation = new PdmBiSubpackagerelation();
relation.setStatus(targetStatus);
relation.setStatus("1");
pdmBiSubpackagerelationMapper.update(relation, wrapper);
@ -920,6 +921,102 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService {
}
@Transactional(rollbackFor = Exception.class)
@Override
public void divPoint(Map whereJson) {
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
ArrayList<HashMap> rows = (ArrayList<HashMap>) whereJson.get("tableMater");
String point_code = (String) whereJson.get("point_code");
HashMap<String, String> map = rows.get(0);
SchBasePoint pointDto = ischBasePointService.findByCode(point_code);
StIvtIostorinvdis stIvtIostorinvdis = StIvtIostorinvdis.builder().work_status("01")
.point_id(pointDto.getPoint_id())
.build();
//判断起点终点是否不为空
QueryWrapper<StIvtIostorinvdis> query = new QueryWrapper<StIvtIostorinvdis>().eq("iostorinv_id", map.get("iostorinv_id")).eq("box_no", map.get("box_no"));
StIvtIostorinvdis stIvtIostorinvdisByIdBox = stIvtIostorinvdisMapper.selectOne(query);
if (StrUtil.isNotEmpty(stIvtIostorinvdisByIdBox.getStruct_code())) {
//创建任务
TwoInTask task = new TwoInTask();
JSONObject task_form = new JSONObject();
task_form.put("task_type", "010501");
task_form.put("start_device_code", point_code);
task_form.put("next_device_code", stIvtIostorinvdisByIdBox.getStruct_code());
task_form.put("vehicle_code", map.get("box_no"));
//查询主表信息
StIvtIostorinv iostorinvId = stIvtIostorinvMapper.selectById(map.get("iostorinv_id"));
task_form.put("inv_type", iostorinvId.getBill_type());
task_form.put("inv_id", iostorinvId.getIostorinv_id());
task_form.put("inv_code", iostorinvId.getBill_code());
String task_id = task.createTask(task_form);
stIvtIostorinvdis.setTask_id(Long.valueOf(task_id));
}
QueryWrapper<StIvtIostorinvdis> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("iostorinv_id", map.get("iostorinv_id"))
.eq("box_no", map.get("box_no"));
stIvtIostorinvdisMapper.update(stIvtIostorinvdis, queryWrapper);
if (StrUtil.isNotEmpty(stIvtIostorinvdisByIdBox.getStruct_code())) {
//修改库存
//直接取出入库分配表的库存
// JSONArray dis_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'").getResultJSONArray(0);
// JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + map.get("iostorinv_id") + "'").uniqueResult(0);
// 查询 ST_IVT_IOStorInvDis 表数据
List<StIvtIostorinvdis> dis_rows = stIvtIostorinvdisMapper.selectList(new LambdaQueryWrapper<StIvtIostorinvdis>()
.eq(StIvtIostorinvdis::getIostorinv_id, map.get("iostorinv_id"))
.eq(StIvtIostorinvdis::getBox_no, map.get("box_no")));
// 查询 ST_IVT_IOStorInv 主表数据
StIvtIostorinv mst = stIvtIostorinvMapper.selectOne(new LambdaQueryWrapper<StIvtIostorinv>()
.eq(StIvtIostorinv::getIostorinv_id, map.get("iostorinv_id")));
for (int i = 0; i < dis_rows.size(); i++) {
StIvtIostorinvdis stIvtIostorinvdis1 = dis_rows.get(i);
//更新明细表状态
StIvtIostorinvdtl stIvtIostorinvdtl = stIvtIostorinvdtlMapper.selectOne(new LambdaQueryWrapper<StIvtIostorinvdtl>()
.eq(StIvtIostorinvdtl::getIostorinvdtl_id, stIvtIostorinvdis1.getIostorinvdtl_id()));
if (Double.valueOf(String.valueOf(stIvtIostorinvdtl.getUnassign_qty())) == 0) {
//判断该明细下是否还存在未分配货位的分配明细
List<StIvtIostorinvdis> disdiv_rows = stIvtIostorinvdisMapper.selectList(new LambdaQueryWrapper<StIvtIostorinvdis>()
.eq(StIvtIostorinvdis::getIostorinvdtl_id, stIvtIostorinvdtl.getIostorinvdtl_id())
.and(wrapper -> wrapper
.or().isNull(StIvtIostorinvdis::getStruct_id)
.or().eq(StIvtIostorinvdis::getStruct_id, ""))
.and(wrapper -> wrapper
.or().isNull(StIvtIostorinvdis::getPoint_id)
.or().eq(StIvtIostorinvdis::getPoint_id, "")));
if (disdiv_rows.size() == 0) {
stIvtIostorinvdtl.setBill_status("40");
stIvtIostorinvdtlMapper.updateById(stIvtIostorinvdtl);
//判断主表下的明细是否都为40
// JSONArray dtl_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinv_id = '" + dis_jo.getString("iostorinv_id") + "' AND bill_status < '40'").getResultJSONArray(0);
List<StIvtIostorinvdtl> dtl_rows = stIvtIostorinvdtlMapper.selectList(new LambdaQueryWrapper<StIvtIostorinvdtl>()
.eq(StIvtIostorinvdtl::getIostorinv_id, stIvtIostorinvdis1.getIostorinv_id())
.lt(StIvtIostorinvdtl::getBill_status, "40"));
if (dtl_rows.size() == 0) {
mst.setBill_status("40");
mst.setDis_optid(Long.valueOf(currentUserId));
mst.setDis_optname(nickName);
mst.setDis_time(now);
stIvtIostorinvMapper.updateById(mst);
}
}
}
}
}
}
@Override
public JSONObject autoDis(JSONObject whereJson) {
/*

Loading…
Cancel
Save