Merge branch 'dev-wuhan' of http://git.estsh.com/I3-YF/i3plus-mes-pcn-yfai into dev-wuhan

tags/yfai-pcn-ext-v2.3
gsz 8 months ago
commit c8895560b5

@ -16,11 +16,14 @@ public interface IMesAssemblyExtService {
@ApiOperation(value = "【排序线】获取生产工单装配件绑定记录")
List<MesProductionAssemblySortContext> getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext);
@ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 [前道所有装配件]")
List<MesProductionAssemblySortContext> getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext);
@ApiOperation(value = "【排序线】获取生产工单装配件清单")
List<MesWorkOrderAssembly> getWorkOrderAssemblyList(MesProdRuleContext prodRuleContext);
@ApiOperation(value = "获取装配件绑定记录")
List<MesProductionAssembly> getProductionAssemblyList(String organizeCode, Integer dataSource, List<Long> sourceIdList);
@ApiOperation(value = "获取装配件绑定记录【排序】")
List<MesProductionAssembly> getProductionAssemblySortList(String organizeCode, String productSn);
@ApiOperation(value = "获取装配件绑定记录")
List<MesProductionAssembly> getProductionAssemblyList(String organizeCode, String assemblySn);

@ -23,6 +23,9 @@ public interface IMesProdRuleCfgExtService {
@ApiOperation(value = "【排序线】获取产品加工规则(条码对应的装配件绑定记录,目前条码等同工单)")
MesProdRuleContext getProdRuleSortContext(MesProdRuleContext prodRuleContext);
@ApiOperation(value = "【排序线】获取产品加工规则 [前道所有装配件]")
MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext);
@ApiOperation(value = "【非排序线】获取产品加工规则 【根据PID获取】")
MesProdRuleNosortCfg getProdRuleNosortCfg(String organizeCode, Long id);

@ -217,4 +217,16 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "删除上下文扫/读信息:可回用包装条码")
void removeScanRecyclablePackageContext(StationRequestBean reqBean);
@ApiOperation(value = "获取进料可回用包装信息")
List<MesProductionRecyclablePackageContext> getProductionRecyclablePackageContext(StationRequestBean reqBean);
@ApiOperation(value = "验证进料可回用包装是否存在")
Boolean checkProductionRecyclablePackageContextIsExist(StationRequestBean reqBean);
@ApiOperation(value = "保存进料可回用包装", notes = "[JSON]List<MesProductionRecyclablePackageContext>")
Boolean dispatchProductionRecyclablePackageContext(StationRequestBean reqBean, List<MesProductionRecyclablePackageContext> recyclablePackageContextList);
@ApiOperation(value = "删除进料可回用包装")
Boolean removeProductionRecyclablePackageContext(StationRequestBean reqBean);
}

@ -41,4 +41,7 @@ public interface IMesRecyclablePackageBindingService {
@ApiOperation("扫描信息")
MesRecyclablePackageBinding doScan(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel);
@ApiOperation("解绑")
void doMesRecyclablePackageUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, List<MesRecyclablePackageBindingDetail> bindingDetailList,String userName);
}

@ -11,6 +11,7 @@ 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.repository.*;
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;
@ -54,11 +55,11 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
StringUtils.isEmpty(prodRuleContext.getWorkCellCode()) || StringUtils.isEmpty(prodRuleContext.getProcessCode()) || StringUtils.isEmpty(prodRuleContext.getProductSn())) return null;
//【排序线】获取生产工单装配件清单
List<MesWorkOrderAssembly> workOrderAssemblyList = getWorkOrderAssemblyList(prodRuleContext);
List<MesWorkOrderAssembly> workOrderAssemblyList = filterWorkOrderAssemblyList(getWorkOrderAssemblyList(prodRuleContext), prodRuleContext.getEquipmentCode());
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null;
//获取排序FILE文件URL
//获取排序FILE文件URL 【显示前道所有工序装配件工步不需要获取文件】
Map<Long, String> fileMap = getFileMap(prodRuleContext.getOrganizeCode(), filterSortFileIdList(workOrderAssemblyList));
List<MesProductionAssemblySortContext> productionAssemblySortContextList = new ArrayList<>();
@ -68,6 +69,40 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
return productionAssemblySortContextList;
}
//【排序线】获取生产工单装配件绑定记录 [前道所有装配件]
@Override
public List<MesProductionAssemblySortContext> getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext) {
if (null == prodRuleContext) return null;
if (StringUtils.isEmpty(prodRuleContext.getOrganizeCode()) || StringUtils.isEmpty(prodRuleContext.getWorkCenterCode()) ||
StringUtils.isEmpty(prodRuleContext.getWorkCellCode()) || StringUtils.isEmpty(prodRuleContext.getProcessCode()) || StringUtils.isEmpty(prodRuleContext.getProductSn())) return null;
//【排序线】获取生产工单装配件清单
List<MesWorkOrderAssembly> workOrderAssemblyList = filterWorkOrderAssemblyList(getWorkOrderAssemblyList(prodRuleContext), prodRuleContext.getEquipmentCode());
// 显示前道所有工序装配件工步: 不携带工位
workOrderAssemblyList = !StringUtils.isEmpty(prodRuleContext.getWorkCellCode()) ? workOrderAssemblyList :
workOrderAssemblyList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue()) != 0)).collect(Collectors.toList());
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null;
//获取装配件绑定记录
Map<Long, List<MesProductionAssembly>> productionAssemblyMap = groupProductionAssembly(getProductionAssemblyList(prodRuleContext.getOrganizeCode(), prodRuleContext.getProductSn()));
List<MesProductionAssemblySortContext> productionAssemblySortContextList = new ArrayList<>();
workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o, getProductionAssembly(productionAssemblyMap, o.getId()))));
return productionAssemblySortContextList;
}
//搜集匹配当前设备的装配件信息
private List<MesWorkOrderAssembly> filterWorkOrderAssemblyList(List<MesWorkOrderAssembly> workOrderAssemblyList, String equipmentCode) {
return CollectionUtils.isEmpty(workOrderAssemblyList) ? null :
workOrderAssemblyList.stream().filter(o -> (null != o && o.getEquipmentCode().equals(equipmentCode))).collect(Collectors.toList());
}
//【排序线】获取生产工单装配件清单
@Override
public List<MesWorkOrderAssembly> getWorkOrderAssemblyList(MesProdRuleContext prodRuleContext) {
@ -87,16 +122,14 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
}
//获取装配件绑定记录
//获取装配件绑定记录【排序】
@Override
public List<MesProductionAssembly> getProductionAssemblyList(String organizeCode, Integer dataSource, List<Long> sourceIdList) {
public List<MesProductionAssembly> getProductionAssemblySortList(String organizeCode, String productSn) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(dataSource) || CollectionUtils.isEmpty(sourceIdList)) return null;
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(productSn)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(dataSource, MesPcnExtConstWords.DATD_SOURCE, packBean);
if (sourceIdList.size() == 1) DdlPreparedPack.getNumEqualPack(sourceIdList.get(0), MesPcnExtConstWords.SOURCE_ID, packBean);
else DdlPreparedPack.getInPackList(sourceIdList, MesPcnExtConstWords.SOURCE_ID, packBean);
DdlPreparedPack.getStringEqualPack(productSn, MesPcnExtConstWords.PRODUCT_SN, packBean);
return productionAssemblyRepository.findByHqlWhere(packBean);
@ -237,4 +270,14 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
return CollectionUtils.isEmpty(fileIdList) ? null : fileDbList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getFileUrl()))).collect(Collectors.toMap(MesFile::getId, MesFile::getFileUrl));
}
//根据生产工单装配件清单ID分组
private Map<Long, List<MesProductionAssembly>> groupProductionAssembly(List<MesProductionAssembly> productionAssemblyList) {
return CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) >= 0)).collect(Collectors.groupingBy(MesProductionAssembly::getSourceId));
}
//根据装配件清单ID获取装配件绑定记录
private MesProductionAssembly getProductionAssembly(Map<Long, List<MesProductionAssembly>> productionAssemblyMap, Long id) {
return CollectionUtils.isEmpty(productionAssemblyMap) ? null : productionAssemblyMap.get(id).get(0);
}
}

