等离子功能开发

tags/yfai-pcn-ext-v2.3
jun 8 months ago
parent 023203efaf
commit 33cbf3d537

@ -0,0 +1,33 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingLog;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description : LOG
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/13 10:04
* @Modify:
**/
public interface IMesRecyclablePackageBindingLogService {
@ApiOperation("写入操作记录(创建)")
MesRecyclablePackageBindingLog insertCreate(MesRecyclablePackageBinding mesRecyclablePackageBinding);
@ApiOperation("写入操作记录(关箱)")
MesRecyclablePackageBindingLog insertClose(MesRecyclablePackageBinding mesRecyclablePackageBinding);
@ApiOperation("写入操作记录(绑定)")
MesRecyclablePackageBindingLog insertBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail);
@ApiOperation("写入操作记录(解绑)")
MesRecyclablePackageBindingLog insertUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail);
@ApiOperation("写入操作记录(解绑)")
void insertUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, List<MesRecyclablePackageBindingDetail> mesRecyclablePackageBindingDetail);
}

@ -0,0 +1,97 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.recyclablepackage;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingLogService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingLog;
import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackageBindingLogRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import groovy.util.logging.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 : LOG
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/13 9:18
* @Modify:
**/
@Service
@Slf4j
public class MesRecyclablePackageBindingLogServiceImpl implements IMesRecyclablePackageBindingLogService {
@Autowired
private MesRecyclablePackageBindingLogRepository mesRecyclablePackageBindingLogRepository;
@Override
public MesRecyclablePackageBindingLog insertCreate(MesRecyclablePackageBinding mesRecyclablePackageBinding) {
return insert(mesRecyclablePackageBinding, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.CREATE);
}
@Override
public MesRecyclablePackageBindingLog insertClose(MesRecyclablePackageBinding mesRecyclablePackageBinding) {
return insert(mesRecyclablePackageBinding, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.CLOSE);
}
@Override
public MesRecyclablePackageBindingLog insertBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail) {
return insert(mesRecyclablePackageBinding, mesRecyclablePackageBindingDetail, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.BINDING);
}
@Override
public MesRecyclablePackageBindingLog insertUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail) {
return insert(mesRecyclablePackageBinding, mesRecyclablePackageBindingDetail, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.UN_BINDING);
}
@Override
public void insertUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, List<MesRecyclablePackageBindingDetail> mesRecyclablePackageBindingDetailList) {
List<MesRecyclablePackageBindingLog> logList = new ArrayList<>();
MesRecyclablePackageBindingLog mesRecyclablePackageBindingLog;
for (MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail : mesRecyclablePackageBindingDetailList) {
mesRecyclablePackageBindingLog = new MesRecyclablePackageBindingLog();
BeanUtils.copyProperties(mesRecyclablePackageBinding, mesRecyclablePackageBindingLog, MesPcnExtConstWords.ID, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME);
//明细数据填充
mesRecyclablePackageBindingLog.setPackageSn(mesRecyclablePackageBindingDetail.getProductSn());
mesRecyclablePackageBindingLog.setPartNo(mesRecyclablePackageBindingDetail.getPartNo());
mesRecyclablePackageBindingLog.setPartName(mesRecyclablePackageBindingDetail.getPartName());
mesRecyclablePackageBindingLog.setQty(mesRecyclablePackageBindingDetail.getQty());
mesRecyclablePackageBindingLog.setOrderCode(mesRecyclablePackageBindingDetail.getOrderCode());
mesRecyclablePackageBindingLog.setLotNumber(mesRecyclablePackageBindingDetail.getLotNumber());
mesRecyclablePackageBindingLog.setModifyType(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.UN_BINDING.getValue());
ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingLog, mesRecyclablePackageBindingDetail.getModifyUser());
logList.add(mesRecyclablePackageBindingLog);
}
mesRecyclablePackageBindingLogRepository.saveAll(logList);
}
public MesRecyclablePackageBindingLog insert(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE modifyType) {
MesRecyclablePackageBindingLog mesRecyclablePackageBindingLog = new MesRecyclablePackageBindingLog();
BeanUtils.copyProperties(mesRecyclablePackageBinding, mesRecyclablePackageBindingLog, MesPcnExtConstWords.ID, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME);
mesRecyclablePackageBindingLog.setModifyType(modifyType.getValue());
ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingLog, mesRecyclablePackageBinding.getModifyUser());
return mesRecyclablePackageBindingLogRepository.insert(mesRecyclablePackageBindingLog);
}
public MesRecyclablePackageBindingLog insert(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE modifyType) {
MesRecyclablePackageBindingLog mesRecyclablePackageBindingLog = new MesRecyclablePackageBindingLog();
BeanUtils.copyProperties(mesRecyclablePackageBinding, mesRecyclablePackageBindingLog, MesPcnExtConstWords.ID, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME);
//明细数据填充
mesRecyclablePackageBindingLog.setPackageSn(mesRecyclablePackageBindingDetail.getProductSn());
mesRecyclablePackageBindingLog.setPartNo(mesRecyclablePackageBindingDetail.getPartNo());
mesRecyclablePackageBindingLog.setPartName(mesRecyclablePackageBindingDetail.getPartName());
mesRecyclablePackageBindingLog.setQty(mesRecyclablePackageBindingDetail.getQty());
mesRecyclablePackageBindingLog.setOrderCode(mesRecyclablePackageBindingDetail.getOrderCode());
mesRecyclablePackageBindingLog.setLotNumber(mesRecyclablePackageBindingDetail.getLotNumber());
mesRecyclablePackageBindingLog.setModifyType(modifyType.getValue());
ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingLog, mesRecyclablePackageBindingDetail.getModifyUser());
return mesRecyclablePackageBindingLogRepository.insert(mesRecyclablePackageBindingLog);
}
}

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.recyclablepackag
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingLogService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
@ -56,6 +57,9 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
@Autowired @Autowired
private IMesPartService mesPartService; private IMesPartService mesPartService;
@Autowired
private IMesRecyclablePackageBindingLogService mesRecyclablePackageBindingLogService;
@Override @Override
public List<MesRecyclablePackageBindingDetail> findMesRecyclablePackageBindingDetailByPid(String organizeCode, long pid) { public List<MesRecyclablePackageBindingDetail> findMesRecyclablePackageBindingDetailByPid(String organizeCode, long pid) {
if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(pid)) { if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(pid)) {
@ -192,23 +196,25 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
//查询包装零件 //查询包装零件
List<MesRecyclablePackagePart> packagePartList = mesRecyclablePackageService.checkMesRecyclablePackagePart(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackage.getPackageTypeCode()); List<MesRecyclablePackagePart> packagePartList = mesRecyclablePackageService.checkMesRecyclablePackagePart(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackage.getPackageTypeCode());
//条码信息 //条码信息
MesProduceSn mesProduceSn = getMesProduceSn(mesRecyclablePackageBindingModel,packagePartList); MesProduceSn mesProduceSn = getMesProduceSn(mesRecyclablePackageBindingModel, packagePartList);
//记录绑定明细 //记录绑定明细
insertMesRecyclablePackageBindingDetail(mesRecyclablePackageBindingModel.getUserName(), mesRecyclablePackageBinding, mesProduceSn); MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail = insertMesRecyclablePackageBindingDetail(mesRecyclablePackageBindingModel.getUserName(), mesRecyclablePackageBinding, mesProduceSn);
//更新数量 //更新数量
mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId())); mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId()));
//自动关箱 //自动关箱
if (!Objects.isNull(packageType.getCheckPartNoFlag()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == packageType.getCheckPartNoFlag() && getMesRecyclablePackagePart(packagePartList,mesRecyclablePackage.getPackageTypeCode(), mesProduceSn.getPartNo()).getQty().intValue() <= mesRecyclablePackageBinding.getTotalQty()) { if (!Objects.isNull(packageType.getCheckPartNoFlag()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == packageType.getCheckPartNoFlag() && getMesRecyclablePackagePart(packagePartList, mesRecyclablePackage.getPackageTypeCode(), mesProduceSn.getPartNo()).getQty().intValue() <= mesRecyclablePackageBinding.getTotalQty()) {
mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue()); mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue());
} }
ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName());
mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding); mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding);
//记录日志
mesRecyclablePackageBindingLogService.insertBinding(mesRecyclablePackageBinding, mesRecyclablePackageBindingDetail);
return mesRecyclablePackageBinding; return mesRecyclablePackageBinding;
} }
private MesRecyclablePackagePart getMesRecyclablePackagePart(List<MesRecyclablePackagePart> packagePartList,String packageTypeCode, String partNo) { private MesRecyclablePackagePart getMesRecyclablePackagePart(List<MesRecyclablePackagePart> packagePartList, String packageTypeCode, String partNo) {
Optional<MesRecyclablePackagePart> packagePart = packagePartList.stream().filter(t -> t.getPartNo().equals(partNo)).findFirst(); Optional<MesRecyclablePackagePart> packagePart = packagePartList.stream().filter(t -> t.getPartNo().equals(partNo)).findFirst();
if(!packagePart.isPresent()){ if (!packagePart.isPresent()) {
MesPcnException.throwMesBusiException("回用包装类型【%s】零件【%s】数据不存在", packageTypeCode, partNo); MesPcnException.throwMesBusiException("回用包装类型【%s】零件【%s】数据不存在", packageTypeCode, partNo);
} }
return packagePart.get(); return packagePart.get();
@ -221,12 +227,12 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
} }
} }
private MesProduceSn getMesProduceSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel,List<MesRecyclablePackagePart> mesRecyclablePackagePartList) { private MesProduceSn getMesProduceSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, List<MesRecyclablePackagePart> mesRecyclablePackagePartList) {
List<MesProduceSn> produceSnList = mesProduceSnExtService.getProduceSnList(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn()); List<MesProduceSn> produceSnList = mesProduceSnExtService.getProduceSnList(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn());
if (CollectionUtils.isEmpty(produceSnList)) { if (CollectionUtils.isEmpty(produceSnList)) {
//外协件校验 //外协件校验
MesRecyclablePackagePart mesRecyclablePackagePart = getMesRecyclablePackagePart(mesRecyclablePackageBindingModel, mesRecyclablePackagePartList.stream().filter(t -> !Objects.isNull(t.getProductSnCheckType()) && MesExtEnumUtil.PRODUCT_SN_CHECK_TYPE.PRODUCT_SN_CHECK_TYPE_20.getValue() == t.getProductSnCheckType()).collect(Collectors.toList())); MesRecyclablePackagePart mesRecyclablePackagePart = getMesRecyclablePackagePart(mesRecyclablePackageBindingModel, mesRecyclablePackagePartList.stream().filter(t -> !Objects.isNull(t.getProductSnCheckType()) && MesExtEnumUtil.PRODUCT_SN_CHECK_TYPE.PRODUCT_SN_CHECK_TYPE_20.getValue() == t.getProductSnCheckType()).collect(Collectors.toList()));
if(Objects.isNull(mesRecyclablePackagePart)){ if (Objects.isNull(mesRecyclablePackagePart)) {
MesPcnException.throwMesBusiException("条码【%s】不存在", mesRecyclablePackageBindingModel.getProductSn()); MesPcnException.throwMesBusiException("条码【%s】不存在", mesRecyclablePackageBindingModel.getProductSn());
} }
//封装数据 //封装数据
@ -243,7 +249,7 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
private MesRecyclablePackagePart getMesRecyclablePackagePart(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, List<MesRecyclablePackagePart> mesRecyclablePackagePartList) { private MesRecyclablePackagePart getMesRecyclablePackagePart(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, List<MesRecyclablePackagePart> mesRecyclablePackagePartList) {
//外协件 //外协件
MesRecyclablePackagePart checkPassRecyclablePackagePart = null; MesRecyclablePackagePart checkPassRecyclablePackagePart = null;
if(!CollectionUtils.isEmpty(mesRecyclablePackagePartList)){ if (!CollectionUtils.isEmpty(mesRecyclablePackagePartList)) {
for (MesRecyclablePackagePart mesRecyclablePackagePart : mesRecyclablePackagePartList) { for (MesRecyclablePackagePart mesRecyclablePackagePart : mesRecyclablePackagePartList) {
// 校验正则表达式 // 校验正则表达式
if (checkRule(mesRecyclablePackageBindingModel, mesRecyclablePackagePart.getProductSnRule())) { if (checkRule(mesRecyclablePackageBindingModel, mesRecyclablePackagePart.getProductSnRule())) {
@ -255,11 +261,11 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
return checkPassRecyclablePackagePart; return checkPassRecyclablePackagePart;
} }
private boolean checkRule(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel,String rule) { private boolean checkRule(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, String rule) {
return (Boolean) ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn(), rule, rule).get(MesPcnExtConstWords.RESULT); return (Boolean) ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn(), rule, rule).get(MesPcnExtConstWords.RESULT);
} }
private void insertMesRecyclablePackageBindingDetail(String userName, MesRecyclablePackageBinding mesRecyclablePackageBinding, MesProduceSn mesProduceSn) { private MesRecyclablePackageBindingDetail insertMesRecyclablePackageBindingDetail(String userName, MesRecyclablePackageBinding mesRecyclablePackageBinding, MesProduceSn mesProduceSn) {
MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail = new MesRecyclablePackageBindingDetail(); MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail = new MesRecyclablePackageBindingDetail();
mesRecyclablePackageBindingDetail.setOrganizeCode(mesRecyclablePackageBinding.getOrganizeCode()); mesRecyclablePackageBindingDetail.setOrganizeCode(mesRecyclablePackageBinding.getOrganizeCode());
mesRecyclablePackageBindingDetail.setPid(mesRecyclablePackageBinding.getId()); mesRecyclablePackageBindingDetail.setPid(mesRecyclablePackageBinding.getId());
@ -271,7 +277,7 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
mesRecyclablePackageBindingDetail.setLotNumber(mesProduceSn.getLotNo()); mesRecyclablePackageBindingDetail.setLotNumber(mesProduceSn.getLotNo());
mesRecyclablePackageBindingDetail.setSubType(Objects.isNull(mesProduceSn.getId()) ? MesExtEnumUtil.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE_20.getValue() : MesExtEnumUtil.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE_10.getValue()); mesRecyclablePackageBindingDetail.setSubType(Objects.isNull(mesProduceSn.getId()) ? MesExtEnumUtil.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE_20.getValue() : MesExtEnumUtil.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE_10.getValue());
ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingDetail, userName); ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingDetail, userName);
mesRecyclablePackageBindingDetailRepository.insert(mesRecyclablePackageBindingDetail); return mesRecyclablePackageBindingDetailRepository.insert(mesRecyclablePackageBindingDetail);
} }
private MesRecyclablePackageBinding insertMesRecyclablePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { private MesRecyclablePackageBinding insertMesRecyclablePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) {
@ -284,6 +290,7 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
mesRecyclablePackageBinding.setTotalQty(MesPcnExtConstWords.ZERO); mesRecyclablePackageBinding.setTotalQty(MesPcnExtConstWords.ZERO);
mesRecyclablePackageBinding.setFid(UUID.randomUUID().toString()); mesRecyclablePackageBinding.setFid(UUID.randomUUID().toString());
ConvertBean.serviceModelInitialize(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); ConvertBean.serviceModelInitialize(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName());
mesRecyclablePackageBindingLogService.insertCreate(mesRecyclablePackageBinding);
return mesRecyclablePackageBindingRepository.insert(mesRecyclablePackageBinding); return mesRecyclablePackageBindingRepository.insert(mesRecyclablePackageBinding);
} }
@ -293,18 +300,37 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
} }
//删除数据 //删除数据
MesRecyclablePackageBinding mesRecyclablePackageBinding = getPackageBinding(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn()); MesRecyclablePackageBinding mesRecyclablePackageBinding = getPackageBinding(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesRecyclablePackageBindingModel.getOrganizeCode()); List<MesRecyclablePackageBindingDetail> bindingDetailList = findRecyclablePackageBindingDetailList(mesRecyclablePackageBindingModel, mesRecyclablePackageBinding);
DdlPreparedPack.getNumEqualPack(mesRecyclablePackageBinding.getId(), "pid", packBean); for (MesRecyclablePackageBindingDetail detail : bindingDetailList) {
DdlPreparedPack.getInPackArray(mesRecyclablePackageBindingModel.getDetailsIds(), "id", packBean); detail.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesRecyclablePackageBindingDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "isDeleted"}, detail.setSystemSyncStatus(CommonEnumUtil.FALSE);
new Object[]{mesRecyclablePackageBindingModel.getUserName(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}, packBean); detail.setSystemSyncDatetime(MesPcnExtConstWords.EMPTY);
ConvertBean.serviceModelUpdate(detail, mesRecyclablePackageBindingModel.getUserName());
}
mesRecyclablePackageBindingDetailRepository.saveAll(bindingDetailList);
//更新数量 //更新数量
mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId())); mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId()));
if (mesRecyclablePackageBinding.getTotalQty() <= MesPcnExtConstWords.ZERO) {
mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.UNPACKED.getValue());
}
ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName());
mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding); mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding);
//记录日志
mesRecyclablePackageBindingLogService.insertUnBinding(mesRecyclablePackageBinding, bindingDetailList);
return mesRecyclablePackageBinding; return mesRecyclablePackageBinding;
} }
private List<MesRecyclablePackageBindingDetail> findRecyclablePackageBindingDetailList(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, MesRecyclablePackageBinding mesRecyclablePackageBinding) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesRecyclablePackageBindingModel.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesRecyclablePackageBinding.getId(), "pid", packBean);
DdlPreparedPack.getInPackArray(mesRecyclablePackageBindingModel.getDetailsIds(), "id", packBean);
List<MesRecyclablePackageBindingDetail> bindingDetailList = mesRecyclablePackageBindingDetailRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(bindingDetailList)) {
MesPcnException.throwMesBusiException("请选择数据信息不存在");
}
return bindingDetailList;
}
private MesRecyclablePackageBinding updateClosePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { private MesRecyclablePackageBinding updateClosePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) {
MesRecyclablePackageBinding mesRecyclablePackageBinding = getPackageBinding(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn()); MesRecyclablePackageBinding mesRecyclablePackageBinding = getPackageBinding(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn());
if (MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue() == mesRecyclablePackageBinding.getStatus()) { if (MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue() == mesRecyclablePackageBinding.getStatus()) {
@ -317,6 +343,8 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue()); mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue());
ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName());
mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding); mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding);
//记录日志
mesRecyclablePackageBindingLogService.insertClose(mesRecyclablePackageBinding);
return mesRecyclablePackageBinding; return mesRecyclablePackageBinding;
} }

