Merge remote-tracking branch 'origin/dev' into dev

tags/yfai-pcn-ext-v1.0
jun 12 months ago
commit 81578b5f10

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.api.base;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
import io.swagger.annotations.ApiOperation;
@ -10,4 +11,7 @@ public interface IMesMouldMultiCavityService {
@ApiOperation(value = "根据设备代码,模具号查询一模多腔信息")
List<MesMouldMultiCavity> getMouldMultiCavityList(String organizeCode, String equipmentCode, String mouldNo);
@ApiOperation(value = "根据设备代码,模具号查询产出零件信息")
List<MesProductionPartContext> getProductionPartList(String organizeCode, String equipmentCode, String mouldNo);
}

@ -21,7 +21,7 @@ public interface IMesProdOrgExtService {
@ApiOperation(value = "根据生产线代码,工位代码,关系类型查询主子工位关系信息")
List<MesWorkCellExtendCfg> getWorkCellExtendCfgList(String organizeCode, String workCenterCode, String workCellCode, Integer extendType);
@ApiOperation(value = "根据生产线代码,工位代码查询主子工位实虚关系信息(排除传参workCellCodeBak数据)")
@ApiOperation(value = "根据生产线代码,工位代码查询主子工位实虚关系信息")
List<MesWorkCellExtendCfg> getWorkCellExtendCfgRvListByBak(String organizeCode, String workCenterCodeBak, String workCellCodeBak);
}

@ -1,7 +1,9 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext;
import cn.estsh.i3plus.pojo.mes.bean.MesAssemblyNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly;
import io.swagger.annotations.ApiOperation;
@ -10,52 +12,20 @@ import java.util.List;
public interface IMesAssemblyExtService {
@ApiOperation(value = "【排序线】获取生产工单装配件绑定记录")
List<MesProductionAssemblySortContext> getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext, List<String> workOrderNoList);
@ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 【List<MesProductionAssemblyContext>】")
List<MesProductionAssemblyContext> getProductionAssemblySortContextList(MesProductionAssemblySortContext productionAssemblyContext, List<String> workOrderNoList);
@ApiOperation(value = "【排序线】获取生产工单装配件清单")
List<MesWorkOrderAssembly> getWorkOrderAssemblyList(MesProdRuleContext prodRuleContext, List<String> workOrderNoList);
@ApiOperation(value = "【排序线】获取生产工单装配件清单 【List<MesWorkOrderAssembly>】")
List<MesWorkOrderAssembly> getWorkOrderAssemblyList(MesProductionAssemblySortContext productionAssemblySortCmontext, List<String> workOrderNoList);
@ApiOperation(value = "获取装配件绑定记录")
List<MesProductionAssembly> getProductionAssemblyList(String organizeCode, Integer dataSource, List<Long> sourceIdList);
@ApiOperation(value = "获取装配件绑定记录 【List<MesProductionAssembly>】")
List<MesProductionAssembly> getProductionAssemblyList(MesProductionAssemblyContext productionAssemblyContext, List<Long> sourceIdList);
// @ApiOperation(value = "【排序线】获取装配件清单 【List<MesAssemblyNosortCfg>】")
// List<MesAssemblyNosortCfg> getAssemblyNosortCfgList(MesProductionAssemblyNosortContext productionAssemblyNosortContext);
// @ApiOperation(value = "获取装配件绑定记录 【List<MesProductionAssembly>】")
// List<MesProductionAssembly> getProductionAssemblyList(MesProductionAssemblyContext productionAssemblyContext);
//
//
// @ApiOperation(value = "【非排序线】获取装配件绑定记录 【List<MesProductionAssembly>】")
// List<MesProductionAssembly> getProductionAssemblyNosortList(MesProductionAssemblyNosortContext productionAssemblyNosortContext);
// @ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 【List<MesProductionAssemblySortContext>】")
// List<MesProductionAssemblySortContext> getProductionAssemblyContextSortList(List<MesWorkOrderAssembly> workOrderAssemblyList, List<MesProductionAssembly> productionAssemblyList);
//
// @ApiOperation(value = "【非排序线】获取装配件绑定记录 【List<MesProductionAssemblyNosortContext>】")
// List<MesProductionAssemblyNosortContext> getProductionAssemblyContextNosortList(List<MesWorkOrderAssembly> workOrderAssemblyList, List<MesProductionAssembly> productionAssemblyList);
//
// @ApiOperation(value = "获取装配件绑定记录 【List<MesProductionAssemblyContext>】")
// List<MesProductionAssemblyContext> getProductionAssemblyContextList(List<MesWorkOrderAssembly> workOrderAssemblyList, List<MesProductionAssembly> productionAssemblyList);
// @ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 【List<MesProductionAssemblySortContext>】")
// List<MesProductionAssemblySortContext> getProductionAssemblyContextSortList(MesProductionAssemblySortContext productionAssemblySortContext);
//
// @ApiOperation(value = "【非排序线】获取装配件绑定记录 【List<MesProductionAssemblyNosortContext>】")
// List<MesProductionAssemblyNosortContext> getProductionAssemblyContextNosortList(MesProductionAssemblyNosortContext productionAssemblyNosortContext);
@ApiOperation(value = "获取非排序装配件配置信息")
List<MesProductionAssemblyNosortContext> getProductionAssemblyNosortContextList(String organizeCode, Long... pids);
@ApiOperation(value = "获取非排序装配件配置信息")
List<MesAssemblyNosortCfg> getAssemblyNosortCfgList(String organizeCode, Long... pids);
}

@ -0,0 +1,18 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwModel;
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult;
import io.swagger.annotations.ApiOperation;
public interface IMesEquipVariableRwExtService {
@ApiOperation(value = "读写访问地址")
MesEquipVariableRwModel getRwRequestUrl(MesEquipVariableRwModel equipVariableRwModel);
@ApiOperation(value = "写值")
MesEquipVariableRwResult writeVariable(MesEquipVariableRwModel equipVariableRwModel);
@ApiOperation(value = "读取")
MesEquipVariableRwResult readVariable(MesEquipVariableRwModel equipVariableRwModel);
}

@ -1,17 +1,21 @@
//package cn.estsh.i3plus.ext.mes.pcn.api.busi;
//
//import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
//import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleSortCfg;
//import io.swagger.annotations.ApiOperation;
//
//import java.util.List;
//
//public interface IMesProdRuleCfgExtService {
//
// @ApiOperation(value = "【非排序线】获取产品加工规则信息")
// List<MesProdRuleNosortCfg> getProdRuleNosortCfgList(MesProdRuleNosortCfg prodRuleNosortCfg);
//
// @ApiOperation(value = "【排序线】获取产品加工规则信息")
// List<MesProdRuleSortCfg> getProdRuleSortCfgList(MesProdRuleSortCfg prodRuleSortCfg);
//
//}
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import io.swagger.annotations.ApiOperation;
import java.util.List;
public interface IMesProdRuleCfgExtService {
@ApiOperation(value = "【排序线】获取产品加工规则(生产工单对应的装配件绑定记录)")
List<MesProdRuleContext> getProdRuleSortContextList(MesProdRuleContext prodRuleContext, List<MesProductionPartContext> productionPartContextList);
@ApiOperation(value = "【非排序线】获取产品加工规则")
List<MesProdRuleNosortCfg> getProdRuleNosortCfgList(MesProdRuleContext prodRuleContext);
@ApiOperation(value = "【非排序线】获取产品加工规则对应的装配件信息")
MesProdRuleContext getProdRuleContext(MesProdRuleNosortCfg prodRuleNosortCfg, MesProductionPartContext productionPartContext);
}

@ -0,0 +1,17 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
public interface IMesProduceSnExtService {
@ApiOperation(value = "根据零件条码查询零件条码信息")
List<MesProduceSn> getProduceSnList(String organizeCode, List<String> productSnList);
@ApiOperation(value = "根据零件条码查询零件条码信息")
Map<String, MesProduceSn> getProduceSnMap(String organizeCode, List<String> productSnList);
}

@ -1,10 +1,11 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
@ -72,17 +73,17 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "删除上下文头道模具号")
void deleteFirstMouldNoContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文一模多腔信息")
List<MesMouldMultiCavity> getMouldMultiCavityContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文产出零件信息")
List<MesProductionPartContext> getProductionPartContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文一模多腔信息是否存在")
Boolean checkMouldMultiCavityIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文产出零件信息是否存在")
Boolean checkProductionPartIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文一模多腔信息", notes = "[JSON]List<MesMouldMultiCavity>")
Boolean saveMouldMultiCavityContext(StationRequestBean reqBean, List<MesMouldMultiCavity> mouldMultiCavityList);
@ApiOperation(value = "保存上下文产出零件信息", notes = "[JSON]List<MesProductionPartContext>")
Boolean saveProductionPartContext(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList);
@ApiOperation(value = "删除上下文一模多腔信息")
void deleteMouldMultiCavityContext(StationRequestBean reqBean);
@ApiOperation(value = "删除上下文产出零件信息")
void deleteProductionPartContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, MesPart> getPartDataContext(StationRequestBean reqBean);
@ -105,18 +106,6 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "删除上下文模具号")
void deleteMouldNoContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文生产工单数据信息集合")
List<MesWorkOrderContext> getWorkOrderDataContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文生产工单数据信息集合是否存在")
Boolean checkWorkOrderDataIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文生产工单数据信息集合", notes = "[JSON]List<MesWorkOrderContext>")
Boolean saveWorkOrderDataContext(StationRequestBean reqBean, List<MesWorkOrderContext> workOrderContextList);
@ApiOperation(value = "删除上下文生产工单数据信息集合")
void deleteWorkOrderDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文生产扫/读信息:主条码")
List<MesEquipVariableCollectContext> getScanProductSnContext(StationRequestBean reqBean);
@ -153,28 +142,16 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "删除上下文产出条码数据信息集合")
void deleteOutProduceSnDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文装配件数据信息集合")
List<MesProductionAssemblyContext> getAssemblyDataContext(StationRequestBean reqBean, MesWorkCenter workCenter);
@ApiOperation(value = "验证上下文装配件数据信息集合是否存在")
Boolean checkAssemblyDataIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文装配件数据信息集合", notes = "[JSON]List<MesProductionAssemblyContext>")
Boolean saveAssemblyDataContext(StationRequestBean reqBean, List<MesProductionAssemblyContext> productionAssemblyContextList);
@ApiOperation(value = "删除上下文装配件数据信息集合")
void deleteAssemblyDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文非排序产品加工规则信息集合")
List<MesProdRuleNoSortContext> getProdRuleNosortDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文产品加工规则数据信息集合")
List<MesProdRuleContext> getProdRuleDataContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文非排序产品加工规则信息集合是否存在")
Boolean checkProdRuleNosortDataIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文产品加工规则信息集合是否存在")
Boolean checkProdRuleDataIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文非排序产品加工规则信息集合", notes = "[JSON]List<MesProdRuleNoSortContext>")
Boolean saveProdRuleNosortDataContext(StationRequestBean reqBean, List<MesProdRuleNoSortContext> prodRuleNoSortContextList);
@ApiOperation(value = "保存上下文产品加工规则信息集合", notes = "[JSON]List<MesProdRuleContext>")
Boolean saveProdRuleDataContext(StationRequestBean reqBean, List<MesProdRuleContext> prodRuleContextList);
@ApiOperation(value = "删除上下文非排序产品加工规则信息集合")
void deleteProdRuleNosortDataContext(StationRequestBean reqBean);
@ApiOperation(value = "删除上下文产品加工规则信息集合")
void deleteProdRuleDataContext(StationRequestBean reqBean);
}

@ -30,6 +30,9 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "获取工序工艺信息")
MesProductionProcessContext processContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
@ApiOperation(value = "获取finishCode码")
MesProductionProcessContext finishCodeContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
@ApiOperation(value = "验证组织模型有效性")
MesProductionProcessContext checkBaseData(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);

@ -1,33 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkModel;
import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkReturnModel;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-29 10:37
* @Modify:
**/
public interface IWriteOPCEquipmentService {
@ApiOperation(value = "查询工单")
ResultBean doOPCEquipment(List<Map<String, Object>> listData,String xmlString);
@ApiOperation(value = "writeVariableHttp")
String writeVariableHttp(String equipmentId,String channel,String clientHandle,String v, String wsUrl)throws Exception;
@ApiOperation(value = "写值")
MesOpcLinkReturnModel writeVariable(MesOpcLinkModel mesOpcLinkModel);
@ApiOperation(value = "读取")
MesOpcLinkReturnModel readVariable(MesOpcLinkModel mesOpcLinkModel);
}