@ -15,10 +15,7 @@ import cn.estsh.i3plus.pojo.base.common.PagerHelper;
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.repository.MesCutModifyRawLengthRecordRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesMaterialSnRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCutMaterialRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCutRepository;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -55,6 +52,9 @@ public class MesCutRawErrorProofingService implements IMesCutRawErrorProofingSer
@Autowired
private MesCutModifyRawLengthRecordRepository cutModifyRawLengthRecordRepository;
@Autowired
private MesCutSchemeRepository cutSchemeRepository;
@Override
public MesCutRawErrorProofingModel doScanSn(MesCutRawErrorProofingModel model) {
@ -67,6 +67,14 @@ public class MesCutRawErrorProofingService implements IMesCutRawErrorProofingSer
if (workOrderCutDb == null) MesPcnException.throwMesBusiException("裁片工单【%s】不存在", model.getSn());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(workOrderCutDb.getCutCode(), MesPcnExtConstWords.CUT_CODE, packBean);
MesCutScheme cutScheme = cutSchemeRepository.getByProperty(packBean);
if (cutScheme == null) MesPcnException.throwMesBusiException("裁片工单【%s】所属裁片方案无效", model.getSn());
if (workOrderCutDb.getWorkOrderStatus() == MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue() && cutScheme.getIsCheckMaterial() == CommonEnumUtil.FALSE) MesPcnException.throwMesBusiException("裁片工单【%s】无需校验原材料", model.getSn());
if (workOrderCutDb.getWorkOrderStatus() != MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue()) MesPcnException.throwMesBusiException("裁片工单【%s】状态不为【%s】", model.getSn(), MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getDescription());
result.setCurScanType(CUR_SCAN_TYPE_BY_RAW_SN);
@ -95,7 +103,7 @@ public class MesCutRawErrorProofingService implements IMesCutRawErrorProofingSer
// 原材料长度
String lengthStr = valueArray[4];
Double length;
Double length = 0.0;
if (!workOrderCutMaterialMap.containsKey(partNo)) MesPcnException.throwMesBusiException("扫描条码【%s】零件号【%s】不在裁片方案原材料中", model.getSn(), partNo);
@ -111,7 +119,11 @@ public class MesCutRawErrorProofingService implements IMesCutRawErrorProofingSer
length = materialSnDb.getSurplusLength();
ConvertBean.serviceModelUpdate(materialSnDb, model.getUserName());
} else {
length = Double.parseDouble(lengthStr);
try {
length = Double.parseDouble(lengthStr);
} catch (NumberFormatException e) {
MesPcnException.throwMesBusiException("条码【%s】长度【%s】无效", lengthStr);
}
materialSnDb = new MesMaterialSn();
ConvertBean.serviceModelInitialize(materialSnDb, model.getUserName());
materialSnDb.setOrganizeCode(model.getOrganizeCode());

@ -113,5 +113,11 @@ public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService {
return prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblySortContextList(prodRuleContext));
}
//【排序线】获取产品加工规则 [前道所有装配件]
@Override
public MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext) {
return prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblySortPreCraftContextList(prodRuleContext));
}
}