@ -0,0 +1,15 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.processmethod;
import groovy.util.logging.Slf4j;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/12 21:24
* @Modify:
**/
@Service
@Slf4j
public class MesProcessMethodSourceBoxInOutServiceImpl {
}

@ -0,0 +1,201 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
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.*;
import java.util.stream.Collectors;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/12 11:20
* @Modify:
**/
@Slf4j
@Service("mesProcessMethodSourceBoxInOutStepService")
public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesRecyclablePackageBindingService mesRecyclablePackageBindingService;
@Autowired
private IMesProduceSnExtService produceSnExtService;
@Autowired
private IConfigService configService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean);
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()){
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
}
//存储生产过程上下文对象
productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
//获取上下文生产扫/读信息:可回用包装条码
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanRecyclablePackageContext(reqBean);
if (CollectionUtils.isEmpty(equipVariableCollectContextList)){
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前缺失可回用包装条码信息!");
}
//清除本次已获取得到的可回用包装条码信息
productionDispatchContextStepService.removeScanRecyclablePackageContext(reqBean);
//从上下文中取出工位对象
MesWorkCell workCell = productionProcessContext.getWorkCell();
List<MesProductionPsInContext> productionPsInContextList = new ArrayList<>();
if (!sourceBoxInOut(reqBean, equipVariableCollectContextList, stepResult, productionPsInContextList, workCell).isCompleted()) {
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
}
//获取进料主条码数据信息
List<MesProductionPsInContext> productionPsInContext = productionDispatchContextStepService.getProductionPsInContext(reqBean);
if (!CollectionUtils.isEmpty(productionPsInContext)) {
productionPsInContextList.addAll(productionPsInContext);
}
//保存进料主条码数据
productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList);
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("可回用包装条码%s状态成功!", equipVariableCollectContextList.iterator().next().getEquipVariableValue()));
}
public StepResult sourceBoxInOut(StationRequestBean reqBean, List<MesEquipVariableCollectContext> equipVariableCollectContextList, StepResult stepResult, List<MesProductionPsInContext> productionPsInContextList, MesWorkCell workCell) {
//获取包装绑定主表
MesRecyclablePackageBinding recyclablePackageBinding = mesRecyclablePackageBindingService.getMesRecyclablePackageBindingByPackageSn(reqBean.getOrganizeCode(), equipVariableCollectContextList.iterator().next().getEquipVariableValue());
if (Objects.isNull(recyclablePackageBinding))
return stepResult.isCompleted(false).msg(String.format("回收包装绑定[%s]信息不存在", equipVariableCollectContextList.iterator().next().getEquipVariableValue()));
//校验状态
if (MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue() != recyclablePackageBinding.getStatus()) {
return stepResult.isCompleted(false).msg(String.format("回收包装绑定[%s]状态不为[已关箱]", equipVariableCollectContextList.iterator().next().getEquipVariableValue()));
}
//获取绑定明细信息
List<MesRecyclablePackageBindingDetail> bindingDetailList = mesRecyclablePackageBindingService.findMesRecyclablePackageBindingDetailByPid(reqBean.getOrganizeCode(), recyclablePackageBinding.getId());
if (CollectionUtils.isEmpty(bindingDetailList))
return stepResult.isCompleted(false).msg(String.format("回收包装绑定[%s]明细信息不存在", equipVariableCollectContextList.iterator().next().getEquipVariableValue()));
//查询条码信息
Map<String, List<MesProduceSn>> produceSnMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), bindingDetailList.stream().map(MesRecyclablePackageBindingDetail::getProductSn).collect(Collectors.toList()));
for (MesRecyclablePackageBindingDetail bindingDetail : bindingDetailList) {
//外协件
if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(bindingDetail.getProductSn())) {
for (int i = 0; i < bindingDetail.getQty(); i++) {
productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), bindingDetail.getProductSn()).messageSource(equipVariableCollectContextList.iterator().next().getMessageSource()));
}
//自制件
} else {
createProductionPsInContext(reqBean, stepResult, workCell, equipVariableCollectContextList.iterator().next(), produceSnMap.get(bindingDetail.getProductSn()), productionPsInContextList);
}
}
return stepResult;
}
private StepResult createProductionPsInContext(StationRequestBean reqBean, StepResult stepResult, MesWorkCell workCell,
MesEquipVariableCollectContext equipVariableCollectContext, List<MesProduceSn> produceSnList, List<MesProductionPsInContext> productionPsInContextList) {
String suffixMsg = !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON : MesPcnExtConstWords.EMPTY;
List<MesProduceSn> unknowList = produceSnList.stream().filter(o -> (null != o && o.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) == 0)).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(unknowList) && unknowList.size() > 1) {
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息异常,存在[%s]条[未知]状态的记录", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), unknowList.size()));
}
if (!CollectionUtils.isEmpty(unknowList) && checkAllowUnknowCenterCfg(reqBean) && (unknowList.size() > 1 || (!unknowList.get(0).getWorkCenterCode().equals(reqBean.getWorkCenterCode()) || !unknowList.get(0).getWorkCellCode().equals(reqBean.getWorkCellCode())))) {
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息条码状态已被%s标记[未知]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(),
unknowList.stream().filter(Objects::nonNull).map(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getWorkCenterCode()).add(o.getWorkCellCode()).toString()).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON))));
}
produceSnList = produceSnList.stream().filter(Objects::nonNull).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList());
MesProduceSn produceSn = produceSnList.get(0);
if (produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) != 0 && produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue()) != 0)
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]质量状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus())));
if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue()) > 0)
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus())));
//正常条码
if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) {
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()));
return stepResult;
}
//未知条码【工序为空 代表新做的工序没有加工完成】
if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) {
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnList.get(1)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
return stepResult;
}
//未知条码【工序为空 代表新做的工序没有加工完成】【只有一条条码记录 代表是打印的条码自进自出直接被标记为未知】
if (StringUtils.isEmpty(produceSn.getProcessCode())) {
productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
return stepResult;
}
//未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
return stepResult;
}
private Boolean checkAllowUnknowCenterCfg(StationRequestBean reqBean) {
List<MesConfig> configList = configService.doCachedConfigList(MesPcnExtConstWords.ALLOW_UNKNOW_CENTER_CFG, reqBean.getOrganizeCode());
if (CollectionUtils.isEmpty(configList)) return true;
List<String> allowUnknowCenterList = Arrays.asList(configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgValue()))).map(MesConfig::getCfgValue).collect(Collectors.joining(MesPcnExtConstWords.COMMA)).split(MesPcnExtConstWords.COMMA));
return CollectionUtils.isEmpty(allowUnknowCenterList) || !allowUnknowCenterList.contains(reqBean.getWorkCenterCode());
}
}