@ -1,8 +1,8 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.opc;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IWriteOPCEquipmentService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkModel;
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwModel;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
@ -14,27 +14,20 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description :opc
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/6/3 10:24
* @Modify:
**/
@RestController
@Api(tags = "opc")
@Api(tags = "设备数据变量读写API")
@RequestMapping(MesCommonConstant.MES_YANFEN + "/opc")
@Slf4j
public class MesOpcLinkController {
public class MesEquipVariableRwExtController {
@Autowired
private IWriteOPCEquipmentService iWriteOPCEquipmentService;
private IMesEquipVariableRwExtService equipVariableRwExtService;
@PostMapping("/write-variable")
@ApiOperation(value = "写值")
public ResultBean writeVariable(MesOpcLinkModel mesOpcLinkModel) {
public ResultBean writeVariable(MesEquipVariableRwModel mesOpcLinkModel) {
try {
return ResultBean.success("执行成功").setResultObject(iWriteOPCEquipmentService.writeVariable(mesOpcLinkModel));
return ResultBean.success("操作成功").setResultObject(equipVariableRwExtService.writeVariable(mesOpcLinkModel));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
@ -44,9 +37,9 @@ public class MesOpcLinkController {
@PostMapping("/read-variable")
@ApiOperation(value = "读值")
public ResultBean readVariable(MesOpcLinkModel mesOpcLinkModel) {
public ResultBean readVariable(MesEquipVariableRwModel mesOpcLinkModel) {
try {
return ResultBean.success("执行成功").setResultObject(iWriteOPCEquipmentService.readVariable(mesOpcLinkModel));
return ResultBean.success("读取成功").setResultObject(equipVariableRwExtService.readVariable(mesOpcLinkModel));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
@ -8,8 +9,10 @@ import cn.estsh.i3plus.pojo.mes.repository.MesMouldMultiCavityRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@ -26,4 +29,14 @@ public class MesMouldMultiCavityService implements IMesMouldMultiCavityService {
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.EQUIPMENT_CODE, MesPcnExtConstWords.MOULD_NO},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), equipmentCode, mouldNo});
}
@Override
public List<MesProductionPartContext> getProductionPartList(String organizeCode, String equipmentCode, String mouldNo) {
List<MesMouldMultiCavity> mouldMultiCavityList = getMouldMultiCavityList(organizeCode, equipmentCode, mouldNo);
if (CollectionUtils.isEmpty(mouldMultiCavityList)) return null;
List<MesProductionPartContext> productionPartContextList = new ArrayList<>();
mouldMultiCavityList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyMouldMultiCavity(o)));
return productionPartContextList;
}
}

@ -72,7 +72,7 @@ public class MesProdOrgExtService implements IMesProdOrgExtService {
MesWorkCellExtendCfg workCellExtendCfg = getWorkCellExtendCfg(organizeCode, workCenterCodeBak, workCellCodeBak, MesExtEnumUtil.WORK_CELL_EXTEND_TYPE.RV.getValue());
if (null == workCellCodeBak) return null;
List<MesWorkCellExtendCfg> workCellExtendCfgList = getWorkCellExtendCfgList(organizeCode, workCellExtendCfg.getWorkCenterCode(), workCellExtendCfg.getWorkCellCode(), MesExtEnumUtil.WORK_CELL_EXTEND_TYPE.RV.getValue());
List<MesWorkCellExtendCfg> workCellExtendCfgListAfter = workCellExtendCfgList.stream().filter(o -> (null != o && workCellExtendCfg.getId().compareTo(o.getId()) != 0 && workCellExtendCfg.getSeq().compareTo(o.getSeq()) <= 0)).sorted(Comparator.comparing(MesWorkCellExtendCfg::getSeq)).collect(Collectors.toList());
List<MesWorkCellExtendCfg> workCellExtendCfgListAfter = workCellExtendCfgList.stream().filter(o -> (null != o && workCellExtendCfg.getSeq().compareTo(o.getSeq()) <= 0)).sorted(Comparator.comparing(MesWorkCellExtendCfg::getSeq)).collect(Collectors.toList());
List<MesWorkCellExtendCfg> workCellExtendCfgListBefore = workCellExtendCfgList.stream().filter(o -> (null != o && workCellExtendCfg.getSeq().compareTo(o.getSeq()) > 0)).sorted(Comparator.comparing(MesWorkCellExtendCfg::getSeq)).collect(Collectors.toList());
workCellExtendCfgList = new ArrayList<>();
workCellExtendCfgList.addAll(workCellExtendCfgListAfter);

@ -1,13 +1,16 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesAssemblyNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly;
import cn.estsh.i3plus.pojo.mes.repository.MesAssemblyNosortCfgRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderAssemblyRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
@ -32,44 +35,47 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
@Autowired
private MesProductionAssemblyRepository productionAssemblyRepository;
@Autowired
private MesAssemblyNosortCfgRepository assemblyNosortCfgRepository;
//【排序线】获取生产工单装配件绑定记录
@Override
public List<MesProductionAssemblyContext> getProductionAssemblySortContextList(MesProductionAssemblySortContext productionAssemblySortContext, List<String> workOrderNoList) {
public List<MesProductionAssemblySortContext> getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext, List<String> workOrderNoList) {
if (null == productionAssemblySortContext || CollectionUtils.isEmpty(workOrderNoList)) return null;
if (null == prodRuleContext || CollectionUtils.isEmpty(workOrderNoList)) return null;
if (StringUtils.isEmpty(productionAssemblySortContext.getOrganizeCode()) || StringUtils.isEmpty(productionAssemblySortContext.getWorkCenterCode()) ||
StringUtils.isEmpty(productionAssemblySortContext.getWorkCellCode()) || StringUtils.isEmpty(productionAssemblySortContext.getProcessCode())) return null;
if (StringUtils.isEmpty(prodRuleContext.getOrganizeCode()) || StringUtils.isEmpty(prodRuleContext.getWorkCenterCode()) ||
StringUtils.isEmpty(prodRuleContext.getWorkCellCode()) || StringUtils.isEmpty(prodRuleContext.getProcessCode())) return null;
//【排序线】获取生产工单装配件清单
List<MesWorkOrderAssembly> workOrderAssemblyList = getWorkOrderAssemblyList(productionAssemblySortContext, workOrderNoList);
List<MesWorkOrderAssembly> workOrderAssemblyList = getWorkOrderAssemblyList(prodRuleContext, workOrderNoList);
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null;
//获取装配件绑定记录
Map<Long, MesProductionAssembly> productionAssemblyMap = groupProductionAssembly(filterProductionAssemblyList(getProductionAssemblyList(
productionAssemblySortContext.dataSource(MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.SORT.getValue()), workOrderAssemblyList.stream().filter(o -> null != o).map(MesWorkOrderAssembly::getId).collect(Collectors.toList()))));
prodRuleContext.getOrganizeCode(), MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.SORT.getValue(), workOrderAssemblyList.stream().filter(o -> null != o).map(MesWorkOrderAssembly::getId).collect(Collectors.toList()))));
List<MesProductionAssemblyContext> productionAssemblyContextList = new ArrayList<>();
List<MesProductionAssemblySortContext> productionAssemblySortContextList = new ArrayList<>();
workOrderAssemblyList.forEach(o -> productionAssemblyContextList.add(new MesProductionAssemblySortContext(o, getProductionAssembly(productionAssemblyMap, o.getId()))));
workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext(o, getProductionAssembly(productionAssemblyMap, o.getId()))));
return productionAssemblyContextList;
return productionAssemblySortContextList;
}
//【排序线】获取生产工单装配件清单
@Override
public List<MesWorkOrderAssembly> getWorkOrderAssemblyList(MesProductionAssemblySortContext productionAssemblySortContext, List<String> workOrderNoList) {
public List<MesWorkOrderAssembly> getWorkOrderAssemblyList(MesProdRuleContext prodRuleContext, List<String> workOrderNoList) {
if (null == productionAssemblySortContext || CollectionUtils.isEmpty(workOrderNoList)) return null;
if (null == prodRuleContext || CollectionUtils.isEmpty(workOrderNoList)) return null;
if (StringUtils.isEmpty(productionAssemblySortContext.getOrganizeCode()) || StringUtils.isEmpty(productionAssemblySortContext.getWorkCenterCode()) ||
StringUtils.isEmpty(productionAssemblySortContext.getWorkCellCode()) || StringUtils.isEmpty(productionAssemblySortContext.getProcessCode())) return null;
if (StringUtils.isEmpty(prodRuleContext.getOrganizeCode()) || StringUtils.isEmpty(prodRuleContext.getWorkCenterCode()) ||
StringUtils.isEmpty(prodRuleContext.getWorkCellCode()) || StringUtils.isEmpty(prodRuleContext.getProcessCode())) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(productionAssemblySortContext.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(productionAssemblySortContext.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getStringEqualPack(productionAssemblySortContext.getWorkCellCode(), MesPcnExtConstWords.WORK_CELL_CODE, packBean);
DdlPreparedPack.getStringEqualPack(productionAssemblySortContext.getProcessCode(), MesPcnExtConstWords.PROCESS_CODE, packBean);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(prodRuleContext.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(prodRuleContext.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getStringEqualPack(prodRuleContext.getWorkCellCode(), MesPcnExtConstWords.WORK_CELL_CODE, packBean);
DdlPreparedPack.getStringEqualPack(prodRuleContext.getProcessCode(), MesPcnExtConstWords.PROCESS_CODE, packBean);
if (workOrderNoList.size() == 1) DdlPreparedPack.getStringEqualPack(workOrderNoList.get(0), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
else DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
@ -79,15 +85,12 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
//获取装配件绑定记录
@Override
public List<MesProductionAssembly> getProductionAssemblyList(MesProductionAssemblyContext productionAssemblyContext, List<Long> sourceIdList) {
if (null == productionAssemblyContext || CollectionUtils.isEmpty(sourceIdList)) return null;
public List<MesProductionAssembly> getProductionAssemblyList(String organizeCode, Integer dataSource, List<Long> sourceIdList) {
if (StringUtils.isEmpty(productionAssemblyContext.getOrganizeCode()) || StringUtils.isEmpty(productionAssemblyContext.getDataSource())) return null;
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(dataSource) || CollectionUtils.isEmpty(sourceIdList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(productionAssemblyContext.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(productionAssemblyContext.getDataSource(), MesPcnExtConstWords.ASSEMBLY_STATUS, packBean);
DdlPreparedPack.getNumEqualPack(productionAssemblyContext.getDataSource(), MesPcnExtConstWords.DATD_SOURCE, packBean);
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);
@ -95,6 +98,39 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
}
//获取非排序装配件配置信息
@Override
public List<MesProductionAssemblyNosortContext> getProductionAssemblyNosortContextList(String organizeCode, Long... pids) {
if (StringUtils.isEmpty(organizeCode) || null == pids) return null;
//获取非排序装配件配置信息
List<MesAssemblyNosortCfg> assemblyNosortCfgList = getAssemblyNosortCfgList(organizeCode, pids);
if (CollectionUtils.isEmpty(assemblyNosortCfgList)) return null;
//获取装配件绑定记录
Map<Long, MesProductionAssembly> productionAssemblyMap = groupProductionAssembly(filterProductionAssemblyList(getProductionAssemblyList(
organizeCode, MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.NOSORT.getValue(), assemblyNosortCfgList.stream().filter(o -> null != o).map(MesAssemblyNosortCfg::getId).collect(Collectors.toList()))));
List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList = new ArrayList<>();
assemblyNosortCfgList.forEach(o -> productionAssemblyNosortContextList.add(new MesProductionAssemblyNosortContext(o, getProductionAssembly(productionAssemblyMap, o.getId()))));
return productionAssemblyNosortContextList;
}
//获取非排序装配件配置信息
@Override
public List<MesAssemblyNosortCfg> getAssemblyNosortCfgList(String organizeCode, Long... pids) {
if (StringUtils.isEmpty(organizeCode) || null == pids) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (pids.length == 1) DdlPreparedPack.getNumEqualPack(pids[0], MesPcnExtConstWords.PID, packBean);
else DdlPreparedPack.getInPackArray(pids, MesPcnExtConstWords.PID, packBean);
return assemblyNosortCfgRepository.findByHqlWhere(packBean);
}
//剔除解绑的数据
private List<MesProductionAssembly> filterProductionAssemblyList(List<MesProductionAssembly> productionAssemblyList) {
return CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().filter(o -> (null != o && MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_20.getValue() != o.getAssemblyStatus())).collect(Collectors.toList());
@ -105,10 +141,9 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
return CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProductionAssembly::getSourceId, o -> o));
}
//根据生产工单装配件清单ID获取装配件绑定记录
//根据装配件清单ID获取装配件绑定记录
private MesProductionAssembly getProductionAssembly(Map<Long, MesProductionAssembly> productionAssemblyMap, Long id) {
return CollectionUtils.isEmpty(productionAssemblyMap) ? null : productionAssemblyMap.get(id);
}
}

@ -0,0 +1,94 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProdRuleCfgExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import cn.estsh.i3plus.pojo.mes.repository.MesProdRuleNoSortCfgRepository;
import lombok.extern.slf4j.Slf4j;
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;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service
public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService {
@Autowired
private IMesAssemblyExtService assemblyExtService;
@Autowired
private MesProdRuleNoSortCfgRepository prodRuleNoSortCfgRepository;
//【排序线】获取加工规则(生产工单对应的装配件绑定记录)
@Override
public List<MesProdRuleContext> getProdRuleSortContextList(MesProdRuleContext prodRuleContext, List<MesProductionPartContext> productionPartContextList) {
//【排序线】获取生产工单装配件绑定记录
List<MesProductionAssemblySortContext> productionAssemblySortContextList = assemblyExtService.getProductionAssemblySortContextList(prodRuleContext, productionPartContextList.stream().filter(o -> null != o).map(MesProductionPartContext::getWorkOrderNo).collect(Collectors.toList()));
//装配件绑定记录根据生产工单分组
Map<String, List<MesProductionAssemblySortContext>> assemblyDataMap = groupProductionAssemblySortContextList(productionAssemblySortContextList);
//实例化排序线加工规则与装配件数据记录
List<MesProdRuleContext> prodRuleContextList = new ArrayList<>();
productionPartContextList.forEach(o -> prodRuleContextList.add(createSortProdRuleContext(o, assemblyDataMap)));
return prodRuleContextList;
}
//装配件绑定记录根据生产工单分组
private Map<String, List<MesProductionAssemblySortContext>> groupProductionAssemblySortContextList(List<MesProductionAssemblySortContext> productionAssemblySortContextList) {
return CollectionUtils.isEmpty(productionAssemblySortContextList) ? null :
productionAssemblySortContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionAssemblySortContext::getWorkOrderNo));
}
//实例化排序线加工规则与装配件数据记录
private MesProdRuleContext createSortProdRuleContext(MesProductionPartContext productionPartContext, Map<String, List<MesProductionAssemblySortContext>> assemblyDataMap) {
MesProdRuleContext prodRuleContext = new MesProdRuleContext(productionPartContext.getOrganizeCode()).foreignKey(productionPartContext.getForeignKey());
if (!CollectionUtils.isEmpty(assemblyDataMap)) prodRuleContext.assemblyDataJson(assemblyDataMap.get(productionPartContext.getWorkOrderNo()));
return prodRuleContext;
}
//【非排序线】获取产品加工规则
@Override
public List<MesProdRuleNosortCfg> getProdRuleNosortCfgList(MesProdRuleContext prodRuleContext) {
if (StringUtils.isEmpty(prodRuleContext.getOrganizeCode()) || StringUtils.isEmpty(prodRuleContext.getEquipmentCode())) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(prodRuleContext.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(prodRuleContext.getEquipmentCode(), MesPcnExtConstWords.EQUIPMENT_CODE, packBean);
DdlPreparedPack.getStringEqualPack(prodRuleContext.getOutPartNo(), MesPcnExtConstWords.OUT_PART_NO, packBean);
if (prodRuleContext.getInPartNoIsEmpty()) DdlPreparedPack.getIsNull(MesPcnExtConstWords.IN_PART_NO, packBean);
else DdlPreparedPack.getStringEqualPack(prodRuleContext.getInPartNo(), MesPcnExtConstWords.IN_PART_NO, packBean);
if (prodRuleContext.getInPartNoRuleIsEmpty()) DdlPreparedPack.getIsNull(MesPcnExtConstWords.IN_PART_NO_RULE, packBean);
else DdlPreparedPack.getIsNotNull(MesPcnExtConstWords.IN_PART_NO_RULE, packBean);
return prodRuleNoSortCfgRepository.findByHqlWhere(packBean);
}
//【非排序线】获取产品加工规则对应的装配件信息
@Override
public MesProdRuleContext getProdRuleContext(MesProdRuleNosortCfg prodRuleNosortCfg, MesProductionPartContext productionPartContext) {
MesProdRuleContext prodRuleContext = new MesProdRuleContext().foreignKey(productionPartContext.getForeignKey()).pid(prodRuleNosortCfg.getId());
BeanUtils.copyProperties(prodRuleNosortCfg, prodRuleContext);
//获取非排序装配件配置信息
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == prodRuleContext.getIsHasBind()) prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblyNosortContextList(prodRuleContext.getOrganizeCode(), prodRuleContext.getPid()));
return prodRuleContext;
}
}

@ -0,0 +1,56 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
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;
@Slf4j
@Service
public class MesProduceSnExtService implements IMesProduceSnExtService {
@Autowired
private MesProduceSnRepository produceSnRepository;
//根据零件条码查询零件条码信息
@Override
public List<MesProduceSn> getProduceSnList(String organizeCode, List<String> productSnList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(productSnList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (productSnList.size() == 1) DdlPreparedPack.getStringEqualPack(productSnList.get(0), MesPcnExtConstWords.PRODUCT_SN, packBean);
else DdlPreparedPack.getInPackList(productSnList.stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()), MesPcnExtConstWords.PRODUCT_SN, packBean);
//根据创建时间倒叙查询零件条码
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean);
return distinctProduceSnList(produceSnRepository.findByHqlWhere(packBean));
}
private List<MesProduceSn> distinctProduceSnList(List<MesProduceSn> produceSnDataList) {
return CollectionUtils.isEmpty(produceSnDataList) ? null :
produceSnDataList.stream().filter(o -> null != o).distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesProduceSn::getProductSn))), ArrayList::new));
}
//根据零件条码查询零件条码信息
@Override
public Map<String, MesProduceSn> getProduceSnMap(String organizeCode, List<String> productSnList) {
return groupProduceSnList(getProduceSnList(organizeCode, productSnList));
}
private Map<String, MesProduceSn> groupProduceSnList(List<MesProduceSn> produceSnDataList) {
return CollectionUtils.isEmpty(produceSnDataList) ? null : produceSnDataList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProduceSn::getProductSn, o -> o));
}
}

