package org.jeecg.modules.mdc.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.shiro.SecurityUtils;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.system.vo.LoginUser;
|
import org.jeecg.modules.mdc.dto.MdcEquProDto;
|
import org.jeecg.modules.mdc.dto.MdcEquipmentMagnificationDto;
|
import org.jeecg.modules.mdc.entity.Equipment;
|
import org.jeecg.modules.mdc.entity.MdcDriveTypeParamConfig;
|
import org.jeecg.modules.mdc.entity.MdcEquipmentMagnification;
|
import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection;
|
import org.jeecg.modules.mdc.mapper.MdcEquipmentMagnificationMapper;
|
import org.jeecg.modules.mdc.service.*;
|
import org.jeecg.modules.mdc.util.DateUtils;
|
import org.jeecg.modules.mdc.vo.MdcEquipmentMagnificationVo;
|
import org.jeecg.modules.mdc.vo.MdcMagnificationEquipmentVo;
|
import org.jeecg.modules.mdc.vo.MdcMagnificationVo;
|
import org.jeecg.modules.system.entity.MdcProduction;
|
import org.jeecg.modules.system.service.IMdcProductionService;
|
import org.jeecg.modules.system.service.ISysDepartService;
|
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
|
import org.jeecgframework.poi.excel.entity.ExportParams;
|
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.servlet.ModelAndView;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class MdcEquipmentMagnificationServiceImpl extends ServiceImpl<MdcEquipmentMagnificationMapper, MdcEquipmentMagnification> implements IMdcEquipmentMagnificationService {
|
|
@Resource
|
private IEquipmentService equipmentService;
|
@Resource
|
private IMdcDriveTypeParamConfigService mdcDriveTypeParamConfigService;
|
@Resource
|
private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
|
@Resource
|
private IMdcEquipmentService mdcEquipmentService;
|
@Resource
|
private ISysDepartService sysDepartService;
|
@Resource
|
private IMdcProductionService mdcProductionService;
|
|
|
private static String spindlebeilv = "主轴倍率";
|
private static String feedbeilv = "进给倍率";
|
@Override
|
public void savesEquipmentMagnifications(String dateTime) {
|
List<MdcEquipmentMagnification> magnifications = new ArrayList<>();
|
//主轴倍率
|
//进给倍率
|
/* Equipment e = equipmentService.getById("12345678");
|
List<Equipment> equipmentList = new ArrayList<>();
|
equipmentList.add(e);*/
|
if (StringUtils.isNotBlank(dateTime)) {
|
try {
|
Date initDate = DateUtils.toDate(dateTime, "yyyyMMdd");
|
String date = DateUtils.format(initDate,DateUtils.STR_DATE);
|
if (initDate != null) {
|
this.remove(new LambdaQueryWrapper<MdcEquipmentMagnification>().eq(MdcEquipmentMagnification::getTheDate, date));
|
}
|
} catch (Exception ee) {
|
log.error("参数格式不对", ee);
|
}
|
}
|
List<Equipment> equipmentList = equipmentService.list();
|
Map<String,List<MdcDriveTypeParamConfig>> map = new HashMap<>();
|
Date now = DateUtils.plusTime(DateUtils.getNow(), -1);
|
for (Equipment equipment : equipmentList) {
|
Date start = null;
|
//查询最后一条记录
|
MdcEquipmentMagnification mdcMagnification = super.baseMapper.getMaxStaticsData(equipment.getEquipmentid());
|
if (mdcMagnification == null) {
|
start = DateUtils.plusTime(DateUtils.getNow(), -20);
|
} else {
|
start = DateUtils.toDate(mdcMagnification.getTheDate(),DateUtils.STR_DATE );
|
if (now.toString().equals(start.toString())) {
|
continue;
|
}
|
}
|
List<String> dates = DateUtils.getDatesStringList(start,now);
|
List<MdcDriveTypeParamConfig> list = new ArrayList<>();
|
if (!map.containsKey(equipment.getDrivetype())) {
|
MdcDriveTypeParamConfig config1 = mdcDriveTypeParamConfigService.getEnglishName(spindlebeilv,equipment.getDrivetype());
|
MdcDriveTypeParamConfig config2 = mdcDriveTypeParamConfigService.getEnglishName(feedbeilv,equipment.getDrivetype());
|
if (config1 != null) {
|
list.add(config1);
|
}
|
if (config2 != null ) {
|
list.add(config2);
|
}
|
if (list == null || list.size() == 0) {
|
for (String date : dates) {
|
MdcEquipmentMagnification info = new MdcEquipmentMagnification();
|
info.setEquipmentId(equipment.getEquipmentid());
|
info.setTheDate(date);
|
info.setSpindlebeilv(new BigDecimal(0));
|
info.setFeedbeilv(new BigDecimal(0));
|
magnifications.add(info);
|
}
|
continue;
|
} else {
|
map.put(equipment.getDrivetype(), list);
|
}
|
|
} else {
|
list = map.get(equipment.getDrivetype());
|
}
|
//循环时间
|
//查询字段 MAP 保存
|
for (String date : dates) {
|
MdcEquipmentMagnification magnification = selectMagnification(equipment.getEquipmentid(),date,equipment.getDrivetype(), list);
|
magnifications.add(magnification);
|
}
|
}
|
if (!magnifications.isEmpty() && magnifications.size() > 0) {
|
saveBatch(magnifications);
|
}
|
}
|
|
@Override
|
public IPage<MdcEquipmentMagnification> pageList(String userId, MdcEquipmentMagnificationVo magnificationVo, Integer pageNo, Integer pageSize, HttpServletRequest req) {
|
IPage<MdcEquipmentMagnification> pageData = new Page<>(pageNo, pageSize);
|
List<String> equipmentIds = new ArrayList<>();
|
if (StringUtils.isNotEmpty(magnificationVo.getParentId()) && StringUtils.isEmpty(magnificationVo.getEquipmentId())) {
|
if ("2".equals(magnificationVo.getTypeTree())) {
|
// 部门层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, magnificationVo.getParentId());
|
} else {
|
// 产线层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, magnificationVo.getParentId());
|
}
|
} else if (StringUtils.isNotEmpty(magnificationVo.getEquipmentId())) {
|
// 单台设备信息
|
magnificationVo.setEquipmentIdList(Collections.singletonList(magnificationVo.getEquipmentId()));
|
} else {
|
// 查询用户拥有的所有设备信息
|
if ("2".equals(magnificationVo.getTypeTree())) {
|
//部门层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
|
} else {
|
//产线层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
|
}
|
}
|
if (magnificationVo.getEquipmentIdList() == null || magnificationVo.getEquipmentIdList().isEmpty()) {
|
magnificationVo.setEquipmentIdList(equipmentIds);
|
}
|
if (magnificationVo.getEquipmentIdList() == null || magnificationVo.getEquipmentIdList().isEmpty()) {
|
return null;
|
}
|
return this.baseMapper.pageList(pageData, magnificationVo);
|
}
|
|
@Override
|
public ModelAndView exportXls(String userId, MdcEquipmentMagnificationVo magnificationVo) {
|
List<String> equipmentIds = new ArrayList<>();
|
if (StringUtils.isNotEmpty(magnificationVo.getParentId()) && StringUtils.isEmpty(magnificationVo.getEquipmentId())) {
|
if ("2".equals(magnificationVo.getTypeTree())) {
|
// 部门层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, magnificationVo.getParentId());
|
} else {
|
// 产线层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, magnificationVo.getParentId());
|
}
|
} else if (StringUtils.isNotEmpty(magnificationVo.getEquipmentId())) {
|
// 单台设备信息
|
magnificationVo.setEquipmentIdList(Collections.singletonList(magnificationVo.getEquipmentId()));
|
} else {
|
// 查询用户拥有的所有设备信息
|
if ("2".equals(magnificationVo.getTypeTree())) {
|
//部门层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
|
} else {
|
//产线层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
|
}
|
}
|
if (magnificationVo.getEquipmentIdList() == null || magnificationVo.getEquipmentIdList().isEmpty()) {
|
magnificationVo.setEquipmentIdList(equipmentIds);
|
}
|
if (magnificationVo.getEquipmentIdList() == null || magnificationVo.getEquipmentIdList().isEmpty()) {
|
return null;
|
}
|
List<MdcEquipmentMagnificationDto> magnificationDtos = super.baseMapper.list(magnificationVo);
|
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
|
// 导出文件名称
|
mv.addObject(NormalExcelConstants.FILE_NAME, "倍率报表");
|
mv.addObject(NormalExcelConstants.CLASS, MdcEquipmentMagnificationDto.class);
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("倍率报表", "导出人:" + user.getRealname(), "倍率报表"));
|
mv.addObject(NormalExcelConstants.DATA_LIST, magnificationDtos);
|
return mv;
|
}
|
|
@Override
|
public MdcMagnificationVo beilvsList(MdcEquipmentMagnificationVo vo, String userId) {
|
List<MdcMagnificationEquipmentVo> mdcMagnificationVos = new ArrayList<>();
|
MdcMagnificationVo result = new MdcMagnificationVo();
|
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);
|
}
|
|
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
|
List<String> dates = DateUtils.getDatesStringList(DateUtils.getShortDate(vo.getStartTime()), DateUtils.getShortDate(vo.getEndTime()));
|
result.setDates(dates);
|
|
if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
|
result.setMdcMagnificationVos(mdcMagnificationVos);
|
} else {
|
List<String> equipmentIdList = mdcEquipmentService.listEquipmentMagnificationId(vo);
|
if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
|
vo.setEquipmentIdList(equipmentIdList);
|
} else {
|
result.setMdcMagnificationVos(mdcMagnificationVos);
|
return result;
|
}
|
// 查询利用率数据
|
List<MdcEquipmentMagnificationDto> magnificationDtos = super.baseMapper.list(vo);
|
// 封装结果
|
if ("2".equals(vo.getTypeTree())) {
|
} else {
|
// 产线层级
|
List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
|
// 查询所有产线信息
|
List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder));
|
for (MdcEquProDto mdcEquProDto : equipmentList) {
|
MdcMagnificationEquipmentVo mdcMgVo = new MdcMagnificationEquipmentVo();
|
mdcMgVo.setEquipmentId(mdcEquProDto.getEquipmentId());
|
mdcMgVo.setEquipmentName(mdcEquProDto.getEquipmentName());
|
mdcMgVo.setEquipmentType(mdcEquProDto.getEquipmentType());
|
switch (mdcEquProDto.getOrgType()) {
|
case "1":
|
mdcMgVo.setLevel1(mdcEquProDto.getProductionName());
|
break;
|
case "2":
|
mdcMgVo.setLevel2(mdcEquProDto.getProductionName());
|
break;
|
case "3":
|
mdcMgVo.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":
|
mdcMgVo.setLevel1(mdcProduction.getProductionName());
|
break;
|
case "2":
|
mdcMgVo.setLevel2(mdcProduction.getProductionName());
|
break;
|
case "3":
|
mdcMgVo.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":
|
mdcMgVo.setLevel1(production1.getProductionName());
|
break;
|
case "2":
|
mdcMgVo.setLevel2(production1.getProductionName());
|
break;
|
case "3":
|
mdcMgVo.setLevel3(production1.getProductionName());
|
break;
|
default:
|
}
|
});
|
}
|
}
|
List<MdcEquipmentMagnificationDto> list = new ArrayList<>();
|
MdcEquipmentMagnificationDto mdcMagnificationDto = new MdcEquipmentMagnificationDto();
|
mdcMagnificationDto.setTheDate("平均值");
|
for (String date : dates) {
|
list.add(this.setDataList(magnificationDtos, date, mdcEquProDto.getEquipmentId(),mdcMagnificationDto));
|
}
|
mdcMagnificationDto.setFeedbeilv(mdcMagnificationDto.getFeedbeilv().divide(new BigDecimal(dates.size()),2, RoundingMode.HALF_UP));
|
mdcMagnificationDto.setSpindlebeilv(mdcMagnificationDto.getSpindlebeilv().divide(new BigDecimal(dates.size()),2, RoundingMode.HALF_UP));
|
list.add(mdcMagnificationDto);
|
mdcMgVo.setMdcBeilvVoList(list);
|
mdcMagnificationVos.add(mdcMgVo);
|
}
|
}
|
result.setMdcMagnificationVos(mdcMagnificationVos);
|
}
|
// 添加合计值和平均值
|
|
result.getDates().add("平均值");
|
MdcMagnificationEquipmentVo avg = new MdcMagnificationEquipmentVo();
|
avg.setLevel1("平均值");
|
avg.setLevel2("平均值");
|
avg.setLevel3("平均值");
|
avg.setEquipmentId("平均值");
|
avg.setEquipmentName("平均值");
|
avg.setEquipmentType("平均值");
|
//计算平均值
|
avg.setMdcBeilvVoList(calculateOpenAverage(result.getMdcMagnificationVos()));
|
result.getMdcMagnificationVos().add(avg);
|
return result;
|
}
|
|
/**
|
* 计算平均值
|
*
|
* @param mdcMagnificationVos
|
* @return
|
*/
|
private List<MdcEquipmentMagnificationDto> calculateOpenAverage(List<MdcMagnificationEquipmentVo> mdcMagnificationVos) {
|
List<MdcEquipmentMagnificationDto> result = new ArrayList<>();
|
List<MdcEquipmentMagnificationDto> dataList = new ArrayList<>();
|
for (MdcMagnificationEquipmentVo mdcMagnificationEquipmentVo : mdcMagnificationVos) {
|
dataList.addAll(mdcMagnificationEquipmentVo.getMdcBeilvVoList());
|
}
|
dataList.parallelStream().collect(Collectors.groupingBy(MdcEquipmentMagnificationDto::getTheDate, Collectors.toList()))
|
.forEach((theDate, mert) -> {
|
mert.stream().reduce((a, b) -> new MdcEquipmentMagnificationDto(
|
a.getTheDate(),
|
a.getFeedbeilv().add(b.getFeedbeilv()),
|
a.getSpindlebeilv().add(b.getSpindlebeilv()))).ifPresent(result::add);
|
});
|
for (MdcEquipmentMagnificationDto mdcEquipmentMagnificationDto : result) {
|
mdcEquipmentMagnificationDto.setSpindlebeilv(mdcEquipmentMagnificationDto.getSpindlebeilv().divide(new BigDecimal(mdcMagnificationVos.size()), 2, RoundingMode.HALF_UP));
|
mdcEquipmentMagnificationDto.setFeedbeilv(mdcEquipmentMagnificationDto.getFeedbeilv().divide(new BigDecimal(mdcMagnificationVos.size()), 2, RoundingMode.HALF_UP));
|
}
|
result.sort(Comparator.comparing(MdcEquipmentMagnificationDto::getTheDate));
|
return result;
|
}
|
|
private MdcEquipmentMagnificationDto setDataList(List<MdcEquipmentMagnificationDto> list,String date,String equipmentId,MdcEquipmentMagnificationDto mdcMagnificationDto) {
|
MdcEquipmentMagnificationDto result = new MdcEquipmentMagnificationDto();
|
if (list != null && list.size() > 0) {
|
for (MdcEquipmentMagnificationDto mdcEquipmentMagnificationDto : list) {
|
if (date.equals(mdcEquipmentMagnificationDto.getTheDate()) && mdcEquipmentMagnificationDto.getEquipmentId().equals(equipmentId)) {
|
result.setEquipmentId(equipmentId);
|
result.setSpindlebeilv(mdcEquipmentMagnificationDto.getSpindlebeilv());
|
result.setFeedbeilv(mdcEquipmentMagnificationDto.getFeedbeilv());
|
result.setTheDate(date);
|
}
|
}
|
} else {
|
result.setTheDate(date);
|
result.setFeedbeilv(new BigDecimal(0));
|
result.setEquipmentId(equipmentId);
|
result.setSpindlebeilv(new BigDecimal(0));
|
return result;
|
}
|
mdcMagnificationDto.setFeedbeilv(mdcMagnificationDto.getFeedbeilv().add(result.getFeedbeilv()));
|
mdcMagnificationDto.setSpindlebeilv(mdcMagnificationDto.getSpindlebeilv().add(result.getSpindlebeilv()));
|
return result;
|
}
|
|
|
private MdcEquipmentMagnification selectMagnification(String equipmentId,String date,String drivetype,List<MdcDriveTypeParamConfig> list) {
|
Date startTime = DateUtils.plusTime(DateUtils.getShortDate(date), 0);
|
Date endTime = DateUtils.plusTime(DateUtils.getShortDate(date), 1);
|
List<MdcEquipmentRunningSection> sectionList = mdcEquipmentRunningSectionService.selectRunningData(equipmentId,startTime,endTime);
|
if (sectionList.isEmpty() || sectionList.size() < 1) {
|
MdcEquipmentMagnification info = new MdcEquipmentMagnification();
|
info.setEquipmentId(equipmentId);
|
info.setTheDate(date);
|
info.setSpindlebeilv(new BigDecimal(0));
|
info.setFeedbeilv(new BigDecimal(0));
|
return info;
|
} else {
|
|
//需要时间截取
|
if (sectionList.get(0).getStartTime().before(startTime)) {
|
sectionList.get(0).setStartTime(startTime);
|
}
|
if (sectionList.size() > 1) {
|
if (sectionList.get(sectionList.size() - 1).getEndTime().after(endTime)) {
|
sectionList.get(sectionList.size() - 1).setEndTime(endTime);
|
}
|
} else {
|
if (sectionList.get(0).getEndTime().after(endTime)) {
|
sectionList.get(0).setEndTime(endTime);
|
}
|
}
|
MdcEquipmentMagnification info = new MdcEquipmentMagnification();
|
for (MdcDriveTypeParamConfig config : list) {
|
info.setTheDate(date);
|
info.setEquipmentId(equipmentId);
|
BigDecimal bigDecimal = new BigDecimal(0);
|
int numberSizeList = 0;
|
for (MdcEquipmentRunningSection section : sectionList) {
|
List<Object> objects = super.baseMapper.getEquipmentSequenceNumber(drivetype+ "_" + equipmentId,section.getStartTime(),
|
section.getEndTime(),config.getEnglishName());
|
BigDecimal s = objNumberList(objects);
|
bigDecimal = bigDecimal.add(s);
|
numberSizeList += objects.size();
|
}
|
if (config.getChineseName().equals(spindlebeilv)) {
|
info.setSpindlebeilvValue(bigDecimal);
|
info.setSpindlebeilvNumber(numberSizeList);
|
if (bigDecimal.compareTo(BigDecimal.ZERO) >0 && new BigDecimal(numberSizeList).compareTo(BigDecimal.ZERO) > 0) {
|
info.setSpindlebeilv(bigDecimal.divide(new BigDecimal(numberSizeList),2, RoundingMode.HALF_UP));
|
}
|
}
|
if (config.getChineseName().equals(feedbeilv)) {
|
info.setFeedbeilvValue(bigDecimal);
|
info.setFeedbeilvNumber(numberSizeList);
|
if (bigDecimal.compareTo(BigDecimal.ZERO) >0 && new BigDecimal(numberSizeList).compareTo(BigDecimal.ZERO) > 0) {
|
info.setFeedbeilv(bigDecimal.divide(new BigDecimal(numberSizeList),2, RoundingMode.HALF_UP));
|
}
|
}
|
}
|
return info;
|
}
|
}
|
|
private BigDecimal objNumberList(List<Object> objects) {
|
if (objects == null || objects.size() == 0) {
|
return new BigDecimal(0);
|
} else {
|
BigDecimal bigDecimal = new BigDecimal(0);
|
for (Object object : objects) {
|
if (object != null && object.toString().length() > 0) {
|
bigDecimal = bigDecimal.add(new BigDecimal(object.toString()));
|
}
|
}
|
return bigDecimal;
|
}
|
}
|
}
|