@ -168,6 +168,25 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
}
@Override
public void doMesRecyclablePackageUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, List<MesRecyclablePackageBindingDetail> bindingDetailList,String userName) {
for (MesRecyclablePackageBindingDetail detail : bindingDetailList) {
detail.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
detail.setRemark(MesPcnExtConstWords.STEP_UNBINDING);
detail.setSystemSyncStatus(CommonEnumUtil.FALSE);
detail.setSystemSyncDatetime(MesPcnExtConstWords.EMPTY);
ConvertBean.serviceModelUpdate(detail, userName);
}
mesRecyclablePackageBindingDetailRepository.saveAll(bindingDetailList);
//更新数量
mesRecyclablePackageBinding.setTotalQty(MesPcnExtConstWords.ZERO);
mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.UNPACKED.getValue());
ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, userName);
mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding);
//记录日志
mesRecyclablePackageBindingLogService.insertUnBinding(mesRecyclablePackageBinding, bindingDetailList);
}
private MesRecyclablePackageBinding doScanPackageSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) {
//校验包装
mesRecyclablePackageService.checkMesRecyclablePackage(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn());

@ -45,10 +45,17 @@ public class CutWorkOrderPackageSnPrintStrategy implements IPrintTemplateStrateg
}
resultMap.put(MesPcnExtConstWords.LOT_NO, lotNo);
resultMap.put(MesPcnExtConstWords.TIME, model.getCreateDatetime());
resultMap.put(MesPcnExtConstWords.PACKAGE_QTY, model.getPackageQty());
resultMap.put(MesPcnExtConstWords.QTY, model.getQty());
resultMap.put(MesPcnExtConstWords.CUT_WORK_ORDER_NO, model.getCutWorkOrderNo());
resultMap.put(MesPcnExtConstWords.PACKAGE_SN, model.getPackageNo());
// 一维码
resultMap.put(MesPcnExtConstWords.BAR_CODE, model.getPackageNo());
// 二维码
resultMap.put(MesPcnExtConstWords.QR_CODE, new StringJoiner(MesPcnExtConstWords.VERTIVAL_BAR).add("YFWHU")
.add(model.getPackageNo()).add(model.getOrganizeCode()).add(model.getPartNo()).add(String.valueOf(model.getQty().intValue()))
.add("EA").toString());
printDataMapList.add(resultMap);
}
@ -64,7 +71,7 @@ public class CutWorkOrderPackageSnPrintStrategy implements IPrintTemplateStrateg
resultMap.put(MesPcnExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate());
resultMap.put(MesPcnExtConstWords.TEMPLATE_DATA, printTemplateDateList);
resultMap.put(MesPcnExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode());
resultMap.put(MesPcnExtConstWords.PRINTERE, printModel.getPrinter());
resultMap.put(MesPcnExtConstWords.PRINTER, printModel.getPrinter());
resultMapList.add(resultMap);
return resultMapList;
}

@ -1,15 +0,0 @@
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,57 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
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.util.PojoAttrUtil;
import cn.estsh.i3plus.pojo.mes.model.AttrBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesAssemblyShowSortPreCraftStepService")
public class MesAssemblyShowSortPreCraftStepService extends MesAssemblyShowSortStepService {
@Override
public StepResult execute(StationRequestBean reqBean) {
return super.execute(reqBean);
}
public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) {
//不携带工位工序条件
MesProdRuleContext prodRuleContext = new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode())
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey());
return prodRuleCfgExtService.getProdRuleSortPreCraftContext(prodRuleContext);
}
//装配件清单列表标题
public List<AttrBean> dataAttrList(List<MesProdRuleContext> prodRuleContextList) {
List<AttrBean> attrBeanList = new ArrayList<>();
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, "序号");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.WORK_CELL_CODE, "工位代码");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.MATCH_TYPE_NAME, "装配方式");
if (prodRuleContextList.size() > 1) PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.WORK_ORDER_NO, "生产工单编号");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NO, "零件编码");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NO, "原料编码");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NAME, "原料名称");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_SN, "原料条码");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_STATUS_NAME, "装配状态");
return attrBeanList;
}
//每个表格重新排序
public List<MesAssemblyShowContext> sortAssemblyShowContextList(List<MesAssemblyShowContext> assemblyShowContextList) {
return assemblyShowContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getProcessSeq).thenComparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList());
}
}