@ -0,0 +1,118 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
import cn.estsh.i3plus.platform.common.tool.HttpClientTool;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwModel;
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult;
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.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service
public class MesEquipmentRwExtServiceImpl implements IMesEquipVariableRwExtService {
@Autowired
private IConfigService configService;
@Override
public MesEquipVariableRwModel getRwRequestUrl(MesEquipVariableRwModel equipVariableRwModel) {
if (StringUtils.isEmpty(equipVariableRwModel.getOrganizeCode())) return equipVariableRwModel;
//根据cfgCode查询缓存的配置数据
List<MesConfig> configList = configService.doCachedConfigList(MesPcnExtConstWords.EQUIP_VARIABLE_RW_CFG, equipVariableRwModel.getOrganizeCode());
//根据设备标识分组
Map<String, List<MesConfig>> requestUrlMap = getConfigMap(configList, MesPcnExtConstWords.KEPWARE_FLAG_CFG);
//根据读写标志分组
Map<String, List<MesConfig>> rwApiMap = getConfigMap(configList, MesPcnExtConstWords.RW_API_CFG);
if (CollectionUtils.isEmpty(requestUrlMap) || CollectionUtils.isEmpty(rwApiMap)) return equipVariableRwModel;
if (!rwApiMap.containsKey(MesExtEnumUtil.READ_WRITE_FLAG.READ.getValueStr()) || !rwApiMap.containsKey(MesExtEnumUtil.READ_WRITE_FLAG.WRITE.getValueStr())) return equipVariableRwModel;
List<MesConfig> requestUrlList = (StringUtils.isEmpty(equipVariableRwModel.getKepwareFlag()) || !requestUrlMap.containsKey(equipVariableRwModel.getKepwareFlag())) ? requestUrlMap.get(MesPcnExtConstWords.DEFAULT_URL) : requestUrlMap.get(equipVariableRwModel.getKepwareFlag());
if (CollectionUtils.isEmpty(requestUrlList)) return equipVariableRwModel;
//赋值读/写访问地址
return equipVariableRwModel.readRequestUrl(requestUrlList.get(0).getCfgValue() + rwApiMap.get(MesExtEnumUtil.READ_WRITE_FLAG.READ.getValueStr()).get(0).getCfgValue()).
writeRequestUrl(requestUrlList.get(0).getCfgValue() + rwApiMap.get(MesExtEnumUtil.READ_WRITE_FLAG.WRITE.getValueStr()).get(0).getCfgValue());
}
private Map<String, List<MesConfig>> getConfigMap(List<MesConfig> configList, String cfgType) {
List<MesConfig> filterList = CollectionUtils.isEmpty(configList) ? null :
configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgType()) && !StringUtils.isEmpty(o.getCfgKey()) && o.getCfgType().equals(MesPcnExtConstWords.RW_API_CFG))).collect(Collectors.toList());
return CollectionUtils.isEmpty(filterList) ? null : filterList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesConfig::getCfgKey));
}
@Override
public MesEquipVariableRwResult writeVariable(MesEquipVariableRwModel equipVariableRwModel) {
MesEquipVariableRwResult result = checkBefore(equipVariableRwModel);
if (!result.getIsSuccessed()) return result;
if (StringUtils.isEmpty(equipVariableRwModel.getValue())) return new MesEquipVariableRwResult(false).message("入参缺失必要参数[value]!");
Map<String, String> params = new HashMap<>();
params.put(MesPcnExtConstWords.VALUE, equipVariableRwModel.getValue());
params.put(MesPcnExtConstWords.CLIENT_HANDLE, equipVariableRwModel.getClientHandle());
params.put(MesPcnExtConstWords.CHANNEL, equipVariableRwModel.getChannel());
params.put(MesPcnExtConstWords.EQUIPMENT_ID, equipVariableRwModel.getEquipId());
String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, equipVariableRwModel.getWriteRequestUrl(), params, null, null);
if (!StringUtils.isEmpty(data)) return JsonUtilTool.decode(data, MesEquipVariableRwResult.class);
else return result.isSuccessed(false).message(String.format("设备数据变量写值失败! 数据信息:[%s]", JSONObject.toJSONString(equipVariableRwModel)));
}
private MesEquipVariableRwResult checkBefore(MesEquipVariableRwModel equipVariableRwModel) {
if (null == equipVariableRwModel) return new MesEquipVariableRwResult(false).message("入参为空!");
if (StringUtils.isEmpty(equipVariableRwModel.getOrganizeCode()) || StringUtils.isEmpty(equipVariableRwModel.getChannel()) || StringUtils.isEmpty(equipVariableRwModel.getEquipId()) || StringUtils.isEmpty(equipVariableRwModel.getClientHandle()))
return new MesEquipVariableRwResult(false).message("入参缺失必要参数,请检查参数[organizeCode][channel][equipId][clientHandle]是否缺失!");
if (StringUtils.isEmpty(equipVariableRwModel.getWriteRequestUrl()) || StringUtils.isEmpty(equipVariableRwModel.getReadRequestUrl())) getRwRequestUrl(equipVariableRwModel);
if (StringUtils.isEmpty(equipVariableRwModel.getWriteRequestUrl()) || StringUtils.isEmpty(equipVariableRwModel.getReadRequestUrl()))
return new MesEquipVariableRwResult(false).message(String.format("工厂[%s]缺失系统配置信息[%s]!", equipVariableRwModel.getOrganizeCode(), MesPcnExtConstWords.EQUIP_VARIABLE_RW_CFG));
return new MesEquipVariableRwResult(true);
}
@Override
public MesEquipVariableRwResult readVariable(MesEquipVariableRwModel equipVariableRwModel) {
MesEquipVariableRwResult result = checkBefore(equipVariableRwModel);
if (!result.getIsSuccessed()) return result;
Map<String, String> params = new HashMap<>();
params.put(MesPcnExtConstWords.CLIENT_HANDLE, equipVariableRwModel.getClientHandle());
params.put(MesPcnExtConstWords.CHANNEL, equipVariableRwModel.getChannel());
params.put(MesPcnExtConstWords.EQUIPMENT_ID, equipVariableRwModel.getEquipId());
String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, equipVariableRwModel.getReadRequestUrl(), params, null, null);
if (!StringUtils.isEmpty(data)) return JsonUtilTool.decode(data, MesEquipVariableRwResult.class);
else return result.isSuccessed(false).message(String.format("设备数据变量读值失败! 数据信息:[%s]", JSONObject.toJSONString(equipVariableRwModel)));
}
}

