质量 缺陷类型 NC处理

tags/yfai-pcn-ext-v1.0
LML丶 1 year ago
parent 948ae8d629
commit 6dcb5e83ba

@ -0,0 +1,19 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import io.swagger.annotations.ApiOperation;
/**
* @Description:
* @CreateDate: 2021/9/9 3:24
* @Author: simon.song
*/
public interface IMesConfigService {
@ApiOperation(value = "获取配置表模板代码")
String getCfgValue(String org, String key);
@ApiOperation(value = "获取配置表模板代码")
MesConfig getCfgValueByCode(String key);
}

@ -0,0 +1,20 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesDefectRecord;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-04-26 15:37
* @Modify:
**/
public interface IMesDefectRecordService {
@ApiOperation("完成质检 保存不良记录")
void saveDefect(String organizeCode, String userName, List<MesDefectRecord> recordList);
}

@ -0,0 +1,30 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesInputDefectRecordModel;
import cn.estsh.i3plus.pojo.mes.bean.MesDefectRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesPartTypeDefect;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-04-26 15:37
* @Modify:
**/
public interface IMesInputDefectRecordService {
@ApiOperation(value = "扫描产品条码")
public MesInputDefectRecordModel queryProduceSn(String serialNumber, Integer sides, String org);
@ApiOperation(value = "零件类型缺陷类型对应关系信息")
public List<MesPartTypeDefect> queryPartTypeDefect(String serialNumber, String defectLocationCode, boolean flg, Integer sides, String org);
@ApiOperation(value = "零件类型缺陷类型对应关系信息")
public void saveDefectRecord(List<MesDefectRecord> defectRecordList, String org);
}

@ -0,0 +1,20 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping;
import cn.estsh.i3plus.pojo.mes.bean.MesShippingOrderManagementDetail;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-10 14:36
* @Modify:
**/
public interface IMesJisShippingService {
@ApiOperation(value = "构筑发运报工数据")
public List<MesJisShipping> getJisShipping(List<MesShippingOrderManagementDetail> orderManagementDetailList, String org);
}

@ -0,0 +1,23 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingModel;
import io.swagger.annotations.ApiOperation;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-04-26 15:37
* @Modify:
**/
public interface IMesNcProcessingService {
@ApiOperation(value = "扫描产品条码")
public MesNcProcessingModel queryProduceSn(String serialNumber, String org);
@ApiOperation(value = "NC处理")
public void saveNc(String serialNumber,String person, Integer type, String org);
}

