add:子卷步序

This commit is contained in:
zhangzq
2025-04-18 09:49:09 +08:00
parent 4d9d432e4c
commit 19bade4b5f
15 changed files with 333 additions and 23 deletions

View File

@@ -0,0 +1,64 @@
package org.nl.b_lms.pdm.productSpec.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.b_lms.pdm.productSpec.dao.PdmProductSpec;
import org.nl.b_lms.pdm.productSpec.service.IpdmProductSpecService;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService;
import org.nl.b_lms.sch.tasks.TwoOutBoxTask;
import org.nl.b_lms.sch.tasks.first_floor_area.auto.AutoSendVehicleToDjq;
import org.nl.b_lms.sch.tasks.first_floor_area.auto.Prun;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.common.utils.RedissonUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.logging.annotation.Log;
import org.nl.modules.wql.util.SpringContextHolder;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* {@code @Description:} 子卷包装关系表(PdmBiSubpackagerelation)控制层
* {@code @Author:} gbx
*
* @since 2024-02-01
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/pdmProductSpec")
@Slf4j
public class PdmProductSpecController {
@Autowired
private IpdmProductSpecService ipdmProductSpecService;
@GetMapping("/subSpec/{code}")
public ResponseEntity<Object> subSpec(@PathVariable String code) {
List result = new ArrayList<>();
if (!StringUtils.isEmpty(code)){
result = ipdmProductSpecService.list(new QueryWrapper<PdmProductSpec>()
.eq("container_name", code).orderByAsc("id"));
}
return new ResponseEntity<>(result, HttpStatus.OK);
}
}

View File

@@ -0,0 +1,34 @@
package org.nl.b_lms.pdm.productSpec.dao;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 子卷生产步序表
*/
@Data
@TableName("pdm_product_spec")
public class PdmProductSpec extends Model<PdmProductSpec> {
@TableId(value = "id")
private Long id;
private String container_name;
private Integer spec;
private String param;
private Boolean result;
private String msg;
private Date create_time;
}

View File

@@ -0,0 +1,18 @@
package org.nl.b_lms.pdm.productSpec.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.b_lms.pdm.productSpec.dao.PdmProductSpec;
import java.util.List;
import java.util.Map;
/**
* {@code @Description:} 子卷包装关系表(PdmBiSubpackagerelation)数据持久层
* {@code @Author:} gbx
*
* @since 2024-02-01
*/
public interface PdmProductSpecMapper extends BaseMapper<PdmProductSpec> {
}

View File

@@ -0,0 +1,26 @@
package org.nl.b_lms.pdm.productSpec.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.b_lms.pdm.productSpec.dao.PdmProductSpec;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.enums.SpecEnum;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* {@code @Description:} 子卷包装关系表(PdmBiSubpackagerelation)服务接口层
* {@code @Author:} gbx
*
* @since 2024-02-01
*/
public interface IpdmProductSpecService extends IService<PdmProductSpec> {
public void record(SpecEnum spec, Map param, Boolean sucess,String msg, List<String> container_name);
}

View File

@@ -0,0 +1,3 @@
package org.nl.b_lms.pdm.productSpec.service;

View File