@ -1,240 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IWriteOPCEquipmentService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
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.util.datatable.DataColumnCollection;
import cn.estsh.i3plus.platform.common.tool.HttpClientTool;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.WmsEnumUtil;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkModel;
import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkReturnModel;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.hutool.json.XML;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @Description : WriteOPCEquipmentServiceImpl
* @Author :gsz
* @Date 2024/5/29 10:48
* @Modify
**/
@Slf4j
@Service("WriteOPCEquipmentServiceImpl")
public class WriteOPCEquipmentServiceImpl implements IWriteOPCEquipmentService {
@Autowired
private IConfigService configService;
@Override
public ResultBean doOPCEquipment(List<Map<String, Object>> listData,String xmlString) {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
// headers.setContentType(MediaType.APPLICATION_JSON_UTF8); //application/soap+xml;charset=UTF-8
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
cn.hutool.json.JSONObject jsonObjectParam = XML.toJSONObject(xmlString);
String content = jsonObjectParam.toString();
HttpEntity<String> request = new HttpEntity<>(content, headers);
String url = String.format("http://172.28.16.50:8111/WriteOPCEquipmentService" );
ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);
if (response.getStatusCode().is2xxSuccessful()) {
String bodyJson = response.getBody();
JSONObject jsonObject = JSON.parseObject(bodyJson);
if ("0" == jsonObject.getString("code")) {
return new ResultBean(WmsEnumUtil.RC_RESPONSE_TIPS.OK.getCodeStatus(),
"OK");
} else {
throw new ImppBusiException(String.format("Error message【%s】", jsonObject.getString("message")));
}
} else {
throw new ImppBusiException(String.format("Error Code %s", response.getStatusCode().toString()));
}
}
@Override
public String writeVariableHttp(String equipmentId,String channel,String clientHandle,String v, String wsUrl)throws Exception{
//服务的地址 http://172.28.16.50:8111
wsUrl="http://172.28.16.50:8111";
URL url = new URL(wsUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
//请求体---使用soapui获取
StringBuffer sb = new StringBuffer();
sb.append("<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:tem=\"http://tempuri.org/\">");
sb.append("<soap:Header>");
sb.append("<a:To s:mustUnderstand=\"1\" xmlns:s=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:a=\"http://www.w3.org/2005/08/addressing\">http://172.28.16.50:8111/WriteOPCEquipmentService</a:To>\n");
sb.append("</soap:Header>");
sb.append("<soap:Body>");
sb.append("<tem:WriteVariable>");
sb.append("<tem:equipmentId>"+equipmentId+"</tem:equipmentId>");
sb.append("<tem:channel>"+channel+"</tem:channel>");
sb.append("<tem:clientHandle>"+clientHandle+ "</tem:clientHandle>");
sb.append("<tem:v>"+v+"</tem:v>");
sb.append("</tem:WriteVariable>");
sb.append("</soap:Body>");
sb.append("</soap:Envelope>");
String soap = sb.toString();
conn.connect();
OutputStream os = conn.getOutputStream();
os.write(soap.getBytes("UTF-8"));
InputStream is = conn.getInputStream();
byte[] b = new byte[1024];
int len = 0;
String s = "";
while ((len = is.read(b)) != -1) {
String ss = new String(b, 0, len, "UTF-8");
s += ss;
}
is.close();
os.close();
conn.disconnect();
return s;
}
@Override
public MesOpcLinkReturnModel writeVariable(MesOpcLinkModel mesOpcLinkModel) {
MesConfig mesConfigByCfgCode = configService.getMesConfigByCfgCode(MesPcnExtConstWords.OPC_LINK_URL);
if (Objects.isNull(mesConfigByCfgCode) || StringUtil.isEmpty(mesConfigByCfgCode.getCfgValue())) {
MesPcnException.throwFlowException("系统参数【%s】未维护",MesPcnExtConstWords.OPC_LINK_URL);
}
String requestUrl = mesConfigByCfgCode.getCfgValue() + MesPcnExtConstWords.OPC_WRITE_VARIABLE;
Map<String, String> params = new HashMap<>();
params.put(MesPcnExtConstWords.VALUE, mesOpcLinkModel.getValue());
params.put(MesPcnExtConstWords.CLIENT_HANDLE, mesOpcLinkModel.getClientHandle());
params.put(MesPcnExtConstWords.CHANNEL, mesOpcLinkModel.getChannel());
params.put(MesPcnExtConstWords.EQUIPMENT_ID, mesOpcLinkModel.getEquipmentId());
String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, requestUrl, params, null, null);
MesOpcLinkReturnModel returnModel = null;
if (!StringUtils.isEmpty(data)) {
returnModel = JsonUtilTool.decode(data, MesOpcLinkReturnModel.class);
} else {
log.error("HTTP[{}]调用opcLink写值接口失败", requestUrl);
}
return returnModel;
}
@Override
public MesOpcLinkReturnModel readVariable(MesOpcLinkModel mesOpcLinkModel) {
MesConfig mesConfigByCfgCode = configService.getMesConfigByCfgCode(MesPcnExtConstWords.OPC_LINK_URL);
if (Objects.isNull(mesConfigByCfgCode) || StringUtil.isEmpty(mesConfigByCfgCode.getCfgValue())) {
MesPcnException.throwFlowException("系统参数【%s】未维护",MesPcnExtConstWords.OPC_LINK_URL);
}
String requestUrl = mesConfigByCfgCode.getCfgValue() + MesPcnExtConstWords.OPC_READ_VARIABLE;
Map<String, String> params = new HashMap<>();
params.put(MesPcnExtConstWords.VALUE, mesOpcLinkModel.getValue());
params.put(MesPcnExtConstWords.CLIENT_HANDLE, mesOpcLinkModel.getClientHandle());
params.put(MesPcnExtConstWords.CHANNEL, mesOpcLinkModel.getChannel());
params.put(MesPcnExtConstWords.EQUIPMENT_ID, mesOpcLinkModel.getEquipmentId());
String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, requestUrl, params, null, null);
MesOpcLinkReturnModel returnModel = null;
if (!StringUtils.isEmpty(data)) {
returnModel = JsonUtilTool.decode(data, MesOpcLinkReturnModel.class);
} else {
log.error("HTTP[{}]调用opcLink读取接口失败", requestUrl);
}
return returnModel;
}
private String convertListToXml(DataColumnCollection newTable, List<Map<String, Object>> listData, String rootNodeName, String nodeName,
String rootClassName, String nodeClassName) {
if (listData == null || listData.size() == 0) {
throw new RuntimeException("listData is null ! ");
}
StringBuilder sb = new StringBuilder();
if (rootNodeName != null && !rootNodeName.isEmpty() && rootClassName != null && !rootClassName.isEmpty()) {
sb.append(String.format("<%s class=\"%s\">\n", rootNodeName, rootClassName));
}
for (Map<String, Object> row : listData) {
// 子节点的类名可能为空,这种情况下不需要填充类名
if (StringUtils.isEmpty(nodeClassName)) {
sb.append(String.format("<%s>\n", nodeName));
} else {
sb.append(String.format("<%s class=\"%s\">\n", nodeName, nodeClassName));
}
newTable.forEach( s ->
sb.append(String.format("<%s>%s</%s>\n", s, row.get(s.getColumnName()), s))
);
sb.append(String.format("</%s>\n", nodeName));
}
if (rootNodeName != null && !rootNodeName.isEmpty()) {
sb.append(String.format("</%s>\n", rootNodeName));
}
return sb.toString();
}
// private HashMap<String,String> getData(String serviceCode, String xmlPara){
// HashMap<String,String> res = new HashMap<>();
// String endpoint = "http://124.205.248.2:8080/eSales/esales.asmx?WSDL";
// PostMethod postMethod = new PostMethod(endpoint);
// byte[] b;
// try {
// b = xmlPara.getBytes("utf-8");
// InputStream is = new ByteArrayInputStream(b,0,b.length);
// RequestEntity re = new InputStreamRequestEntity(is,b.length,"application/soap+xml; charset=utf-8");
// //把Soap请求数据添加到PostMethod中
// postMethod.setRequestEntity(re);
//
// //生成一个HttpClient对象并发出postMethod请求
// HttpClient httpClient = new HttpClient();
// int statusCode = httpClient.executeMethod(postMethod);
// if(200==statusCode){
// String getServerData = postMethod.getResponseBodyAsString();
// //System.out.println("----->"+getServerData);
// //获取返回值状态标识标识为0成功非0失败
// res.put("status", "0");
// res.put("msg", msg);
// }
// } catch (Exception e) {
// res.put("status", "1");
// res.put("msg", e.toString());
// e.printStackTrace();
// }
// return res;
// }
}

@ -36,7 +36,7 @@
// resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT);
// resultBean.setSpecialDisplayData(getStepColIndent(reqBean));
// resultBean.setResultObj(StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean("shiftCode", "班次", "白班"), new StationKvBean("shiftGroup", "班组", "注塑")));
// resultBean.setResultList(productionProcessContextStepService.getCachedModuleContext(reqBean));
// resultBean.setResultList(productionProcessContextStepService.getModuleContentContext(reqBean));
//
// this.sendMessage(reqBean, resultBean);
// }

@ -131,14 +131,14 @@ public class MesAssemblyReadStepService extends BaseStepService {
//未采集到数据
if (!equipLogDispatchContext.getIsCollectValue())
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]装配件条码,持续监听中...", cellEquipContext.getEquipmentCode()));
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]装配件条码,持续监听中...", cellEquipContext.getEquipmentCode()));
//读取的装配件进行规则匹配
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.ASSEMBLY.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
//没有有效的数据
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的装配件条码,持续监听中...", cellEquipContext.getEquipmentCode()));
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的装配件条码,持续监听中...", cellEquipContext.getEquipmentCode()));
//保存设备当前一轮工序待验证的装配件条码信息
productionDispatchContextStepService.saveScanAssemblySnContext(reqBean, equipVariableCollectContextList);

@ -1,156 +1,202 @@
//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.pojo.context.*;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
//import cn.estsh.i3plus.mes.pcn.util.LocaleUtil;
//import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil;
//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
//import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
//import cn.estsh.i3plus.pojo.mes.model.AttrBean;
//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.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.Comparator;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
///**
// * @Description : 显示装配件扫描项工步【非排序】
// * @Author : wangjie
// **/
//@Slf4j
//@Service("mesAssemblyShowNosortStepService")
//public class MesAssemblyShowNosortStepService extends BaseStepService {
//
// @Autowired
// private IMesProductionProcessContextStepService productionProcessContextStepService;
//
// @Autowired
// private IMesProductionDispatchContextStepService productionDispatchContextStepService;
//
// @Autowired
// private IMesAssemblyExtService assemblyExtService;
//
// @Override
// public StepResult execute(StationRequestBean reqBean) {
//
// StationResultBean resultBean = new StationResultBean();
//
// StepResult stepResult = StepResult.getSuccessComplete();
//
// //获取上下文信息
// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
//
// //配置错误 抛出异常
// if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//
// //从上下文中取出生产线对象
// MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
//
// //从上下文中取出生产线对象
// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//
// //获取上下文装配件数据信息集合
// List<MesProdRuleNoSortContext> productionAssemblyContextList = productionDispatchContextStepService.getAssemblyDataContext(reqBean, workCenter);
//
// //搜集当前设备对应的装配件数据信息
// productionAssemblyContextList = filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList);
//
// //不存在装配件数据信息则进行查询
// if (CollectionUtils.isEmpty(productionAssemblyContextList)) productionAssemblyContextList = doHandleAssemblyData(reqBean, resultBean, stepResult, cellEquipContext);
//
// if (!stepResult.isCompleted()) return stepResult;
//
// if (CollectionUtils.isEmpty(productionAssemblyContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前未查询到相关的装配件清单");
//
// //显示装配件信息
// showProductionAssembly(reqBean, resultBean, getAssemblyShowContextList(productionAssemblyContextList));
//
// return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "显示装配件扫描项成功!");
//
// }
//
// private List<MesProductionAssemblyContext> doHandleAssemblyData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesCellEquipContext cellEquipContext) {
//
// //从上下文中取出生产工单数据信息集合
// List<MesWorkOrderContext> workOrderContextList = productionDispatchContextStepService.getWorkOrderDataContext(reqBean);
//
// //上下文中不存在生产工单数据信息集合
// if (CollectionUtils.isEmpty(workOrderContextList)) execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]的上下文中已不存在生产工单数据信息,请重新扫描加工单!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
//
// //获取排序线的装配件清单
// List<MesProductionAssemblyContext> productionAssemblyContextList = assemblyExtService.getProductionAssemblySortContextList(
// new MesProductionAssemblySortContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode()), workOrderContextList.stream().filter(o -> null != o).map(MesWorkOrderContext::getWorkOrderNo).collect(Collectors.toList()));
//
// //保存设备当前一轮工序的装配件清单信息
// if (!CollectionUtils.isEmpty(productionAssemblyContextList)) productionDispatchContextStepService.saveAssemblyDataContext(reqBean, productionAssemblyContextList);
//
// return filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList);
//
// }
//
// 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 List<MesAssemblyShowContext> getAssemblyShowContextList(List<MesProductionAssemblyContext> productionAssemblyContextList) {
// List<MesAssemblyShowContext> assemblyShowContextList = new ArrayList<>();
// Map<String, List<MesProductionAssemblyContext>> assemblyMap = productionAssemblyContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionAssemblyContext::getWorkOrderNo));
// for (Map.Entry<String, List<MesProductionAssemblyContext>> entry : assemblyMap.entrySet()) {
// if (null == entry) continue;
// List<MesAssemblyShowContext> itemList = new ArrayList<>();
// for (MesProductionAssemblyContext item : entry.getValue()) {
// if (null == item) continue;
// itemList.add(assemblyShowContext(item));
// }
// itemList = itemList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList());
// assemblyShowContextList.addAll(itemList);
// }
// return assemblyShowContextList;
// }
//
// private void showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, List<MesAssemblyShowContext> assemblyShowContextList) {
// List<AttrBean> attrBeanList = new ArrayList<>();
// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "序号"));
// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "零件编码"));
// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料编码"));
// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NAME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料名称"));
// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_SN, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料条码"));
// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_STATUS_NAME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "是否装配"));
//
// resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue());
// resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue());
// resultBean.setResultList(assemblyShowContextList);
// resultBean.setDataAttrList(attrBeanList);
// this.sendMessage(reqBean, resultBean);
// }
//
// private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext o) {
// MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext();
// BeanUtils.copyProperties(o, assemblyShowContext);
// if (StringUtils.isEmpty(assemblyShowContext.getRouteSeq())) assemblyShowContext.setRouteSeq(MesPcnExtConstWords.ZERO);
// if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() == assemblyShowContext.getAssemblyStatus() && (MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_50.getValue() == assemblyShowContext.getMatchType() ||
// MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_60.getValue() == assemblyShowContext.getMatchType())) assemblyShowContext.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue());
// assemblyShowContext.setAssemblyStatusName(MesExtEnumUtil.ASSEMBLY_STATUS.valueOfDescription(o.getAssemblyStatus()));
// if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() != assemblyShowContext.getAssemblyStatus())
// assemblyShowContext.setColor(StringUtils.isEmpty(assemblyShowContext.getShowColor()) ? MesExtEnumUtil.COLOR.GREEN.getValue() : assemblyShowContext.getShowColor());
// return assemblyShowContext;
// }
//
//
//}
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProdRuleCfgExtService;
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.pojo.context.*;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
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 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.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesAssemblyShowNosortStepService")
public class MesAssemblyShowNosortStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProdRuleCfgExtService prodRuleCfgExtService;
@Autowired
private IMesProduceSnExtService produceSnExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//从上下文中取出生产线对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
//从上下文中取出生产线对象
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//获取上下文加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
//获取上下文产出零件数据信息集合
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//获取上下文读/扫主条码信息集合
List<MesEquipVariableCollectContext> scanProductSnList = productionDispatchContextStepService.getScanProductSnContext(reqBean);
//根据现有数据【产出零件数据】【读/扫主条码信息】比对上下文中已经存在的加工规则数据信息集合, 没有加工规则的数据进行查询
if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = new ArrayList<>();
doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, scanProductSnList);
return stepResult;
}
private void doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext,
List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<MesEquipVariableCollectContext> scanProductSnList) {
//没有【产出零件数据】【读/扫主条码信息】,则直接跳过 【当前场景是直接匹配装配件规则来获取产品加工规则】
if (CollectionUtils.isEmpty(productionPartContextList) && CollectionUtils.isEmpty(scanProductSnList)) return;
//如果已经通过主条码条件获取了产品加工规则数据,如果当前上下文没有【读/扫主条码信息】,则直接跳过
if (!CollectionUtils.isEmpty(prodRuleContextList) && !StringUtils.isEmpty(prodRuleContextList.get(0).getProductSn()) && CollectionUtils.isEmpty(scanProductSnList)) return;
//根据进料条件获取匹配加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则)
if (CollectionUtils.isEmpty(productionPartContextList)) doHandleProdRuleDataByProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, scanProductSnList);
//根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据
else doHandleProdRuleDataByProductionPart(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, scanProductSnList);
}
//根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据
private void doHandleProdRuleDataByProductionPart(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext,
List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<MesEquipVariableCollectContext> scanProductSnList) {
//加工规则的数据已与产出零件的数量一致
if (!CollectionUtils.isEmpty(prodRuleContextList) && prodRuleContextList.size() == productionPartContextList.size()) return;
//已获取的加工规则数据根据关联键分组
Map<String, MesProdRuleContext> prodRuleContextMap = CollectionUtils.isEmpty(prodRuleContextList) ? null : prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProdRuleContext::getForeignKey, o -> o));
//上下文当前存在【读/扫主条码信息】, 后面匹配成功的信息会从scanProductSnList中remove掉,所以需要一个标志判断循环是否结束
Boolean isExistPs = CollectionUtils.isEmpty(scanProductSnList) ? false : true;
for (MesProductionPartContext productionPartContext : productionPartContextList) {
if (null == productionPartContext) continue;
if (StringUtils.isEmpty(productionPartContext.getForeignKey())) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("上下文中的产出零件信息数据异常,缺失数据关联键! 数据详情:[%s]", JSONObject.toJSONString(productionPartContext)));
//当前上下文中的【读/扫主条码信息】已经全部匹配完成
if (isExistPs && CollectionUtils.isEmpty(scanProductSnList)) break;
//当前产出零件已获取过加工规则
if (!CollectionUtils.isEmpty(prodRuleContextMap) && prodRuleContextMap.containsKey(productionPartContext.getForeignKey())) continue;
//根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则)
if (CollectionUtils.isEmpty(scanProductSnList)) doHandleProdRuleDataByProductionPartAndEmptyProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContext);
//根据【读/扫主条码信息】获取匹配当前产出零件的加工规则数据
else doHandleProdRuleDataByProductionPartAndProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContext, scanProductSnList);
}
}
//根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则)
private void doHandleProdRuleDataByProductionPartAndEmptyProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext,
List<MesProdRuleContext> prodRuleContextList, MesProductionPartContext productionPartContext) {
//【非排序线】获取产品加工规则 ; 条件进料[NULL]
List<MesProdRuleNosortCfg> prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).outPartNo(productionPartContext.getPartNo()).inPartNoIsEmpty().inPartNoRuleIsEmpty());
if (CollectionUtils.isEmpty(prodRuleNosortCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查非排序产品加工规则信息,未查询到设备[%s]产出零件[%s]进料零件为空的配置信息", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo()));
if (prodRuleNosortCfgList.size() > 1) return;
//【非排序线】获取产品加工规则对应的装配件信息
MesProdRuleContext prodRuleContext = prodRuleCfgExtService.getProdRuleContext(prodRuleNosortCfgList.get(0), productionPartContext);
prodRuleContextList.add(prodRuleContext);
}
//根据进料条件获取匹配加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则)
private void doHandleProdRuleDataByProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext,
List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> scanProductSnList) {
//查询【读/扫主条码信息】
Map<String, MesProduceSn> produceSnDataMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), scanProductSnList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()));
for (MesEquipVariableCollectContext equipVariableCollectContext : scanProductSnList) {
if (null == equipVariableCollectContext) continue;
MesProduceSn produceSnData = CollectionUtils.isEmpty(produceSnDataMap) ? null : produceSnDataMap.get(equipVariableCollectContext.getEquipVariableValue());
if (null != produceSnData) {}
else {
}
}
//【非排序线】获取产品加工规则
List<MesProdRuleNosortCfg> prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()));
// if (CollectionUtils.isEmpty(prodRuleNosortCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查非排序产品加工规则信息,未查询到设备[%s]产出零件[%s]进料零件为空的配置信息", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo()));
if (prodRuleNosortCfgList.size() > 1) return;
}
//根据【读/扫主条码信息】获取匹配当前产出零件的加工规则数据
private void doHandleProdRuleDataByProductionPartAndProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext,
List<MesProdRuleContext> prodRuleContextList, MesProductionPartContext productionPartContext, List<MesEquipVariableCollectContext> scanProductSnList) {
for (MesEquipVariableCollectContext equipVariableCollectContext : scanProductSnList) {
if (null == equipVariableCollectContext) continue;
}
}
}