@ -0,0 +1,86 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesInputDefectRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.mes.bean.MesDefectRecord;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@Api(tags = "缺陷记录页面")
@RequestMapping(MesCommonConstant.MES_YANFEN + "/defect_record")
@Slf4j
public class MesInputDefectRecordController {
@Autowired
private IMesInputDefectRecordService inputDefectRecordService;
@GetMapping("/query-loading-order")
@ApiOperation(value = "查询产品条码")
public ResultBean queryProduceSn(String serialNumber, Integer sides) {
try {
// 数据校验
ValidatorBean.checkNotNull(serialNumber, "产品条码不能为空");
ValidatorBean.checkNotNull(sides, "正反面不能为空");
// return ResultBean.success("查询成功").setResultObject(inputDefectRecordService.queryProduceSn(serialNumber, sides, "2031"));
return ResultBean.success("查询成功").setResultObject(inputDefectRecordService.queryProduceSn(serialNumber, sides, AuthUtil.getOrganizeCode()));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping("/query-part-type-defect")
@ApiOperation(value = "查询零件类型缺陷类型对应关系")
public ResultBean queryPartTypeDefect(String partNo, String defectLocationCode, boolean flg, Integer sides) {
try {
// 数据校验
ValidatorBean.checkNotNull(partNo, "物料号不能为空");
ValidatorBean.checkNotNull(defectLocationCode, "位置不能为空");
ValidatorBean.checkNotNull(sides, "正反面不能为空");
// return ResultBean.success("查询成功").setResultList(inputDefectRecordService.queryPartTypeDefect(partNo, defectLocationCode, flg, sides, "2031"));
return ResultBean.success("查询成功").setResultList(inputDefectRecordService.queryPartTypeDefect(partNo, defectLocationCode, flg, sides, AuthUtil.getOrganizeCode()));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@PostMapping("/save-defect-record")
@ApiOperation(value = "完成质检-保存不良记录")
public ResultBean saveDefectRecord(@RequestBody List<MesDefectRecord> defectRecordList) {
try {
// 数据校验
ValidatorBean.checkNotNull(defectRecordList, "选择不良数据不能为空");
// inputDefectRecordService.saveDefectRecord(defectRecordList, "2031");
inputDefectRecordService.saveDefectRecord(defectRecordList, AuthUtil.getOrganizeCode());
return ResultBean.success("查询成功");
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -0,0 +1,68 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNcProcessingService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
@RestController
@Api(tags = "NC处理页面")
@RequestMapping(MesCommonConstant.MES_YANFEN + "/nc-processing")
@Slf4j
public class MesNcProcessingController {
@Autowired
private IMesNcProcessingService ncProcessingService;
@GetMapping("/query")
@ApiOperation(value = "查询产品条码")
public ResultBean queryProduceSn(String serialNumber) {
try {
// 数据校验
ValidatorBean.checkNotNull(serialNumber, "产品条码不能为空");
return ResultBean.success("查询成功").setResultObject(ncProcessingService.queryProduceSn(serialNumber, AuthUtil.getOrganizeCode()));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@PostMapping("/save-nc")
@ApiOperation(value = "NC处理")
public ResultBean saveNc(@RequestBody String serialNumber, String person, Integer type) {
try {
// 数据校验
ValidatorBean.checkNotNull(serialNumber, "产品条码不能为空");
String description = MesPcnExtEnumUtil.NC_TYPE.valueOfDescription(type);
if (StringUtils.isEmpty(description)) {
throw new ImppBusiException(String.format("【%s】类型不存在请检查数据", type));
}
ncProcessingService.saveNc(serialNumber, person, type, AuthUtil.getOrganizeCode());
return ResultBean.success("查询成功");
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -0,0 +1,43 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import cn.estsh.i3plus.pojo.mes.repository.MesConfigRepository;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Description:
* @CreateDate: 2021/9/9 3:25
* @Author: simon.song
*/
@Service
@Slf4j
public class MesConfigService implements IMesConfigService {
@Autowired
private MesConfigRepository configRepository;
@Override
public String getCfgValue(String org, String key) {
MesConfig config = configRepository.getByProperty(
new String[]{"cfgKey", "organizeCode", "isValid", "isDeleted"},
new Object[]{key, org, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()});
if (config == null) {
throw ImppExceptionBuilder.newInstance().setErrorCode(cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode())
.setErrorDetail(String.format("配置表数据不存在请维护key【%s】", key))
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.build();
}
return config.getCfgValue();
}
@Override
public MesConfig getCfgValueByCode(String cfgCode) {
return this.configRepository.getByProperty(new String[]{"isDeleted", "isValid", "cfgCode"},
new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), cfgCode});
}
}

@ -0,0 +1,72 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesDefectRecordService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.mes.bean.MesDefectRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.repository.MesDefectRecordRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-09 10:54
* @Modify:
**/
@Service
@Slf4j
public class MesDefectRecordService implements IMesDefectRecordService {
@Autowired
private MesWorkOrderRepository workOrderRepository;
@Autowired
private MesDefectRecordRepository defectRecordRepository;
@Override
public void saveDefect(String organizeCode, String userName, List<MesDefectRecord> recordList) {
// //校验工单
// MesWorkOrder workOrder = checkQty(recordList);
recordList.forEach(r -> {
r.setId(null);
// r.setOrderId(workOrder.getId());
// r.setOrderNo(workOrder.getOrderNo());
r.setOrganizeCode(organizeCode);
//更新工单表报废数量
// workOrder.setRepairQty(workOrder.getRepairQtyVal() + r.getQty());
ConvertBean.serviceModelInitialize(r, userName);
});
defectRecordRepository.saveAll(recordList);
// ConvertBean.serviceModelUpdate(workOrder, userName);
// workOrderExtRepository.update(workOrder);
}
// public MesWorkOrder checkQty(List<MesDefectRecord> recordList) {
// MesDefectRecord recordExt = recordList.stream().findFirst().get();
// MesWorkOrder workOrder = workOrderRepository.getById(recordExt.getWorkOrderNo());
// if (workOrder == null) {
// throw ImppExceptionBuilder.newInstance()
// .setErrorDetail("工单ID【%s】不存在", recordExt.getOrderId())
// .build();
// }
// //获取不良总数
// double total = recordList.stream().filter(r -> r.getQty() != null).mapToDouble(MesDefectRecordMagna::getQty).sum();
// if (total > workOrder.getQty()) {
// throw ImppExceptionBuilder.newInstance()
// .setErrorDetail("不良数量总数不能大于工单数")
// .build();
// }
// return workOrder;
// }
}

@ -0,0 +1,341 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesInputDefectRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesInputDefectRecordModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.util.ResultBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-09 10:54
* @Modify:
**/
@Service
@Slf4j
public class MesInputDefectRecordService implements IMesInputDefectRecordService {
@Autowired
private MesProduceSnRepository produceSnRepository;
@Autowired
private MesPartRepository partRepository;
@Autowired
private MesPartTypePictureRepository partTypePictureRepository;
@Autowired
private MesLocationConfigRepository locationConfigRepository;
@Autowired
private MesDefectAlarmConfigRepository defectAlarmConfigRepository;
@Autowired
private MesPartTypeDefectRepository partTypeDefectRepository;
@Autowired
private MesDefectRecordRepository defectRecordRepository;
@Autowired
private MesDefectRecordService defectRecordService;
@Autowired
private MesMoveRepository moveRepository;
@Autowired
private IMesConfigService configService;
@Autowired
private ISyncFuncService syncFuncService;
@Override
public MesInputDefectRecordModel queryProduceSn(String serialNumber, Integer sides, String org) {
//检查条码
MesProduceSn produceSn = checkProduceSn(serialNumber, org);
//检查物料
MesPart part = checkPart(produceSn, org);
//todo 图片暂时放空
//检查零件类型与图片对应关系
MesPartTypePicture partTypePicture = checkPartTypePicture(part, org);
//位置
List<MesLocationConfig> locationConfigList = checkLocationConfig(org);
List<String> locationCodeList = locationConfigList.stream().map(k -> k.getDefectLocationCode()).collect(Collectors.toList());
//查询零件类型缺陷类型对应关系
List<MesPartTypeDefect> partTypeDefectList = checkPartTypeDefect(part, org);
List<String> partTypeDefectCodeList = partTypeDefectList.stream().map(k -> k.getDefectCode()).collect(Collectors.toList());
//查询预警数量
List<MesDefectAlarmConfig> alarmConfigList = queryDefectAlarmConfigByLocationCodeList(part, sides, locationCodeList, partTypeDefectCodeList, org);
//根据不良类型+位置 若有数据,则表示需要标黄
Map<String, MesDefectAlarmConfig> alarmConfigMap = alarmConfigList.stream().collect(Collectors.toMap(k -> k.getDefectLocationCode(), k -> k));
// //位置是否标黄Map,key位置value标黄标识
// Map<String, Boolean> map = new HashMap<>();
// alarmConfigMap.forEach((k, v) -> {
// //若有这个位置则标黄
// if (!map.containsKey(k)) {
// map.put(k, true);
// }
//
// });
locationConfigList.forEach(k -> {
if (alarmConfigMap.containsKey(k.getDefectLocationCode())) {
k.setIsflg(true);
}
});
MesInputDefectRecordModel model = new MesInputDefectRecordModel();
// model.setMap(map);
model.setPart(part);
model.setPartTypePicture(partTypePicture);
model.setLocationConfigList(locationConfigList);
return model;
}
@Override
public List<MesPartTypeDefect> queryPartTypeDefect(String partNo, String defectLocationCode, boolean flg, Integer sides, String org) {
//检查物料
MesPart part = checkPartByPartNo(partNo, org);
//查询零件类型缺陷类型对应关系
List<MesPartTypeDefect> partTypeDefectList = checkPartTypeDefect(part, org);
//flg==true 则是标黄的位置,需要查询位置下具体需要标黄的缺陷类型
if (!StringUtils.isEmpty(flg) && flg) {
List<String> partTypeDefectCodeList = partTypeDefectList.stream().map(k -> k.getDefectCode()).collect(Collectors.toList());
//查询预警数量
List<MesDefectAlarmConfig> alarmConfigList = queryDefectAlarmConfig(part, sides, defectLocationCode, partTypeDefectCodeList, org);
//根据不良类型 合计预警数量
Map<String, MesDefectAlarmConfig> alarmConfigMap = alarmConfigList.stream().collect(Collectors.toMap(k -> k.getDefectCode(), k -> k));
//位置是否标黄Map,key不良类型value标黄标识
Map<String, Boolean> map = new HashMap<>();
alarmConfigMap.forEach((k, v) -> {
//若有这个不良类型则标黄
if (!map.containsKey(k)) {
map.put(k, true);
}
});
//找到标黄的缺陷类型 标识置为true
partTypeDefectList.forEach(k -> {
if (map.containsKey(k.getDefectCode())) {
k.setFlg(true);
}
});
}
return partTypeDefectList;
}
@Override
public void saveDefectRecord(List<MesDefectRecord> defectRecordList, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(defectRecordList.get(0).getPartNo(), "partNo", packBean);
MesPart part = partRepository.getByProperty(packBean);
//保存数据
defectRecordService.saveDefect(org, AuthUtil.getSessionUser().getUserName(), defectRecordList);
GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM");
serialNoModel.setPartNo(part.getPartNo());
ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, AuthUtil.getSessionUser().getUserName(), org, 1);
String zrsum = "";
if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) {
zrsum = (rb.getResultList().get(0)).toString();
}
MesMove move = new MesMove();
move.setOrganizeCode(org);
move.setFactoryCode(org);
move.setLgort(configService.getCfgValue(org, "LGORT"));
move.setUmlgo(configService.getCfgValue(org, "UMLGO"));
move.setMenge(defectRecordList.size());
move.setMeins(part.getUnit());
move.setZrsum(zrsum);
ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName());
moveRepository.save(move);
}
private MesProduceSn checkProduceSn(String serialNumber, String org) {
//根据扫描的条码查询条码是否存在
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(serialNumber, "serialNumber", packBean);
MesProduceSn produceSn = produceSnRepository.getByProperty(packBean);
//若不存在则提示条码不存在
if (StringUtils.isEmpty(produceSn)) {
throw new ImppBusiException(String.format("【%s】此条码不存在请检查数据", serialNumber));
}
//根据条码状态判断 是不是已下线条码
//若不是已下线的条码则提示 条码状态 请选择已下线的条码
if (produceSn.getSnStatus() != MesPcnExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) {
throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择【%s】状态的条码", serialNumber, produceSn.getSnStatus(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()));
}
//todo
//是否需要判断条码质量状态
// if()
return produceSn;
}
private MesPart checkPart(MesProduceSn produceSn, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(produceSn.getPartNo(), "partNo", packBean);
MesPart part = partRepository.getByProperty(packBean);
//若不存在则提示物料信息不存在
if (StringUtils.isEmpty(part)) {
throw new ImppBusiException(String.format("【%s】此条码对应【%s】物料号不存在请检查数据", produceSn.getSerialNumber(), produceSn.getPartNo()));
}
//根据条码查询零件类型partType
if (StringUtils.isEmpty(part.getPartTypeCode())) {
throw new ImppBusiException(String.format("【%s】此条码对应【%s】物料号未维护零件类型请检查数据", produceSn.getSerialNumber(), produceSn.getPartNo()));
}
return part;
}
private MesPart checkPartByPartNo(String partNo, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean);
MesPart part = partRepository.getByProperty(packBean);
return part;
}
private MesPartTypePicture checkPartTypePicture(MesPart part, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean);
MesPartTypePicture partTypePicture = partTypePictureRepository.getByProperty(packBean);
//若不存在则提示零件类别不存在
if (StringUtils.isEmpty(partTypePicture)) {
throw new ImppBusiException(String.format("【%s】物料号对应的【%s】零件类别不存在请检查数据", part.getPartNo(), part.getPartTypeCode()));
}
//若不存在则提示未维护正面图片
if (StringUtils.isEmpty(partTypePicture.getFrontPictureName())) {
throw new ImppBusiException(String.format("【%s】物料号对应的【%s】零件类别未维护正面图片请检查数据", part.getPartNo(), part.getPartTypeCode()));
}
//若不存在则提示未维护反面图片
if (StringUtils.isEmpty(partTypePicture.getBackPictureName())) {
throw new ImppBusiException(String.format("【%s】物料号对应的【%s】零件类别未维护反面图片请检查数据", part.getPartNo(), part.getPartTypeCode()));
}
return partTypePicture;
}
private List<MesLocationConfig> checkLocationConfig(String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"rowLocation", "columnLocation"}, packBean);
List<MesLocationConfig> configList = locationConfigRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(configList)) {
throw new ImppBusiException(String.format("未配置位置,请检查数据"));
}
return configList;
}
private List<MesPartTypeDefect> checkPartTypeDefect(MesPart part, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean);
List<MesPartTypeDefect> partTypeDefectList = partTypeDefectRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(partTypeDefectList)) {
throw new ImppBusiException(String.format("未配置【%s】零件类型缺陷类型对应关系请检查数据", part.getPartTypeCode()));
}
return partTypeDefectList;
}
private List<MesDefectAlarmConfig> queryDefectAlarmConfigByLocationCodeList(MesPart part, Integer sides, List<String> locationCodeList, List<String> partTypeDefectCodeList,
String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(part.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean);
DdlPreparedPack.getNumEqualPack(sides, "frontAndBackSides", packBean);
DdlPreparedPack.getInPackList(locationCodeList, "defectLocationCode", packBean);
DdlPreparedPack.getInPackList(partTypeDefectCodeList, "defectCode", packBean);
List<MesDefectAlarmConfig> alarmConfigList = defectAlarmConfigRepository.findByHqlWhere(packBean);
return alarmConfigList;
}
private List<MesDefectAlarmConfig> queryDefectAlarmConfig(MesPart part, Integer sides, String locationCode, List<String> partTypeDefectCodeList, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(part.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean);
DdlPreparedPack.getNumEqualPack(sides, "frontAndBackSides", packBean);
DdlPreparedPack.getStringEqualPack(locationCode, "defectLocation", packBean);
DdlPreparedPack.getInPackList(partTypeDefectCodeList, "defectCode", packBean);
List<MesDefectAlarmConfig> alarmConfigList = defectAlarmConfigRepository.findByHqlWhere(packBean);
return alarmConfigList;
}
private void queryDefectRecordByToDaySumQty(Map<String, Boolean> map, MesPart part, Integer sides, String locationCode, String partTypeDefectCode, Integer count,
String org) {
if (map.containsKey(locationCode)) {
return;
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(part.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean);
DdlPreparedPack.getNumEqualPack(sides, "frontAndBackSides", packBean);
DdlPreparedPack.getStringEqualPack(locationCode, "defectLocation", packBean);
DdlPreparedPack.getStringEqualPack(partTypeDefectCode, "defectCode", packBean);
DdlPreparedPack.timeBuilder(TimeTool.getToday(), TimeTool.getToday(), "createDatetime", packBean, true);
int defectCount = defectRecordRepository.findByHqlWhereCount(packBean);
if (defectCount >= count) {
map.put(locationCode, true);
}
}
}

@ -0,0 +1,68 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesJisShippingService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping;
import cn.estsh.i3plus.pojo.mes.bean.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.MesShippingOrderManagementDetail;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-10 14:38
* @Modify:
**/
@Service
@Slf4j
public class MesJisShippingService implements IMesJisShippingService {
@Autowired
private MesShippingOrderManagementRepository shippingOrderManagementRepository;
@Autowired
private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository;
public List<MesJisShipping> getJisShipping(List<MesShippingOrderManagementDetail> orderManagementDetailList, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(orderManagementDetailList.get(0).getLoadingOrderNo(), "shippingOrderNo", packBean);
MesShippingOrderManagement originBean = shippingOrderManagementRepository.getByProperty(packBean);
DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(originBean.getShippingOrderNo(), "shippingOrderNo", detailPackBean);
List<MesShippingOrderManagementDetail> detailDeleteList = shippingOrderManagementDetailRepository.findByHqlWhere(detailPackBean);
List<MesJisShipping> jisShippingList = new ArrayList<>();
orderManagementDetailList.forEach(k -> {
MesJisShipping jisShipping = new MesJisShipping();
BeanUtils.copyProperties(originBean, jisShipping, "id");
BeanUtils.copyProperties(k, jisShipping, "id");
jisShipping.setFactoryCode(originBean.getCustPlantCode());
jisShipping.setShippingTime(TimeTool.getNowTime(true));
jisShipping.setDock(originBean.getSendDockCode());
jisShipping.setCusDock(originBean.getCustDockCode());
jisShipping.setCustOrderNo(k.getCustOrderNo());
jisShipping.setSerialNumber(k.getBarcode());
jisShipping.setQuantityPerCar(detailDeleteList.size());
jisShipping.setShippingOrderCode(originBean.getShippingOrderNo());
ConvertBean.serviceModelInitialize(jisShipping, AuthUtil.getSessionUser().getUserName());
jisShippingList.add(jisShipping);
});
return jisShippingList;
}
}

@ -0,0 +1,234 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNcProcessingService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingDefectModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.util.ResultBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-10 15:59
* @Modify:
**/
@Service
@Slf4j
public class MesNcProcessingService implements IMesNcProcessingService {
@Autowired
private MesDefectRecordRepository defectRecordRepository;
@Autowired
private MesPartRepository partRepository;
@Autowired
private MesPartTypePictureRepository partTypePictureRepository;
@Autowired
private MesPartTypeDefectRepository partTypeDefectRepository;
@Autowired
private MesLocationConfigRepository locationConfigRepository;
@Autowired
private IMesConfigService configService;
@Autowired
private ISyncFuncService syncFuncService;
@Autowired
private MesMoveRepository moveRepository;
@Override
public MesNcProcessingModel queryProduceSn(String serialNumber, String org) {
//检查不良条码
List<MesDefectRecord> defectRecordList = queryDefectRecord(serialNumber, org);
//检查物料
MesPart part = checkPart(defectRecordList, org);
//todo 图片暂时放空
//检查零件类型与图片对应关系
MesPartTypePicture partTypePicture = checkPartTypePicture(part, org);
//位置
List<MesLocationConfig> locationConfigList = checkLocationConfig(org);
Map<String, MesDefectRecord> defectRecordMap = defectRecordList.stream().collect(Collectors.toMap(k -> k.getDefectLocation(), k -> k));
Map<String, List<MesDefectRecord>> defectMap = defectRecordList.stream().collect(Collectors.groupingBy(k -> k.getDefectCode()));
//位置是否标黄Map,key位置value标黄标识
locationConfigList.forEach(k -> {
if (defectRecordMap.containsKey(k.getDefectLocationCode())) {
k.setIsflg(true);
}
});
List<MesNcProcessingDefectModel> defectModelList = new ArrayList<>();
defectMap.forEach((k, v) -> {
MesNcProcessingDefectModel model = new MesNcProcessingDefectModel();
model.setDefectCode(k);
model.setQty(v.size());
model.setDefectName(v.get(0).getDefectName());
defectModelList.add(model);
});
MesNcProcessingModel model = new MesNcProcessingModel();
model.setDefectModelList(defectModelList);
model.setPartTypePicture(partTypePicture);
model.setLocationConfigList(locationConfigList);
return model;
}
@Override
public void saveNc(String serialNumber, String person, Integer type, String org) {
//检查不良条码
List<MesDefectRecord> defectRecordList = queryDefectRecord(serialNumber, org);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(defectRecordList.get(0).getPartNo(), "partNo", packBean);
MesPart part = partRepository.getByProperty(packBean);
GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM");
serialNoModel.setPartNo(part.getPartNo());
ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, AuthUtil.getSessionUser().getUserName(), org, 1);
String zrsum = "";
if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) {
zrsum = (rb.getResultList().get(0)).toString();
}
if (type == MesPcnExtEnumUtil.NC_TYPE.REWORK.getValue()) {
MesMove move = new MesMove();
move.setOrganizeCode(org);
move.setFactoryCode(org);
move.setLgort(configService.getCfgValue(org, "LGORT"));
move.setUmlgo(configService.getCfgValue(org, "UMLGO"));
move.setMenge(defectRecordList.size());
move.setMeins(part.getUnit());
move.setZrsum(zrsum);
ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName());
moveRepository.save(move);
}
defectRecordList.forEach(k -> {
k.setNcType(type);
k.setPerson(person);
ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName());
});
defectRecordRepository.saveAll(defectRecordList);
}
private MesPart checkPart(List<MesDefectRecord> defectRecordList, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(defectRecordList.get(0).getPartNo(), "partNo", packBean);
MesPart part = partRepository.getByProperty(packBean);
//若不存在则提示物料信息不存在
if (StringUtils.isEmpty(part)) {
throw new ImppBusiException(String.format("【%s】此条码对应【%s】物料号不存在请检查数据", defectRecordList.get(0).getSerialNumber(), defectRecordList.get(0).getPartNo()));
}
//根据条码查询零件类型partType
if (StringUtils.isEmpty(part.getPartTypeCode())) {
throw new ImppBusiException(String.format("【%s】此条码对应【%s】物料号未维护零件类型请检查数据", defectRecordList.get(0).getSerialNumber(), defectRecordList.get(0).getPartNo()));
}
return part;
}
private List<MesDefectRecord> queryDefectRecord(String serialNumber, String org) {
//查询扫描的条码
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(serialNumber, "serialNumber", packBean);
List<MesDefectRecord> defectRecordList = defectRecordRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(defectRecordList)) {
throw new ImppBusiException(String.format("【%s】此条码不存在可疑品记录请检查数据", serialNumber));
}
return defectRecordList;
}
private MesPartTypePicture checkPartTypePicture(MesPart part, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean);
MesPartTypePicture partTypePicture = partTypePictureRepository.getByProperty(packBean);
//若不存在则提示零件类别不存在
if (StringUtils.isEmpty(partTypePicture)) {
throw new ImppBusiException(String.format("【%s】物料号对应的【%s】零件类别不存在请检查数据", part.getPartNo(), part.getPartTypeCode()));
}
//若不存在则提示未维护正面图片
if (StringUtils.isEmpty(partTypePicture.getFrontPictureName())) {
throw new ImppBusiException(String.format("【%s】物料号对应的【%s】零件类别未维护正面图片请检查数据", part.getPartNo(), part.getPartTypeCode()));
}
//若不存在则提示未维护反面图片
if (StringUtils.isEmpty(partTypePicture.getBackPictureName())) {
throw new ImppBusiException(String.format("【%s】物料号对应的【%s】零件类别未维护反面图片请检查数据", part.getPartNo(), part.getPartTypeCode()));
}
return partTypePicture;
}
private List<MesPartTypeDefect> checkPartTypeDefect(MesPart part, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean);
List<MesPartTypeDefect> partTypeDefectList = partTypeDefectRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(partTypeDefectList)) {
throw new ImppBusiException(String.format("未配置【%s】零件类型缺陷类型对应关系请检查数据", part.getPartTypeCode()));
}
return partTypeDefectList;
}
private List<MesLocationConfig> checkLocationConfig(String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"rowLocation", "columnLocation"}, packBean);
List<MesLocationConfig> configList = locationConfigRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(configList)) {
throw new ImppBusiException(String.format("未配置位置,请检查数据"));
}
return configList;
}
}

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesJisShippingService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesShippingLoadingCheckService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesShippingLoadingCheckModel;
@ -46,6 +47,10 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository;
@Autowired
private MesProduceSnRepository produceSnRepository;
@Autowired
private IMesJisShippingService jisShippingService;
@Autowired
private MesJisShippingRepository jisShippingRepository;
@Resource(name = MesPcnConstWords.REDIS_RES_PCN)
private ImppRedis redisMesPcn;
@ -232,7 +237,7 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
List<MesShippingOrderManagementDetail> orderManagementDetailList = shippingOrderManagementDetailRepository.findByHqlWhere(orderManagementPackBean);
//条码
List<String> snList = orderManagementDetailList.stream().map(k -> k.getSn()).collect(Collectors.toList());
List<String> snList = orderManagementDetailList.stream().map(k -> k.getBarcode()).collect(Collectors.toList());
DdlPackBean producePackBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getInPackList(snList, "serialNumber", producePackBean);
List<MesProduceSn> produceSnList = produceSnRepository.findByHqlWhere(producePackBean);
@ -251,6 +256,10 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
k.setShippingStatus(MesPcnExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
});
List<MesJisShipping> jisShippingList = jisShippingService.getJisShipping(orderManagementDetailList, org);
//保存当前发运单明细报工
jisShippingRepository.saveAll(jisShippingList);
shippingOrderManagementRepository.saveAll(orderManagementList);
shippingOrderManagementDetailRepository.saveAll(orderManagementDetailList);
produceSnRepository.saveAll(produceSnList);

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesJisShippingService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesSortShippingCheckService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel;
@ -49,6 +50,12 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
@Autowired
private MesLoadingVehiclesOrderDetailRepository vehiclesOrderDetailRepository;
@Autowired
private MesJisShippingRepository jisShippingRepository;
@Autowired
private IMesJisShippingService jisShippingService;
@Resource(name = MesPcnConstWords.REDIS_RES_PCN)
private ImppRedis redisMesPcn;
@ -145,7 +152,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) {
detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER);
}
detail.setSn(produceSn.getSerialNumber());
detail.setBarcode(produceSn.getSerialNumber());
break;
}
}
@ -183,7 +190,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
if (detail.getPartNo().equals(produceSn.getPartNo())) {
scanFlg = true;
detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER);
detail.setSn(produceSn.getSerialNumber());
detail.setBarcode(produceSn.getSerialNumber());
break;
}
}
@ -238,7 +245,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
MesPcnExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()));
}
Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getSn()) && k.getSn().equals(model.getSn())).findFirst();
Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst();
if (optional.isPresent()) {
throw new ImppBusiException(String.format("【%s】此条码已经扫描过请检查数据", model.getSn()));
}
@ -304,8 +311,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
detail.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.VERIFICATION_COMPLETED.getValue());
Optional<MesShippingOrderManagementDetail> optional1 =
model.getDetailList().stream().filter(k -> k.getShippingOrderNo().equals(detail.getShippingOrderNo())).findFirst();
detail.setSn(optional1.get().getSn());
snList.add(optional1.get().getSn());
detail.setBarcode(optional1.get().getBarcode());
snList.add(optional1.get().getBarcode());
}
DdlPackBean producePackBean = DdlPackBean.getDdlPackBean(org);
@ -320,6 +327,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
//修改当前发运单明细状态
orderManagementDetailList.forEach(k -> k.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue()));
//当前发运单明细 需要报工的数据
List<MesJisShipping> jisShippingList = jisShippingService.getJisShipping(orderManagementDetailList, org);
//修改当前发运单明细条码状态
produceSnList.forEach(k -> k.setSnStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()));
@ -341,7 +351,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
//此发运单所在装车单对应剩余发运单
DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringNoEqualPack(model.getShippingOrderNo(), "shippingOrderNo", orderManagementPackBean);
DdlPreparedPack.getStringEqualPack(orderManagement.getLoadingOrderNo(), "shippingOrderNo", orderManagementPackBean);
DdlPreparedPack.getStringEqualPack(orderManagement.getLoadingOrderNo(), "loadingOrderNo", orderManagementPackBean);
List<MesShippingOrderManagement> orderManagementtSurplusList = shippingOrderManagementRepository.findByHqlWhere(orderManagementPackBean);
orderManagementtSurplusList.forEach(k -> k.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue()));
@ -350,12 +360,20 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
orderManagementDetailSurplusList.forEach(k -> k.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue()));
//剩余发运单明细的条码
List<String> snSurplusList = orderManagementDetailSurplusList.stream().map(k -> k.getSn()).collect(Collectors.toList());
List<String> snSurplusList = orderManagementDetailSurplusList.stream().map(k -> k.getBarcode()).collect(Collectors.toList());
producePackBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getInPackList(snSurplusList, "serialNumber", producePackBean);
List<MesProduceSn> produceSnSurplusList = produceSnRepository.findByHqlWhere(producePackBean);
produceSnSurplusList.forEach(k -> k.setSnStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()));
//剩余发运单明细 需要报工的数据
List<MesJisShipping> jisShippingSurplusList = jisShippingService.getJisShipping(orderManagementDetailSurplusList, org);
//保存当前发运单明细报工
jisShippingRepository.saveAll(jisShippingList);
//保存剩余发运单明细报工
jisShippingRepository.saveAll(jisShippingSurplusList);
//保存剩余发运单
shippingOrderManagementRepository.saveAll(orderManagementtSurplusList);
@ -390,8 +408,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
detail.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.VERIFICATION_COMPLETED.getValue());
Optional<MesShippingOrderManagementDetail> optional1 =
model.getDetailList().stream().filter(k -> k.getShippingOrderNo().equals(detail.getShippingOrderNo())).findFirst();
detail.setSn(optional1.get().getSn());
snList.add(optional1.get().getSn());
detail.setBarcode(optional1.get().getBarcode());
snList.add(optional1.get().getBarcode());
}
DdlPackBean producePackBean = DdlPackBean.getDdlPackBean(org);
@ -419,8 +437,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
detail.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.VERIFICATION_COMPLETED.getValue());
Optional<MesShippingOrderManagementDetail> optional1 =
model.getDetailList().stream().filter(k -> k.getShippingOrderNo().equals(detail.getShippingOrderNo())).findFirst();
detail.setSn(optional1.get().getSn());
snList.add(optional1.get().getSn());
detail.setBarcode(optional1.get().getBarcode());
snList.add(optional1.get().getBarcode());
}
DdlPackBean producePackBean = DdlPackBean.getDdlPackBean(org);
@ -451,19 +469,41 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
detail.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.VERIFICATION_COMPLETED.getValue());
Optional<MesShippingOrderManagementDetail> optional1 =
model.getDetailList().stream().filter(k -> k.getShippingOrderNo().equals(detail.getShippingOrderNo())).findFirst();
detail.setSn(optional1.get().getSn());
snList.add(optional1.get().getSn());
detail.setBarcode(optional1.get().getBarcode());
snList.add(optional1.get().getBarcode());
}
DdlPackBean producePackBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getInPackList(snList, "serialNumber", producePackBean);
List<MesProduceSn> produceSnList = produceSnRepository.findByHqlWhere(producePackBean);
produceSnList.forEach(k -> k.setSnStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()));
//当前发运单明细 需要报工的数据
List<MesJisShipping> jisShippingList = jisShippingService.getJisShipping(orderManagementDetailList, org);
produceSnRepository.saveAll(produceSnList);
shippingOrderManagementRepository.save(orderManagement);
shippingOrderManagementDetailRepository.saveAll(orderManagementDetailList);
//保存当前发运单明细报工
jisShippingRepository.saveAll(jisShippingList);
}
}
// private List<MesJisShipping> getJisShipping(List<MesShippingOrderManagementDetail> orderManagementDetailList, String org) {
//
// List<MesJisShipping> shippingList = new ArrayList<>();
// for (MesShippingOrderManagementDetail detail : orderManagementDetailList) {
// MesJisShipping jisShipping = new MesJisShipping();
// jisShipping.setOrganizeCode(org);
// jisShipping.setSerialNumber(detail.getSn());
// jisShipping.setPartNo(detail.getPartNo());
// ConvertBean.serviceModelInitialize(jisShipping, AuthUtil.getSessionUser().getUserName());
// shippingList.add(jisShipping);
// }
//
// return shippingList;
// }
}

