Commit 57eaa4f8 authored by tianbo's avatar tianbo

bugfix:

管道列表优化
parent fce10494
...@@ -32,10 +32,12 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -32,10 +32,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.util.StopWatch;
import org.typroject.tyboot.core.foundation.utils.Bean; import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil; import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest; import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
...@@ -52,6 +54,7 @@ import java.util.stream.IntStream; ...@@ -52,6 +54,7 @@ import java.util.stream.IntStream;
import java.util.stream.Stream; import java.util.stream.Stream;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
import static com.alibaba.fastjson.JSON.toJSONString; import static com.alibaba.fastjson.JSON.toJSONString;
/** /**
* 管道工程装置表服务实现类 * 管道工程装置表服务实现类
...@@ -197,53 +200,99 @@ public class IdxBizJgProjectContraptionServiceImpl extends BaseService<IdxBizJgP ...@@ -197,53 +200,99 @@ public class IdxBizJgProjectContraptionServiceImpl extends BaseService<IdxBizJgP
.isNull(IdxBizJgProjectContraption::getProjectContraptionParentId) .isNull(IdxBizJgProjectContraption::getProjectContraptionParentId)
.orderByDesc(IdxBizJgProjectContraption::getRecDate) .orderByDesc(IdxBizJgProjectContraption::getRecDate)
.page(page); .page(page);
pageList.getRecords().forEach(record -> { if (!ValidationUtil.isEmpty(pageList.getRecords())) {
BigDecimal pipelineLength = BigDecimal.valueOf(record.getPipelineLength()); pageList.getRecords().forEach(record -> {
BigDecimal roundedValue = pipelineLength.setScale(3, RoundingMode.HALF_UP); BigDecimal pipelineLength = BigDecimal.valueOf(record.getPipelineLength());
BigDecimal strippedValue = roundedValue.stripTrailingZeros(); BigDecimal roundedValue = pipelineLength.setScale(3, RoundingMode.HALF_UP);
record.setPipelineLength(Double.valueOf(strippedValue.toPlainString())); BigDecimal strippedValue = roundedValue.stripTrailingZeros();
record.setDataSourceName(EquipSourceEnum.getDataSourceName(record.getDataSource())); record.setPipelineLength(Double.valueOf(strippedValue.toPlainString()));
record.setFullAddress( record.setDataSourceName(EquipSourceEnum.getDataSourceName(record.getDataSource()));
Stream.of(record.getProvinceName(), record.getCityName(), record.getCountyName(), record.getStreetName(), record.getAddress()) record.setFullAddress(
.map(value -> value == null ? "" : value) Stream.of(record.getProvinceName(), record.getCityName(), record.getCountyName(), record.getStreetName(), record.getAddress())
.collect(Collectors.joining()) .map(value -> value == null ? "" : value)
); .collect(Collectors.joining())
record.setCanEdit(this.checkContraptionIsCanEdit(record.getSequenceNbr())); );
record.setCanDelete(this.checkContraptionIsCanDelete(record.getSequenceNbr(),isIntoManagement)); });
List<Long> projectContraptionIdList = pageList.getRecords().stream().map(IdxBizJgProjectContraption::getSequenceNbr).collect(Collectors.toList());
Map<String, Boolean> canEditMap = this.checkContraptionIsCanEdit(projectContraptionIdList);
pageList.getRecords().forEach(record -> record.setCanEdit(canEditMap.get(record.getSequenceNbr())));
Map<String, Boolean> canDeleteMap = this.checkContraptionIsCanDelete(projectContraptionIdList, isIntoManagement);
pageList.getRecords().forEach(record -> record.setCanDelete(canDeleteMap.get(record.getSequenceNbr())));
//判断是否有检验结果录入 //判断是否有检验结果录入
judgeCheckResult(record); judgeCheckResult(pageList.getRecords());
}); }
return pageList; return pageList;
} }
/** /**
* 此处判断是否有检验结果 所有的管道信息都需要有检验结果才可以展示 * 此处判断是否有检验结果 所有的管道信息都需要有检验结果才可以展示
* @param record * @param records
*/ */
private void judgeCheckResult(IdxBizJgProjectContraption record) { private void judgeCheckResult(List<IdxBizJgProjectContraption> records) {
record.setDisableBasicButton(true); List<IdxBizJgProjectContraption> pipelineList = records.stream().filter(record -> PipelineEnum.PRESSURE_PIPELINE.getCode().equals(record.getEquList())).collect(Collectors.toList());
if ("8200".equals(record.getEquCategory()) || "8100".equals(record.getEquCategory()) || "8300".equals(record.getEquCategory())) { if (!ValidationUtil.isEmpty(pipelineList)) {
int notNullCount = this.baseMapper.selectCheckCountByNotNull(String.valueOf(record.getSequenceNbr())); StopWatch watch1 = new StopWatch();
long total = this.baseMapper.selectEquipCount(String.valueOf(record.getSequenceNbr())); List<Long> projectContraptionIdList = pipelineList.stream().map(IdxBizJgProjectContraption::getSequenceNbr).collect(Collectors.toList());
if(total==notNullCount && total !=0){ watch1.start();
record.setDisableBasicButton(false); List<Map<String, Integer>> notNullCountList = this.baseMapper.selectCheckCountByNotNull(projectContraptionIdList);
watch1.stop();
System.out.println("watch1:" + watch1.getTotalTimeMillis());
StopWatch watch2 = new StopWatch();
watch2.start();
List<Map<String, Integer>> totalList = this.baseMapper.selectEquipCount(projectContraptionIdList);
watch2.stop();
System.out.println("watch2:" + watch2.getTotalTimeMillis());
for (IdxBizJgProjectContraption record : pipelineList) {
Map<String, Integer> totalMap = totalList.stream().filter(item -> String.valueOf(record.getSequenceNbr()).equals(item.get("project_contraption_id"))).findFirst().orElse(new HashMap<>());
Map<String, Integer> notNullCountMap = notNullCountList.stream().filter(item -> String.valueOf(record.getSequenceNbr()).equals(item.get("project_contraption_id"))).findFirst().orElse(new HashMap<>());
Integer total = totalMap.get("count");
Integer notNullCount = notNullCountMap.get("count");
if(total != null && total.equals(notNullCount) && total != 0){
record.setDisableBasicButton(false);
}
} }
} }
} }
private Boolean checkContraptionIsCanEdit(Long projectContraptionId) { private Map<String, Boolean> checkContraptionIsCanEdit(List<Long> projectContraptionIdList) {
Integer inUseTime = this.baseMapper.countContraptionInUseTimesForEdit(projectContraptionId); Map<String, Boolean> resultMap = new HashMap<>();
return inUseTime <= 0; if (ValidationUtil.isEmpty(projectContraptionIdList)) {
return resultMap;
} }
private Boolean checkContraptionIsCanDelete(Long projectContraptionId,Boolean isIntoManagement) { List<Map<String, Integer>> inUseTimeMap = this.baseMapper.countContraptionInUseTimesForEdit(projectContraptionIdList);
Integer inUseTime = 0;
if(isIntoManagement){ return getCheckResultMap(projectContraptionIdList, resultMap, inUseTimeMap);
inUseTime= this.baseMapper.countContraptionInUseTimesForDeleteByIntoManagement(projectContraptionId); }
}else {
inUseTime = this.baseMapper.countContraptionInUseTimesForDelete(projectContraptionId);
private Map<String, Boolean> checkContraptionIsCanDelete(List<Long> projectContraptionIdList, Boolean isIntoManagement) {
Map<String, Boolean> resultMap = new HashMap<>();
if (ValidationUtil.isEmpty(projectContraptionIdList)) {
return resultMap;
}
List<Map<String, Integer>> inUseTimeMap;
if(isIntoManagement) {
inUseTimeMap = this.baseMapper.countContraptionInUseTimesForDeleteByIntoManagementBatch(projectContraptionIdList);
} else {
inUseTimeMap = this.baseMapper.countContraptionInUseTimesForDelete(projectContraptionIdList);
}
return getCheckResultMap(projectContraptionIdList, resultMap, inUseTimeMap);
}
private Map<String, Boolean> getCheckResultMap(List<Long> projectContraptionIdList, Map<String, Boolean> resultMap, List<Map<String, Integer>> inUseTimeMap) {
for (Long projectContraptionId : projectContraptionIdList) {
Optional<Integer> inUseCountOpt = inUseTimeMap.stream()
.filter(map -> projectContraptionId.toString().equals(map.get("project_contraption_id")))
.map(map -> map.get("inUseNumber"))
.filter(Objects::nonNull)
.findFirst();
Integer inUseCount = inUseCountOpt.orElse(0);
resultMap.put(String.valueOf(projectContraptionId), inUseCount <= 0);
} }
return inUseTime <= 0; return resultMap;
} }
@Override @Override
...@@ -307,7 +356,8 @@ public class IdxBizJgProjectContraptionServiceImpl extends BaseService<IdxBizJgP ...@@ -307,7 +356,8 @@ public class IdxBizJgProjectContraptionServiceImpl extends BaseService<IdxBizJgP
page.setCurrent(current); page.setCurrent(current);
page.setSize(size); page.setSize(size);
page.setRecords(baseMapper.selectEquipListPage(sequenceNbr, (current - 1) * size, size)); page.setRecords(baseMapper.selectEquipListPage(sequenceNbr, (current - 1) * size, size));
page.setTotal(baseMapper.selectEquipCount(sequenceNbr)); Map<String, Integer> totalMap = baseMapper.selectEquipCount(new ArrayList<>(Collections.singletonList(Long.parseLong(sequenceNbr)))).get(0);
page.setTotal(totalMap.get("count"));
return page; return page;
} }
......
package com.yeejoin.amos.boot.module.ymt.api.mapper; package com.yeejoin.amos.boot.module.ymt.api.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgProjectConstruction;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgProjectContraption; import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgProjectContraption;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* 管道工程装置表 Mapper 接口 * 管道工程装置表 Mapper 接口
...@@ -27,17 +24,37 @@ public interface IdxBizJgProjectContraptionMapper extends BaseMapper<IdxBizJgPro ...@@ -27,17 +24,37 @@ public interface IdxBizJgProjectContraptionMapper extends BaseMapper<IdxBizJgPro
/** /**
* 统计工程装置的引用次数(非待提交、非已撤回、非已驳回) * 统计工程装置的引用次数(非待提交、非已撤回、非已驳回)
* *
* @param projectContraptionId 工程装置唯一标识 * @param projectContraptionIdList 工程装置唯一标识
* @return 被引用次数 > 0 则设备不可编辑 * @return 被引用次数 > 0 则设备不可编辑
*/ */
Integer countContraptionInUseTimesForEdit(@Param("projectContraptionId") Long projectContraptionId); List<Map<String, Integer>> countContraptionInUseTimesForEdit(@Param("projectContraptionIdList") List<Long> projectContraptionIdList);
/** /**
* 统计设备被引用的次数(只有存在就算引用-作废除外) * 统计设备被引用的次数(只有存在就算引用-作废除外)
* @param projectContraptionIdList 设备唯一标识
* @return 被引用次数 > 0 则设备不可删除
*/
List<Map<String, Integer>> countContraptionInUseTimesForDelete(@Param("projectContraptionIdList") List<Long> projectContraptionIdList);
/**
* 获取管道信息总数
*
* @param projectContraptionIdList
* @return
*/
List<Map<String, Integer>> selectEquipCount(@Param("projectContraptionIdList") List<Long> projectContraptionIdList);
/**
* 获取不为空的检验信息个数
*/
List<Map<String, Integer>> selectCheckCountByNotNull(@Param("projectContraptionIdList") List<Long> projectContraptionIdList);
/**
* 统计已纳管设备被引用的次数(只有存在就算引用-作废除外)
* @param projectContraptionId 设备唯一标识 * @param projectContraptionId 设备唯一标识
* @return 被引用次数 > 0 则设备不可删除 * @return 被引用次数 > 0 则设备不可删除
*/ */
Integer countContraptionInUseTimesForDelete(@Param("projectContraptionId") Long projectContraptionId); Integer countContraptionInUseTimesForDeleteByIntoManagement(@Param("projectContraptionId")Long projectContraptionId);
List<IdxBizJgProjectContraption> selectErrorManagementProject(); List<IdxBizJgProjectContraption> selectErrorManagementProject();
...@@ -62,13 +79,6 @@ public interface IdxBizJgProjectContraptionMapper extends BaseMapper<IdxBizJgPro ...@@ -62,13 +79,6 @@ public interface IdxBizJgProjectContraptionMapper extends BaseMapper<IdxBizJgPro
List<Map<String, Object>> selectEquipListPage(@Param("sequenceNbr") String sequenceNbr, @Param("current") int current, @Param("size") int size); List<Map<String, Object>> selectEquipListPage(@Param("sequenceNbr") String sequenceNbr, @Param("current") int current, @Param("size") int size);
/** /**
* 获取管道信息总数
* @param sequenceNbr
* @return
*/
long selectEquipCount(@Param("sequenceNbr") String sequenceNbr);
/**
* 获取导出传输/公共管道的信息 * 获取导出传输/公共管道的信息
* @param sequenceNbr * @param sequenceNbr
* @return * @return
...@@ -76,14 +86,9 @@ public interface IdxBizJgProjectContraptionMapper extends BaseMapper<IdxBizJgPro ...@@ -76,14 +86,9 @@ public interface IdxBizJgProjectContraptionMapper extends BaseMapper<IdxBizJgPro
List<Map<String, Object>> selectEquipListByExport(@Param("sequenceNbr") String sequenceNbr); List<Map<String, Object>> selectEquipListByExport(@Param("sequenceNbr") String sequenceNbr);
/** /**
* 获取不为空的检验信息个数
*/
int selectCheckCountByNotNull(@Param("sequenceNbr") String sequenceNbr);
/**
* 统计已纳管设备被引用的次数(只有存在就算引用-作废除外) * 统计已纳管设备被引用的次数(只有存在就算引用-作废除外)
* @param projectContraptionId 设备唯一标识 * @param projectContraptionId 设备唯一标识
* @return 被引用次数 > 0 则设备不可删除 * @return 被引用次数 > 0 则设备不可删除
*/ */
Integer countContraptionInUseTimesForDeleteByIntoManagement(@Param("projectContraptionId")Long projectContraptionId); List<Map<String, Integer>> countContraptionInUseTimesForDeleteByIntoManagementBatch(@Param("projectContraptionIdList") List<Long> projectContraptionIdList);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment