|
|
@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesProduceSnService;
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService;
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService;
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.busi.report.IMesYfReportService;
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.busi.report.IMesYfReportService;
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IMesYfReportDao;
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IMesYfReportDao;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt;
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesTraceabilityTemp;
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesTraceabilityTemp;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportConditionModel;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportConditionModel;
|
|
|
@ -25,6 +26,7 @@ import cn.estsh.i3plus.pojo.mes.repository.*;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
import cn.estsh.impp.framework.boot.util.ResultBean;
|
|
|
|
import cn.estsh.impp.framework.boot.util.ResultBean;
|
|
|
|
import jodd.util.StringUtil;
|
|
|
|
import jodd.util.StringUtil;
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@ -47,6 +49,7 @@ import java.util.stream.Collectors;
|
|
|
|
* @Modify:
|
|
|
|
* @Modify:
|
|
|
|
**/
|
|
|
|
**/
|
|
|
|
@Service
|
|
|
|
@Service
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
public class MesYfReportServiceImpl implements IMesYfReportService {
|
|
|
|
public class MesYfReportServiceImpl implements IMesYfReportService {
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
@ -73,6 +76,9 @@ public class MesYfReportServiceImpl implements IMesYfReportService {
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
private MesWorkCellScanMonitorLogRepository mesWorkCellScanMonitorLogRepository;
|
|
|
|
private MesWorkCellScanMonitorLogRepository mesWorkCellScanMonitorLogRepository;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private MesProcessRepository mesProcessRepository;
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public ListPager<MesDeviceDataQueryReportResultModel> queryMesDeviceDataByPager(MesDeviceDataQueryReportConditionModel queryReportModel, Pager pager) {
|
|
|
|
public ListPager<MesDeviceDataQueryReportResultModel> queryMesDeviceDataByPager(MesDeviceDataQueryReportConditionModel queryReportModel, Pager pager) {
|
|
|
|
ListPager<MesDeviceDataQueryReportResultModel> mesDeviceDataQueryReportResultModelListPager =
|
|
|
|
ListPager<MesDeviceDataQueryReportResultModel> mesDeviceDataQueryReportResultModelListPager =
|
|
|
@ -132,72 +138,89 @@ public class MesYfReportServiceImpl implements IMesYfReportService {
|
|
|
|
public List<MesTraceabilityReportModel> findTraceabilityReport(MesProduceSn mesProduceSn) {
|
|
|
|
public List<MesTraceabilityReportModel> findTraceabilityReport(MesProduceSn mesProduceSn) {
|
|
|
|
DdlPackBean packBean = getDdlPackBean(mesProduceSn);
|
|
|
|
DdlPackBean packBean = getDdlPackBean(mesProduceSn);
|
|
|
|
//查询条码记录表
|
|
|
|
//查询条码记录表
|
|
|
|
List<MesProduceSn> produceSnList = mesProduceSnService.findMesProduceSn(mesProduceSn.getOrganizeCode(), mesProduceSn.getProductSn());
|
|
|
|
MesProduceSn produceSn = mesProduceSnService.findMesProduceSn(mesProduceSn.getOrganizeCode(), mesProduceSn.getProductSn()).iterator().next();
|
|
|
|
Map<String, MesProduceSn> mesProduceSnMap = produceSnList.stream().collect(Collectors.toMap(MesProduceSn::getPartNo, t -> t));
|
|
|
|
|
|
|
|
//设备加工记录表
|
|
|
|
//设备加工记录表
|
|
|
|
List<MesProductionRecord> productionRecordList = mesProductionRecordService.findMesProductionRecord(mesProduceSn.getOrganizeCode(), mesProduceSn.getProductSn());
|
|
|
|
List<MesProductionRecord> productionRecordList = mesProductionRecordService.findMesProductionRecord(mesProduceSn.getOrganizeCode(), mesProduceSn.getProductSn());
|
|
|
|
Map<String, List<MesProductionRecord>> productionRecordMap = productionRecordList.stream().collect(Collectors.groupingBy(MesProductionRecord::getPartNo));
|
|
|
|
List<String> processCodeList = productionRecordList.stream().map(MesProductionRecord::getProcessCode).filter(StringUtil::isNotEmpty).collect(Collectors.toList());
|
|
|
|
//装配记录表
|
|
|
|
//装配记录表
|
|
|
|
List<MesProductionAssembly> productionAssemblyList = mesProductionAssemblyRepository.findByHqlWhere(packBean);
|
|
|
|
List<MesProductionAssembly> productionAssemblyList = mesProductionAssemblyRepository.findByHqlWhere(packBean);
|
|
|
|
Map<String, List<MesProductionAssembly>> productionAssemblyMap = CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().collect(Collectors.groupingBy(t -> t.getPartNo() + t.getWorkCenterCode() + t.getWorkCellCode() + t.getEquipmentCode()));
|
|
|
|
Map<String, List<MesProductionAssembly>> productionAssemblyMap = CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().collect(Collectors.groupingBy(t -> t.getWorkCenterCode() + t.getWorkCellCode() + t.getEquipmentCode()));
|
|
|
|
//工位扫描监控日志
|
|
|
|
//工位扫描监控日志
|
|
|
|
List<MesWorkCellScanMonitorLog> mesWorkCellScanMonitorLogs = mesWorkCellScanMonitorLogRepository.findByHqlWhere(packBean);
|
|
|
|
List<MesWorkCellScanMonitorLog> mesWorkCellScanMonitorLogs = mesWorkCellScanMonitorLogRepository.findByHqlWhere(packBean);
|
|
|
|
Map<String, List<MesWorkCellScanMonitorLog>> mesWorkCellScanMonitorMap = CollectionUtils.isEmpty(mesWorkCellScanMonitorLogs) ? null : mesWorkCellScanMonitorLogs.stream().collect(Collectors.groupingBy(t -> t.getPartNo() + t.getWorkCenterCode() + t.getWorkCellCode() + t.getEquipmentCode()));
|
|
|
|
Map<String, List<MesWorkCellScanMonitorLog>> mesWorkCellScanMonitorMap = CollectionUtils.isEmpty(mesWorkCellScanMonitorLogs) ? null : mesWorkCellScanMonitorLogs.stream().collect(Collectors.groupingBy(t -> t.getWorkCenterCode() + t.getWorkCellCode() + t.getEquipmentCode()));
|
|
|
|
|
|
|
|
//查询工序名称
|
|
|
|
|
|
|
|
Map<String, MesProcess> processMap = getMesProcessMap(mesProduceSn, processCodeList);
|
|
|
|
//数据组装
|
|
|
|
//数据组装
|
|
|
|
List<MesTraceabilityReportModel> mesTraceabilityReportModelList = new ArrayList<>();
|
|
|
|
List<MesTraceabilityReportModel> mesTraceabilityReportModelList = new ArrayList<>();
|
|
|
|
for (Map.Entry<String, MesProduceSn> produceSnEntry : mesProduceSnMap.entrySet()) {
|
|
|
|
MesTraceabilityReportModel mesTraceabilityReportModel = new MesTraceabilityReportModel();
|
|
|
|
MesTraceabilityReportModel mesTraceabilityReportModel = new MesTraceabilityReportModel();
|
|
|
|
BeanUtils.copyProperties(produceSn, mesTraceabilityReportModel);
|
|
|
|
BeanUtils.copyProperties(produceSnEntry.getValue(), mesTraceabilityReportModel);
|
|
|
|
mesTraceabilityReportModel.setProdType(MesExtEnumUtil.TRACEABILITY_REPORT_PROD_TYPE.NO_SORT.getValue());
|
|
|
|
mesTraceabilityReportModel.setProdType(MesExtEnumUtil.TRACEABILITY_REPORT_PROD_TYPE.NO_SORT.getValue());
|
|
|
|
int duration = 0;
|
|
|
|
if (productionRecordMap.containsKey(produceSnEntry.getKey())) {
|
|
|
|
for (MesProductionRecord mesProductionRecord : productionRecordList) {
|
|
|
|
List<MesProductionRecord> mesProductionRecordList = productionRecordMap.get(produceSnEntry.getKey());
|
|
|
|
MesTraceabilityReportDataModel dataModel = new MesTraceabilityReportDataModel();
|
|
|
|
int duration = 0;
|
|
|
|
BeanUtils.copyProperties(mesProductionRecord, dataModel);
|
|
|
|
for (MesProductionRecord mesProductionRecord : mesProductionRecordList) {
|
|
|
|
//持续时间
|
|
|
|
MesTraceabilityReportDataModel dataModel = new MesTraceabilityReportDataModel();
|
|
|
|
if (StringUtil.isNotEmpty(dataModel.getStartDateTime()) && StringUtil.isNotEmpty(dataModel.getCompleteDateTime())) {
|
|
|
|
BeanUtils.copyProperties(mesProductionRecord, dataModel);
|
|
|
|
dataModel.setDuration(getTimeDifference(dataModel.getStartDateTime(), dataModel.getCompleteDateTime()));
|
|
|
|
//持续时间
|
|
|
|
dataModel.setDurationStr(dateFormat(dataModel.getDuration()));
|
|
|
|
if (StringUtil.isNotEmpty(dataModel.getStartDateTime()) && StringUtil.isNotEmpty(dataModel.getCompleteDateTime())) {
|
|
|
|
duration += dataModel.getDuration();
|
|
|
|
dataModel.setDuration(getTimeDifference(dataModel.getStartDateTime(), dataModel.getCompleteDateTime()));
|
|
|
|
|
|
|
|
dataModel.setDurationStr(dateFormat(dataModel.getDuration()));
|
|
|
|
|
|
|
|
duration += dataModel.getDuration();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//装配记录表
|
|
|
|
|
|
|
|
String key = mesProductionRecord.getPartNo() + mesProductionRecord.getWorkCenterCode() + mesProductionRecord.getWorkCellCode() + mesProductionRecord.getEquipmentCode();
|
|
|
|
|
|
|
|
if (!Objects.isNull(productionAssemblyMap) && productionAssemblyMap.containsKey(key)) {
|
|
|
|
|
|
|
|
dataModel.setProductionAssemblyList(productionAssemblyMap.get(key));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//工位扫描监控日志
|
|
|
|
|
|
|
|
if (!Objects.isNull(mesWorkCellScanMonitorMap) && mesWorkCellScanMonitorMap.containsKey(key)) {
|
|
|
|
|
|
|
|
dataModel.setMesWorkCellScanMonitorLogs(mesWorkCellScanMonitorMap.get(key));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.getMesTraceabilityReportDataModelList().add(dataModel);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//开始时间
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setProduceBegin(mesProductionRecordList.iterator().next().getStartDateTime());
|
|
|
|
|
|
|
|
//生产状态
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setProdStatus(mesTraceabilityReportModel.getSnStatus());
|
|
|
|
|
|
|
|
//结束时间
|
|
|
|
|
|
|
|
if (mesTraceabilityReportModel.getSnStatus() >= MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) {
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setProdStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue());
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setProduceEnd(mesProductionRecordList.get(mesProductionRecordList.size() - 1).getCompleteDateTime());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setDurationStr(dateFormat(duration));
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setDuration(duration);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//生成PDF文件并上传
|
|
|
|
//装配记录表
|
|
|
|
try {
|
|
|
|
String key = mesProductionRecord.getWorkCenterCode() + mesProductionRecord.getWorkCellCode() + mesProductionRecord.getEquipmentCode();
|
|
|
|
mesTraceabilityReportModel.setUrl(MesTraceabilityTemp.getMesTraceabilityTemp(mesTraceabilityReportModel));
|
|
|
|
if (!Objects.isNull(productionAssemblyMap) && productionAssemblyMap.containsKey(key)) {
|
|
|
|
} catch (IOException e) {
|
|
|
|
dataModel.setProductionAssemblyList(productionAssemblyMap.get(key));
|
|
|
|
MesException.throwMesBusiException("删除文件:生成PDF文件失败");
|
|
|
|
}
|
|
|
|
|
|
|
|
//工位扫描监控日志
|
|
|
|
|
|
|
|
if (!Objects.isNull(mesWorkCellScanMonitorMap) && mesWorkCellScanMonitorMap.containsKey(key)) {
|
|
|
|
|
|
|
|
dataModel.setMesWorkCellScanMonitorLogs(mesWorkCellScanMonitorMap.get(key));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mesTraceabilityReportModelList.add(mesTraceabilityReportModel);
|
|
|
|
//查询工序名称
|
|
|
|
|
|
|
|
if(StringUtil.isNotEmpty(dataModel.getProcessCode())){
|
|
|
|
|
|
|
|
if(!Objects.isNull(processMap) && processMap.containsKey(dataModel.getProcessCode())){
|
|
|
|
|
|
|
|
dataModel.setProcessName(processMap.get(dataModel.getProcessCode()).getProcessName());
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
dataModel.setProcessName(dataModel.getProcessCode());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.getMesTraceabilityReportDataModelList().add(dataModel);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//开始时间
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setProduceBegin(productionRecordList.iterator().next().getStartDateTime());
|
|
|
|
|
|
|
|
//生产状态
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setProdStatus(mesTraceabilityReportModel.getSnStatus());
|
|
|
|
|
|
|
|
//结束时间
|
|
|
|
|
|
|
|
if (mesTraceabilityReportModel.getSnStatus() >= MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) {
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setProdStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue());
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setProduceEnd(productionRecordList.get(productionRecordList.size() - 1).getCompleteDateTime());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setDurationStr(dateFormat(duration));
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setDuration(duration);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//生成PDF文件并上传
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
mesTraceabilityReportModel.setUrl(MesTraceabilityTemp.getMesTraceabilityTemp(mesTraceabilityReportModel));
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
MesException.throwMesBusiException("删除文件:生成PDF文件失败");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
mesTraceabilityReportModelList.add(mesTraceabilityReportModel);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return mesTraceabilityReportModelList;
|
|
|
|
return mesTraceabilityReportModelList;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Map<String, MesProcess> getMesProcessMap(MesProduceSn mesProduceSn, List<String> processCodeList) {
|
|
|
|
|
|
|
|
Map<String, MesProcess> processMap = null;
|
|
|
|
|
|
|
|
if(!CollectionUtils.isEmpty(processCodeList)){
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
processMap = BeanMapUtilsExt.getBeanMap(mesProcessRepository, "processCode", mesProduceSn.getOrganizeCode(), processCodeList, "工序");
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
log.info(e.getMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return processMap;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private DdlPackBean getDdlPackBean(MesProduceSn mesProduceSn) {
|
|
|
|
private DdlPackBean getDdlPackBean(MesProduceSn mesProduceSn) {
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode());
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode());
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesProduceSn.getProductSn(), "productSn", packBean);
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesProduceSn.getProductSn(), "productSn", packBean);
|
|
|
|