@ -0,0 +1,38 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
import cn.estsh.i3plus.pojo.mes.bean.MesLocationConfig;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesPartTypePicture;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-09 18:08
* @Modify:
**/
@Data
public class MesInputDefectRecordModel {
@ApiParam("位置")
List<MesLocationConfig> locationConfigList;
@ApiParam("图片")
private MesPartTypePicture partTypePicture;
@ApiParam("物料")
private MesPart part;
@ApiParam("位置是否标黄Map")
private Map<String, Boolean> map;
}

@ -0,0 +1,28 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
import io.swagger.annotations.ApiParam;
import lombok.Data;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-09 18:08
* @Modify:
**/
@Data
public class MesNcProcessingDefectModel {
@ApiParam("缺陷类型")
private String defectCode;
@ApiParam("缺陷描述")
private String defectName;
@ApiParam("缺陷描述")
private Integer qty;
}

@ -0,0 +1,36 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
import cn.estsh.i3plus.pojo.mes.bean.MesLocationConfig;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesPartTypePicture;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-09 18:08
* @Modify:
**/
@Data
public class MesNcProcessingModel {
@ApiParam("位置")
List<MesLocationConfig> locationConfigList;
@ApiParam("图片")
private MesPartTypePicture partTypePicture;
@ApiParam("缺陷列表")
private List<MesNcProcessingDefectModel> defectModelList;
@ApiParam("物料")
private MesPart part;
}