@ -1,12 +1,11 @@
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.IMesProdRuleCfgExtService;
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.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.LocaleUtil;
import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
@ -25,7 +24,6 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -43,7 +41,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesAssemblyExtService assemblyExtService;
private IMesProdRuleCfgExtService prodRuleCfgExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -64,82 +62,90 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
//从上下文中取出生产线对象
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//获取上下文装配件数据信息集合
List<MesProductionAssemblyContext> productionAssemblyContextList = productionDispatchContextStepService.getAssemblyDataContext(reqBean, workCenter);
//获取上下文加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
//搜集当前设备对应的装配件数据信息
productionAssemblyContextList = filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList);
//不存在装配件数据信息则进行查询
if (CollectionUtils.isEmpty(productionAssemblyContextList)) productionAssemblyContextList = doHandleAssemblyData(reqBean, resultBean, stepResult, cellEquipContext);
//不存在加工规则数据信息则进行查询
if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = doHandleProdRuleData(reqBean, resultBean, stepResult, cellEquipContext);
if (!stepResult.isCompleted()) return stepResult;
if (CollectionUtils.isEmpty(productionAssemblyContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前未查询到相关的装配件清单");
//显示装配件信息
showProductionAssembly(reqBean, resultBean, getAssemblyShowContextList(productionAssemblyContextList));
if (!showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList))
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前未查询到相关的装配件清单");
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "显示装配件扫描项成功!");
}
private List<MesProductionAssemblyContext> doHandleAssemblyData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesCellEquipContext cellEquipContext) {
//查询排序线加工规则装配件数据信息
private List<MesProdRuleContext> doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesCellEquipContext cellEquipContext) {
//从上下文中取出生产工单数据信息集合
List<MesWorkOrderContext> workOrderContextList = productionDispatchContextStepService.getWorkOrderDataContext(reqBean);
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//上下文中不存在生产工单数据信息集合
if (CollectionUtils.isEmpty(workOrderContextList)) execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]的上下文中已不存在生产工单数据信息,请重新扫描加工单!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
if (CollectionUtils.isEmpty(productionPartContextList)) execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]的上下文中已不存在生产工单数据信息,请重新扫描加工单!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
//获取排序线的装配件清单
List<MesProductionAssemblyContext> productionAssemblyContextList = assemblyExtService.getProductionAssemblySortContextList(
new MesProductionAssemblySortContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode()), workOrderContextList.stream().filter(o -> null != o).map(MesWorkOrderContext::getWorkOrderNo).collect(Collectors.toList()));
List<MesProdRuleContext> prodRuleContextList = prodRuleCfgExtService.getProdRuleSortContextList(new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode()), productionPartContextList);
//保存设备当前一轮工序的装配件清单信息
if (!CollectionUtils.isEmpty(productionAssemblyContextList)) productionDispatchContextStepService.saveAssemblyDataContext(reqBean, productionAssemblyContextList);
if (!CollectionUtils.isEmpty(prodRuleContextList)) productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList);
return filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList);
return prodRuleContextList;
}
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 Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList) {
List<AttrBean> attrBeanList = null;
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
//封装匹配当前设备的装配件信息
List<MesAssemblyShowContext> assemblyShowContextList = getAssemblyShowContextList(cellEquipContext, prodRuleContext.getAssemblyDataContext(workCenter));
if (CollectionUtils.isEmpty(assemblyShowContextList)) continue;
//装配件清单列表标题
if (CollectionUtils.isEmpty(attrBeanList)) attrBeanList = dataAttrList();
//封装多表格
resultBean.addStationResultBeans(new StationResultBean().dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue()).dataAttrList(attrBeanList).resultList(assemblyShowContextList));
}
if (CollectionUtils.isEmpty(resultBean.getStationResultBeans())) return false;
resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue());
this.sendMessage(reqBean, resultBean);
return true;
}
private List<MesAssemblyShowContext> getAssemblyShowContextList(List<MesProductionAssemblyContext> productionAssemblyContextList) {
//封装匹配当前设备的装配件信息
private List<MesAssemblyShowContext> getAssemblyShowContextList(MesCellEquipContext cellEquipContext, List<MesProductionAssemblyContext> productionAssemblyContextList) {
productionAssemblyContextList = filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList);
if (CollectionUtils.isEmpty(productionAssemblyContextList)) return null;
List<MesAssemblyShowContext> assemblyShowContextList = new ArrayList<>();
Map<String, List<MesProductionAssemblyContext>> assemblyMap = productionAssemblyContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionAssemblyContext::getWorkOrderNo));
for (Map.Entry<String, List<MesProductionAssemblyContext>> entry : assemblyMap.entrySet()) {
if (null == entry) continue;
List<MesAssemblyShowContext> itemList = new ArrayList<>();
for (MesProductionAssemblyContext item : entry.getValue()) {
for (MesProductionAssemblyContext item : productionAssemblyContextList) {
if (null == item) continue;
itemList.add(assemblyShowContext(item));
}
itemList = itemList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList());
assemblyShowContextList.addAll(itemList);
assemblyShowContextList.add(assemblyShowContext(item));
}
assemblyShowContextList = assemblyShowContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList());
return assemblyShowContextList;
}
private void showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, List<MesAssemblyShowContext> assemblyShowContextList) {
List<AttrBean> attrBeanList = new ArrayList<>();
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "序号"));
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "零件编码"));
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料编码"));
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NAME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料名称"));
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_SN, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料条码"));
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_STATUS_NAME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "是否装配"));
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue());
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue());
resultBean.setResultList(assemblyShowContextList);
resultBean.setDataAttrList(attrBeanList);
this.sendMessage(reqBean, resultBean);
//搜集匹配当前设备的装配件信息
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) {
MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext();
BeanUtils.copyProperties(o, assemblyShowContext);
@ -152,5 +158,17 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
return assemblyShowContext;
}
//装配件清单列表标题
private List<AttrBean> dataAttrList() {
List<AttrBean> attrBeanList = new ArrayList<>();
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, "序号");
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;
}
}

