package org.jeecg.modules.mdc.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import org.apache.commons.lang3.StringUtils;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.modules.mdc.dto.*;
|
import org.jeecg.modules.mdc.entity.MdcEquipment;
|
import org.jeecg.modules.mdc.entity.MdcUtilizationRate;
|
import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper;
|
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
|
import org.jeecg.modules.mdc.service.IMdcUtilizationRateService;
|
import org.jeecg.modules.mdc.service.MdcEfficiencyReportService;
|
import org.jeecg.modules.mdc.util.DateUtils;
|
import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo;
|
import org.jeecg.modules.mdc.vo.MdcEfficiencyReportShiftQueryVo;
|
import org.jeecg.modules.mdc.vo.MdcEfficiencyVo;
|
import org.jeecg.modules.system.entity.MdcProduction;
|
import org.jeecg.modules.system.entity.SysDepart;
|
import org.jeecg.modules.system.service.IMdcProductionService;
|
import org.jeecg.modules.system.service.ISysDepartService;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.*;
|
|
/**
|
* @author: LiuS
|
* @create: 2023-06-16 09:52
|
*/
|
@Service
|
public class MdcEfficiencyReportServiceImpl implements MdcEfficiencyReportService {
|
|
@Resource
|
private IMdcEquipmentService mdcEquipmentService;
|
|
@Resource
|
private MdcEfficiencyReportMapper mdcEfficiencyReportMapper;
|
|
@Resource
|
private IMdcUtilizationRateService mdcUtilizationRateService;
|
|
@Resource
|
private ISysDepartService sysDepartService;
|
|
@Resource
|
private IMdcProductionService mdcProductionService;
|
|
/**
|
* 利用率报表
|
*
|
* @param userId
|
* @param vo
|
* @return
|
*/
|
@Override
|
public MdcEfficiencyVo efficiencyList(String userId, MdcEfficiencyReportQueryVo vo) {
|
MdcEfficiencyVo result = new MdcEfficiencyVo();
|
List<MdcEfficiencyListDto> listDtos = new ArrayList<>();
|
List<String> equipmentIds = new ArrayList<>();
|
if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) {
|
if ("2".equals(vo.getTypeTree())) {
|
// 部门层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId());
|
} else {
|
// 产线层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId());
|
}
|
} else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
|
// 单台设备信息
|
vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
|
} else {
|
// 查询用户拥有的所有设备信息
|
if ("2".equals(vo.getTypeTree())) {
|
// 部门层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
|
} else {
|
// 产线层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
|
}
|
}
|
if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
|
vo.setEquipmentIdList(equipmentIds);
|
}
|
|
List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime()));
|
result.setDates(dates);
|
|
if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
|
result.setMdcEfficiencyList(listDtos);
|
} else {
|
// 查询利用率数据
|
List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo);
|
// 利用率等级
|
List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
|
|
// 封装结果
|
if ("2".equals(vo.getTypeTree())) {
|
// 部门层级
|
List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
|
// 查询所有部门信息
|
List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
|
|
for (MdcEquDepDto mdcEquDepDto : equipmentList) {
|
MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
|
mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
|
mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
|
mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
|
switch (mdcEquDepDto.getOrgType()) {
|
case "1":
|
mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName());
|
break;
|
case "2":
|
mdcEfficiencyListDto.setLevel2(mdcEquDepDto.getDepartName());
|
break;
|
case "3":
|
mdcEfficiencyListDto.setLevel3(mdcEquDepDto.getDepartName());
|
break;
|
default:
|
}
|
|
SysDepart sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny().orElse(null);
|
if (sysDepart != null) {
|
switch (sysDepart.getOrgType()) {
|
case "1":
|
mdcEfficiencyListDto.setLevel1(sysDepart.getDepartName());
|
break;
|
case "2":
|
mdcEfficiencyListDto.setLevel2(sysDepart.getDepartName());
|
break;
|
case "3":
|
mdcEfficiencyListDto.setLevel3(sysDepart.getDepartName());
|
break;
|
default:
|
}
|
if (StringUtils.isNotEmpty(sysDepart.getParentId())) {
|
departList.stream().filter(depart -> depart.getId().equals(sysDepart.getParentId())).findAny().ifPresent(depart1 -> {
|
switch (depart1.getOrgType()) {
|
case "1":
|
mdcEfficiencyListDto.setLevel1(depart1.getDepartName());
|
break;
|
case "2":
|
mdcEfficiencyListDto.setLevel2(depart1.getDepartName());
|
break;
|
case "3":
|
mdcEfficiencyListDto.setLevel3(depart1.getDepartName());
|
break;
|
default:
|
}
|
});
|
}
|
}
|
List<MdcEfficiencyResultDto> list = new ArrayList<>();
|
for (String date : dates) {
|
list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList));
|
}
|
mdcEfficiencyListDto.setDataList(list);
|
listDtos.add(mdcEfficiencyListDto);
|
}
|
} else {
|
// 产线层级
|
List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
|
// 查询所有产线信息
|
List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
|
|
for (MdcEquProDto mdcEquProDto : equipmentList) {
|
MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
|
mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
|
mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
|
mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
|
switch (mdcEquProDto.getOrgType()) {
|
case "1":
|
mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName());
|
break;
|
case "2":
|
mdcEfficiencyListDto.setLevel2(mdcEquProDto.getProductionName());
|
break;
|
case "3":
|
mdcEfficiencyListDto.setLevel3(mdcEquProDto.getProductionName());
|
break;
|
default:
|
}
|
MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null);
|
if (mdcProduction != null) {
|
switch (mdcProduction.getOrgType()) {
|
case "1":
|
mdcEfficiencyListDto.setLevel1(mdcProduction.getProductionName());
|
break;
|
case "2":
|
mdcEfficiencyListDto.setLevel2(mdcProduction.getProductionName());
|
break;
|
case "3":
|
mdcEfficiencyListDto.setLevel3(mdcProduction.getProductionName());
|
break;
|
default:
|
}
|
if (StringUtils.isNotEmpty(mdcProduction.getParentId())) {
|
productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> {
|
switch (production1.getOrgType()) {
|
case "1":
|
mdcEfficiencyListDto.setLevel1(production1.getProductionName());
|
break;
|
case "2":
|
mdcEfficiencyListDto.setLevel2(production1.getProductionName());
|
break;
|
case "3":
|
mdcEfficiencyListDto.setLevel3(production1.getProductionName());
|
break;
|
default:
|
}
|
});
|
}
|
}
|
List<MdcEfficiencyResultDto> list = new ArrayList<>();
|
for (String date : dates) {
|
list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList));
|
}
|
mdcEfficiencyListDto.setDataList(list);
|
listDtos.add(mdcEfficiencyListDto);
|
}
|
}
|
|
result.setMdcEfficiencyList(listDtos);
|
}
|
|
return result;
|
}
|
|
/**
|
* 开机率报表
|
*
|
* @param userId
|
* @param vo
|
* @return
|
*/
|
@Override
|
public MdcEfficiencyVo efficiencyPOList(String userId, MdcEfficiencyReportQueryVo vo) {
|
MdcEfficiencyVo result = new MdcEfficiencyVo();
|
List<MdcEfficiencyListDto> listDtos = new ArrayList<>();
|
List<String> equipmentIds = new ArrayList<>();
|
if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) {
|
if ("2".equals(vo.getTypeTree())) {
|
// 部门层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId());
|
} else {
|
// 产线层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId());
|
}
|
} else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
|
// 单台设备信息
|
vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
|
} else {
|
// 查询用户拥有的所有设备信息
|
if ("2".equals(vo.getTypeTree())) {
|
// 部门层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
|
} else {
|
// 产线层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
|
}
|
}
|
if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
|
vo.setEquipmentIdList(equipmentIds);
|
}
|
|
List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime()));
|
result.setDates(dates);
|
|
if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
|
result.setMdcEfficiencyList(listDtos);
|
} else {
|
// 查询利用率数据
|
List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyPOList(vo);
|
// 利用率等级
|
List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl");
|
|
// 封装结果
|
if ("2".equals(vo.getTypeTree())) {
|
// 部门层级
|
List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
|
// 查询所有部门信息
|
List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
|
|
for (MdcEquDepDto mdcEquDepDto : equipmentList) {
|
MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
|
mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
|
mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
|
mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
|
switch (mdcEquDepDto.getOrgType()) {
|
case "1":
|
mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName());
|
break;
|
case "2":
|
mdcEfficiencyListDto.setLevel2(mdcEquDepDto.getDepartName());
|
break;
|
case "3":
|
mdcEfficiencyListDto.setLevel3(mdcEquDepDto.getDepartName());
|
break;
|
default:
|
}
|
|
SysDepart sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny().orElse(null);
|
if (sysDepart != null) {
|
switch (sysDepart.getOrgType()) {
|
case "1":
|
mdcEfficiencyListDto.setLevel1(sysDepart.getDepartName());
|
break;
|
case "2":
|
mdcEfficiencyListDto.setLevel2(sysDepart.getDepartName());
|
break;
|
case "3":
|
mdcEfficiencyListDto.setLevel3(sysDepart.getDepartName());
|
break;
|
default:
|
}
|
if (StringUtils.isNotEmpty(sysDepart.getParentId())) {
|
departList.stream().filter(depart -> depart.getId().equals(sysDepart.getParentId())).findAny().ifPresent(depart1 -> {
|
switch (depart1.getOrgType()) {
|
case "1":
|
mdcEfficiencyListDto.setLevel1(depart1.getDepartName());
|
break;
|
case "2":
|
mdcEfficiencyListDto.setLevel2(depart1.getDepartName());
|
break;
|
case "3":
|
mdcEfficiencyListDto.setLevel3(depart1.getDepartName());
|
break;
|
default:
|
}
|
});
|
}
|
}
|
List<MdcEfficiencyResultDto> list = new ArrayList<>();
|
for (String date : dates) {
|
list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList));
|
}
|
mdcEfficiencyListDto.setDataList(list);
|
listDtos.add(mdcEfficiencyListDto);
|
}
|
} else {
|
// 产线层级
|
List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
|
// 查询所有产线信息
|
List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
|
|
for (MdcEquProDto mdcEquProDto : equipmentList) {
|
MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
|
mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
|
mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
|
mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
|
switch (mdcEquProDto.getOrgType()) {
|
case "1":
|
mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName());
|
break;
|
case "2":
|
mdcEfficiencyListDto.setLevel2(mdcEquProDto.getProductionName());
|
break;
|
case "3":
|
mdcEfficiencyListDto.setLevel3(mdcEquProDto.getProductionName());
|
break;
|
default:
|
}
|
MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null);
|
if (mdcProduction != null) {
|
switch (mdcProduction.getOrgType()) {
|
case "1":
|
mdcEfficiencyListDto.setLevel1(mdcProduction.getProductionName());
|
break;
|
case "2":
|
mdcEfficiencyListDto.setLevel2(mdcProduction.getProductionName());
|
break;
|
case "3":
|
mdcEfficiencyListDto.setLevel3(mdcProduction.getProductionName());
|
break;
|
default:
|
}
|
if (StringUtils.isNotEmpty(mdcProduction.getParentId())) {
|
productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> {
|
switch (production1.getOrgType()) {
|
case "1":
|
mdcEfficiencyListDto.setLevel1(production1.getProductionName());
|
break;
|
case "2":
|
mdcEfficiencyListDto.setLevel2(production1.getProductionName());
|
break;
|
case "3":
|
mdcEfficiencyListDto.setLevel3(production1.getProductionName());
|
break;
|
default:
|
}
|
});
|
}
|
}
|
List<MdcEfficiencyResultDto> list = new ArrayList<>();
|
for (String date : dates) {
|
list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList));
|
}
|
mdcEfficiencyListDto.setDataList(list);
|
listDtos.add(mdcEfficiencyListDto);
|
}
|
}
|
|
result.setMdcEfficiencyList(listDtos);
|
}
|
|
return result;
|
}
|
|
/**
|
* 班次利用率报表
|
*
|
* @param userId
|
* @param vo
|
* @return
|
*/
|
@Override
|
public MdcEfficiencyVo efficiencyShiftList(String userId, MdcEfficiencyReportShiftQueryVo vo) {
|
return null;
|
}
|
|
private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList) {
|
MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto();
|
if (efficiencyList != null && !efficiencyList.isEmpty()) {
|
for (MdcEfficiencyDto efficiencyDto : efficiencyList) {
|
if (date.equals(efficiencyDto.getTheDate()) && efficiencyDto.getEquipmentId().equals(equipmentId)) {
|
mdcEfficiencyResultDto.setTheDate(efficiencyDto.getTheDate());
|
mdcEfficiencyResultDto.setProcessLong(efficiencyDto.getProcessLong());
|
mdcEfficiencyResultDto.setUtilizationRate(efficiencyDto.getUtilizationRate());
|
mdcEfficiencyResultDto.setStartRate(efficiencyDto.getStartRate());
|
mdcEfficiencyResultDto.setOpenRate(efficiencyDto.getOpenRate());
|
mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong());
|
mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong());
|
mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong());
|
for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
|
if (efficiencyDto.getUtilizationRate().longValue() * 100 >= mdcUtilizationRate.getMinimumRange() && efficiencyDto.getUtilizationRate().longValue() * 100 < mdcUtilizationRate.getMaximumRange()) {
|
mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
|
}
|
}
|
|
}
|
}
|
} else {
|
mdcEfficiencyResultDto.setTheDate(date);
|
mdcEfficiencyResultDto.setProcessLong(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setUtilizationRate(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setStartRate(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setOpenRate(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0"));
|
for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
|
if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
|
mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
|
}
|
}
|
}
|
|
return mdcEfficiencyResultDto;
|
}
|
|
}
|