diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdShiftRecordServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdShiftRecordServiceImpl.java index 59f896d..4e1abe9 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdShiftRecordServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdShiftRecordServiceImpl.java @@ -1,8 +1,10 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.util.MesConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; @@ -10,15 +12,17 @@ import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord; -import cn.estsh.i3plus.pojo.mes.repository.MesProdShiftRecordRepository; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.util.List; +import java.util.Objects; /** @@ -33,6 +37,15 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService @Autowired private MesProdShiftRecordRepository mesProdShiftRecordRDao; + @Autowired + private MesConfigRepository configRepository; + @Autowired + private MesDowntimeRecordRepository mesDowntimeRecordRDao; + @Autowired + private MesEquipmentRepository mesEquipmentRDao; + + @Autowired + private MesWcEquipmentRepository wcEquipmentRepository; @Override public ListPager queryMesProdShiftRecordByPager(MesProdShiftRecord bean, Pager pager) { @@ -41,9 +54,9 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getShiftGroup(), "shiftGroup", packBean); DdlPreparedPack.getStringEqualPack(bean.getShiftCode(), "shiftCode", packBean); - if(!StringUtil.isEmpty(bean.orderBy())){ + if (!StringUtil.isEmpty(bean.orderBy())) { packBean.setOrderByStr(bean.orderBy()); - }else { + } else { DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); } pager = PagerHelper.getPager(pager, mesProdShiftRecordRDao.findByHqlWhereCount(packBean)); @@ -67,12 +80,13 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) .setErrorDetail("开关班记录产线【%s】班组代码【%s】已经存在,请检查数据", - item.getWorkCenterCode(),item.getShiftGroup()) + item.getWorkCenterCode(), item.getShiftGroup()) .build(); } ConvertBean.serviceModelInitialize(item, AuthUtil.getSessionUser().getUserName()); mesProdShiftRecordRDao.save(item); } + @Override public void saveMesProdShiftRecord(MesProdShiftRecord item, String organizeCode) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); @@ -88,7 +102,7 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) .setErrorDetail("开关班记录产线【%s】班组代码【%s】 不存在,请检查数据", - item.getWorkCenterCode(),item.getShiftGroup()) + item.getWorkCenterCode(), item.getShiftGroup()) .build(); } mesProdShiftRecord.setShiftGroup(item.getShiftGroup()); @@ -96,6 +110,73 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService mesProdShiftRecord.setEndTime(item.getEndTime()); ConvertBean.serviceModelUpdate(mesProdShiftRecord, AuthUtil.getSessionUser().getUserName()); mesProdShiftRecordRDao.save(mesProdShiftRecord); + //结班后, 系统生产一条停机记录,原因:无订单停机 + MesConfig reasonCfg = configRepository.getByProperty( + new String[]{"cfgKey", "organizeCode", "isValid", "isDeleted"}, + new Object[]{ "MES_DOWNTIME_RECORD_SHIFT_REASON", organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()}); + + String reason = ""; + if (!Objects.isNull(reasonCfg) && StringUtils.isEmpty(reasonCfg.getCfgValue())) { + reason = reasonCfg.getCfgValue(); + } + MesConfig typeCfg = configRepository.getByProperty( + new String[]{"cfgKey", "organizeCode", "isValid", "isDeleted"}, + new Object[]{"MES_DOWNTIME_RECORD_SHIFT_TYPE", organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()}); + String type = ""; + if (!Objects.isNull(typeCfg) && StringUtils.isEmpty(typeCfg.getCfgValue())) { + type = typeCfg.getCfgValue(); + } + List wcEquipmentDbList = wcEquipmentRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), item.getWorkCenterCode()}); + + for (MesWcEquipment mesWcEquipment : wcEquipmentDbList) { + MesEquipment mesEquipment = mesEquipmentRDao.getByProperty( + new String[]{MesConstWords.ORGANIZE_CODE, MesPcnExtConstWords.EQUIPMENT_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID}, + new Object[]{organizeCode, mesWcEquipment.getEquipmentCode(), + CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), + CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + + DdlPackBean ddlPackBeanDowntime = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesEquipment.getEquipmentCode(), "equipmentCode", ddlPackBeanDowntime); + if (!StringUtil.isEmpty(reason)) { + DdlPreparedPack.getStringEqualPack(reason, "reasonCode", ddlPackBeanDowntime); + } + if (!StringUtil.isEmpty(type)) { + DdlPreparedPack.getStringEqualPack(type, "reasonTypeCode", ddlPackBeanDowntime); + } + MesDowntimeRecord mesDowntimeRecordDao = mesDowntimeRecordRDao.getByProperty(ddlPackBeanDowntime); + if (StringUtil.isEmpty(mesDowntimeRecordDao)) { + //新增设备停机记录 + MesDowntimeRecord mesDowntimeRecord = new MesDowntimeRecord(); + mesDowntimeRecord.setOrganizeCode(organizeCode); + mesDowntimeRecord.setEquipId(mesEquipment.getEquipId()); + mesDowntimeRecord.setEquipmentCode(mesEquipment.getEquipmentCode()); + mesDowntimeRecord.setAreaCode(item.getAreaCode()); + mesDowntimeRecord.setWorkCenterCode(item.getWorkCenterCode()); + mesDowntimeRecord.setWorkCellCode(mesWcEquipment.getWorkCellCode()); + mesDowntimeRecord.setReasonCode(StringUtil.isEmpty(reason) ? "" : reason); + mesDowntimeRecord.setReasonTypeCode(StringUtil.isEmpty(type) ? "" : type); + ConvertBean.serviceModelInitialize(mesDowntimeRecord, AuthUtil.getSessionUser().getUserName()); + + mesDowntimeRecordRDao.insert(mesDowntimeRecord); +// //将当前新增数据的create_date_time时间些到上一条记录的modify_date_time字段 +// DdlPackBean ddlPackBeanOt = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getStringEqualPack(mesEquipment.getEquipmentCode(), "equipmentCode", ddlPackBeanOt); +// ddlPackBeanOt.setWhereAppend(ddlPackBeanOt.getWhereAppend() + " order by createDatetime desc "); +// MesDowntimeRecord mesDowntimeRecordOt = mesDowntimeRecordRDao.getByProperty(ddlPackBeanOt); +// if (StringUtil.isEmpty(mesDowntimeRecordOt)) { +// mesDowntimeRecordOt.setModifyDatetime(mesDowntimeRecord.getCreateDatetime()); +// mesDowntimeRecordOt.setModifyUser(AuthUtil.getSessionUser().getUserName()); +// mesDowntimeRecordRDao.update(mesDowntimeRecordOt); +// } + } else { + ConvertBean.serviceModelUpdate(mesDowntimeRecordDao, "MesDowntimeRecordJob"); + mesDowntimeRecordRDao.update(mesDowntimeRecordDao); + } + } + + } @Override diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionEquDowntimeService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionEquDowntimeService.java new file mode 100644 index 0000000..cd23149 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionEquDowntimeService.java @@ -0,0 +1,138 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.util.MesConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @Description : 工位参数按钮事件接口实现【设备停机】FUNCTION_EQU_DOWNTIME + **/ +@Service +public class MesFunctionEquDowntimeService extends BaseSwsService implements IFsmModuleFunctionService { + + @Autowired + private IMesBasDowntimeReasonRepository downtimeReasonRDao; + @Autowired + private IMesBasDowntimeReasonTypeRepository downtimeReasonTypeRDao; + @Autowired + private MesConfigRepository configRepository; + @Autowired + private MesDowntimeRecordRepository mesDowntimeRecordRDao; + + @Autowired + private MesEquipmentRepository mesEquipmentRDao; + + @Autowired + private MesWcEquipmentRepository wcEquipmentRepository; + @Override + public Object doCustomApiDispatch(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + String functionValue = buttonDynamicModel.getFunctionValue(); + if (!StringUtil.isEmpty(functionValue)) { + this.sendMessage(reqBean, resultBean.isWs(false).writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(buttonDynamicModel.getFunctionValue()), + String.format("生产线[%s]工位[%s]%s成功,提交信息[%s]", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), buttonDynamicModel.getFunctionValue()), + MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + //JSON 调用新增接口 + String userInfo = reqBean.getUserInfo(); + String organizeCode = reqBean.getOrganizeCode(); + JSONObject jsonObject= JSONUtil.parseObj(functionValue); + String reason = jsonObject.getStr("reasonCode"); + String type = jsonObject.getStr("reasonTypeCode"); + if(StringUtil.isEmpty(reason)||StringUtil.isEmpty(type)){ + return true; + } + MesWcEquipment wcEquipmentDbList = wcEquipmentRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, + MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CELL_CODE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), + reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()}); + MesEquipment mesEquipment = mesEquipmentRDao.getByProperty( + new String[]{MesConstWords.ORGANIZE_CODE,MesPcnExtConstWords.EQUIPMENT_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID}, + new Object[]{organizeCode, wcEquipmentDbList.getEquipmentCode(), + CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), + CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + + DdlPackBean ddlPackBeanDowntime = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesEquipment.getEquipmentCode(), "equipmentCode", ddlPackBeanDowntime); + if (!StringUtil.isEmpty(reason)) { + DdlPreparedPack.getStringEqualPack(reason, "reasonCode", ddlPackBeanDowntime); + } + if (!StringUtil.isEmpty(type)) { + DdlPreparedPack.getStringEqualPack(type, "reasonTypeCode", ddlPackBeanDowntime); + } + MesDowntimeRecord mesDowntimeRecordDao = mesDowntimeRecordRDao.getByProperty(ddlPackBeanDowntime); + if (StringUtil.isEmpty(mesDowntimeRecordDao)) { + //新增设备停机记录 + MesDowntimeRecord mesDowntimeRecord = new MesDowntimeRecord(); + mesDowntimeRecord.setOrganizeCode(organizeCode); + mesDowntimeRecord.setEquipId(mesEquipment.getEquipId()); + mesDowntimeRecord.setEquipmentCode(mesEquipment.getEquipmentCode()); + mesDowntimeRecord.setAreaCode(reqBean.getAreaCode()); + mesDowntimeRecord.setWorkCenterCode(reqBean.getWorkCenterCode()); + mesDowntimeRecord.setWorkCellCode(reqBean.getWorkCellCode()); + mesDowntimeRecord.setReasonCode(StringUtil.isEmpty(reason) ? "" : reason); + mesDowntimeRecord.setReasonTypeCode(StringUtil.isEmpty(type) ? "" : type); + ConvertBean.serviceModelInitialize(mesDowntimeRecord, userInfo); + + mesDowntimeRecordRDao.insert(mesDowntimeRecord); +// //将当前新增数据的create_date_time时间些到上一条记录的modify_date_time字段 +// DdlPackBean ddlPackBeanOt = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getStringEqualPack(mesEquipment.getEquipmentCode(), "equipmentCode", ddlPackBeanOt); +// ddlPackBeanOt.setWhereAppend(ddlPackBeanOt.getWhereAppend() + " order by createDatetime desc "); +// MesDowntimeRecord mesDowntimeRecordOt = mesDowntimeRecordRDao.getByProperty(ddlPackBeanOt); +// if (StringUtil.isEmpty(mesDowntimeRecordOt)) { +// mesDowntimeRecordOt.setModifyDatetime(mesDowntimeRecord.getCreateDatetime()); +// mesDowntimeRecordOt.setModifyUser(userInfo); +// mesDowntimeRecordRDao.update(mesDowntimeRecordOt); +// } + } else { + ConvertBean.serviceModelUpdate(mesDowntimeRecordDao, "MesDowntimeRecordJob"); + mesDowntimeRecordRDao.update(mesDowntimeRecordDao); + } + return true; + } else { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); + List downtimeReasonTypeList = downtimeReasonTypeRDao.findByHqlWhere(packBean); + if (!CollectionUtils.isEmpty(downtimeReasonTypeList)) { + //查对应原因 + List mesDowntimeReasonList = downtimeReasonRDao.findByProperty( + new String[]{"organizeCode", "isDeleted", "isValid"}, + new Object[]{reqBean.getOrganizeCode(), + CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), + CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + + Map> reasonMap = mesDowntimeReasonList.stream().collect(Collectors.groupingBy(MesDowntimeReason::getReasonTypeCode)); + + for (MesDowntimeReasonType mesDowntimeReasonType : downtimeReasonTypeList) { + if (!StringUtil.isEmpty(reasonMap.get(mesDowntimeReasonType.getReasonTypeCode()))) { + mesDowntimeReasonType.setDowntimeReasonList(reasonMap.get(mesDowntimeReasonType.getReasonTypeCode())); + } + } + } + return downtimeReasonTypeList; + } + } + +}