diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java index 4fda16f..1c4871d 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java @@ -3,6 +3,7 @@ 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.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesRawPartCharging; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -173,16 +174,16 @@ public interface IMesProductionDispatchContextStepService { void deleteProdRuleDataContext(StationRequestBean reqBean); @ApiOperation(value = "获取上下文班次班组信息") - List getProdShiftDataContext(StationRequestBean reqBean, String workCenterCode); + List getProdShiftDataContext(String orgainzeCode, String workCenterCode); @ApiOperation(value = "验证上下文班次班组信息是否存在") - Boolean checkProdShiftDataIsExistContext(StationRequestBean reqBean, String workCenterCode); + Boolean checkProdShiftDataIsExistContext(String orgainzeCode, String workCenterCode); @ApiOperation(value = "保存上下文班次班组信息", notes = "[JSON]List") - Boolean saveProdShiftDataContext(StationRequestBean reqBean, String workCenterCode, List prodShiftDatList); + Boolean saveProdShiftDataContext(String orgainzeCode, String workCenterCode, List prodShiftDatList); @ApiOperation(value = "删除上下文班次班组信息") - void deleteProdShiftDataContext(StationRequestBean reqBean, String workCenterCode); + void deleteProdShiftDataContext(String orgainzeCode, String workCenterCode); @ApiOperation(value = "获取上下文工位加工数统计信息") List getProductionStatisticsContext(StationRequestBean reqBean); @@ -190,9 +191,14 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "保存上下文工位加工数统计信息", notes = "[JSON]List") Boolean saveProductionStatisticsContext(StationRequestBean reqBean, List prodShiftDatList); + @ApiOperation(value = "新增上下文工位加工数统计信息") + Boolean addProductionStatisticsContext(StationRequestBean reqBean, int count); + @ApiOperation(value = "删除上下文工位加工数统计信息") void deleteProductionStatisticsContext(StationRequestBean reqBean); + MesProdShiftContext getMesProdShiftKvBean(String orgainzeCode, String workCenterCode); + @@ -220,4 +226,14 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文产出条码数据信息集合") void deleteOutProduceSnDataContext(StationRequestBean reqBean); + + @ApiOperation(value = "获取料桶原材料数据集合") + List getMesRawPartChargingDataContext(StationRequestBean reqBean); + + @ApiOperation(value = "保存料桶原材料数据集合", notes = "[JSON]List") + Boolean saveMesRawPartChargingDataContext(StationRequestBean reqBean, List mesRawPartChargingList); + + @ApiOperation(value = "删除料桶原材料数据集合") + void deleteMesRawPartChargingDataContext(StationRequestBean reqBean); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProdShiftRecordController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProdShiftRecordController.java index 0abfa76..0551d34 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProdShiftRecordController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProdShiftRecordController.java @@ -1,20 +1,29 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.google.common.base.Objects; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; +import java.util.List; + /** * @Description: 开关班记录 * @Author: gsz @@ -27,6 +36,8 @@ public class MesProdShiftRecordController { @Autowired private IMesProdShiftRecordService mesProdShiftRecordService; + @Autowired + private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; @GetMapping("/query-pager") @ApiOperation(value = "查询开关班记录") public ResultBean queryMesProdShiftRecordByPager(MesProdShiftRecord mesProdShiftRecord, Pager pager) { @@ -54,6 +65,11 @@ public class MesProdShiftRecordController { mesProdShiftRecordService.insertMesProdShiftRecord(item, AuthUtil.getOrganizeCode()); + + List getProdShiftData = getProdShiftData(item); + + mesProductionDispatchContextStepService.saveProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode(), getProdShiftData); + return ResultBean.success("保存开关班记录成功"); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); @@ -73,6 +89,11 @@ public class MesProdShiftRecordController { ValidatorBean.checkNotNull(item.getShiftGroup(), "shiftGroup不能为空"); mesProdShiftRecordService.saveMesProdShiftRecord(item, AuthUtil.getOrganizeCode()); + + if (Objects.equal(MesExtEnumUtil.WORK_STATUS.END.getValue(), item.getWorkStatus())) { + mesProductionDispatchContextStepService.deleteProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode()); + } + return ResultBean.success("保存开关班记录成功"); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); @@ -95,4 +116,12 @@ public class MesProdShiftRecordController { return ResultBean.fail(e); } } + + //封装展示组件班组班次内容 + private List getProdShiftData(MesProdShiftRecord record) { + + return StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), + new StationKvBean("shiftGroup", "班组", record.getShiftGroup()), + new StationKvBean("shiftCode", "班次", record.getShiftCode())); + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index 4e89ece..36521c5 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -2,22 +2,32 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; 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.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService; +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.MesStateMachineStatus; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.model.AttrBean; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.PojoAttrUtil; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import com.google.common.base.Objects; 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.List; import java.util.Map; +import java.util.stream.Collectors; /** * @Description : 展示组件:非排序生产 @@ -33,21 +43,47 @@ public class MesProductionNoSortModuleService extends BaseModuleService { @Autowired private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + + @Override public void init(StationRequestBean reqBean) { + // 获取工单信息 List> moduleContentContext = mesProductionDispatchContextStepService.getModuleContentContext(reqBean); - StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext); - StationResultBean resultBean1 = getStationResultBean1(reqBean); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); + MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); + + // 获取班次信息 + List prodShiftDataContext = mesProductionDispatchContextStepService.getProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + if (CollectionUtils.isEmpty(prodShiftDataContext)) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + throw ImppExceptionBuilder.newInstance().setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()).setErrorCode("NO_SHOW_MSG").build(); + } + // 发送班次班组和工单 + StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext); this.sendMessage(reqBean, resultBean); + + // 整合班次加工数量 + List shiftCountContext = new ArrayList<>(); + if (mesWorkCell.getIsShowMsg() != null && Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.HISTOGRAM.getValue(),mesWorkCell.getIsShowMsg())) { + List productionStatisticsContext = mesProductionDispatchContextStepService.getProductionStatisticsContext(reqBean); + + StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext); + this.sendMessage(reqBean, shiftCountBean); + } + + + } - private StationResultBean getStationResultBean(StationRequestBean reqBean, List> moduleContentContext) { + private StationResultBean getStationResultBean(StationRequestBean reqBean, List> moduleContentContext, List prodShiftDataContext) { StationResultBean resultBean = new StationResultBean(); resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue()); resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()); resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT); resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); - +/* List stationKvBeans3 = new ArrayList<>(); StationKvBean stationKvBean7 = new StationKvBean(); @@ -60,14 +96,14 @@ public class MesProductionNoSortModuleService extends BaseModuleService { stationKvBean8.setKey("shiftGroup"); stationKvBean8.setName("班组"); stationKvBean8.setValue("注塑2班"); - stationKvBeans3.add(stationKvBean8); + stationKvBeans3.add(stationKvBean8);*/ - resultBean.setResultObj(stationKvBeans3); + resultBean.setResultObj(prodShiftDataContext); resultBean.setResultList(moduleContentContext); return resultBean; } - private StationResultBean getStationResultBean1(StationRequestBean reqBean) { + private StationResultBean getStationResultBean(StationRequestBean reqBean, List productionStatisticsContext) { StationResultBean resultBean = new StationResultBean(); resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue()); resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.ECHART.getValue()); @@ -75,51 +111,7 @@ public class MesProductionNoSortModuleService extends BaseModuleService { resultBean.setDataAttrList(packDataAttrList()); resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); - List> stationKvBeansList = new ArrayList<>(); - List stationKvBeans = new ArrayList<>(); - StationKvBean stationKvBean = new StationKvBean(); - stationKvBean.setKey("orderNo"); - stationKvBean.setName("工单号"); - stationKvBean.setValue("11111"); - stationKvBeans.add(stationKvBean); - - StationKvBean stationKvBean1 = new StationKvBean(); - stationKvBean1.setKey("partNo"); - stationKvBean1.setName("零件号"); - stationKvBean1.setValue("111"); - stationKvBeans.add(stationKvBean1); - - StationKvBean stationKvBean2 = new StationKvBean(); - stationKvBean2.setKey("count"); - stationKvBean2.setName("单数"); - stationKvBean2.setValue("1111"); - stationKvBeans.add(stationKvBean2); - - stationKvBeansList.add(stationKvBeans); - List stationKvBeans1 = new ArrayList<>(); - StationKvBean stationKvBean4 = new StationKvBean(); - stationKvBean4.setKey("orderNo"); - stationKvBean4.setName("工单号"); - stationKvBean4.setValue("11111"); - stationKvBeans1.add(stationKvBean4); - - StationKvBean stationKvBean5 = new StationKvBean(); - stationKvBean5.setKey("partNo"); - stationKvBean5.setName("零件号"); - stationKvBean5.setValue("111"); - stationKvBeans1.add(stationKvBean5); - - StationKvBean stationKvBean6 = new StationKvBean(); - stationKvBean6.setKey("count"); - stationKvBean6.setName("单数"); - stationKvBean6.setValue("1111"); - stationKvBeans1.add(stationKvBean6); - stationKvBeansList.add(stationKvBeans1); - - - - //resultBean.setResultObj(stationKvBeans3); - resultBean.setResultList(stationKvBeansList); + resultBean.setResultList(productionStatisticsContext); return resultBean; } private List packDataAttrList() { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java new file mode 100644 index 0000000..f71167b --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java @@ -0,0 +1,132 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService; +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.MesProductionProcessContext; +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.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult; +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.MesRawPackageDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesRawPackagePartRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesRawPartChargingRepository; +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.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/** + * @Description : 从料桶中获取原材料 + * @Author : wangjie + **/ +@Slf4j +@Service("mesMaterialReadStepService") +public class MesMaterialReadStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + + @Autowired + private MesRawPackageDetailRepository mesRawPackageDeatilRepository; + + @Autowired + private MesRawPartChargingRepository mesRawPartChargingRepository; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取工步参数 + Optional> stepParamMap = getStepParams(reqBean); + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap); + + String equipmentCode = productionProcessContext.getCurCellEquip().getEquipmentCode(); + + // 根据设备id获取加料日志 + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getStringEqualPack(equipmentCode, "equipCode", packBean); + MesRawPackageDetail mesRawPackageDetail = mesRawPackageDeatilRepository.getByProperty(packBean); + if (mesRawPackageDetail == null) { + foundExThrow(reqBean, "原材料容器信息未配置"); + } + /** + * 查询原材料信息 + */ + List list = getListByParentDetailId(mesRawPackageDetail.getId()); + /** + * 查询料桶信息 todo + */ + /*MesRawPartCharging mesRawPartCharging = getRawPackByDetailId(mesRawPackageDetail.getId()); + if (mesRawPackageDetail == null) { + foundExThrow(reqBean, "料桶信息不存在"); + } + // + list.add(mesRawPartCharging);*/ + productionDispatchContextStepService.saveMesRawPartChargingDataContext(reqBean, list); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "读取料桶原材料成功"); + + } + + /** + * 递归查询子料桶,直到查到最终的物料 + * @param id + * @return + */ + private List getListByParentDetailId(Long id){ + List list = new ArrayList<>(); + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getNumEqualPack(id, "parentPackageDetailId", packBean); + + List parentList = mesRawPartChargingRepository.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(parentList)) { + return null; + } + for (MesRawPartCharging mesRawPartCharging : parentList) { + List chilrenList = getListByParentDetailId(mesRawPartCharging.getPackageDetailId()); + if (CollectionUtils.isEmpty(chilrenList)) { + list.addAll(parentList); + } + } + return list; + } + + /** + * 递归查询子料桶,直到查到最终的物料 + * @param id + * @return + */ + private MesRawPartCharging getRawPackByDetailId(Long id){ + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getNumEqualPack(id, "packageDetailId", packBean); + + return mesRawPartChargingRepository.getByProperty(packBean); + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java index 7f2e59c..148ffb0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java @@ -60,7 +60,11 @@ public class MesProductSnGenerateStepService extends BaseStepService { @Autowired private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; - + /**todo 有产成无进料场景 + * todo 根据装配件条码没有找到加工规则,如果需要跳过装配件绑定,直接生成条码,就需要不看加工规则,直接根据产成零件生成条码,当前设计方式就需要变更。 + * @param reqBean + * @return + */ @Override public StepResult execute(StationRequestBean reqBean) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java index a54df09..996cb9a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; @@ -70,6 +71,10 @@ public class MesProductionReocrdGenerateStepService extends BaseStepService { mesProductionRecordRepository.saveAll(mesProductionRecords); + MesProdShiftContext mesProdShiftKvBean = mesProductionDispatchContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + // 保存班次加工数量上下文 + mesProductionDispatchContextStepService.addProductionStatisticsContext(reqBean,mesProduceSns.size()); + return StepResult.getSuccessComplete(); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java index 3c136d3..684cdd8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java @@ -9,12 +9,14 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesRawPartCharging; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; +import com.google.common.base.Objects; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -35,7 +37,7 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT); } - private String getContextKey(StationRequestBean reqBean, String busiCode) { return new StringJoiner(":").add(reqBean.getOrganizeCode()).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(busiCode).toString(); } + private String getContextKey(String organizeCode, String busiCode) { return new StringJoiner(":").add(organizeCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(busiCode).toString(); } //发送设备质量信息 @Override @@ -394,29 +396,29 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp //获取上下文班次班组信息 @Override - public List getProdShiftDataContext(StationRequestBean reqBean, String workCenterCode) { - String prodShiftJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); + public List getProdShiftDataContext(String orgainzeCode, String workCenterCode) { + String prodShiftJson = getFsmBusiData(orgainzeCode, getContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); return !StringUtils.isEmpty(prodShiftJson) ? JSONObject.parseArray(prodShiftJson, StationKvBean.class) : null; } //验证上下文班次班组信息是否存在 @Override - public Boolean checkProdShiftDataIsExistContext(StationRequestBean reqBean, String workCenterCode) { - String prodShiftJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); + public Boolean checkProdShiftDataIsExistContext(String orgainzeCode, String workCenterCode) { + String prodShiftJson = getFsmBusiData(orgainzeCode, getContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); return !StringUtils.isEmpty(prodShiftJson) ? true : false; } //保存上下文班次班组信息 [JSON]List @Override - public Boolean saveProdShiftDataContext(StationRequestBean reqBean, String workCenterCode, List prodShiftDataList) { + public Boolean saveProdShiftDataContext(String organizeCode, String workCenterCode, List prodShiftDataList) { if (CollectionUtils.isEmpty(prodShiftDataList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode, JSONObject.toJSONString(prodShiftDataList)); + return saveFsmBusiData(organizeCode, getContextKey(organizeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode, JSONObject.toJSONString(prodShiftDataList)); } //删除上下文班次班组信息 @Override - public void deleteProdShiftDataContext(StationRequestBean reqBean, String workCenterCode) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); + public void deleteProdShiftDataContext(String orgainzeCode, String workCenterCode) { + deleteFsmBusiData(orgainzeCode, getContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); } //获取上下文工位加工数统计信息 @@ -433,6 +435,29 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT, JSONObject.toJSONString(productionStatisticsList)); } + @Override + public Boolean addProductionStatisticsContext(StationRequestBean reqBean, int count) { + + MesProdShiftContext mesProdShiftKvBean = getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + + List stationKvBeans = getProductionStatisticsContext(reqBean); + if (CollectionUtils.isEmpty(stationKvBeans)) { + String key = mesProdShiftKvBean.getShiftGroup() + "_" + mesProdShiftKvBean.getShiftCode(); + String name = "加工次数"; + String value = count + ""; + List generateStationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(key, name, value)); + saveProductionStatisticsContext(reqBean, generateStationKvBeans); + } else { + stationKvBeans.stream().forEach(stationKvBean -> { + if (Objects.equal(stationKvBean.getKey(), mesProdShiftKvBean.getShiftGroup() + "_" + mesProdShiftKvBean.getShiftCode())) { + stationKvBean.setValue(stationKvBean == null ? count + "" : (Integer.valueOf(stationKvBean.getValue()) + count) + ""); + } + }); + saveProductionStatisticsContext(reqBean, stationKvBeans); + } + return true; + } + //删除上下文工位加工数统计信息 @Override public void deleteProductionStatisticsContext(StationRequestBean reqBean) { @@ -478,4 +503,36 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "OUT_PRODUCE_SN_DATA_CONTEXT"); } + @Override + public List getMesRawPartChargingDataContext(StationRequestBean reqBean) { + String mesRawPartChargingDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "RAW_PART_CHARGING_DATA_CONTEXT"); + return !StringUtils.isEmpty(mesRawPartChargingDataJson) ? JSONObject.parseArray(mesRawPartChargingDataJson, MesRawPartCharging.class) : null; + } + + @Override + public Boolean saveMesRawPartChargingDataContext(StationRequestBean reqBean, List mesRawPartChargingList) { + if (CollectionUtils.isEmpty(mesRawPartChargingList)) return false; + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "RAW_PART_CHARGING_DATA_CONTEXT", JSONObject.toJSONString(mesRawPartChargingList)); + } + + @Override + public void deleteMesRawPartChargingDataContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "RAW_PART_CHARGING_DATA_CONTEXT"); + } + + @Override + public MesProdShiftContext getMesProdShiftKvBean(String orgainzeCode, String workCenterCode) { + List stationKvBeans = getProdShiftDataContext(orgainzeCode, workCenterCode); + + MesProdShiftContext mesProdShiftContext = new MesProdShiftContext(); + if (CollectionUtils.isEmpty(stationKvBeans)) { + return null; + } + StationKvBean shiftGroupKvBean = stationKvBeans.stream().filter(stationKvBean -> Objects.equal(stationKvBean.getKey(), "shiftGroup")).findFirst().orElse(null); + StationKvBean shiftCodeKvBean = stationKvBeans.stream().filter(stationKvBean -> Objects.equal(stationKvBean.getKey(), "shiftCode")).findFirst().orElse(null); + + mesProdShiftContext.setShiftCode(shiftGroupKvBean == null ? null : shiftGroupKvBean.getValue()); + mesProdShiftContext.setShiftGroup(shiftCodeKvBean == null ? null : shiftCodeKvBean.getValue()); + return mesProdShiftContext; + } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdShiftContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdShiftContext.java new file mode 100644 index 0000000..103c334 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdShiftContext.java @@ -0,0 +1,33 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.context; + +import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +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 javax.persistence.Column; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 生产过程上下文对象-生产开班记录 + */ +@Data +public class MesProdShiftContext implements Serializable { + + private static final long serialVersionUID = 1522652732930288855L; + + @ApiParam("班组代码") + private String shiftGroup; + + @ApiParam("班次代码") + private String shiftCode; + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index aa8bfc4..8da074c 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -68,6 +68,10 @@ public class MesPcnExtConstWords { public static final String EQUIP_VARIABLE_STATUS = "equipVariableStatus"; // 模具号 public static final String MOULD_NO = "mouldNo"; + // 班次 + public static final String SHIFT_CODE = "shiftCode"; + // 班组 + public static final String SHIFT_GROUP = "shiftGroup"; // 工序代码 public static final String PROCESS_CODE = "processCode"; // 生产工单号 @@ -224,7 +228,12 @@ public class MesPcnExtConstWords { public static final String PRODUCTION_STATISTICS_CONTEXT = "PRODUCTION_STATISTICS_CONTEXT"; - + //OPC_API_PARAM + public static final String OPC_LINK_URL = "OPC_LINK_URL"; + public static final String VALUE = "value"; + public static final String CLIENT_HANDLE= "clientHandle"; + public static final String CHANNEL = "channel"; + public static final String EQUIPMENT_ID = "equipmentId"; @Deprecated