@ -5,17 +5,17 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatc
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
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.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
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.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
@ -83,8 +83,8 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在头道模具号跟一模多腔信息
if (productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean) && productionDispatchContextStepService.checkMouldMultiCavityIsExistContext(reqBean)) return stepResult;
//当前工序已存在头道模具号跟产出零件信息
if (productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean) && productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean)) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
@ -138,14 +138,14 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
//未采集到数据
if (!equipLogDispatchContext.getIsCollectValue())
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]头道模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]头道模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
//读取的头道模具号进行规则匹配
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.FIRST_MOULD_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
//没有有效的数据
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
//默认只需要配置一个点位
String firstMouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue();
@ -154,49 +154,49 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
productionDispatchContextStepService.doSendStepContextMessage(reqBean, firstMouldNo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
//验证一模多腔信息
List<MesMouldMultiCavity> mouldMultiCavityList = getMouldMultiCavityList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), firstMouldNo, true);
List<MesProductionPartContext> productionPartContextList = getProductionPartList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), firstMouldNo, true);
//获取零件信息
Map<String, MesPart> partDataMap = getPartDataMap(reqBean, resultBean, productionProcessContext, mouldMultiCavityList);
Map<String, MesPart> partDataMap = getPartDataMap(reqBean, resultBean, productionProcessContext, productionPartContextList);
//保存设备当前一轮工序的头道模具号,一模多腔信息,零件信息
//保存设备当前一轮工序的头道模具号,产出零件(一模多腔)信息,零件信息
productionDispatchContextStepService.saveFirstMouldNoContext(reqBean, equipVariableCollectContextList.get(0));
productionDispatchContextStepService.saveMouldMultiCavityContext(reqBean, mouldMultiCavityList);
productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList);
productionDispatchContextStepService.savePartDataContext(reqBean, partDataMap);
//更新展示组件MODULE_CONTENT内容
doCacheMoudleContext(reqBean, mouldMultiCavityList, true);
doCacheMoudleContext(reqBean, productionPartContextList, true);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前已读取到设备[%s]头道模具号[%s]!", cellEquipContext.getEquipmentCode(), firstMouldNo));
}
public List<MesMouldMultiCavity> getMouldMultiCavityList(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, String equipmentCode, String mouldNo, Boolean isFirstMouldNo) {
public List<MesProductionPartContext> getProductionPartList(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, String equipmentCode, String mouldNo, Boolean isFirstMouldNo) {
//从上下文中取出一模多腔信息集合
List<MesMouldMultiCavity> mouldMultiCavityList = productionDispatchContextStepService.getMouldMultiCavityContext(reqBean);
//从上下文中取出产出零件(一模多腔)信息集合
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//验证一模多腔信息是否跟当前对设备及模具匹配; 根据设备代码,模具号查询一模多腔信息
if (!checkCachedMouldMultiCavityValid(mouldMultiCavityList, equipmentCode, mouldNo)) mouldMultiCavityList = mouldMultiCavityService.getMouldMultiCavityList(reqBean.getOrganizeCode(), equipmentCode, mouldNo);
//验证产出零件(一模多腔)信息是否跟当前对设备及模具匹配; 根据设备代码,模具号查询一模多腔信息
if (!checkCachedProductionPartValid(productionPartContextList, equipmentCode, mouldNo)) productionPartContextList = mouldMultiCavityService.getProductionPartList(reqBean.getOrganizeCode(), equipmentCode, mouldNo);
//配置错误 抛出异常
if (CollectionUtils.isEmpty(mouldMultiCavityList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("当前设备[%s]与读取到的%s模具号[%s]未维护有效的一模多腔信息!", equipmentCode, isFirstMouldNo ? "头道" : MesPcnExtConstWords.EMPTY, mouldNo));
if (CollectionUtils.isEmpty(productionPartContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("当前设备[%s]与读取到的%s模具号[%s]未维护有效的一模多腔信息!", equipmentCode, isFirstMouldNo ? "头道" : MesPcnExtConstWords.EMPTY, mouldNo));
return mouldMultiCavityList;
return productionPartContextList;
}
private Boolean checkCachedMouldMultiCavityValid(List<MesMouldMultiCavity> mouldMultiCavityList, String equipmentCode, String firstMouldNo) {
return (!CollectionUtils.isEmpty(mouldMultiCavityList) && mouldMultiCavityList.get(0).getEquipmentCode().equals(equipmentCode) && mouldMultiCavityList.get(0).getMouldNo().equals(firstMouldNo)) ? true : false;
private Boolean checkCachedProductionPartValid(List<MesProductionPartContext> productionPartContextList, String equipmentCode, String firstMouldNo) {
return (!CollectionUtils.isEmpty(productionPartContextList) && productionPartContextList.get(0).getEquipmentCode().equals(equipmentCode) && productionPartContextList.get(0).getMouldNo().equals(firstMouldNo)) ? true : false;
}
public Map<String, MesPart> getPartDataMap(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, List<MesMouldMultiCavity> mouldMultiCavityList) {
public Map<String, MesPart> getPartDataMap(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, List<MesProductionPartContext> productionPartContextList) {
//从上下文中取出零件信息集合
Map<String, MesPart> partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean);
//从一模多腔信息中搜集零件编码并去重
List<String> partNoList = (mouldMultiCavityList.stream().filter(o -> (null != o)).map(MesMouldMultiCavity::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
List<String> partNoList = (productionPartContextList.stream().filter(o -> (null != o)).map(MesProductionPartContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
//验证上下文中取出零件信息集合是否匹配一模多腔信息中搜集零件编码
if (!CollectionUtils.isEmpty(partDataMap) && partDataMap.keySet().containsAll(partNoList) && partNoList.containsAll(partDataMap.keySet())) return partDataMap;
@ -214,15 +214,15 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
}
public void doCacheMoudleContext(StationRequestBean reqBean, List<MesMouldMultiCavity> mouldMultiCavityList, Boolean isFirstMouldNo) {
public void doCacheMoudleContext(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList, Boolean isFirstMouldNo) {
//存储展示组件MODULE_CONTENT内容
productionDispatchContextStepService.saveModuleContentContext(reqBean, getModuleContextData(reqBean, mouldMultiCavityList, isFirstMouldNo));
productionDispatchContextStepService.saveModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList, isFirstMouldNo));
}
//封装展示组件MODULE_CONTENT内容
private List<List<StationKvBean>> getModuleContextData(StationRequestBean reqBean, List<MesMouldMultiCavity> mouldMultiCavityList, Boolean isFirstMouldNo) {
private List<List<StationKvBean>> getModuleContextData(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList, Boolean isFirstMouldNo) {
List<List<StationKvBean>> dataList = new ArrayList<>();
mouldMultiCavityList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList,
productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList,
new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.MOULD_NO, isFirstMouldNo ? "头道模具号" : "模具号", o.getMouldNo()), new StationKvBean(MesPcnConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnConstWords.PART_NAME, "零件名称", o.getPartName())));
return dataList;
}

@ -42,12 +42,14 @@ public class MesManyCellNoticeNextStepService extends BaseStepService {
//根据生产线代码,工位代码查询主子工位实虚关系信息(排除当前工位)
List<MesWorkCellExtendCfg> workCellExtendCfgList = prodOrgExtService.getWorkCellExtendCfgRvListByBak(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
if (CollectionUtils.isEmpty(workCellExtendCfgList)) return stepResult;
if (CollectionUtils.isEmpty(workCellExtendCfgList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]未配置实虚工位对应关系", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
for (MesWorkCellExtendCfg workCellExtendCfg : workCellExtendCfgList) {
if (null == workCellExtendCfg) continue;
if (workCellExtendCfg.getWorkCenterCodeBak().equals(reqBean.getWorkCenterCode()) && workCellExtendCfg.getWorkCellCodeBak().equals(reqBean.getWorkCellCode())) continue;
//验证下个工位是否在线
String clientInfo = shippingDispatchService.getActorClientInfo(reqBean.getOrganizeCode(), workCellExtendCfg.getWorkCenterCode(), workCellExtendCfg.getWorkCellCode());
if (CollectionUtils.isEmpty(StationWebSocket.getStationWebSocketList(clientInfo))) continue;
@ -58,7 +60,9 @@ public class MesManyCellNoticeNextStepService extends BaseStepService {
}
return stepResult;
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult,
String.format("生产线[%s]工位[%s]切换分屏失败!原因:实体生产线[%s]工位[%s]%s!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
workCellExtendCfgList.get(0).getWorkCenterCode(), workCellExtendCfgList.get(0).getWorkCellCode(), workCellExtendCfgList.size() == 1 ? "仅关联了当前操作的虚拟工位" : "关联的其他虚拟工位当前均不在线"));
}

@ -37,7 +37,7 @@ public class MesManyCellTriggerTabSwitchStepService extends BaseStepService {
BeanUtils.copyProperties(reqBean, stationRequestBean);
stationRequestBean.setScanInfo(clientInfo);
return execDynamicsCompleteAndSendMsgReturn(stationRequestBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.TAB_SWITCH, MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM, String.format("多工位页面切换,从[%s]切换到[%s]!", reqBean.getClientInfo(), clientInfo));
return execDynamicsCompleteAndSendMsgReturn(stationRequestBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.TAB_SWITCH, MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM, String.format("多工位页面切换,从[%s]切换到[%s]!", reqBean.getClientInfo(), clientInfo));
}

@ -5,14 +5,14 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatc
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
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.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
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.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
@ -76,8 +76,8 @@ public class MesMouldNoReadStepService extends BaseStepService {
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在模具号 并且 存在一模多腔信息或者生产工单数据信息
if (productionDispatchContextStepService.checkMouldNoIsExistContext(reqBean) && (productionDispatchContextStepService.checkMouldMultiCavityIsExistContext(reqBean) || productionDispatchContextStepService.checkWorkOrderDataIsExistContext(reqBean))) return stepResult;
//当前工序已存在模具号 并且 存在产出零件数据信息
if (productionDispatchContextStepService.checkMouldNoIsExistContext(reqBean) && (productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean))) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
@ -132,12 +132,12 @@ public class MesMouldNoReadStepService extends BaseStepService {
private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) {
Boolean firstMouldNoIsExist = productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean);
Boolean workOrderDataIsExist = productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean);
//验证上下文产出零件信息是否存在
Boolean productionPartContextIsExist = productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean);
//未采集到数据
if (!equipLogDispatchContext.getIsCollectValue() && (equipLogDispatchContext.getNeedNewValue() || (!firstMouldNoIsExist && !workOrderDataIsExist)))
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
if (!equipLogDispatchContext.getIsCollectValue() && (equipLogDispatchContext.getNeedNewValue() || !productionPartContextIsExist))
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
else if (!equipLogDispatchContext.getIsCollectValue())
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]模具号,接口逻辑设置只读一次,当前读取模具号直接跳过!", cellEquipContext.getEquipmentCode()));
@ -145,8 +145,8 @@ public class MesMouldNoReadStepService extends BaseStepService {
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
//没有有效的数据: 设置常变值 或者 当前没有头道模具号或生产工单信息
if (CollectionUtils.isEmpty(equipVariableCollectContextList) && (equipLogDispatchContext.getNeedNewValue() || (!firstMouldNoIsExist && !workOrderDataIsExist)))
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
if (CollectionUtils.isEmpty(equipVariableCollectContextList) && (equipLogDispatchContext.getNeedNewValue() || !productionPartContextIsExist))
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
else if (CollectionUtils.isEmpty(equipVariableCollectContextList)) //非常变值 没有有效的数据 也无需再读
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的模具号,接口逻辑设置只读一次,当前读取模具号直接跳过!", cellEquipContext.getEquipmentCode()));
@ -159,8 +159,8 @@ public class MesMouldNoReadStepService extends BaseStepService {
//将模具信息放到工步结果对象的中, 工步主方法体会从里面取出
stepResult.obj(equipVariableCollectContextList.get(0));
//判断是否存在头道模具号或生产工单信息
if (!firstMouldNoIsExist && !workOrderDataIsExist) doHandleFirstMouldNo(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, mouldNo);
//判断是否存在产出零件信息
if (!productionPartContextIsExist) doHandleFirstMouldNo(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, mouldNo);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前已读取到设备[%s]模具号信息[%s]!", cellEquipContext.getEquipmentCode(), mouldNo));
@ -168,17 +168,17 @@ public class MesMouldNoReadStepService extends BaseStepService {
private void doHandleFirstMouldNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, String mouldNo) {
//磨具号当头道模具号的使用
List<MesMouldMultiCavity> mouldMultiCavityList = firstMouldNoReadStepService.getMouldMultiCavityList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), mouldNo, false);
List<MesProductionPartContext> productionPartContextList = firstMouldNoReadStepService.getProductionPartList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), mouldNo, false);
//获取零件信息
Map<String, MesPart> partDataMap = firstMouldNoReadStepService.getPartDataMap(reqBean, resultBean, productionProcessContext, mouldMultiCavityList);
Map<String, MesPart> partDataMap = firstMouldNoReadStepService.getPartDataMap(reqBean, resultBean, productionProcessContext, productionPartContextList);
//保存设备当前一轮工序的一模多腔信息,零件信息
productionDispatchContextStepService.saveMouldMultiCavityContext(reqBean, mouldMultiCavityList);
//保存设备当前一轮工序的产出零件(一模多腔)信息,零件信息
productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList);
productionDispatchContextStepService.savePartDataContext(reqBean, partDataMap);
//更新展示组件MODULE_CONTENT内容
firstMouldNoReadStepService.doCacheMoudleContext(reqBean, mouldMultiCavityList, false);
firstMouldNoReadStepService.doCacheMoudleContext(reqBean, productionPartContextList, false);
}
}

@ -130,7 +130,7 @@ public class MesProductResultReadStepService extends BaseStepService {
//未采集到数据
if (!equipLogDispatchContext.getIsCollectValue())
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]加工结果,持续监听中...", cellEquipContext.getEquipmentCode()));
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]加工结果,持续监听中...", cellEquipContext.getEquipmentCode()));
//根据变量类别分组数据
Map<String, List<MesEquipVariableCfgCollectContext>> variableCategoryMap = equipLogDispatchContext.getEquipVariableCfgCollectContextList().stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCfgCollectContext::getVariableCategory));
@ -168,7 +168,7 @@ public class MesProductResultReadStepService extends BaseStepService {
//加工结果匹配失败
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("读取设备[%s]加工结果的数据变量值匹配接口逻辑规则失败,持续监听中...", cellEquipContext.getEquipmentCode()));
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("读取设备[%s]加工结果的数据变量值匹配接口逻辑规则失败,持续监听中...", cellEquipContext.getEquipmentCode()));
}