@@ -0,0 +1,62 @@
package org.nl.b_lms.pdm.productSpec.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.log4j.Log4j;
import org.nl.b_lms.pdm.productSpec.dao.PdmProductSpec;
import org.nl.b_lms.pdm.productSpec.dao.mapper.PdmProductSpecMapper;
import org.nl.b_lms.pdm.productSpec.service.IpdmProductSpecService;
import org.nl.common.enums.SpecEnum;
import org.nl.modules.wql.util.SpringContextHolder;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* {@code @Description:} 子卷包装关系表(PdmBiSubpackagerelation)服务实现层
* {@code @Author:} gbx
*
* @since 2024-02-01
*/
@Service
@Log4j
public class PdmProductSpecServiceImpl extends ServiceImpl<PdmProductSpecMapper, PdmProductSpec> implements IpdmProductSpecService {
public static void doRecord(SpecEnum spec, Map param, Boolean sucess,String msg, List<String> container_name) {
IpdmProductSpecService service = SpringContextHolder.getBean(IpdmProductSpecService.class);
service.record(spec,param,sucess,msg,container_name);
}
public static void doRecord(SpecEnum spec, Map param, Boolean sucess,String msg, String container_name) {
IpdmProductSpecService service = SpringContextHolder.getBean(IpdmProductSpecService.class);
List<String> list = new ArrayList<>();
list.add(container_name);
service.record(spec,param,sucess,msg,list);
}
@Override
@Async
public void record(SpecEnum spec, Map param, Boolean sucess,String msg, List<String> container_name) {
if (!CollectionUtils.isEmpty(container_name)){
for (String s : container_name) {
PdmProductSpec productSpec = new PdmProductSpec();
productSpec.setSpec(spec.getValue());
productSpec.setContainer_name(s);
productSpec.setResult(sucess);
productSpec.setMsg(msg);
if (!CollectionUtils.isEmpty(param)){
productSpec.setParam(JSONObject.toJSONString(param));
}
this.save(productSpec);
}
}
}
}

View File

@@ -25,6 +25,7 @@ import org.nl.b_lms.pdm.info.dao.PdmBiContainerinbound;
import org.nl.b_lms.pdm.info.dao.PdmBiOrderbominfo;
import org.nl.b_lms.pdm.info.service.IPdmBiContainerinboundService;
import org.nl.b_lms.pdm.info.service.IPdmBiOrderbominfoService;
import org.nl.b_lms.pdm.productSpec.service.impl.PdmProductSpecServiceImpl;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
import org.nl.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper;
import org.nl.b_lms.pdm.subpackagerelation.dto.PdmBiSubpackagerelationDto;
@@ -48,6 +49,7 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxMana
import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.common.enums.SpecEnum;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
@@ -369,6 +371,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
}
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("当前子卷还未进行装箱组盘操作");
}
@@ -455,26 +458,8 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
jsonTaskParam.put("request_param", request_param.toString());
twoOutBoxTask.createTask(jsonTaskParam);
twoOutBoxTask.immediateNotifyAcs(null);
PdmProductSpecServiceImpl.doRecord(SpecEnum.ZXRK,null,Boolean.TRUE,null,containerList);
// String is_labeling = iSysParamService.findByCode("is_checkbox").getValue();
// if (is_labeling.equals("1")) {
// //给MES传输验箱结果
// CompletableFuture.runAsync(() -> {
// try {
// log.debug("----回传子卷包装关系----");
// String isConnect2 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_CONNECT_MES2").getValue();
// if ("1".equals(isConnect2)) {
// JSONObject param_jo = new JSONObject();
// param_jo.put("box_no", boxSn);
// param_jo.put("box_weight", subList.get(0).getBox_weight());
//
// lmsToMesServiceImpl.BoxDataCollectionSubmit2(param_jo);
// }
// } catch (Exception e) {
// log.error("验箱回传MES异常BoxDataCollectionSubmit2给MES传输子卷包装关系异常,木箱号为:" + boxSn + ",异常信息:" + e);
// }
// }, pool);
// }
}
private void checkEntityList(JSONObject whereJson, List<PdmBiSubpackagerelation> packagerelationList) {
@@ -549,6 +534,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
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("----回传子卷包装关系----");
@@ -796,6 +782,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
}
this.removeById(containerName.getWorkorder_id());
result.put("message", code+"子卷包装解除成功,同时确认MES装箱以解绑定");
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_REMOVE,MapOf.of("子卷编号",code),Boolean.TRUE,null,code);
return result;
}

View File

@@ -18,6 +18,7 @@ import org.nl.b_lms.pda.service.PrintTableTwoService;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.pdm.info.service.IPdmBiContainerinfoService;
import org.nl.b_lms.pdm.productSpec.service.impl.PdmProductSpecServiceImpl;
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;
@@ -30,6 +31,7 @@ import org.nl.b_lms.sch.tasks.first_floor_area.auto.AutoSendVehicleToDjq;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.common.enums.SpecEnum;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
@@ -1065,6 +1067,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
}
}
PdmProductSpecServiceImpl.doRecord(SpecEnum.ZJ,MapOf.of("质检结果",whereJson.getString("ivt_status")),Boolean.TRUE,null,dtoList.get(0).getContainer_name());
updateWrapper.set("container_name", dtoList.get(0).getContainer_name());
updateWrapper.set("ivt_status", whereJson.getString("ivt_status"));
}