@ -38,13 +38,13 @@ import java.util.stream.Collectors;
public class MesAssemblyShowSortStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
public IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
public IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProdRuleCfgExtService prodRuleCfgExtService;
public IMesProdRuleCfgExtService prodRuleCfgExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -82,7 +82,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
Integer initSize = prodRuleContextList.size();
//封装排序加工规则
doHandleProdRuleData(reqBean, resultBean, productionProcessContext, prodRuleContextList, productionPartContextList, productionPsInContextList);
doHandleProdRuleData(reqBean, resultBean, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList);
if (prodRuleContextList.size() != initSize) {
//保存上下文产品加工规则信息集合
@ -94,15 +94,41 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
}
//显示装配件信息
if (!showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList))
if (!showProductionAssembly(reqBean, resultBean, workCenter, prodRuleContextList))
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "当前未查询到相关的装配件清单");
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "显示装配件扫描项成功!");
}
public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) {
MesProdRuleContext prodRuleContext = new MesProdRuleContext(
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode())
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey());
return prodRuleCfgExtService.getProdRuleSortContext(prodRuleContext);
}
//装配件清单列表标题
public List<AttrBean> dataAttrList(List<MesProdRuleContext> prodRuleContextList) {
List<AttrBean> attrBeanList = new ArrayList<>();
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, "序号");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.MATCH_TYPE_NAME, "装配方式");
if (prodRuleContextList.size() > 1) PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.WORK_ORDER_NO, "生产工单编号");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NO, "零件编码");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NO, "原料编码");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NAME, "原料名称");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_SN, "原料条码");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_STATUS_NAME, "装配状态");
return attrBeanList;
}
//每个表格重新排序
public List<MesAssemblyShowContext> sortAssemblyShowContextList(List<MesAssemblyShowContext> assemblyShowContextList) {
return assemblyShowContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList());
}
//查询排序线加工规则装配件数据信息
private void doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext,
private void doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext,
List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList) {
//上下文中不存在进料主条码数据信息
@ -119,15 +145,15 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
if (null == productionPsInContext || productionPsInContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPsInContext.getForeignKey())) continue;
//【排序线】获取产品加工规则(条码对应的装配件绑定记录,目前条码等同工单)
prodRuleContextList.add(prodRuleCfgExtService.getProdRuleSortContext(
new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(
productionPartContextList.stream().filter(o -> (null != o && o.getWorkOrderNo().equals(productionPsInContext.getWorkOrderNo()))).findFirst().get().foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey()).getForeignKey())));
productionPartContextList.stream().filter(o -> (null != o && o.getWorkOrderNo().equals(productionPsInContext.getWorkOrderNo()))).findFirst().get().foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey());
prodRuleContextList.add(getProdRuleSortContext(reqBean, productionProcessContext, cellEquipContext, productionPsInContext));
}
}
private Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList) {
private Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, List<MesProdRuleContext> prodRuleContextList) {
List<AttrBean> attrBeanList = null;
@ -136,7 +162,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
//封装匹配当前设备的装配件信息
List<MesAssemblyShowContext> assemblyShowContextList = getAssemblyShowContextList(cellEquipContext, prodRuleContext.getAssemblyDataContext(workCenter));
List<MesAssemblyShowContext> assemblyShowContextList = getAssemblyShowContextList(prodRuleContext.getAssemblyDataContext(workCenter));
if (CollectionUtils.isEmpty(assemblyShowContextList)) continue;
//装配件清单列表标题
@ -157,8 +183,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
}
//封装匹配当前设备的装配件信息
private List<MesAssemblyShowContext> getAssemblyShowContextList(MesCellEquipContext cellEquipContext, List<MesProductionAssemblyContext> productionAssemblyContextList) {
productionAssemblyContextList = filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList);
private List<MesAssemblyShowContext> getAssemblyShowContextList(List<MesProductionAssemblyContext> productionAssemblyContextList) {
if (CollectionUtils.isEmpty(productionAssemblyContextList)) return null;
List<MesAssemblyShowContext> assemblyShowContextList = new ArrayList<>();
for (MesProductionAssemblyContext item : productionAssemblyContextList) {
@ -166,7 +191,8 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
if (null == item || MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.checkIsNoShow(item.getMatchType())) continue;
assemblyShowContextList.add(assemblyShowContext(item));
}
assemblyShowContextList = assemblyShowContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList());
assemblyShowContextList = sortAssemblyShowContextList(assemblyShowContextList);
AtomicReference<Integer> index = new AtomicReference<>(0);
assemblyShowContextList.forEach(o -> o.index(index.updateAndGet(v -> v + 1)));
@ -174,11 +200,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
return assemblyShowContextList;
}
//搜集匹配当前设备的装配件信息
private List<MesProductionAssemblyContext> filterProductionAssemblyContextList(MesCellEquipContext cellEquipContext, List<MesProductionAssemblyContext> productionAssemblyContextList) {
return CollectionUtils.isEmpty(productionAssemblyContextList) ? null :
productionAssemblyContextList.stream().filter(o -> (null != o && o.getEquipmentCode().equals(cellEquipContext.getEquipmentCode()))).collect(Collectors.toList());
}
//封装装配件信息
private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext o) {
@ -191,18 +213,4 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
return assemblyShowContext;
}
//装配件清单列表标题
private List<AttrBean> dataAttrList(List<MesProdRuleContext> prodRuleContextList) {
List<AttrBean> attrBeanList = new ArrayList<>();
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, "序号");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.MATCH_TYPE_NAME, "装配方式");
if (prodRuleContextList.size() > 1) PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.WORK_ORDER_NO, "生产工单编号");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NO, "零件编码");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NO, "原料编码");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NAME, "原料名称");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_SN, "原料条码");
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_STATUS_NAME, "装配状态");
return attrBeanList;
}
}

@ -3,11 +3,14 @@ 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.IMesRecyclablePackageBindingLogService;
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.context.MesProductionRecyclablePackageContext;
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.pojo.mes.bean.MesConfig;
@ -54,6 +57,9 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
@Autowired
private IConfigService configService;
@Autowired
private IFsmCommonService fsmCommonService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -74,6 +80,12 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
//获取上下文生产扫/读信息:可回用包装条码
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanRecyclablePackageContext(reqBean);
//没有待验证的可回用包装条码 并且存在已验证过的可回用包装条码,默认放行
if (CollectionUtils.isEmpty(equipVariableCollectContextList) && productionDispatchContextStepService.checkProductionRecyclablePackageContextIsExist(reqBean)){
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前没有需要验证的可回用包装条码,且存在已验证可回用包装条码信息,当前工步默认放行!");
}
if (CollectionUtils.isEmpty(equipVariableCollectContextList)){
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前缺失可回用包装条码信息!");
}
@ -84,9 +96,12 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
//从上下文中取出工位对象
MesWorkCell workCell = productionProcessContext.getWorkCell();
//上下文对象-零件条码
List<MesProductionPsInContext> productionPsInContextList = new ArrayList<>();
//上下文对象-可回用包装
List<MesProductionRecyclablePackageContext> recyclablePackageContextList = new ArrayList<>();
if (!sourceBoxInOut(reqBean, equipVariableCollectContextList, stepResult, productionPsInContextList, workCell).isCompleted()) {
if (!sourceBoxInOut(reqBean, equipVariableCollectContextList, stepResult, productionPsInContextList,recyclablePackageContextList, workCell).isCompleted()) {
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
}
@ -99,15 +114,19 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
//保存进料主条码数据
productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList);
//保存进料可回用包装
productionDispatchContextStepService.dispatchProductionRecyclablePackageContext(reqBean, recyclablePackageContextList);
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) {
public StepResult sourceBoxInOut(StationRequestBean reqBean, List<MesEquipVariableCollectContext> equipVariableCollectContextList, StepResult stepResult, List<MesProductionPsInContext> productionPsInContextList,List<MesProductionRecyclablePackageContext> recyclablePackageContextList, MesWorkCell workCell) {
//获取包装绑定主表
MesRecyclablePackageBinding recyclablePackageBinding = mesRecyclablePackageBindingService.getMesRecyclablePackageBindingByPackageSn(reqBean.getOrganizeCode(), equipVariableCollectContextList.iterator().next().getEquipVariableValue());
if (Objects.isNull(recyclablePackageBinding))
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()));
@ -115,8 +134,9 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
//获取绑定明细信息
List<MesRecyclablePackageBindingDetail> bindingDetailList = mesRecyclablePackageBindingService.findMesRecyclablePackageBindingDetailByPid(reqBean.getOrganizeCode(), recyclablePackageBinding.getId());
if (CollectionUtils.isEmpty(bindingDetailList))
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) {
@ -125,11 +145,18 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
for (int i = 0; i < bindingDetail.getQty(); i++) {
productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), bindingDetail.getProductSn()).messageSource(equipVariableCollectContextList.iterator().next().getMessageSource()));
}
recyclablePackageContextList.add(new MesProductionRecyclablePackageContext(recyclablePackageBinding,bindingDetail));
//自制件
} else {
recyclablePackageContextList.add(new MesProductionRecyclablePackageContext(recyclablePackageBinding,bindingDetail).setId(produceSnMap.get(bindingDetail.getProductSn()).iterator().next().getId()));
createProductionPsInContext(reqBean, stepResult, workCell, equipVariableCollectContextList.iterator().next(), produceSnMap.get(bindingDetail.getProductSn()), productionPsInContextList);
}
}
//没有单独扣减工步时在本工步扣减
Map<String, String> wcpcMap = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean);
if (wcpcMap.containsKey(MesPcnExtConstWords.CONTEXT_UNBINDING_STEP) && !Boolean.parseBoolean(wcpcMap.get(MesPcnExtConstWords.CONTEXT_UNBINDING_STEP))) {
mesRecyclablePackageBindingService.doMesRecyclablePackageUnBinding(recyclablePackageBinding, bindingDetailList, reqBean.getUserInfo());
}
return stepResult;
}