@ -1,226 +0,0 @@
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
//
//import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
//import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
//import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
//import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
//import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
//import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
//import cn.estsh.i3plus.pojo.mes.bean.*;
//import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding;
//import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail;
//import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
//import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
//import cn.estsh.i3plus.pojo.mes.model.StepResult;
//import cn.estsh.i3plus.pojo.mes.repository.MesStationRepository;
//import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
//import com.alibaba.fastjson.JSONObject;
//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.*;
//import java.util.stream.Collectors;
//import java.util.stream.Stream;
//
///**
// * @Description : 可回用包装条码匹配工步
// * @Reference :
// * @Author : junsheng.li
// * @CreateDate 2024/9/12 11:20
// * @Modify:
// **/
//@Slf4j
//@Service("mesRecyclablePackageMatchStepService")
//public class MesRecyclablePackageMatchStepService extends BaseStepService {
//
// @Autowired
// private IMesProductionProcessContextStepService productionProcessContextStepService;
//
// @Autowired
// private IMesProductionDispatchContextStepService productionDispatchContextStepService;
//
// @Autowired
// private IMesStationService mesStationService;
//
// @Autowired
// private IMesRecyclablePackageBindingService mesRecyclablePackageBindingService;
//
// @Autowired
// private IMesProduceSnExtService produceSnExtService;
//
// @Autowired
// private IConfigService configService;
//
// @Override
// public StepResult execute(StationRequestBean reqBean) {
//
// StationResultBean resultBean = new StationResultBean();
//
// StepResult stepResult = StepResult.getSuccessComplete();
//
// //获取上下文信息
// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean);
//
// //配置错误 抛出异常
// if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//
// //存储生产过程上下文对象
// productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
//
// //获取上下文生产扫/读信息:可回用包装条码
// List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanRecyclablePackageContext(reqBean);
// if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前缺失可回用包装条码信息!");
//
// //清除本次已获取得到的可回用包装条码信息
// productionDispatchContextStepService.removeScanRecyclablePackageContext(reqBean);
//
// //从上下文中取出设备信息
// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//
// //根据设备代码获取点位信息
// MesStation station = mesStationService.getMesStationByEquipmentCode(reqBean.getOrganizeCode(),cellEquipContext.getEquipmentCode());
// if (Objects.isNull(station) || Objects.isNull(station.getProcessMethod())) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]站点信息未维护", cellEquipContext.getEquipmentCode()));
//
// //加工模式
// switch (MesExtEnumUtil.STATION_PROCESS_METHOD.valueOfType(station.getProcessMethod())){
// case STATION_TYPE_10:
// case STATION_TYPE_20:
// case STATION_TYPE_30:
// case STATION_TYPE_40:{
// //获取包装绑定主表
// MesRecyclablePackageBinding recyclablePackageBinding = mesRecyclablePackageBindingService.getMesRecyclablePackageBindingByPackageSn(reqBean.getOrganizeCode(), equipVariableCollectContextList.iterator().next().getEquipVariableValue());
// if(Objects.isNull(recyclablePackageBinding)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("回收包装绑定[%s]信息不存在",equipVariableCollectContextList.iterator().next().getEquipVariableValue()));
// //获取绑定明细信息
// List<MesRecyclablePackageBindingDetail> bindingDetailList = mesRecyclablePackageBindingService.findMesRecyclablePackageBindingDetailByPid(reqBean.getOrganizeCode(), recyclablePackageBinding.getId());
// if(CollectionUtils.isEmpty(bindingDetailList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("回收包装绑定[%s]明细信息不存在",equipVariableCollectContextList.iterator().next().getEquipVariableValue()));
// //查询条码信息
// Map<String, List<MesProduceSn>> produceSnMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), bindingDetailList.stream().map(MesRecyclablePackageBindingDetail::getProductSn).collect(Collectors.toList()));
// List<MesProductionPsInContext> productionPsInContextList = new ArrayList<>();
// for (MesRecyclablePackageBindingDetail bindingDetail : bindingDetailList) {
// //外协件
// if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(bindingDetail.getProductSn())){
// for (int i = 0; i < bindingDetail.getQty(); i++) {
// //查询物料信息
// productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), bindingDetail.getProductSn()).messageSource(equipVariableCollectContextList.iterator().next().getMessageSource()));
// }
// //自制件
// }else{
// createProductionPsInContext(reqBean, resultBean, stepResult, workCell, equipVariableCollectContext, produceSnMap.get(equipVariableCollectContext.getEquipVariableValue()), productionPsInContextList);
// }
//
//
// }
//
//
// };break;
// default:stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "站点加工模式未实现!");break;
// }
//
//
// for (MesEquipVariableCollectContext equipVariableCollectContext : equipVariableCollectContextList) {
// if (null == equipVariableCollectContext || StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) continue;
// if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(equipVariableCollectContext.getEquipVariableValue()))
// productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()));
// else createProductionPsInContext(reqBean, resultBean, stepResult, workCell, equipVariableCollectContext, produceSnMap.get(equipVariableCollectContext.getEquipVariableValue()), productionPsInContextList);
// }
//
// //获取上下文产出零件信息
// List<MesProductionPartContext> cachedProductionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//
// //非扫描场景 清除历史产出零件信息
// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) removeBusiData(reqBean);
// //保存上下文产出零件信息
// productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
//
// //存储展示组件MODULE_CONTENT内容
// productionDispatchContextStepService.dispatchModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList));
//
// //当前工位使用的设备
// MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && cellEquipmentContext.getCavity().compareTo(productionPartContextList.size()) > 0)
// return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(equipVariableCollectContextList.get(0).getEquipVariableValue()),
// stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT,
// String.format("当前扫描信息加工单[%s]验证工单状态成功,已知腔数[%s],还需要再连续扫描[%s]次加工单!", equipVariableCollectContextList.get(0).getEquipVariableValue(), cellEquipmentContext.getCavity(), cellEquipmentContext.getCavity() - productionPartContextList.size()));
//
//
// String workOrderStr = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString();
// return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(workOrderStr), stepResult, String.format("当前%s加工单%s验证工单状态成功%s!",
// MesExtEnumUtil.CELL_MESSAGE_SOURCE.valueOfDescription(equipVariableCollectContextList.get(0).getMessageSource()), workOrderStr,
// MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() ? String.format(",当前加工单个数[%s]已满足腔数", productionPartContextList.size()) : MesPcnExtConstWords.EMPTY));
//
// }
//
//
// private StepResult createProductionPsInContext(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
// MesWorkCell workCell, MesEquipVariableCollectContext equipVariableCollectContext, List<MesProduceSn> produceSnList, List<MesProductionPsInContext> productionPsInContextList) {
//
// String suffixMsg = !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON : MesPcnExtConstWords.EMPTY;
//
// List<MesProduceSn> unknowList = produceSnList.stream().filter(o -> (null != o && o.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) == 0)).collect(Collectors.toList());
//
// if (!CollectionUtils.isEmpty(unknowList) && unknowList.size() > 1) {
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息异常,存在[%s]条[未知]状态的记录", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), unknowList.size()));
// }
//
// if (!CollectionUtils.isEmpty(unknowList) && checkAllowUnknowCenterCfg(reqBean) && (unknowList.size() > 1 || (!unknowList.get(0).getWorkCenterCode().equals(reqBean.getWorkCenterCode()) || !unknowList.get(0).getWorkCellCode().equals(reqBean.getWorkCellCode())))) {
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息条码状态已被%s标记[未知]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(),
// unknowList.stream().filter(Objects::nonNull).map(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getWorkCenterCode()).add(o.getWorkCellCode()).toString()).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON))));
// }
//
// produceSnList = produceSnList.stream().filter(Objects::nonNull).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList());
//
// MesProduceSn produceSn = produceSnList.get(0);
//
// if (produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) != 0 && produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue()) != 0)
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]质量状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus())));
//
// if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue()) > 0)
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus())));
//
// //正常条码
// if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) {
//
// productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()));
//
// return stepResult;
// }
//
// //未知条码【工序为空 代表新做的工序没有加工完成】
// if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) {
//
// productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnList.get(1)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
//
// return stepResult;
// }
//
// //未知条码【工序为空 代表新做的工序没有加工完成】【只有一条条码记录 代表是打印的条码自进自出直接被标记为未知】
// if (StringUtils.isEmpty(produceSn.getProcessCode())) {
//
// productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
//
// return stepResult;
// }
//
// //未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】
// productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
//
// return stepResult;
//
// }
//
// private Boolean checkAllowUnknowCenterCfg(StationRequestBean reqBean) {
// List<MesConfig> configList = configService.doCachedConfigList(MesPcnExtConstWords.ALLOW_UNKNOW_CENTER_CFG, reqBean.getOrganizeCode());
// if (CollectionUtils.isEmpty(configList)) return true;
// List<String> allowUnknowCenterList = Arrays.asList(configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgValue()))).map(MesConfig::getCfgValue).collect(Collectors.joining(MesPcnExtConstWords.COMMA)).split(MesPcnExtConstWords.COMMA));
// return CollectionUtils.isEmpty(allowUnknowCenterList) || !allowUnknowCenterList.contains(reqBean.getWorkCenterCode());
// }
//
//}