@ -3,17 +3,17 @@ 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.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
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.context.MesSnProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesWorkOrderContext;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
@ -21,12 +21,10 @@ import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.hutool.core.date.DateUtil;
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.ArrayList;
import java.util.Date;
@ -70,12 +68,10 @@ public class MesProductSnGenerateStepService extends BaseStepService {
// 获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue());
MesWorkCell mesWorkCell = productionProcessContext.getWorkCell();
// 获取一模多腔信息
List<MesMouldMultiCavity> mesModelMultiCavities = mesProductionDispatchContextStepService.getMouldMultiCavityContext(reqBean);
// 获取工单号信息
List<MesWorkOrderContext> workOrderDataContext = mesProductionDispatchContextStepService.getWorkOrderDataContext(reqBean);
// 获取产出零件信息
List<MesProductionPartContext> productionPartContextList = mesProductionDispatchContextStepService.getProductionPartContext(reqBean);
// 获取零件号,可能存在多个
List<String> partNoList = getPartNoList(mesModelMultiCavities, workOrderDataContext);
List<String> partNoList = productionPartContextList.stream().map(MesProductionPartContext::getPartNo).collect(Collectors.toList());
// 根据零件号组装产品条码信息
List<MesProduceSn> mesProduceSns = generateSn(reqBean, productionProcessContext, mesWorkCell, partNoList);
// 保存条码信息
@ -114,24 +110,6 @@ public class MesProductSnGenerateStepService extends BaseStepService {
}
/**
*
*
* @param mesModelMultiCavities
* @param workOrderDataContext
* @return
*/
private List<String> getPartNoList(List<MesMouldMultiCavity> mesModelMultiCavities, List<MesWorkOrderContext> workOrderDataContext) {
List<String> partNoList = new ArrayList<>();
if (!CollectionUtils.isEmpty(workOrderDataContext)) {
partNoList = workOrderDataContext.stream().map(MesWorkOrder::getPartNo).collect(Collectors.toList());
}
if (!CollectionUtils.isEmpty(mesModelMultiCavities)) {
partNoList = mesModelMultiCavities.stream().map(MesMouldMultiCavity::getPartNo).collect(Collectors.toList());
}
return partNoList;
}
/**
*
* @param mesPart
* @return

@ -5,10 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatc
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
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.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
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.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
@ -131,14 +128,17 @@ public class MesProductSnReadStepService extends BaseStepService {
//未采集到数据
if (!equipLogDispatchContext.getIsCollectValue())
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]主条码,持续监听中...", cellEquipContext.getEquipmentCode()));
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]主条码,持续监听中...", cellEquipContext.getEquipmentCode()));
//读取的主条码进行规则匹配
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SN.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
//没有有效的数据
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的主条码,持续监听中...", cellEquipContext.getEquipmentCode()));
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的主条码,持续监听中...", cellEquipContext.getEquipmentCode()));
//读取主条码前置验证
if (!checkReadProductSnValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipVariableCollectContextList).isCompleted()) return stepResult;
//保存设备当前一轮工序的待验证的主条码信息
productionDispatchContextStepService.saveScanProductSnContext(reqBean, equipVariableCollectContextList);
@ -151,5 +151,31 @@ public class MesProductSnReadStepService extends BaseStepService {
}
//读取主条码前置验证
private StepResult checkReadProductSnValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
//剔除finishCode信息
List<MesEquipVariableCollectContext> filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && !o.getEquipVariableValue().equals(productionProcessContext.getFinishCode()))).collect(Collectors.toList());
//根据读取条码分组数据
Map<String, List<MesEquipVariableCollectContext>> produceSnCollectMap = CollectionUtils.isEmpty(filterList) ? null : filterList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCollectContext::getEquipVariableValue));
//验证是否存在重复条码
if (!CollectionUtils.isEmpty(filterList) && filterList.size() != produceSnCollectMap.size())
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前读取到设备[%s]主条码存在重复条码,持续监听中...", cellEquipContext.getEquipmentCode()));
//验证条码数量是否满足腔数
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
if (!CollectionUtils.isEmpty(productionPartContextList) && equipVariableCollectContextList.size() != productionPartContextList.size())
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前读取到设备[%s]主条码数量[%s]与产出零件对应的腔数[%s]不一致,持续监听中...", cellEquipContext.getEquipmentCode(), equipVariableCollectContextList.size(), productionPartContextList.size()));
if (CollectionUtils.isEmpty(productionPartContextList) && equipVariableCollectContextList.size() != cellEquipContext.getCavity())
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前读取到设备[%s]主条码数量[%s]与工位设备维护的腔数[%s]不一致,持续监听中...", cellEquipContext.getEquipmentCode(), equipVariableCollectContextList.size(), cellEquipContext.getCavity()));
return stepResult;
}
}

@ -3,30 +3,16 @@ 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.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesSnProductionProcessContext;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
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.MesPartRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**

@ -1,37 +1,37 @@
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.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesProductSnScanStepService")
public class MesProductSnScanStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Override
public StepResult execute(StationRequestBean reqBean) {
return null;
}
}
//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.mes.pcn.serviceimpl.fsm.BaseStepService;
//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
//import cn.estsh.i3plus.pojo.mes.model.StepResult;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
///**
// * @Description : 扫描主条码工步
// * @Author : wangjie
// **/
//@Slf4j
//@Service("mesProductSnScanStepService")
//public class MesProductSnScanStepService extends BaseStepService {
//
// @Autowired
// private IMesProductionProcessContextStepService productionProcessContextStepService;
//
// @Autowired
// private IMesProductionDispatchContextStepService productionDispatchContextStepService;
//
//
//
// @Override
// public StepResult execute(StationRequestBean reqBean) {
//
// return null;
//
// }
//
//
//
//}

@ -2,46 +2,28 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
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.apiservice.serviceimpl.actor.MesHandlerEquipLogActor;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base.MesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog.MesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
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.MesSnProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ActorMessage;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.mes.pcn.config.SpringExt;
import cn.estsh.i3plus.mes.pcn.config.SpringExtProvider;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
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.MesEquipmentLogDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.milo.opcua.stack.core.channel.messages.HelloMessage;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
* @Description :

@ -1,16 +1,17 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.context;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
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.MesMouldMultiCavity;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
@ -39,10 +40,8 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
//发送设备质量信息
@Override
public void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext) {
StationResultBean resultBean = new StationResultBean();
resultBean.setResultObj(MesExtEnumUtil.EQUIP_LOG_QUALITY.valueOfColor(cellEquipContext.getQuality()));
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.QUALITY_MODULE.getValue());
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue());
StationResultBean resultBean = new StationResultBean()
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.QUALITY_MODULE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue()).resultObj(MesExtEnumUtil.EQUIP_LOG_QUALITY.valueOfColor(cellEquipContext.getQuality()));
this.sendMessage(reqBean, resultBean);
}
@ -94,12 +93,11 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
//发送工步内容
@Override
public void sendStepContextMessage(StationRequestBean reqBean, List<StationKvBean> lastScanContext) {
StationResultBean resultBean = new StationResultBean();
resultBean.setResultList(StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
StationResultBean resultBean = new StationResultBean()
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.KEY_VALUE.getValue())
.resultList(StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
lastScanContext.size() > 1 ? lastScanContext.get(1).name("上次" + lastScanContext.get(1).getName()).key(MesPcnExtConstWords.LAST_SCAN_INFO) : null,
lastScanContext.size() > 0 ? lastScanContext.get(0).name("当前" + lastScanContext.get(0).getName()).key(MesPcnExtConstWords.SCAN_INFO) : null));
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue());
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.KEY_VALUE.getValue());
this.sendMessage(reqBean, resultBean);
}
@ -169,29 +167,29 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
//获取上下文一模多腔信息
@Override
public List<MesMouldMultiCavity> getMouldMultiCavityContext(StationRequestBean reqBean) {
String mouldCavityJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_MULTI_CAVITY_CONTEXT);
return !StringUtils.isEmpty(mouldCavityJson) ? JSONObject.parseArray(mouldCavityJson, MesMouldMultiCavity.class) : null;
public List<MesProductionPartContext> getProductionPartContext(StationRequestBean reqBean) {
String productionPartJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PART_CONTEXT);
return !StringUtils.isEmpty(productionPartJson) ? JSONObject.parseArray(productionPartJson, MesProductionPartContext.class) : null;
}
//验证上下文一模多腔信息是否存在
@Override
public Boolean checkMouldMultiCavityIsExistContext(StationRequestBean reqBean) {
String mouldCavityJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_MULTI_CAVITY_CONTEXT);
return !StringUtils.isEmpty(mouldCavityJson) ? true : false;
public Boolean checkProductionPartIsExistContext(StationRequestBean reqBean) {
String productionPartJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PART_CONTEXT);
return !StringUtils.isEmpty(productionPartJson) ? true : false;
}
//保存上下文一模多腔信息 [JSON]List<MesMouldMultiCavity>
//保存上下文一模多腔信息 [JSON]List<MesProductionPartContext>
@Override
public Boolean saveMouldMultiCavityContext(StationRequestBean reqBean, List<MesMouldMultiCavity> mouldMultiCavityList) {
if (CollectionUtils.isEmpty(mouldMultiCavityList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_MULTI_CAVITY_CONTEXT, JSONObject.toJSONString(mouldMultiCavityList));
public Boolean saveProductionPartContext(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
if (CollectionUtils.isEmpty(productionPartContextList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PART_CONTEXT, JSONObject.toJSONString(productionPartContextList));
}
//删除上下文一模多腔信息
@Override
public void deleteMouldMultiCavityContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_MULTI_CAVITY_CONTEXT);
public void deleteProductionPartContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PART_CONTEXT);
}
//获取上下文零件数据信息
@ -241,33 +239,6 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_NO_CONTEXT);
}
//获取上下文生产工单数据信息集合
@Override
public List<MesWorkOrderContext> getWorkOrderDataContext(StationRequestBean reqBean) {
String workOrderDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_ORDER_DATA_CONTEXT);
return !StringUtils.isEmpty(workOrderDataJson) ? JSONObject.parseArray(workOrderDataJson, MesWorkOrderContext.class) : null;
}
//验证上下文生产工单数据信息集合是否存在
@Override
public Boolean checkWorkOrderDataIsExistContext(StationRequestBean reqBean) {
String workOrderDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_ORDER_DATA_CONTEXT);
return !StringUtils.isEmpty(workOrderDataJson) ? true : false;
}
//保存上下文生产工单数据信息集合 [JSON]List<MesWorkOrderContext>
@Override
public Boolean saveWorkOrderDataContext(StationRequestBean reqBean, List<MesWorkOrderContext> workOrderContextList) {
if (CollectionUtils.isEmpty(workOrderContextList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_ORDER_DATA_CONTEXT, JSONObject.toJSONString(workOrderContextList));
}
//删除上下文生产工单数据信息集合
@Override
public void deleteWorkOrderDataContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_ORDER_DATA_CONTEXT);
}
//获取上下文扫/读信息:主条码
@Override
public List<MesEquipVariableCollectContext> getScanProductSnContext(StationRequestBean reqBean) {
@ -349,67 +320,31 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.OUT_PRODUCE_SN_DATA_CONTEXT);
}
//获取上下文装配件数据信息集合
@Override
public List<MesProductionAssemblyContext> getAssemblyDataContext(StationRequestBean reqBean, MesWorkCenter workCenter) {
String productionAssemblyJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ASSEMBLY_DATA_CONTEXT);
if (StringUtils.isEmpty(productionAssemblyJson)) return null;
List<MesProductionAssemblyContext> productionAssemblyContextList = new ArrayList<>();
if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) {
List<MesProductionAssemblySortContext> productionAssemblySortContextList = JSONObject.parseArray(productionAssemblyJson, MesProductionAssemblySortContext.class);
productionAssemblySortContextList.forEach(o -> productionAssemblyContextList.add(o));
} else {
List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList = JSONObject.parseArray(productionAssemblyJson, MesProductionAssemblyNosortContext.class);
productionAssemblyNosortContextList.forEach(o -> productionAssemblyContextList.add(o));
}
return productionAssemblyContextList;
}
//验证上下文装配件数据信息集合是否存在
@Override
public Boolean checkAssemblyDataIsExistContext(StationRequestBean reqBean) {
String productionAssemblyJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ASSEMBLY_DATA_CONTEXT);
return !StringUtils.isEmpty(productionAssemblyJson) ? true : false;
}
//保存上下文装配件数据信息集合 [JSON]List<MesProductionAssemblyContext>
@Override
public Boolean saveAssemblyDataContext(StationRequestBean reqBean, List<MesProductionAssemblyContext> productionAssemblyContextList) {
if (CollectionUtils.isEmpty(productionAssemblyContextList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ASSEMBLY_DATA_CONTEXT, JSONObject.toJSONString(productionAssemblyContextList));
}
//删除上下文装配件数据信息集合
@Override
public void deleteAssemblyDataContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ASSEMBLY_DATA_CONTEXT);
}
//获取上下文非排序产品加工规则信息集合
//获取上下文产品加工规则信息集合
@Override
public List<MesProdRuleNoSortContext> getProdRuleNosortDataContext(StationRequestBean reqBean) {
String prodRuleNosortJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_NOSORT_DATA_CONTEXT);
return !StringUtils.isEmpty(prodRuleNosortJson) ? JSONObject.parseArray(prodRuleNosortJson, MesProdRuleNoSortContext.class) : null;
public List<MesProdRuleContext> getProdRuleDataContext(StationRequestBean reqBean) {
String prodRuleNosortJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT);
return !StringUtils.isEmpty(prodRuleNosortJson) ? JSONObject.parseArray(prodRuleNosortJson, MesProdRuleContext.class) : null;
}
//验证上下文非排序产品加工规则信息集合是否存在
//验证上下文产品加工规则信息集合是否存在
@Override
public Boolean checkProdRuleNosortDataIsExistContext(StationRequestBean reqBean) {
String prodRuleNosortJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_NOSORT_DATA_CONTEXT);
public Boolean checkProdRuleDataIsExistContext(StationRequestBean reqBean) {
String prodRuleNosortJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT);
return !StringUtils.isEmpty(prodRuleNosortJson) ? true : false;
}
//保存上下文非排序产品加工规则信息集合 [JSON]List<MesProdRuleNoSortContext>
//保存上下文产品加工规则信息集合 [JSON]List<MesProdRuleContext>
@Override
public Boolean saveProdRuleNosortDataContext(StationRequestBean reqBean, List<MesProdRuleNoSortContext> prodRuleNoSortContextList) {
if (CollectionUtils.isEmpty(prodRuleNoSortContextList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_NOSORT_DATA_CONTEXT, JSONObject.toJSONString(prodRuleNoSortContextList));
public Boolean saveProdRuleDataContext(StationRequestBean reqBean, List<MesProdRuleContext> prodRuleContextList) {
if (CollectionUtils.isEmpty(prodRuleContextList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT, JSONObject.toJSONString(prodRuleContextList));
}
//删除上下文非排序产品加工规则信息集合
//删除上下文产品加工规则信息集合
@Override
public void deleteProdRuleNosortDataContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_NOSORT_DATA_CONTEXT);
public void deleteProdRuleDataContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT);
}
}