@ -0,0 +1,66 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesStationService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
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.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/12 11:20
* @Modify:
**/
@Slf4j
@Service("mesProcessMethodStepService")
public class MesProcessMethodStepService extends BaseStepService {
@Autowired
private IMesStationService mesStationService;
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//获取工步参数
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean, stepParamMap);
//当前工位使用的设备
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()));
}
return ((IStepService) SpringContextsUtil.getBean(MesExtEnumUtil.STATION_PROCESS_METHOD.valueOfStrategyClass(station.getProcessMethod()))).executeInState(reqBean);
}
}

@ -1,8 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
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.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext;
@ -34,12 +32,6 @@ import java.util.stream.Collectors;
public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCheckStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProductionRecordService productionRecordService;
@Autowired

@ -1,8 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
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.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext;
@ -33,12 +31,6 @@ import java.util.stream.Collectors;
public class MesProdCraftRouteCheckSortStepService extends MesProdCraftRouteCheckStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProductionRecordService productionRecordService;
@Autowired

@ -33,10 +33,10 @@ import java.util.Optional;
public class MesProdCraftRouteCheckStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
public IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
public IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IFsmRouteDataService fsmRouteDataService;

@ -1,6 +1,8 @@
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.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
@ -31,12 +33,6 @@ import java.util.stream.Collectors;
public class MesProduceSeqCheckCustOrderNoStepService extends MesProduceSeqCheckStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Autowired

@ -1,6 +1,8 @@
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.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
@ -32,12 +34,6 @@ import java.util.stream.Collectors;
public class MesProduceSeqCheckNosortStepService extends MesProduceSeqCheckStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Autowired

@ -1,6 +1,8 @@
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.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
@ -34,12 +36,6 @@ import java.util.stream.Collectors;
public class MesProduceSeqCheckSortStepService extends MesProduceSeqCheckStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Autowired

@ -29,10 +29,10 @@ import java.util.Optional;
public class MesProduceSeqCheckStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
public IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
public IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Override
public StepResult execute(StationRequestBean reqBean) {

@ -61,9 +61,6 @@ public class MesRecyclablePackageReadStepService extends BaseStepService {
@Autowired
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Autowired
private IMesStationService mesStationService;
@Override
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);
@ -155,12 +152,7 @@ public class MesRecyclablePackageReadStepService extends BaseStepService {
//根据设备ID,设备数据变量ID集合 修改设备ID分表采集数据的状态
equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipVariableIdList());
//根据设备代码获取点位信息
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);
return stepResult;
}
//匹配读取的可回用包装条码的有效性

@ -0,0 +1,71 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionRecyclablePackageContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
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 java.util.List;
import java.util.Objects;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/13 18:08
* @Modify:
**/
@Slf4j
@Service("mesRecyclablePackageUnBindingStepService")
public class MesRecyclablePackageUnBindingStepService extends BaseStepService {
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesRecyclablePackageBindingService mesRecyclablePackageBindingService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//验证进料可回用包装是否存在
if (!productionDispatchContextStepService.checkProductionRecyclablePackageContextIsExist(reqBean)){
return stepResult;
}
//获取进料可回用包装信息
List<MesProductionRecyclablePackageContext> productionRecyclablePackageContext = productionDispatchContextStepService.getProductionRecyclablePackageContext(reqBean);
//获取包装绑定主表
MesRecyclablePackageBinding recyclablePackageBinding = mesRecyclablePackageBindingService.getMesRecyclablePackageBindingByPackageSn(reqBean.getOrganizeCode(), productionRecyclablePackageContext.iterator().next().getPackageSn());
if (Objects.isNull(recyclablePackageBinding)) {
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("回收包装绑定[%s]信息不存在", productionRecyclablePackageContext.iterator().next().getPackageSn()));
}
//校验状态
if (MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue() != recyclablePackageBinding.getStatus()) {
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("回收包装绑定[%s]状态不为[已关箱]", productionRecyclablePackageContext.iterator().next().getPackageSn()));
}
//获取绑定明细信息
List<MesRecyclablePackageBindingDetail> bindingDetailList = mesRecyclablePackageBindingService.findMesRecyclablePackageBindingDetailByPid(reqBean.getOrganizeCode(), recyclablePackageBinding.getId());
if (CollectionUtils.isEmpty(bindingDetailList)) {
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("回收包装绑定[%s]明细信息不存在", productionRecyclablePackageContext.iterator().next().getPackageSn()));
}
//解绑
mesRecyclablePackageBindingService.doMesRecyclablePackageUnBinding(recyclablePackageBinding, bindingDetailList, reqBean.getUserInfo());
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("可回用包装条码%s解绑成功!", productionRecyclablePackageContext.iterator().next().getPackageSn()));
}
}