@ -8,14 +8,17 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.bean.MesStation;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult; import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -58,6 +61,9 @@ public class MesRecyclablePackageReadStepService extends BaseStepService {
@Autowired @Autowired
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService; private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Autowired
private IMesStationService mesStationService;
@Override @Override
public void title(StationRequestBean reqBean) { public void title(StationRequestBean reqBean) {
this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), String.format("工步: %s", reqBean.getStepName()), MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE); this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), String.format("工步: %s", reqBean.getStepName()), MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE);
@ -149,7 +155,11 @@ public class MesRecyclablePackageReadStepService extends BaseStepService {
//根据设备ID,设备数据变量ID集合 修改设备ID分表采集数据的状态 //根据设备ID,设备数据变量ID集合 修改设备ID分表采集数据的状态
equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipVariableIdList()); equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipVariableIdList());
return stepResult; //根据设备代码获取点位信息
MesStation station = mesStationService.getMesStationByEquipmentCode(reqBean.getOrganizeCode(),cellEquipContext.getEquipmentCode());
if (Objects.isNull(station) || Objects.isNull(station.getProcessMethod())) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]站点信息未维护", cellEquipContext.getEquipmentCode()));
return ((IStepService) SpringContextsUtil.getBean(MesExtEnumUtil.STATION_PROCESS_METHOD.valueOfStrategyClass(station.getProcessMethod()))).executeInState(reqBean);
} }

