1.excel通用导出模板,解决时间格式不是文本问题

2.解决部分部门查询问题
This commit is contained in:
wr
2024-08-20 16:23:00 +08:00
parent 003880619e
commit bddd1efef3
7 changed files with 188 additions and 74 deletions

View File

@@ -4,6 +4,7 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil;
import com.njcn.web.utils.HttpServletUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
@@ -112,15 +113,26 @@ public class ExcelUtil {
setTopLevel(workbook, pullDowns);
if (CollUtil.isNotEmpty(pullDowns)) {
int num = 1;
CellStyle cellStyle = workbook.createCellStyle();
DataFormat format = workbook.createDataFormat();
cellStyle.setDataFormat(format.getFormat("@"));
for (PullDown pullDown : pullDowns) {
String colName = numberToExcelColumn(num);
int sum = pullDown.getStrings().stream().mapToInt(String::length).sum();
if(sum>255){
ExcelUtil.selectListMaxLength(workbook, pullDown.getFirstCol(), pullDown.getLastCol(),pullDown.getStrings().size(),colName);
num++;
}else{
ExcelUtil.selectList(workbook, pullDown.getFirstCol(), pullDown.getLastCol(), pullDown.getStrings().toArray(new String[]{}));
if (pullDown.getIsText()) {
ExcelUtil.selectListText(workbook, pullDown.getFirstCol(),cellStyle);
} else {
String colName = numberToExcelColumn(num);
int sum = pullDown.getStrings().stream().mapToInt(String::length).sum();
if (sum == 0) {
continue;
}
if (sum > 255) {
ExcelUtil.selectListMaxLength(workbook, pullDown.getFirstCol(), pullDown.getLastCol(), pullDown.getStrings().size(), colName);
num++;
} else {
ExcelUtil.selectList(workbook, pullDown.getFirstCol(), pullDown.getLastCol(), pullDown.getStrings().toArray(new String[]{}));
}
}
}
}
Sheet sheetAt = workbook.getSheetAt(0);
@@ -240,16 +252,17 @@ public class ExcelUtil {
// 对sheet页生效
sheet.addValidationData(validation);
}
/**
* @Description: 当下拉框超过最大字符255设置隐藏表单来进行展示
* @param workbook
* @param firstCol
* @param lastCol
* @param colName 列A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
* @Author: wr
* @Date: 2024/8/13 15:07
*/
public static void selectListMaxLength(Workbook workbook,int firstCol, int lastCol,int row ,String colName) {
/**
* @param workbook
* @param firstCol
* @param lastCol
* @param colName 列A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
* @Description: 当下拉框超过最大字符255设置隐藏表单来进行展示
* @Author: wr
* @Date: 2024/8/13 15:07
*/
public static void selectListMaxLength(Workbook workbook, int firstCol, int lastCol, int row, String colName) {
Sheet sheet = workbook.getSheetAt(0);
// 生成下拉列表
// 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
@@ -261,6 +274,24 @@ public class ExcelUtil {
DataValidation validation = help.createValidation(hiddentConstraint, regions);
sheet.addValidationData(validation);
}
/**
* @Description:
* @param workbook
* @param firstCol
* @Author: wr
* @Date: 2024/8/20 10:44
*/
public static void selectListText(Workbook workbook, int firstCol,CellStyle cellStyle) {
Sheet sheet = workbook.getSheetAt(0);
for (int i = 2; i < 65535; i++) {
Row row = sheet.getRow(i);
if(ObjectUtil.isNull(row)){
row = sheet.createRow(i);
}
Cell cell = row.createCell(firstCol);
cell.setCellStyle(cellStyle);
}
}
/**
* 指定名称、数据下载报表(带指定标题将*显示比必填信息),带有下拉信息
@@ -364,38 +395,44 @@ public class ExcelUtil {
/**
* 设置隐藏表单来进行下拉框
*
* @param workbook
* @param pullDowns
*/
private static void setTopLevel(Workbook workbook, List<PullDown> pullDowns) {
int num = 0;
for (PullDown pullDown : pullDowns) {
int sum = pullDown.getStrings().stream().mapToInt(String::length).sum();
if (sum > 255) {
// 创建隐藏sheet
String hiddenSheetName = "hiddenSheetA";
if (num == 0) {
workbook.createSheet(hiddenSheetName);
if (!pullDown.getIsText()) {
int sum = pullDown.getStrings().stream().mapToInt(String::length).sum();
if (sum == 0) {
continue;
}
//false展示隐藏sheet ,true不展示隐藏sheet
workbook.setSheetHidden(workbook.getSheetIndex(workbook.getSheet(hiddenSheetName)), true);
Sheet sheet = workbook.getSheet(hiddenSheetName);
if(num == 0){
//sheet.getLastRowNum无法区分 有一行和没有 所以这里先建一行
sheet.createRow(0);
}
Row row; //创建数据行
sheet.setColumnWidth(num, 4000); //设置每列的列宽
for (int j = 0; j < pullDown.getStrings().size(); j++) {
if (sheet.getLastRowNum() < j) {
row = sheet.createRow(j); //创建数据行
} else {
row = sheet.getRow(j);
if (sum > 255) {
// 创建隐藏sheet
String hiddenSheetName = "hiddenSheetA";
if (num == 0) {
workbook.createSheet(hiddenSheetName);
}
//设置对应单元格的值
row.createCell(num).setCellValue(pullDown.getStrings().get(j));
//false展示隐藏sheet ,true不展示隐藏sheet
workbook.setSheetHidden(workbook.getSheetIndex(workbook.getSheet(hiddenSheetName)), true);
Sheet sheet = workbook.getSheet(hiddenSheetName);
if (num == 0) {
//sheet.getLastRowNum无法区分 有一行和没有 所以这里先建一行
sheet.createRow(0);
}
Row row; //创建数据行
sheet.setColumnWidth(num, 4000); //设置每列的列宽
for (int j = 0; j < pullDown.getStrings().size(); j++) {
if (sheet.getLastRowNum() < j) {
row = sheet.createRow(j); //创建数据行
} else {
row = sheet.getRow(j);
}
//设置对应单元格的值
row.createCell(num).setCellValue(pullDown.getStrings().get(j));
}
num++;
}
num++;
}
}
}

View File

@@ -14,8 +14,13 @@ public class PullDown {
//起始列
private Integer firstCol;
//结束列
private Integer lastCol;
//是否设置单元格(文本)
private Boolean isText = false;
//属性值
private List<String> strings;
}

View File

@@ -156,6 +156,11 @@ public class SupervisionDevMainReportParam {
@ApiModelProperty(value = "审批状态")
private Integer status;
/**
* 状态0系统建档 1外部导入
*/
@ApiModelProperty(value = "状态0系统建档 1外部导入")
private Integer importType;
@ApiModelProperty("发起人自选审批人 Map")
private Map<String, List<String>> startUserSelectAssignees;

View File

@@ -1,7 +1,5 @@
package com.njcn.supervision.pojo.vo.survey;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.db.bo.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -22,14 +20,10 @@ public class SurveyTestVO extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 其他报告
*/
private String otherReport;
/**
* 普测测试管理表id
*/
/**
* 普测测试管理表id
*/
private String id;
/**
@@ -82,7 +76,6 @@ public class SurveyTestVO extends BaseEntity implements Serializable {
*/
private String deptName;
/**
* 计划完成时间
*/
@@ -103,6 +96,11 @@ public class SurveyTestVO extends BaseEntity implements Serializable {
*/
private String supervisionReport;
/**
* 其他报告
*/
private String otherReport;
/**
* 是否有问题 0 没有问题 1 有问题
*/

View File

@@ -76,7 +76,6 @@ public class DeVReportManageController extends BaseController {
public HttpResult<Boolean> auditDevReport(@RequestBody @Validated SupervisionDevMainReportParam.SupervisionDevMainReportParamUpdate supervisionDevMainReportParamUpdate){
String methodDescribe = getMethodDescribe("auditDevReport");
boolean res = supervisionDevMainReportPOService.auditDevReport(supervisionDevMainReportParamUpdate);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, res, methodDescribe);
}

View File

@@ -7,8 +7,8 @@ import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -22,6 +22,9 @@ import com.njcn.bpm.pojo.dto.BpmProcessInstanceCreateReqDTO;
import com.njcn.bpm.pojo.param.instance.BpmProcessInstanceCancelParam;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.SubGetBase;
import com.njcn.device.biz.pojo.param.SubstationParam;
import com.njcn.device.pms.utils.PubUtil;
import com.njcn.device.pq.api.LineFeignClient;
import com.njcn.device.pq.api.NodeClient;
@@ -33,7 +36,6 @@ import com.njcn.supervision.enums.FlowStatusEnum;
import com.njcn.supervision.enums.SupervisionKeyEnum;
import com.njcn.supervision.enums.SupervisionResponseEnum;
import com.njcn.supervision.mapper.device.SupervisionDevMainReportPOMapper;
import com.njcn.supervision.pojo.dto.SensitiveUserSExcel;
import com.njcn.supervision.pojo.dto.SupervisionDevMainReportExcel;
import com.njcn.supervision.pojo.param.device.SupervisionDevMainReportParam;
import com.njcn.supervision.pojo.param.device.SupervisionTempDeviceReportParam;
@@ -85,6 +87,7 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl<Supervisi
private final LineFeignClient lineFeignClient;
private final DicDataFeignClient dicDataFeignClient;
private final NodeClient nodeClient;
private final CommTerminalGeneralClient commterminalGeneralClient;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -111,7 +114,14 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl<Supervisi
supervisionDevMainReportPO.setStatus(BpmTaskStatusEnum.RUNNING.getStatus());
}
if (ObjectUtil.isNotNull(supervisionDevMainReportParam.getImportType())) {
supervisionDevMainReportPO.setImportType(supervisionDevMainReportParam.getImportType());
if (supervisionDevMainReportParam.getImportType() == 1) {
supervisionDevMainReportParam.setStatus(FlowStatusEnum.APPROVE.getCode());
}
} else {
supervisionDevMainReportParam.setImportType(0);
}
supervisionDevMainReportPO.setState(DataStateEnum.ENABLE.getCode());
this.saveOrUpdate(supervisionDevMainReportPO);
@@ -300,8 +310,8 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl<Supervisi
ExportParams exportParams = new ExportParams("终端入网检测数据模板(带*字段均是必填,请严格按照模板标准填入数据)", "终端入网检测数据信息");
//所属地市
List<DictData> jiBeiArea = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.JIBEI_AREA.getCode()).getData();
//所属供电公司 RequestUtil.getDeptIndex()
List<DeptDTO> depts = deptFeignClient.getDepSonDetailByDeptId("0d52f9f6e43ec0ee83013cd32da93f66").getData();
//所属供电公司
List<DeptDTO> depts = deptFeignClient.getDepSonDetailByDeptId(RequestUtil.getDeptIndex()).getData();
//终端型号
List<DictData> devType = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_TYPE.getCode()).getData();
//通讯类型
@@ -317,11 +327,40 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl<Supervisi
List<DictData> voltageTransformer = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.VOLTAGE_TRANSFORMER.getCode()).getData();
//中性点接线方式
List<DictData> neutralPoint = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.Neutral_Point.getCode()).getData();
SubstationParam substationParam=new SubstationParam();
substationParam.setOrgIds(depts.stream().map(DeptDTO::getId).distinct().collect(Collectors.toList()));
List<SubGetBase> data = commterminalGeneralClient.tagOrIdGetSub(substationParam).getData();
List<PullDown> pullDowns = new ArrayList<>();
PullDown pullDown;
pullDown = new PullDown();
pullDown.setFirstCol(0);
pullDown.setLastCol(0);
pullDown.setIsText(true);
pullDowns.add(pullDown);
pullDown = new PullDown();
pullDown.setFirstCol(10);
pullDown.setLastCol(10);
pullDown.setIsText(true);
pullDowns.add(pullDown);
pullDown = new PullDown();
pullDown.setFirstCol(11);
pullDown.setLastCol(11);
pullDown.setIsText(true);
pullDowns.add(pullDown);
pullDown = new PullDown();
pullDown.setFirstCol(20);
pullDown.setLastCol(20);
pullDown.setIsText(true);
pullDowns.add(pullDown);
pullDown = new PullDown();
pullDown.setFirstCol(1);
pullDown.setLastCol(1);
@@ -329,11 +368,11 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl<Supervisi
pullDowns.add(pullDown);
//缺少变电站名称
// pullDown = new PullDown();
// pullDown.setFirstCol(2);
// pullDown.setLastCol(2);
// pullDown.setStrings();
// pullDowns.add(pullDown);
pullDown = new PullDown();
pullDown.setFirstCol(2);
pullDown.setLastCol(2);
pullDown.setStrings(data.stream().map(SubGetBase::getName).distinct().collect(Collectors.toList()));
pullDowns.add(pullDown);
pullDown = new PullDown();
pullDown.setFirstCol(3);
@@ -484,10 +523,23 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl<Supervisi
//中性点接线方式
List<DictData> neutralPoint = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.Neutral_Point.getCode()).getData();
SubstationParam substationParam=new SubstationParam();
substationParam.setOrgIds(deptS.stream().map(DeptDTO::getId).distinct().collect(Collectors.toList()));
List<SubGetBase> data = commterminalGeneralClient.tagOrIdGetSub(substationParam).getData();
SupervisionDevMainReportPO po;
if (CollectionUtil.isNotEmpty(devExcels)) {
for (SupervisionDevMainReportExcel dev : devExcels) {
//todo 需要根据变电站id进行匹配
List<SubGetBase> subList = data.stream().filter(x -> x.getName().equals(dev.getSubstation())).collect(Collectors.toList());
if(CollUtil.isEmpty(subList)){
//该用户已经录入
SupervisionDevMainReportExcel.ExcelMsg sensitiveUserExcelMsg = new SupervisionDevMainReportExcel.ExcelMsg();
BeanUtils.copyProperties(dev, sensitiveUserExcelMsg);
sensitiveUserExcelMsg.setMsg(dev.getTerminalIp().concat("变电站不存在,请检查变电站信息是否是下拉框信息!"));
devMsgList.add(sensitiveUserExcelMsg);
continue;
}
LambdaQueryWrapper<SupervisionTempDeviceReport> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper
.eq(SupervisionTempDeviceReport::getSubstationName, dev.getSubstation())
@@ -542,12 +594,12 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl<Supervisi
msg.append("所属供电公司不存在!");
}
//todo 需要根据变电站id进行匹配
// devDetails.setCustomSubstationFlag();
// devDetails.setSubstation();
devDetails.setCustomSubstationFlag(0);
devDetails.setSubstation(subList.get(0).getId());
devDetails.setSubstationName(dev.getSubstation());
// devDetails.setSubstationVoltageLevel();
// devDetails.setLongitude();
// devDetails.setLatitude();
devDetails.setSubstationVoltageLevel(subList.get(0).getVoltageLevel());
devDetails.setLongitude(subList.get(0).getLat());
devDetails.setLatitude(subList.get(0).getLng());
devDetails.setMonitoringTerminalCode(dev.getMonitoringTerminalName());
devDetails.setMonitoringTerminalName(dev.getMonitoringTerminalName());

View File

@@ -412,18 +412,19 @@ public class UserReportPOServiceImpl extends ServiceImpl<UserReportPOMapper, Use
public Page<UserReportVO> getInterferenceUserPage(UserReportParam.UserReportQueryParam userReportQueryParam, Boolean allDataFlag) {
QueryWrapper<UserReportVO> userReportVOQueryWrapper = new QueryWrapper<>();
List<String> colleaguesIds = userFeignClient.getColleaguesIdByUserId(RequestUtil.getUserIndex()).getData();
userReportVOQueryWrapper.in("supervision_user_report.create_by", colleaguesIds)
List<String> data = deptFeignClient.getDepSonIdtByDeptId(userReportQueryParam.getOrgId()).getData();
//此处仅查询敏感及重要用户
userReportVOQueryWrapper.and(wrapper ->
wrapper.in("supervision_user_report.create_by", colleaguesIds)
.or()
.in("supervision_user_report.org_id", data)
)
.eq("supervision_user_report.state", DataStateEnum.ENABLE.getCode())
.eq("supervision_user_report.status", FlowStatusEnum.APPROVE.getCode());
if (!allDataFlag) {
//台账不查询全部数据,需要排除敏感及重要用户
userReportVOQueryWrapper.ne("supervision_user_report.user_type", UserNatureEnum.SENSITIVE_USER.getCode());
}
if (StrUtil.isNotBlank(userReportQueryParam.getOrgId())) {
/*获取直接下属子单位*/
List<String> data = deptFeignClient.getDepSonIdtByDeptId(userReportQueryParam.getOrgId()).getData();
userReportVOQueryWrapper.in("supervision_user_report.org_id", data);
}
if (Objects.nonNull(userReportQueryParam)) {
if (StrUtil.isNotBlank(userReportQueryParam.getCity())) {
//查询所有区域下的数据
@@ -544,8 +545,13 @@ public class UserReportPOServiceImpl extends ServiceImpl<UserReportPOMapper, Use
public Page<UserReportVO> getSensitiveUserPage(UserReportParam.UserReportQueryParam userReportQueryParam) {
QueryWrapper<UserReportVO> userReportVOQueryWrapper = new QueryWrapper<>();
List<String> colleaguesIds = userFeignClient.getColleaguesIdByUserId(RequestUtil.getUserIndex()).getData();
List<String> data = deptFeignClient.getDepSonIdtByDeptId(userReportQueryParam.getOrgId()).getData();
//此处仅查询敏感及重要用户
userReportVOQueryWrapper.in("supervision_user_report.create_by", colleaguesIds)
userReportVOQueryWrapper.and(wrapper ->
wrapper.in("supervision_user_report.create_by", colleaguesIds)
.or()
.in("supervision_user_report.org_id", data)
)
.eq("supervision_user_report.state", DataStateEnum.ENABLE.getCode())
.eq("supervision_user_report.user_type", UserNatureEnum.SENSITIVE_USER.getCode())
.eq("supervision_user_report.status", FlowStatusEnum.APPROVE.getCode());
@@ -610,6 +616,12 @@ public class UserReportPOServiceImpl extends ServiceImpl<UserReportPOMapper, Use
pullDown.setStrings(Stream.of("可研", "建设", "运行", "退运").collect(Collectors.toList()));
pullDowns.add(pullDown);
pullDown = new PullDown();
pullDown.setFirstCol(7);
pullDown.setLastCol(7);
pullDown.setIsText(true);
pullDowns.add(pullDown);
pullDown = new PullDown();
pullDown.setFirstCol(5);
pullDown.setLastCol(5);
@@ -840,6 +852,12 @@ public class UserReportPOServiceImpl extends ServiceImpl<UserReportPOMapper, Use
pullDown.setStrings(jiBeiArea.stream().filter(x -> !"风光储".equals(x.getName()) && !"超高压".equals(x.getName())).map(DictData::getName).collect(Collectors.toList()));
pullDowns.add(pullDown);
pullDown = new PullDown();
pullDown.setFirstCol(6);
pullDown.setLastCol(6);
pullDown.setIsText(true);
pullDowns.add(pullDown);
pullDown = new PullDown();
pullDown.setFirstCol(4);
pullDown.setLastCol(4);