@ -1,7 +1,5 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
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.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
@ -38,12 +36,6 @@ import java.util.stream.Collectors;
public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Autowired

@ -1,7 +1,5 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
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.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
@ -37,12 +35,6 @@ import java.util.stream.Collectors;
public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Autowired

@ -29,10 +29,10 @@ import java.util.stream.Collectors;
public class MesWorkOrderCheckStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
public IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
public IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Override
public StepResult execute(StationRequestBean reqBean) {

@ -291,6 +291,7 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
MesWorkOrderCutDetailModel workOrderCutDetailModel = new MesWorkOrderCutDetailModel();
BeanUtils.copyProperties(mesCutSchemeFg, workOrderCutDetailModel);
workOrderCutDetailModel.setCutWorkOrderNo(cutWorkOrderNo);
MesCustomerPart customerPart = customerPartService.getMesCustomerPartByPartNo(mesCutSchemeFg.getPartNo(), mesPackingDefine.getCustCode(), reqBean.getOrganizeCode());

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderCutService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
@ -8,21 +9,28 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
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.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateParam;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut;
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.MesLabelTemplateParamRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCutRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import org.springframework.beans.BeanUtils;
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;
@ -49,6 +57,9 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
@Autowired
private MesLabelTemplateParamRepository labelTemplateParamRao;
@Autowired
private MesWorkOrderCutRepository workOrderCutRepository;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -64,7 +75,7 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
//
//String labelTemplateCode = entry.getValue().getLabelTemplate();
List<Map<String, Object>> resultMap = null;
List<Map<String, Object>> resultMap = new ArrayList<>();
Map<String, List<MesWorkOrderCutDetailModel>> workOrderCutDetailModelMapByPartNo = workOrderCutFgDataContext.stream().collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getPrinter()).add(o.getLabelTemplate()).toString()));
@ -90,9 +101,8 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
//根据反射获取策略类--封装打印数据
String methodCode = labelTemplate.getMethodCode();
//模板信息丢失抛出异常
if (methodCode == null) {
if (StringUtils.isEmpty(methodCode))
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("零件号[%s]的模板代码[%s]的反射类丢失,请配置!", partNoList, labelTemplate.getTemplateCode()));
}
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate);
@ -103,9 +113,17 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
// GenSerialNoModel model , MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean, Boolean isStep
MesProduceSnPrintModel printModel = strategyService.execute(null, mesProduceSnPrintModel, null, stepResult, reqBean, true);
resultMap = printModel.getPrintContextList();
resultMap.addAll(printModel.getPrintContextList());
}
List<String> cutWorkOrderNoList = workOrderCutFgDataContext.stream().map(MesWorkOrderCutDetailModel::getCutWorkOrderNo).collect(Collectors.toList());
// 修改工单为已打印
workOrderCutRepository.updateByProperties(
new String[]{MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.CUT_WORK_ORDER_NO},
new Object[]{CommonEnumUtil.VALID, CommonEnumUtil.IS_DEAL.NO.getValue(), reqBean.getOrganizeCode(), cutWorkOrderNoList.get(0)},
new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_ORDER_STATUS},
new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.FALSE, MesExtEnumUtil.CUT_ORDER_STATUS.PRINTED.getValue()});
// 裁片方案代码
// 根据裁片方案代码查询裁片方案成品配置
//返回打印标识 给前端

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepSer
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
@ -24,11 +25,14 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description :
@ -81,6 +85,11 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
// 从上下文中取出成品列表
List<MesWorkOrderCutDetailModel> workOrderCutFgDataContextList = productionDispatchContextStepService.getMesWorkOrderCutFgDataContext(reqBean);
//搜集裁片工单号
//List<String> filterList = equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList());
//List<String> workOrderCutNoList = filterList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList());
//String cutWorkOrderNo = workOrderCutNoList.stream().findFirst().get();
if (CollectionUtils.isEmpty(workOrderCutFgDataContextList))
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "缺失裁片工单箱条码配置信息!");
@ -138,11 +147,13 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
cutPackage.setOrganizeCode(reqBean.getOrganizeCode());
BeanUtils.copyProperties(workOrderCutDetailModel, cutPackage);
cutPackage.setQty(qty);
cutPackage.setLotNo(nowTime);
cutPackage.setLotNo(nowTime.substring(0,10));
cutPackage.setSn(doGenerateSerialNo(reqBean, resultBean, mesPartContext.getPackageSnRule(), mesPartContext));
MesWorkOrderCutDetailModel newWorkOrderCutDetailModel = new MesWorkOrderCutDetailModel();
BeanUtils.copyProperties(workOrderCutDetailModel, newWorkOrderCutDetailModel);
newWorkOrderCutDetailModel.setCutWorkOrderNo(cutPackage.getCutWorkOrderNo());
newWorkOrderCutDetailModel.setPackageNo(cutPackage.getSn());
newWorkOrderCutDetailModel.setQty(qty);
newWorkOrderCutDetailModel.setCreateDatetime(cutPackage.getCreateDatetime());
newWorkOrderCutDetailModel.setLotNo(cutPackage.getLotNo());
@ -151,6 +162,7 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
newWorkOrderCutDetailModel.setPrinter(mesPartContext.getPrinter());
newWorkOrderCutDetailModel.setCustPartNo(mesPartContext == null ? "" : mesPartContext.getCustPartNo());
newWorkOrderCutDetailModel.setLabelTemplate(mesPartContext.getLabelTemplate());
newWorkOrderCutDetailModel.setOrganizeCode(mesPartContext.getOrganizeCode());
workOrderCutPackages.add(cutPackage);
newWorkOrderCutFgDataContextList.add(newWorkOrderCutDetailModel);
@ -165,7 +177,7 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
private String doGenerateSerialNo(StationRequestBean reqBean, StationResultBean resultBean, String ruleCode, MesPart part) {
try {
return syncFuncService.syncSerialNo(
new GenSerialNoModel(ruleCode).prodLocation(reqBean.getWorkCenterCode()).partNo(part.getPartNo()).putDataMap(MesPart.class.getSimpleName(), part).organizeCode(reqBean.getOrganizeCode()),
new GenSerialNoModel(ruleCode).prodLocation(reqBean.getWorkCenterCode()).partNo(part.getPartNo()).putDataMap(MesPart.class.getSimpleName(), part).year(TimeTool.pareDateToString(MesPcnExtConstWords.DATE_FORMAT_YY, new Date())).organizeCode(reqBean.getOrganizeCode()),
reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString();
} catch (ImppBusiException e) {
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), e.getErrorDetail());

@ -455,6 +455,7 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
return false;
}
//获取上下文生产扫/读信息:可回用包装条码
@Override
public List<MesEquipVariableCollectContext> getScanRecyclablePackageContext(StationRequestBean reqBean) {
String productSnJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_RECYCLABLE_PACKAGE_CONTEXT);
@ -475,9 +476,39 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_RECYCLABLE_PACKAGE_CONTEXT, JSONObject.toJSONString(productSnList));
}
//删除上下文扫/读信息:可回用包装条码
@Override
public void removeScanRecyclablePackageContext(StationRequestBean reqBean) {
removeFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_RECYCLABLE_PACKAGE_CONTEXT);
}
//获取进料可回用包装信息
@Override
public List<MesProductionRecyclablePackageContext> getProductionRecyclablePackageContext(StationRequestBean reqBean) {
String productionPsInJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_RECYCLABLE_PACKAGE_CONTEXT);
return !StringUtils.isEmpty(productionPsInJson) ? JSONObject.parseArray(productionPsInJson, MesProductionRecyclablePackageContext.class) : null;
}
//验证进料可回用包装是否存在
@Override
public Boolean checkProductionRecyclablePackageContextIsExist(StationRequestBean reqBean) {
String productionPsInJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_RECYCLABLE_PACKAGE_CONTEXT);
return !StringUtils.isEmpty(productionPsInJson);
}
//保存进料可回用包装
@Override
public Boolean dispatchProductionRecyclablePackageContext(StationRequestBean reqBean, List<MesProductionRecyclablePackageContext> recyclablePackageContextList) {
if (CollectionUtils.isEmpty(recyclablePackageContextList)) return removeProductionRecyclablePackageContext(reqBean);
return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_RECYCLABLE_PACKAGE_CONTEXT, JSONObject.toJSONString(recyclablePackageContextList));
}
//删除进料可回用包装
@Override
public Boolean removeProductionRecyclablePackageContext(StationRequestBean reqBean) {
removeFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_RECYCLABLE_PACKAGE_CONTEXT);
return true;
}
}