@ -0,0 +1,59 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import java.io.Serializable;
/**
* -
*/
@Data
public class MesProductionRecyclablePackageContext implements Serializable {
private static final long serialVersionUID = 4337949265011880288L;
@ApiParam("组织代码")
private String organizeCode;
@ApiParam("工单号")
private String workOrderNo;
@ApiParam(name = "包条码")
private String packageSn;
@ApiParam(name = "包类型")
private String packageTypeCode;
@ApiParam("零件条码ID")
private Long id;
@ApiParam("零件条码")
private String productSn;
@ApiParam("零件号")
private String partNo;
@ApiParam("零件名称")
private String partName;
public MesProductionRecyclablePackageContext() {
}
public MesProductionRecyclablePackageContext(String organizeCode, String packageSn, String packageTypeCode) {
this.organizeCode = organizeCode;
this.packageSn = packageSn;
this.packageTypeCode = packageTypeCode;
}
public MesProductionRecyclablePackageContext copy(MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail) {
this.partName = mesRecyclablePackageBindingDetail.getPartName();
this.partNo = mesRecyclablePackageBindingDetail.getPartNo();
this.productSn = mesRecyclablePackageBindingDetail.getProductSn();
return this;
}
}

@ -65,6 +65,8 @@ public class MesPcnExtConstWords {
public static final String USER_INFO = "userInfo"; public static final String USER_INFO = "userInfo";
// 同步标志 // 同步标志
public static final String SYSTEM_SYNC_STATUS = "systemSyncStatus"; public static final String SYSTEM_SYNC_STATUS = "systemSyncStatus";
// 同步时间
public static final String SYSTEM_SYNC_DATE_TIME = "systemSyncDatetime";
// 零件编码 // 零件编码
public static final String PART_NO = "partNo"; public static final String PART_NO = "partNo";
// 零件名称 // 零件名称

Loading…
Cancel
Save