@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
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.base.IConfigService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -41,6 +42,9 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
@Autowired
private IFsmRouteDataService fsmRouteDataService;
@Autowired
private IConfigService configService;
private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT); }
//存储生产过程上下文对象【工步根据业务实际情况执行,配置错误等情况无需执行】
@ -70,11 +74,13 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
//生产过程上下文对象赋值工序工艺信息
if (StringUtils.isEmpty(productionProcessContext.getProcessCode()) || !productionProcessContext.getProcessCode().equals(reqBean.getProcessCode())) processContext(reqBean, productionProcessContext);
//生产过程上下文对象赋值工序工艺信息
if (StringUtils.isEmpty(productionProcessContext.getFinishCode())) finishCodeContext(reqBean, productionProcessContext);
//验证组织模型有效性
return checkBaseData(reqBean, productionProcessContext);
}
//获取工序工艺信息
@Override
public MesProductionProcessContext processContext(StationRequestBean reqBean) {
@ -100,6 +106,13 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
}
//获取finishCode码
@Override
public MesProductionProcessContext finishCodeContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
MesConfig config = configService.getMesConfigByCfgCode(MesPcnExtConstWords.CAVITY_FINISH_CODE, reqBean.getOrganizeCode());
return productionProcessContext.finishCode((null != config && !StringUtils.isEmpty(config.getCfgValue())) ? config.getCfgValue() : MesPcnExtConstWords.CAVITY_FINISH_CODE);
}
//验证组织模型有效性
@Override
public MesProductionProcessContext checkBaseData(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {

@ -0,0 +1,159 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* -()
*/
@Data
public class MesProdRuleContext implements Serializable {
private static final long serialVersionUID = 1522652732930288854L;
@ApiParam("组织代码")
public String organizeCode;
@ApiParam(name = "数据关联键 排序:生产工单号 非排序:snowflakeId")
private String foreignKey;
@ApiParam("装配件绑定清单 [JSON]List<MesProductionAssemblyContext>")
public String assemblyDataJson;
//-------以下排序属性-------------
@ApiParam("生产线代码")
public String workCenterCode;
@ApiParam("工位代码")
public String workCellCode;
@ApiParam("工序代码")
public String processCode;
//-------以下非排序属性-------------
@ApiParam(name = "读/扫主条码信息(内制件/外协件),不一定有值")
private String productSn;
@ApiParam(name = "进料零件号是否为空")
private Boolean inPartNoIsEmpty = false;
@ApiParam(name = "进料零件规则是否为空")
private Boolean inPartNoRuleIsEmpty = false;
@ApiParam("非排序产品加工规则ID")
public Long pid;
@ApiParam(name = "进料零件号")
private String inPartNo;
@ApiParam(name = "产成零件号")
private String outPartNo;
@ApiParam(name = "设备代码")
private String equipmentCode;
@ApiParam(name = "进料零件规则")
private String inPartNoRule;
@ApiParam(name = "是否打印条码")
private Integer isPrint;
@ApiParam(name = "是否有装配件")
private Integer isHasBind;
@ApiParam(name = "汇报方式")
private Integer reportType;
@ApiParam(name = "是否验证加工单数量")
private Integer isCheckOrderQty;
@ApiParam(name = "是否包装")
private Integer isPackage;
@ApiParam(name = "是否验证装配件扫描顺序")
private Integer isCheckBindSeq;
@ApiParam(name = "成品站点")
private String partLocation;
@ApiParam(name = "子箱设备信号点")
private String packageEquSignal;
public MesProdRuleContext() {}
public MesProdRuleContext(String organizeCode) {
this.organizeCode = organizeCode;
}
public MesProdRuleContext(String organizeCode, String workCenterCode, String workCellCode, String processCode) {
this.organizeCode = organizeCode;
this.workCenterCode = workCenterCode;
this.workCellCode = workCellCode;
this.processCode = processCode;
}
public MesProdRuleContext foreignKey(String foreignKey) {
this.foreignKey = foreignKey;
return this;
}
public MesProdRuleContext inPartNoIsEmpty() {
this.inPartNoIsEmpty = true;
return this;
}
public MesProdRuleContext inPartNoRuleIsEmpty() {
this.inPartNoRuleIsEmpty = true;
return this;
}
public MesProdRuleContext pid(Long pid) {
this.pid = pid;
return this;
}
public MesProdRuleContext inPartNo(String inPartNo) {
this.inPartNo = inPartNo;
return this;
}
public MesProdRuleContext outPartNo(String outPartNo) {
this.outPartNo = outPartNo;
return this;
}
public MesProdRuleContext equipmentCode(String equipmentCode) {
this.equipmentCode = equipmentCode;
return this;
}
public MesProdRuleContext assemblyDataJson(List<? extends MesProductionAssemblyContext> productionAssemblyContextList) {
this.assemblyDataJson = !CollectionUtils.isEmpty(productionAssemblyContextList) ? JSONObject.toJSONString(productionAssemblyContextList) : null;
return this;
}
public List<MesProductionAssemblyContext> getAssemblyDataContext(MesWorkCenter workCenter) {
if (StringUtils.isEmpty(this.assemblyDataJson)) return null;
List<MesProductionAssemblyContext> productionAssemblyContextList = new ArrayList<>();
if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) {
List<MesProductionAssemblySortContext> productionAssemblySortContextList = JSONObject.parseArray(this.assemblyDataJson, MesProductionAssemblySortContext.class);
productionAssemblySortContextList.forEach(o -> productionAssemblyContextList.add(o));
} else {
List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList = JSONObject.parseArray(this.assemblyDataJson, MesProductionAssemblyNosortContext.class);
productionAssemblyNosortContextList.forEach(o -> productionAssemblyContextList.add(o));
}
return productionAssemblyContextList;
}
}

@ -1,58 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import java.io.Serializable;
/**
* -()
*/
@Data
public class MesProdRuleNoSortContext implements Serializable {
private static final long serialVersionUID = -3062405517994447105L;
@ApiParam(name = "零件条码")
private String productSn;
@ApiParam(name = "生产工单号")
private String workOrderNo;
@ApiParam(name = "进料零件号")
private String inPartNo;
@ApiParam(name = "产成零件号")
private String outPartNo;
@ApiParam(name = "设备代码")
private String equipmentCode;
@ApiParam(name = "进料零件规则")
private String inPartNoRule;
@ApiParam(name = "是否打印条码")
private Integer isPrint;
@ApiParam(name = "是否有装配件")
private Integer isHasBind;
@ApiParam(name = "汇报方式")
private Integer reportType;
@ApiParam(name = "是否验证加工单数量")
private Integer isCheckOrderQty;
@ApiParam(name = "是否包装")
private Integer isPackage;
@ApiParam(name = "是否验证装配件扫描顺序")
private Integer isCheckBindSeq;
@ApiParam(name = "成品站点")
private String partLocation;
@ApiParam(name = "子箱设备信号点")
private String packageEquSignal;
}

@ -25,10 +25,6 @@ public class MesProductionAssemblyContext implements Serializable {
@ApiParam("装配件条码")
public String assemblySn;
//非排序可能无值
@ApiParam(value = "生产工单号")
public String workOrderNo;
@ApiParam("过程条码")
public String serialNumber;
@ -110,18 +106,4 @@ public class MesProductionAssemblyContext implements Serializable {
@ApiParam("工艺名称")
public String craftName;
public MesProductionAssemblyContext() {}
public MesProductionAssemblyContext(String organizeCode, String workCenterCode, String workCellCode, String processCode) {
this.organizeCode = organizeCode;
this.workCenterCode = workCenterCode;
this.workCellCode = workCellCode;
this.processCode = processCode;
}
public MesProductionAssemblyContext dataSource(Integer dataSource) {
this.dataSource = dataSource;
return this;
}
}

@ -1,7 +1,10 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.MesAssemblyNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import java.io.Serializable;
@ -25,4 +28,9 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon
@ApiParam(value = "工序用量")
private Integer qty;
public MesProductionAssemblyNosortContext(MesAssemblyNosortCfg assemblyNosortCfg, MesProductionAssembly productionAssembly) {
if (null != assemblyNosortCfg) BeanUtils.copyProperties(assemblyNosortCfg, this);
if (null != productionAssembly) BeanUtils.copyProperties(productionAssembly, this);
}
}

@ -16,6 +16,9 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
private static final long serialVersionUID = -1492128619505737538L;
@ApiParam(value = "生产工单号")
public String workOrderNo;
@ApiParam(value = "工艺顺序号")
private Integer processSeq;
@ -102,10 +105,6 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
public MesProductionAssemblySortContext() {}
public MesProductionAssemblySortContext(String organizeCode, String workCenterCode, String workCellCode, String processCode) {
super(organizeCode, workCenterCode, workCellCode, processCode);
}
public MesProductionAssemblySortContext(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly) {
if (null != workOrderAssembly) BeanUtils.copyProperties(workOrderAssembly, this);
if (null != productionAssembly) BeanUtils.copyProperties(productionAssembly, this);

@ -0,0 +1,59 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import java.io.Serializable;
/**
* -
*/
@Data
public class MesProductionPartContext implements Serializable {
private static final long serialVersionUID = 5562937531822977296L;
@ApiParam(name = "数据关联键 排序:生产工单号 非排序:snowflakeId")
private String foreignKey;
@ApiParam("组织代码")
private String organizeCode;
@ApiParam("生产工单号")
private String workOrderNo;
@ApiParam("设备代码")
private String equipmentCode;
@ApiParam("设备名称")
private String equipmentName;
@ApiParam("零件号")
private String partNo;
@ApiParam("零件名称")
private String partName;
@ApiParam("模具代码")
private String mouldNo;
public MesProductionPartContext copyMouldMultiCavity(MesMouldMultiCavity mouldMultiCavity) {
BeanUtils.copyProperties(mouldMultiCavity, this);
this.foreignKey = mouldMultiCavity.getId().toString();
return this;
}
//-------以下场景预留未开发-------
public MesProductionPartContext copyWorkOrder(String workOrderNo) {
this.foreignKey = workOrderNo + "腔顺序号";
return this;
}
public MesProductionPartContext copyPartNo(String partNo) {
this.foreignKey = partNo + "腔顺序号";
return this;
}
}

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
@ -34,6 +35,9 @@ public class MesProductionProcessContext implements Serializable {
@ApiParam("组织代码")
private String organizeCode;
@ApiParam("finishCode码")
private String finishCode;
@ApiParam("生产线信息([Json]MesWorkCenter)")
private String workCenterJson;
@ -101,6 +105,15 @@ public class MesProductionProcessContext implements Serializable {
return this;
}
//---------------------- finishCode码赋值 ---------------------------------------
//上下文赋值finishCode码
public MesProductionProcessContext finishCode(String finishCode) {
this.finishCode = finishCode;
return this;
}
//---------------------- 生产线对象 ---------------------------------------
//从上下文中取出生产线对象
@ -184,6 +197,10 @@ public class MesProductionProcessContext implements Serializable {
//上下文赋值工位当前要使用的设备
public MesProductionProcessContext curCellEquipJson(MesCellEquipContext curEquip) {
//未配置则默认1腔
if (StringUtils.isEmpty(curEquip.getCavity()) || curEquip.getCavity().compareTo(MesPcnExtConstWords.ZERO) == 0) curEquip.setCavity(MesPcnExtConstWords.ONE);
//未配置则默认没有装配件
if (StringUtils.isEmpty(curEquip.getBindQty())) curEquip.setBindQty(MesPcnExtConstWords.ZERO);
this.curCellEquipJson = null != curEquip ? JSONObject.toJSONString(curEquip) : null;
return this;
}

@ -1,31 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.*;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;
/**
*
*/
@Data
public class MesSnProductionProcessContext extends MesProductionProcessContext{
@ApiParam("零件条码信息")
private String produceSnJson;
//上下文赋值一模多腔信息
public MesSnProductionProcessContext productSns(List<MesProduceSn> mesProduceSns) {
this.produceSnJson = !CollectionUtils.isEmpty(mesProduceSns) ? JSONObject.toJSONString(mesProduceSns) : null;
return this;
}
}

@ -1,16 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import lombok.Data;
import java.io.Serializable;
/**
* -()
*/
@Data
public class MesWorkOrderContext extends MesWorkOrder implements Serializable {
private static final long serialVersionUID = 5562937531822977296L;
}

@ -94,9 +94,31 @@ public class MesPcnExtConstWords {
public static final String WORK_CELL_CODE_BAK = "workCellCodeBak";
// 主子工位关系类型
public static final String EXTEND_TYPE = "extendType";
// 产成零件号
public static final String OUT_PART_NO = "outPartNo";
// 进料零件号
public static final String IN_PART_NO = "inPartNo";
// 进料零件规则
public static final String IN_PART_NO_RULE = "inPartNoRule";
// 过程条码
public static final String SERIAL_NUMBER = "serialNumber";
// 零件条码
public static final String PRODUCT_SN = "productSn";
// 客户条码
public static final String CUST_SN = "custSn";
//设备数据变量读写访问配置
public static final String EQUIP_VARIABLE_RW_CFG = "EQUIP_VARIABLE_RW_CFG";
//kepware标识
public static final String KEPWARE_FLAG_CFG = "KEPWARE_FLAG_CFG";
//默认URL
public static final String DEFAULT_URL = "DEFAULT_URL";
//读写API
public static final String RW_API_CFG = "RW_API_CFG";
// 空腔码
public static final String CAVITY_FINISH_CODE = "CAVITY_FINISH_CODE";
// 设备代码[工步参数]
public static final String EQUIPMENT_CODE_UC = "EQUIPMENT_CODE";
// 读取失败睡眠毫秒数[工步参数]
@ -108,6 +130,8 @@ public class MesPcnExtConstWords {
// 0
public static final Integer ZERO = 0;
// 1
public static final Integer ONE = 1;
// 中括号
public static final String SQUARE_BRACKETS = "[]";
// &
@ -143,8 +167,8 @@ public class MesPcnExtConstWords {
public static final String FIRST_MOULD_NO_CONTEXT = "FIRST_MOULD_NO_CONTEXT";
// 上下文: 模具号
public static final String MOULD_NO_CONTEXT = "MOULD_NO_CONTEXT";
// 上下文: 一模多腔信息
public static final String MOULD_MULTI_CAVITY_CONTEXT = "MOULD_MULTI_CAVITY_CONTEXT";
// 上下文: 产出零件信息
public static final String PRODUCTION_PART_CONTEXT = "PRODUCTION_PART_CONTEXT";
// 上下文: 零件数据信息
public static final String PART_DATA_CONTEXT = "PART_DATA_CONTEXT";
// 上下文: 扫/读信息:生产工单号
@ -153,8 +177,6 @@ public class MesPcnExtConstWords {
public static final String SCAN_PRODUCT_SN_CONTEXT = "SCAN_PRODUCT_SN_CONTEXT";
// 上下文: 扫/读信息:装配件条码
public static final String SCAN_ASSEMBLY_SN_CONTEXT = "SCAN_ASSEMBLY_SN_CONTEXT";
// 上下文: 生产工单数据信息
public static final String WORK_ORDER_DATA_CONTEXT = "WORK_ORDER_DATA_CONTEXT";
// 上下文: 产品加工规则数据信息
public static final String PROD_RULE_DATA_CONTEXT = "PROD_RULE_DATA_CONTEXT";
// 上下文: 进料条码数据信息
@ -176,4 +198,6 @@ public class MesPcnExtConstWords {
public static final String EQUIPMENT_ID="equipmentId";
public static final String OPC_WRITE_VARIABLE="/api/OPCService/WriteVariable";
public static final String OPC_READ_VARIABLE="/api/OPCService/ReadVariable";
}

Loading…
Cancel
Save