@ -49,6 +49,12 @@ public class MesAssemblyShowContext implements Serializable {
@ApiParam("装配件条码确认方式")
private String matchTypeName;
@ApiParam("工位代码")
public String workCellCode;
@ApiParam(value = "工艺顺序号")
private Integer processSeq;
@ApiParam("序号")
private Integer index;

@ -124,6 +124,11 @@ public class MesProdRuleContext implements Serializable {
this.craftCode = craftCode;
}
public MesProdRuleContext(String organizeCode, String workCenterCode) {
this.organizeCode = organizeCode;
this.workCenterCode = workCenterCode;
}
public MesProdRuleContext copy(MesProdRuleNosortCfg prodRuleNosortCfg) {
BeanUtils.copyProperties(prodRuleNosortCfg, this);
this.pid = prodRuleNosortCfg.getId();

@ -35,11 +35,8 @@ public class MesProductionAssemblyContext implements Serializable {
@ApiParam("装配零件状态")
public Integer assemblyStatus;
@ApiParam(name = "任意装配件扫描错误判断工位isResetScan后是否重新扫描")
public Integer isResetScan = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
@ApiParam("是否跳过")
public Integer isSkip;
public Integer isSkip = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
@ApiParam("装配件条码确认方式")
public Integer matchType;

@ -31,6 +31,9 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon
@ApiParam(value = "是否可复用条码是否写入上下文进行复用")
private Integer isRepeat2Cache = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
@ApiParam(name = "任意装配件扫描错误判断工位isResetScan后是否重新扫描")
public Integer isResetScan = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
@ApiParam(value = "是否忽略回车")
private Integer isIgnoreEntry;
@ -56,8 +59,6 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon
this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue();
this.isSkip = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
if (!MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.checkIsNeedScan(this.matchType)) this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue();
if (!StringUtils.isEmpty(assemblySn)) {

@ -103,20 +103,54 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
@ApiParam(value = "生产组代码")
private String productGroupCode;
@ApiParam(value = "装配件记录表ID")
public Long id;
@ApiParam(value = "装配件记录表创建时间")
public String createDatetime;
@ApiParam(value = "装配件记录表创建人")
public String createUser;
public MesProductionAssemblySortContext() {}
public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly) {
if (null != workOrderAssembly) BeanUtils.copyProperties(workOrderAssembly, this);
if (null != workOrderAssembly) {
BeanUtils.copyProperties(workOrderAssembly, this, MesPcnExtConstWords.BASE_BEAN_FIELDS);
this.sourceId = workOrderAssembly.getId();
}
if (StringUtils.isEmpty(this.routeSeq)) this.routeSeq = MesPcnExtConstWords.ZERO;
if (StringUtils.isEmpty(this.processSeq)) this.processSeq = MesPcnExtConstWords.ZERO;
if (this.assemblyStatus.compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0 && !MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.checkIsNeedScan(this.matchType))
this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue();
if (this.assemblyStatus.compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) != 0) this.isResetScan = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
return this;
}
public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly) {
if (null != workOrderAssembly) {
BeanUtils.copyProperties(workOrderAssembly, this, MesPcnExtConstWords.BASE_BEAN_FIELDS);
this.sourceId = workOrderAssembly.getId();
}
this.isSkip = this.assemblyStatus.compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_40.getValue()) != 0 ? CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() : CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
if (null != workOrderAssembly) {
this.id = productionAssembly.getId();
this.createDatetime = productionAssembly.getCreateDatetime();
this.createUser = productionAssembly.getCreateUser();
}
if (StringUtils.isEmpty(this.routeSeq)) this.routeSeq = MesPcnExtConstWords.ZERO;
if (StringUtils.isEmpty(this.processSeq)) this.processSeq = MesPcnExtConstWords.ZERO;
if (this.assemblyStatus.compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue()) != 0 && !MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.checkIsNeedScan(this.matchType))
this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue();
if (this.assemblyStatus.compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_40.getValue()) == 0)
this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue();
return this;
}
@ -145,17 +179,13 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
public MesProductionAssemblySortContext copy(MesProductionAssembly productionAssembly) {
if (null != productionAssembly) BeanUtils.copyProperties(productionAssembly, this);
if (null != productionAssembly) BeanUtils.copyProperties(productionAssembly, this, MesPcnExtConstWords.BASE_BEAN_FIELDS);
if (StringUtils.isEmpty(this.routeSeq)) this.routeSeq = MesPcnExtConstWords.ZERO;
if (StringUtils.isEmpty(this.isSkip)) this.isSkip = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
if (this.assemblyStatus.compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0 && !MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.checkIsNeedScan(this.matchType))
this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue();
if (this.assemblyStatus.compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) != 0) this.isResetScan = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
return this;
}

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail;
import io.swagger.annotations.ApiParam;
import lombok.Data;
@ -42,17 +43,16 @@ public class MesProductionRecyclablePackageContext implements Serializable {
}
public MesProductionRecyclablePackageContext(String organizeCode, String packageSn, String packageTypeCode) {
this.organizeCode = organizeCode;
this.packageSn = packageSn;
this.packageTypeCode = packageTypeCode;
}
public MesProductionRecyclablePackageContext copy(MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail) {
public MesProductionRecyclablePackageContext(MesRecyclablePackageBinding recyclablePackageBinding,MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail) {
this.organizeCode = recyclablePackageBinding.getOrganizeCode();
this.packageSn = recyclablePackageBinding.getPackageSn();
this.partName = mesRecyclablePackageBindingDetail.getPartName();
this.partNo = mesRecyclablePackageBindingDetail.getPartNo();
this.productSn = mesRecyclablePackageBindingDetail.getProductSn();
}
public MesProductionRecyclablePackageContext setId(long id){
this.id = id;
return this;
}

@ -15,6 +15,9 @@ import lombok.Data;
@Api("裁片工单明细MODEL")
public class MesWorkOrderCutDetailModel {
@ApiParam("工厂代码")
private String organizeCode;
@ApiParam("裁片工单号")
private String cutWorkOrderNo;

@ -189,6 +189,12 @@ public class MesPcnExtConstWords {
public static final String PACKAGE_TYPE_CODE = "packageTypeCode";
//零件生产组代码
public static final String PART_PROD_GROUP_CODE = "partProdGroupCode";
//描述
public static final String DESCRIPTION = "description";
//描述
public static final String REMARK = "remark";
//BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties)
public static final String[] BASE_BEAN_FIELDS = {ID, IS_DELETED, IS_VALID, CREATE_DATE_TIME, CREATE_USER, MODIFY_DATE_TIME, MODIFY_USER, DESCRIPTION, REMARK, SYSTEM_SYNC_DATE_TIME, SYSTEM_SYNC_STATUS};
// 客制化条码长度:通用
@ -256,6 +262,8 @@ public class MesPcnExtConstWords {
public static final String ENDLESS_LOOP_READ_TIMES = "ENDLESS_LOOP_READ_TIMES";
// 死循环读取默认默认次数
public static final String ENDLESS_LOOP_READ_TIMES_DEFAULT = "10";
// 流程包含解绑工步
public static final String CONTEXT_UNBINDING_STEP = "CONTEXT_UNBINDING_STEP";
// 工位/工步 参数按钮事件
public static final String FUNCTION_CMD = "FUNCTION_CMD";
@ -415,6 +423,9 @@ public class MesPcnExtConstWords {
public static final String PRODUCTION_PS_OUT_CONTEXT = "PRODUCTION_PS_OUT_CONTEXT";
// 上下文: 料桶原材料数据
public static final String RAW_PART_CHARGING_DATA_CONTEXT = "RAW_PART_CHARGING_DATA_CONTEXT";
// 上下文: 可回用包装数据信息
public static final String PRODUCTION_RECYCLABLE_PACKAGE_CONTEXT = "PRODUCTION_RECYCLABLE_PACKAGE_CONTEXT";
// 上下文: 裁片工单成品数据
public static final String WORK_ORDER_CUT_FG_DATA_CONTEXT = "WORK_ORDER_CUT_FG_DATA_CONTEXT";
@ -466,13 +477,12 @@ public class MesPcnExtConstWords {
// 模板代码
public static final String TEMPLATE_CODE = "templateCode";
//打印模板
public static final String LABEL_TEMPLATE = "labelTemplate";
//打印模板数据
public static final String TEMPLATE_DATA = "templateData";
//打印机
public static final String PRINTERE = "printer";
public static final String PRINTER = "printer";
//客户零件号
public static final String CUST_PART_NO = "custPartNo";
@ -480,4 +490,17 @@ public class MesPcnExtConstWords {
public static final String LOT_NO = "lotNo";
//包装数量
public static final String PACKAGE_QTY = "packageQty";
public static final String FUNCITON_CUT_ORDER_DIALOG_PRINT = "FUNCTION_CUT_ORDER_DIALOG_PRINT";
//工步解绑
public static final String STEP_UNBINDING = "工步解绑";
//二维码
public static final String QR_CODE = "qrCode";
//条形码
public static final String BAR_CODE = "barCode";
//竖杠
public static final String VERTIVAL_BAR = "|";
// 时间
public static final String TIME = "time";
}

Loading…
Cancel
Save