diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesWorkCellMonitorLogService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesWorkCellMonitorLogService.java index d6fc89b..43bbe9b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesWorkCellMonitorLogService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesWorkCellMonitorLogService.java @@ -6,21 +6,44 @@ import cn.estsh.i3plus.ext.mes.pojo.model.report.MesWorkCellScanMonitorCondition import cn.estsh.i3plus.ext.mes.pojo.model.report.MesWorkCellScanMonitorLogModel; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipment; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLogDetail; import cn.estsh.i3plus.pojo.mes.bean.MesWcEquipment; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCellScanMonitorLog; +import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository; import cn.estsh.i3plus.pojo.mes.repository.MesWcEquipmentRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkCellScanMonitorLogRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +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.Arrays; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; @Service public class MesWorkCellMonitorLogService implements IMesWorkCellScanMonitorLogService { @Autowired - private MesWcEquipmentRepository equipmentRepository; + private MesWcEquipmentRepository wcEquipmentRepository; + + @Autowired + private MesEquipmentRepository equipmentRepository; + + @Autowired + private MesEquipmentLogDetailRepository equipmentLogDetailRepository; + + @Autowired + private MesWorkCellScanMonitorLogRepository workCellScanMonitorLogRepository; @Override public List queryWorkCellScanMonitorLogList(MesWorkCellScanMonitorConditionModel conditionModel) { @@ -29,14 +52,34 @@ public class MesWorkCellMonitorLogService implements IMesWorkCellScanMonitorLogS List conditionModelList = getConditionModelList(conditionModel, wcEquipmentList); - return null; + List resultList = new ArrayList<>(); + + for (MesWorkCellScanMonitorConditionModel item : conditionModelList) { + List itemList = getWorkCellScanMonitorLogList(item); + if (!CollectionUtils.isEmpty(itemList)) resultList.addAll(itemList); + } + + if (!CollectionUtils.isEmpty(resultList)) { + if (conditionModel.getAscOrDesc().compareTo(CommonEnumUtil.ASC_OR_DESC.ASC.getValue()) == 0) + resultList = resultList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCreateDatetime()))).sorted(Comparator.comparing(MesWorkCellScanMonitorLogModel::getCreateDatetime)).collect(Collectors.toList()); + else + resultList = resultList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCreateDatetime()))).sorted(Comparator.comparing(MesWorkCellScanMonitorLogModel::getCreateDatetime).reversed()).collect(Collectors.toList()); + } + + return (CollectionUtils.isEmpty(resultList) || conditionModel.getLimit().compareTo(resultList.size()) > 0) ? resultList : resultList.subList(0, conditionModel.getLimit()); } private List beforeCheckCondition(MesWorkCellScanMonitorConditionModel conditionModel) { - if (StringUtils.isEmpty(conditionModel.getWorkCellCode()) && StringUtils.isEmpty(conditionModel.getEquipmentCode())) MesException.throwBusiException("请输入工位代码或者设备代码进行查询!"); + if (StringUtils.isEmpty(conditionModel.getLimit())) MesException.throwBusiException("请输入查询数据量后进行查询!"); + + if (StringUtils.isEmpty(conditionModel.getCreateDatetimeStart()) || StringUtils.isEmpty(conditionModel.getCreateDatetimeEnd())) MesException.throwBusiException("请输入时间查询条件后进行查询!"); + + if (StringUtils.isEmpty(conditionModel.getWorkCellCode()) && StringUtils.isEmpty(conditionModel.getEquipmentCode())) MesException.throwBusiException("请输入工位代码或者设备代码后进行查询!"); - if (!StringUtils.isEmpty(conditionModel.getWorkCellCode()) && StringUtils.isEmpty(conditionModel.getWorkCenterCode())) MesException.throwBusiException("查询参数异常,工位[%s]未携带生产线查询条件!"); + if (!StringUtils.isEmpty(conditionModel.getWorkCellCode()) && StringUtils.isEmpty(conditionModel.getWorkCenterCode())) MesException.throwBusiException("查询参数异常,工位[%s]未携带生产线查询条件!", conditionModel.getWorkCellCode()); + + if (!StringUtils.isEmpty(conditionModel.getEquipmentCode()) && StringUtils.isEmpty(conditionModel.getEquipId())) MesException.throwBusiException("查询参数异常,设备[%s]未携带生产线查询条件!", conditionModel.getEquipmentCode()); List wcEquipmentList = getEquipmentList(conditionModel); if (!StringUtils.isEmpty(conditionModel.getWorkCellCode()) && !StringUtils.isEmpty(conditionModel.getEquipmentCode()) && @@ -56,12 +99,110 @@ public class MesWorkCellMonitorLogService implements IMesWorkCellScanMonitorLogS DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCellCode(), MesExtConstWords.WORK_CELL_CODE, packBean); DdlPreparedPack.getStringEqualPack(conditionModel.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean); - return equipmentRepository.findByHqlWhere(packBean); + return wcEquipmentRepository.findByHqlWhere(packBean); + } + + private Integer getEquipId(String organizeCode, String equipmentCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(equipmentCode, MesExtConstWords.EQUIPMENT_CODE, packBean); + MesEquipment equipment = equipmentRepository.getByProperty(packBean); + if (null == equipment || StringUtils.isEmpty(equipment.getEquipId())) MesException.throwBusiException("请检查设备[%s]信息的有效性", equipmentCode); + return equipment.getEquipId(); } private List getConditionModelList(MesWorkCellScanMonitorConditionModel conditionModel, List wcEquipmentList) { - return null; + + List conditionModelList = new ArrayList<>(); + + List logTypes = StringUtils.isEmpty(conditionModel.getLogTypes()) ? MesEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.collectValues() : Arrays.asList(conditionModel.getLogTypes().split(MesExtConstWords.COMMA)); + List monitorLogTypes = logTypes.stream().filter(o -> (null != o && !o.equals(MesEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.EQU.getValueStr()))).collect(Collectors.toList()); + + for (MesWcEquipment wcEquipment : wcEquipmentList) { + if (null == wcEquipment) continue; + + if (logTypes.contains(MesEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.EQU.getValueStr())) { + MesWorkCellScanMonitorConditionModel equConditionModel = new MesWorkCellScanMonitorConditionModel().flag(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()).copy(conditionModel).location(wcEquipment); + if (StringUtils.isEmpty(conditionModel.getEquipId())) equConditionModel.equipId(getEquipId(conditionModel.getOrganizeCode(), wcEquipment.getEquipmentCode())); + conditionModelList.add(equConditionModel); + } + + if (!CollectionUtils.isEmpty(monitorLogTypes)){ + conditionModelList.add(new MesWorkCellScanMonitorConditionModel(). + flag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).copy(conditionModel).location(wcEquipment).logTypeList(MesEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.collectMonitorValues(monitorLogTypes))); + } + + } + + return conditionModelList; } + private List getWorkCellScanMonitorLogList(MesWorkCellScanMonitorConditionModel conditionModel) { + + if (conditionModel.getFlag().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) return findWorkCellScanMonitorLogList(conditionModel); + else return findEquipmentLogDetailList(conditionModel); + + } + + private List findWorkCellScanMonitorLogList(MesWorkCellScanMonitorConditionModel conditionModel) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCellCode(), MesExtConstWords.WORK_CELL_CODE, packBean); + DdlPreparedPack.getStringEqualPack(conditionModel.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean); + DdlPreparedPack.getStringEqualPack(conditionModel.getStepCode(), MesExtConstWords.STEP_CODE, packBean); + DdlPreparedPack.getStringLikerPack(conditionModel.getScanInfo(), MesExtConstWords.SCAN_INFO, packBean); + DdlPreparedPack.getStringLikerPack(conditionModel.getWorkOrderNo(), MesExtConstWords.WORK_ORDER_NO, packBean); + DdlPreparedPack.getStringLikerPack(conditionModel.getProductSn(), MesExtConstWords.PRODUCT_SN, packBean); + DdlPreparedPack.getStringLikerPack(conditionModel.getPartNo(), MesExtConstWords.PART_NO, packBean); + DdlPreparedPack.getNumEqualPack(conditionModel.getMouldRecordId(), MesExtConstWords.MOULD_RECORD_ID, packBean); + DdlPreparedPack.getNumEqualPack(conditionModel.getMessageType(), MesExtConstWords.MESSAGE_TYPE, packBean); + DdlPreparedPack.getInPackList(conditionModel.getLogTypeList(), MesExtConstWords.LOG_TYPE, packBean); + DdlPreparedPack.timeBuilder(conditionModel.getCreateDatetimeStart(), conditionModel.getCreateDatetimeEnd(), MesExtConstWords.CREATE_DATE_TIME, packBean, true); + DdlPreparedPack.getOrderByPack(new Object[]{conditionModel.getAscOrDesc()}, new String[]{MesExtConstWords.CREATE_DATE_TIME}, packBean); + List workCellScanMonitorLogList = workCellScanMonitorLogRepository.findByHqlTopWhere(packBean, conditionModel.getLimit()); + + if (CollectionUtils.isEmpty(workCellScanMonitorLogList)) return null; + + List resultList = new ArrayList<>(); + for (MesWorkCellScanMonitorLog item : workCellScanMonitorLogList) { + if (null == item) continue; + MesWorkCellScanMonitorLogModel result = new MesWorkCellScanMonitorLogModel(); + BeanUtils.copyProperties(item, result); + result.setLogTypeName(MesEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.valueOfDescription(item.getLogType())); + result.setMessageTypeName(MesEnumUtil.WORK_CELL_SCAN_MONITOR_MESSAGE_TYPE.valueOfDescription(item.getMessageType())); + resultList.add(result); + } + + return resultList; + + } + + private List findEquipmentLogDetailList(MesWorkCellScanMonitorConditionModel conditionModel) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(conditionModel.getEquipId(), MesExtConstWords.EQUIP_ID, packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtConstWords.VARIABLE_TYPE, packBean); + DdlPreparedPack.getNumEqualPack(conditionModel.getEquipVariableId(), MesExtConstWords.EQUIP_VARIABLE_ID, packBean); + DdlPreparedPack.getStringEqualPack(conditionModel.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean); + DdlPreparedPack.getStringLikerPack(conditionModel.getEquipVariableName(), MesExtConstWords.EQUIP_VARIABLE_NAME, packBean); + DdlPreparedPack.timeBuilder(conditionModel.getCreateDatetimeStart(), conditionModel.getCreateDatetimeEnd(), MesExtConstWords.CREATE_DATE_TIME, packBean, true); + DdlPreparedPack.getOrderByPack(new Object[]{conditionModel.getAscOrDesc()}, new String[]{MesExtConstWords.CREATE_DATE_TIME}, packBean); + List equipmentLogDetailList = equipmentLogDetailRepository.findByHqlTopWhere(packBean, conditionModel.getLimit()); + + if (CollectionUtils.isEmpty(equipmentLogDetailList)) return null; + + List resultList = new ArrayList<>(); + for (MesEquipmentLogDetail item : equipmentLogDetailList) { + if (null == item) continue; + MesWorkCellScanMonitorLogModel result = new MesWorkCellScanMonitorLogModel(); + BeanUtils.copyProperties(item, result); + result.setLogTypeName(MesEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.EQU.getDescription()); + result.setMessageTypeName(MesEnumUtil.WORK_CELL_SCAN_MONITOR_MESSAGE_TYPE.TEXT.getDescription()); + resultList.add(result); + } + + return resultList; + + } } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/report/MesWorkCellScanMonitorConditionModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/report/MesWorkCellScanMonitorConditionModel.java index 2e6bbb7..0104c6c 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/report/MesWorkCellScanMonitorConditionModel.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/report/MesWorkCellScanMonitorConditionModel.java @@ -1,8 +1,13 @@ package cn.estsh.i3plus.ext.mes.pojo.model.report; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWcEquipment; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiParam; import lombok.Data; +import org.springframework.beans.BeanUtils; + +import java.util.List; @Data @ApiModel("工位扫描日志合并设备日志报表-查询条件封装") @@ -21,19 +26,19 @@ public class MesWorkCellScanMonitorConditionModel { private String workCellCode; @ApiParam(value = "设备ID") - private String equipId; + private Integer equipId; @ApiParam(value = "设备代码") private String equipmentCode; @ApiParam("设备变量ID") - private String equipVariableId; + private Long equipVariableId; @ApiParam("设备变量名称") private String equipVariableName; @ApiParam("开模记录ID") - private String mouldRecordId; + private Long mouldRecordId; @ApiParam("扫描/读取信息") private String scanInfo; @@ -51,7 +56,7 @@ public class MesWorkCellScanMonitorConditionModel { private String stepCode; @ApiParam("日志类型") - private Integer logType; + private String logTypes; @ApiParam("信息类型") private Integer messageType; @@ -59,10 +64,42 @@ public class MesWorkCellScanMonitorConditionModel { @ApiParam("查询条数") private Integer limit; + @ApiParam("查询时间正序或倒叙") + private Integer ascOrDesc = CommonEnumUtil.ASC_OR_DESC.DESC.getValue(); + @ApiParam("查询时间起始") private String createDatetimeStart; @ApiParam("查询时间截止") private String createDatetimeEnd; + @ApiParam("日志类型") + private List logTypeList; + + public MesWorkCellScanMonitorConditionModel copy(MesWorkCellScanMonitorConditionModel conditionModel) { + BeanUtils.copyProperties(conditionModel, this); + return this; + } + + public MesWorkCellScanMonitorConditionModel location(MesWcEquipment wcEquipment) { + BeanUtils.copyProperties(wcEquipment, this); + return this; + } + + public MesWorkCellScanMonitorConditionModel equipId(Integer equipId) { + this.equipId = equipId; + return this; + } + + public MesWorkCellScanMonitorConditionModel flag(Integer flag) { + this.flag = flag; + return this; + } + + public MesWorkCellScanMonitorConditionModel logTypeList(List logTypeList) { + this.logTypeList = logTypeList; + return this; + } + + } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/report/MesWorkCellScanMonitorLogModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/report/MesWorkCellScanMonitorLogModel.java index e51ea51..78f22ec 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/report/MesWorkCellScanMonitorLogModel.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/report/MesWorkCellScanMonitorLogModel.java @@ -8,6 +8,15 @@ import lombok.Data; @ApiModel("工位扫描日志合并设备日志报表-查询条件封装") public class MesWorkCellScanMonitorLogModel { + @ApiParam("组织代码") + private String organizeCode; + + @ApiParam("创建时间") + private String createDatetime; + + @ApiParam("创建人") + private String createUser; + @ApiParam("开模记录ID") private Long mouldRecordId; @@ -83,7 +92,4 @@ public class MesWorkCellScanMonitorLogModel { @ApiParam("信息类型") private String messageTypeName; - @ApiParam("设备质量") - private String qualityName; - } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index ae8f5f5..675073c 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -33,6 +33,16 @@ public class MesExtConstWords { public static final String WORK_CELL_NAME = "workCellName"; // 设备代码 public static final String EQUIPMENT_CODE = "equipmentCode"; + // 开模记录ID + public static final String MOULD_RECORD_ID = "mouldRecordId"; + // 设备数据变量ID + public static final String EQUIP_VARIABLE_ID = "equipVariableId"; + // 设备数据变量名称 + public static final String EQUIP_VARIABLE_NAME = "equipVariableName"; + // 设备ID + public static final String EQUIP_ID = "equipId"; + // 变量类型 + public static final String VARIABLE_TYPE = "variableType"; // 工位等级 public static final String GRADE = "grade"; // 是否禁用 @@ -57,6 +67,8 @@ public class MesExtConstWords { public static final String PPT_CODE = "pptCode"; //生产工单号 public static final String WORK_ORDER_NO = "workOrderNo"; + //零件条码 + public static final String PRODUCT_SN = "productSn"; //工单状态 public static final String WORK_ORDER_STATUS = "workOrderStatus"; //工单类型 @@ -107,6 +119,14 @@ public class MesExtConstWords { public static final String RESULT_BIG = "RESULT"; //序号 public static final String INDEX = "index"; + //扫描信息 + public static final String SCAN_INFO = "scanInfo"; + //工步代码 + public static final String STEP_CODE = "stepCode"; + //日志类型 + public static final String LOG_TYPE = "logType"; + //信息类型 + public static final String MESSAGE_TYPE = "messageType"; //时间[开始/结束]条件 public static final String START_TIME_START = "startTimeStart";