View File

@@ -277,6 +277,7 @@ public class InBussManageServiceImpl implements InBussManageService {
mst.put("remark", "");
// 明细
ArrayList<LinkedHashMap> tableData = new ArrayList<>();
List<String> subs = new ArrayList<>();
for (int i = 0; i < subList.size(); i++) {
JSONObject json = subList.get(i);
LinkedHashMap<String, Object> jsonDtl = new LinkedHashMap<>();
@@ -296,12 +297,15 @@ public class InBussManageServiceImpl implements InBussManageService {
jsonDtl.put("quality_scode", IOSEnum.QUALITY_SCODE.code("合格品"));
jsonDtl.put("is_active", IOSEnum.IS_SEND.code(""));
tableData.add(jsonDtl);
subs.add(json.getString("container_name"));
}
String package_box_sn = (String) tableData.get(0).get("package_box_sn");
try {
JSONObject param_jo = new JSONObject();
param_jo.put("box_no", package_box_sn);
param_jo.put("box_weight", subList.get(0).getString("box_weight"));
param_jo.put("container_name", subs);
lmsToMesServiceImpl.BoxDataCollectionSubmit2(param_jo);
} catch (Exception e) {
log.error("验箱回传MES异常BoxDataCollectionSubmit2给MES传输子卷包装关系异常,木箱号为:" + package_box_sn + ",异常信息:" + e);

View File

@@ -0,0 +1,30 @@
package org.nl.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @Author: lyd
* @Description:
* @Date: 2023/5/9
*/
@Getter
@AllArgsConstructor
public enum SpecEnum {
FQ(1, "分切",""),
XX(2, "子卷下线",""),
ZJ(3, "质检",""),
BZ(4, "包装",""),
BZ_REMOVE(5, "包装解除",""),
BZ_MES(6, "包装回传","CamstarApi/momBoxPackageSubmit"),
ZXRK(7, "装箱入库",""),
TYCK(8, "退异常口",""),
YX_MES(9, "验箱","CamstarApi/BoxDataCollectionSubmit2"),
RK(10, "入库",""),
;
private final Integer value;
private final String desc;
private final String url;
}

View File

@@ -26,6 +26,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.info.dao.PdmBiContainerinbound;
import org.nl.b_lms.pdm.info.service.IPdmBiContainerinboundService;
import org.nl.b_lms.pdm.productSpec.service.impl.PdmProductSpecServiceImpl;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
@@ -45,6 +46,7 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvOutServi
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.*;
import org.nl.common.enums.NoticeTypeEnum;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.common.enums.SpecEnum;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.MapOf;
import org.nl.modules.common.exception.BadRequestException;
@@ -1867,6 +1869,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
try {
if (tryLock) {
//1.查询满轴缓存位是否有空位
PdmProductSpecServiceImpl.doRecord(SpecEnum.XX,whereJson,Boolean.TRUE,null,containerName);
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
@@ -2049,6 +2052,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
String box_no = jsonObject.getString("box_no");
Integer box_weight = jsonObject.getIntValue("box_weight");
Integer current_weight = jsonObject.getIntValue("current_weight");
List<String> containers = jsonObject.getObject("containers", List.class);
int count = taskService.count(new QueryWrapper<SchBaseTask>()
.eq("point_code1", whereJson.getString("device_code"))
@@ -2080,6 +2084,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
if (CollectionUtils.isEmpty(errorMsg)) {
whereJson.put("bill_type", IOSEnum.IN_TYPE.code("生产入库"));
inBussManageService.inTask(whereJson);
PdmProductSpecServiceImpl.doRecord(SpecEnum.RK,null,Boolean.TRUE,null,containers);
} else {
iPdmBiContainerinboundService
.update(new UpdateWrapper<PdmBiContainerinbound>()
@@ -2112,6 +2117,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
TwoExceptionInTask bean = SpringContextHolder.getBean(TwoExceptionInTask.class);
bean.createTask(jsonTaskParam);
bean.immediateNotifyAcs(null);
PdmProductSpecServiceImpl.doRecord(SpecEnum.TYCK,null,Boolean.FALSE,errorMsg.toString(),containers);
}
} else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("空盘入库"))) {

View File

@@ -15,9 +15,11 @@ import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.nl.b_lms.pdm.info.dao.PdmBiContainerinfo;
import org.nl.b_lms.pdm.info.service.IPdmBiContainerinfoService;
import org.nl.b_lms.pdm.productSpec.service.impl.PdmProductSpecServiceImpl;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService;
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
import org.nl.common.enums.SpecEnum;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
@@ -28,6 +30,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* LMS系统为客户端MES为服务端
*/
@@ -948,7 +954,7 @@ public class LmsToMesServiceImpl implements LmsToMesService {
param.put("QuanlityInBox", num);
param.put("BoxWeight", box_weight);
param.put("ContainerList", rows);
List<String> list = new ArrayList<>();
try {
String resultMsg = HttpRequest.post(url)
.body(String.valueOf(param))
@@ -961,6 +967,7 @@ public class LmsToMesServiceImpl implements LmsToMesService {
for (int i = 0; i < array.size(); i++) {
JSONObject row = array.getJSONObject(i);
String ContainerName = row.getString("ContainerName");
list.add(ContainerName);
String AttributeValue = row.getString("AttributeValue");
subpackagerelationService.update(new LambdaUpdateWrapper<PdmBiSubpackagerelation>().set(PdmBiSubpackagerelation::getNet_weight, AttributeValue).eq(PdmBiSubpackagerelation::getContainer_name, ContainerName));
}
@@ -970,11 +977,14 @@ public class LmsToMesServiceImpl implements LmsToMesService {
String RTYPE = result.getString("RTYPE");
if ("E".equals(RTYPE)) {
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_MES,param,Boolean.FALSE,result.getString("RTMSG"),list);
throw new BadRequestException(result.getString("RTMSG"));
}
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_MES,param,Boolean.TRUE,null,list);
} catch (Exception e) {
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_MES,param,Boolean.FALSE,e.getMessage(),list);
throw new BadRequestException("MES提示错误" + e.getMessage());
}
return result;
@@ -988,6 +998,7 @@ public class LmsToMesServiceImpl implements LmsToMesService {
String box_no = param.getString("box_no");
String box_weight = param.getString("box_weight");
List containerName = param.getObject("container_name", List.class);
if (StrUtil.isEmpty(box_no)) {
throw new BadRequestException("木箱号不能为空!");
@@ -1044,11 +1055,14 @@ public class LmsToMesServiceImpl implements LmsToMesService {
String RTYPE = result.getString("RTYPE");
if ("E".equals(RTYPE)) {
PdmProductSpecServiceImpl.doRecord(SpecEnum.YX_MES,param,Boolean.FALSE,result.getString("RTMSG"),containerName);
throw new BadRequestException("MES提示错误" +result.getString("RTMSG"));
}
} catch (Exception e) {
PdmProductSpecServiceImpl.doRecord(SpecEnum.YX_MES,param,Boolean.FALSE,e.getMessage(),containerName);
throw new BadRequestException("MES错误" + e.getMessage());
}
PdmProductSpecServiceImpl.doRecord(SpecEnum.YX_MES,param,Boolean.TRUE,null,containerName);
return result;
}

View File

@@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ComPareUtil {
@@ -78,6 +79,7 @@ public class ComPareUtil {
json.put("box_no", sub.getPackage_box_sn());
json.put("box_weight", sub.getBox_weight().intValue());
json.put("current_weight", new BigDecimal(current_weight).intValue());
json.put("containers", list.stream().map(a->a.getContainer_name()).collect(Collectors.toList()));
json.put("inbound", (pdmBiContainerinbound != null ? pdmBiContainerinbound.getInbound():false));
return json;
}