@ -256,4 +256,87 @@ public class MesPcnExtEnumUtil {
}
/**
* -
*/
@JsonFormat(
shape = JsonFormat.Shape.OBJECT
)
public static enum DEFECT_ALARM_CONFIG_SIDES {
FRONT(10, "正面"),
BACK(20, "反面");
private int value;
private String description;
private DEFECT_ALARM_CONFIG_SIDES(int value, String description) {
this.value = value;
this.description = description;
}
public static String valueOfDescription(int val) {
String tmp = null;
for (int i = 0; i < values().length; ++i) {
if (values()[i].value == val) {
tmp = values()[i].description;
}
}
return tmp;
}
public int getValue() {
return this.value;
}
public String getDescription() {
return this.description;
}
}
/**
* NC-
*/
@JsonFormat(
shape = JsonFormat.Shape.OBJECT
)
public static enum NC_TYPE {
NORMAL(10, "转正常"),
REWORK(20, "返工"),
SCRAP(30, "报废"),
RELEASE(40, "放行");
private int value;
private String description;
private NC_TYPE(int value, String description) {
this.value = value;
this.description = description;
}
public static String valueOfDescription(int val) {
String tmp = null;
for (int i = 0; i < values().length; ++i) {
if (values()[i].value == val) {
tmp = values()[i].description;
}
}
return tmp;
}
public int getValue() {
return this.value;
}
public String getDescription() {
return this.description;
}
}
}

Loading…
Cancel
Save