Commit 867b210b by 王志超

feat: 变更配置导出

parent 60fef344
Pipeline #86925 passed with stages
in 1 minute 33 seconds
package com.netease.mail.yanxuan.change.biz.callback;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Joiner;
import com.netease.mail.dp.des.process.api.entity.CallbackQueryReq;
import com.netease.mail.dp.des.process.api.entity.ExcelCell;
import com.netease.mail.dp.des.process.api.entity.ExcelTitle;
import com.netease.mail.dp.des.starter.callback.DesCallbackService;
import com.netease.mail.yanxuan.change.biz.service.change.ChangeTypeService;
import com.netease.mail.yanxuan.change.common.enums.ChangeLevelEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeSubjectEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeCommanderEnum;
import com.netease.mail.yanxuan.change.common.enums.NeedFileEnum;
import com.netease.mail.yanxuan.change.common.util.DateUtils;
import com.netease.mail.yanxuan.change.common.util.ExcelUtil;
import com.netease.mail.yanxuan.change.dal.entity.ChangeType;
import com.netease.mail.yanxuan.change.dal.mapper.ChangeConfigMapper;
import com.netease.mail.yanxuan.change.dal.meta.model.po.ChangeConfigPo;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeConfigQueryReq;
import com.netease.mail.yanxuan.change.integration.excel.ChangeConfigExcelDTO;
import com.netease.mail.yanxuan.change.integration.excel.ChangeConfigExcelVo;
import lombok.extern.slf4j.Slf4j;
/**
* 变更配置导出回调
*/
@Slf4j
@Component
public class ChangeConfigExportCallback implements DesCallbackService {
@Autowired
private ChangeConfigMapper changeConfigMapper;
@Autowired
private ChangeTypeService changeTypeService;
@Override
public ExcelTitle queryExcelTitle(CallbackQueryReq req) {
log.info("[op: change config export callback queryExcelTitle] req={}", JSON.toJSONString(req));
ChangeConfigQueryReq query = JSON.parseObject(req.getParamJson(), ChangeConfigQueryReq.class);
List<ChangeConfigPo> list = changeConfigMapper.selectChangeConfigPo(query);
ExcelTitle excelTitle = ExcelUtil.fetchExceltile(ChangeConfigExcelVo.class);
excelTitle.setTotal((long) list.size());
log.info("[op: change config export callback queryExcelTitle] result={}", JSON.toJSONString(excelTitle));
return excelTitle;
}
@Override
public List<List<ExcelCell>> queryExcelData(CallbackQueryReq req) {
log.info("[op: change config export callback queryExcelData] req={}", JSON.toJSONString(req));
ChangeConfigQueryReq query = JSON.parseObject(req.getParamJson(), ChangeConfigQueryReq.class);
query.setOffset(req.getOffset());
query.setLimit(req.getLimit());
List<ChangeConfigExcelDTO> list = getExportList(query);
log.debug("[op: change config export callback queryExcelData] size:{}", list.size());
return list.stream().map(ChangeConfigExcelVo::init).collect(Collectors.toList());
}
@Override
public com.netease.mail.dp.des.process.api.entity.PivotTable queryPivotTable(CallbackQueryReq req) {
// 不需要透视表,返回null
return null;
}
private List<ChangeConfigExcelDTO> getExportList(ChangeConfigQueryReq query) {
List<ChangeConfigPo> changeConfigPos = changeConfigMapper.selectChangeConfigPo(query);
// 处理执行部门格式
changeConfigPos.forEach(i -> {
if (StringUtils.isNotBlank(i.getParticipateChangeExecDepartment())) {
String replaceDep = i.getParticipateChangeExecDepartment().replace("[", "").replace("]", "").replace(" ", "");
List<String> depList = Arrays.stream(replaceDep.split(","))
.filter(StringUtils::isNotBlank)
.distinct()
.collect(Collectors.toList());
i.setParticipateChangeExecDepartment(Joiner.on(",").join(depList));
}
});
return changeConfigPos.stream().map(po -> {
ChangeConfigExcelDTO dto = new ChangeConfigExcelDTO();
dto.setId(po.getId());
// 变更主体
if (po.getChangeSubject() != null) {
dto.setChangeSubject(ChangeSubjectEnum.getChangeSubjectEnum(po.getChangeSubject()) != null
? ChangeSubjectEnum.getChangeSubjectEnum(po.getChangeSubject()).getDesc() : "");
}
// 变更类型
String parentChangeType = "";
String sonChangeType = "";
if (po.getParentChangeClassId() != null && po.getSonChangeClassId() != null) {
ChangeType parentType = changeTypeService.getChangeTypeById(po.getParentChangeClassId().longValue());
ChangeType sonType = changeTypeService.getChangeTypeById(po.getSonChangeClassId().longValue());
if (parentType != null) {
parentChangeType = parentType.getTypeName();
}
if (sonType != null) {
sonChangeType = sonType.getTypeName();
}
}
dto.setParentChangeType(parentChangeType);
dto.setSonChangeType(sonChangeType);
// 变更等级
if (po.getChangeLevel() != null) {
dto.setChangeLevel(ChangeLevelEnum.getByType(po.getChangeLevel()));
}
dto.setChangeDepartment(po.getChangeDepartment());
dto.setParticipateChangeExecDepartment(po.getParticipateChangeExecDepartment());
// 变更负责人类型
if (po.getChangeCommanderType() != null) {
ChangeCommanderEnum commanderEnum = ChangeCommanderEnum.getChangeCommanderEnum(po.getChangeCommanderType());
dto.setChangeCommanderType(commanderEnum != null ? commanderEnum.getName() : "");
}
dto.setChangeCommander(po.getChangeCommander());
// 是否需要资料
if (po.getNeedFile() != null) {
String needFileDesc = "";
for (NeedFileEnum needFileEnum : NeedFileEnum.values()) {
if (needFileEnum.getStatus().equals(po.getNeedFile())) {
needFileDesc = needFileEnum.getDesc();
break;
}
}
dto.setNeedFile(needFileDesc);
}
dto.setCreator(po.getCreator());
// 时间格式化
if (po.getCreateTime() != null) {
dto.setCreateTime(DateUtils.parseLongToString(po.getCreateTime(), DateUtils.DATE_TIME_FORMAT));
}
if (po.getUpdateTime() != null) {
dto.setUpdateTime(DateUtils.parseLongToString(po.getUpdateTime(), DateUtils.DATE_TIME_FORMAT));
}
return dto;
}).collect(Collectors.toList());
}
}
......@@ -18,6 +18,7 @@ import com.netease.mail.dp.des.interaction.api.req.TaskReq;
import com.netease.mail.dp.des.starter.client.DesClient;
import com.netease.mail.yanxuan.change.biz.config.AppConfig;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowRequest;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeConfigQueryReq;
/**
* @Author zcwang
......@@ -49,4 +50,21 @@ public class DESExportService {
log.info("create task result: {}", desResult);
return desResult;
}
public String changeConfigExport(ChangeConfigQueryReq query, String uid, String serviceCode) {
TaskReq taskReq = new TaskReq();
taskReq.setUserEmail(uid);
taskReq.setProductCode(serviceCode);
taskReq.setFileName("变更配置列表导出");
taskReq.setTaskType(TaskType.BIVARIATE);
taskReq.setDataType(DataType.CALLBACK);
CallbackQueryParam callbackQueryParam = new CallbackQueryParam();
callbackQueryParam.setParamJson(JSON.toJSONString(query));
callbackQueryParam.setCallbackBeanName("changeConfigExportCallback");
callbackQueryParam.setLimit(appConfig.getExportLimit());
taskReq.setCallbackQueryParam(callbackQueryParam);
String desResult = desClient.addTask(taskReq);
log.info("create change config export task result: {}", desResult);
return desResult;
}
}
\ No newline at end of file
......@@ -26,4 +26,8 @@ public enum NeedFileEnum {
public Integer getStatus() {
return status;
}
public String getDesc() {
return desc;
}
}
\ No newline at end of file
......@@ -44,6 +44,15 @@ public class ChangeConfigQueryReq {
* 更新时间
*/
private Long updateTime;
/**
* 分页偏移量(导出使用)
*/
private Long offset;
/**
* 分页限制(导出使用)
*/
private Long limit;
}
package com.netease.mail.yanxuan.change.integration.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
/**
* 变更配置导出DTO
*/
@Data
public class ChangeConfigExcelDTO {
@Excel(name = "配置ID")
private Long id;
@Excel(name = "变更主体")
private String changeSubject;
@Excel(name = "一级变更类型")
private String parentChangeType;
@Excel(name = "二级变更类型")
private String sonChangeType;
@Excel(name = "变更等级")
private String changeLevel;
@Excel(name = "变更负责部门")
private String changeDepartment;
@Excel(name = "变更执行部门")
private String participateChangeExecDepartment;
@Excel(name = "变更负责人类型")
private String changeCommanderType;
@Excel(name = "变更负责人")
private String changeCommander;
@Excel(name = "是否需要资料")
private String needFile;
@Excel(name = "创建人")
private String creator;
@Excel(name = "创建时间")
private String createTime;
@Excel(name = "更新时间")
private String updateTime;
}
package com.netease.mail.yanxuan.change.integration.excel;
import java.util.ArrayList;
import java.util.List;
import com.netease.mail.dp.des.common.api.enums.ExcelCellType;
import com.netease.mail.dp.des.process.api.entity.ExcelCell;
import com.netease.mail.yanxuan.change.common.anno.ExcelTitleName;
import lombok.Data;
/**
* 变更配置导出VO
*/
@Data
public class ChangeConfigExcelVo {
@ExcelTitleName(title = "配置ID", order = 1)
private Long id;
@ExcelTitleName(title = "变更主体", order = 2)
private String changeSubject;
@ExcelTitleName(title = "一级变更类型", order = 3)
private String parentChangeType;
@ExcelTitleName(title = "二级变更类型", order = 4)
private String sonChangeType;
@ExcelTitleName(title = "变更等级", order = 5)
private String changeLevel;
@ExcelTitleName(title = "变更负责部门", order = 6)
private String changeDepartment;
@ExcelTitleName(title = "变更执行部门", order = 7)
private String participateChangeExecDepartment;
@ExcelTitleName(title = "变更负责人类型", order = 8)
private String changeCommanderType;
@ExcelTitleName(title = "变更负责人", order = 9)
private String changeCommander;
@ExcelTitleName(title = "是否需要资料", order = 10)
private String needFile;
@ExcelTitleName(title = "创建人", order = 11)
private String creator;
@ExcelTitleName(title = "创建时间", order = 12)
private String createTime;
@ExcelTitleName(title = "更新时间", order = 13)
private String updateTime;
public static List<ExcelCell> init(ChangeConfigExcelDTO dto) {
List<ExcelCell> cells = new ArrayList<>();
ExcelCell excelCell;
// 1. 配置ID
excelCell = new ExcelCell();
excelCell.setCellType(ExcelCellType.TEXT);
excelCell.setValue(dto.getId() != null ? dto.getId().toString() : "");
cells.add(excelCell);
// 2. 变更主体
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeSubject() != null ? dto.getChangeSubject() : "");
cells.add(excelCell);
// 3. 一级变更类型
excelCell = new ExcelCell();
excelCell.setValue(dto.getParentChangeType() != null ? dto.getParentChangeType() : "");
cells.add(excelCell);
// 4. 二级变更类型
excelCell = new ExcelCell();
excelCell.setValue(dto.getSonChangeType() != null ? dto.getSonChangeType() : "");
cells.add(excelCell);
// 5. 变更等级
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeLevel() != null ? dto.getChangeLevel() : "");
cells.add(excelCell);
// 6. 变更负责部门
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeDepartment() != null ? dto.getChangeDepartment() : "");
cells.add(excelCell);
// 7. 变更执行部门
excelCell = new ExcelCell();
excelCell.setValue(dto.getParticipateChangeExecDepartment() != null ? dto.getParticipateChangeExecDepartment() : "");
cells.add(excelCell);
// 8. 变更负责人类型
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeCommanderType() != null ? dto.getChangeCommanderType() : "");
cells.add(excelCell);
// 9. 变更负责人
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeCommander() != null ? dto.getChangeCommander() : "");
cells.add(excelCell);
// 10. 是否需要资料
excelCell = new ExcelCell();
excelCell.setValue(dto.getNeedFile() != null ? dto.getNeedFile() : "");
cells.add(excelCell);
// 11. 创建人
excelCell = new ExcelCell();
excelCell.setValue(dto.getCreator() != null ? dto.getCreator() : "");
cells.add(excelCell);
// 12. 创建时间
excelCell = new ExcelCell();
excelCell.setValue(dto.getCreateTime() != null ? dto.getCreateTime() : "");
cells.add(excelCell);
// 13. 更新时间
excelCell = new ExcelCell();
excelCell.setValue(dto.getUpdateTime() != null ? dto.getUpdateTime() : "");
cells.add(excelCell);
return cells;
}
}
......@@ -3,6 +3,7 @@ package com.netease.mail.yanxuan.change.web.controller;
import com.netease.mail.yanxuan.change.common.bean.AjaxResult;
import com.netease.mail.yanxuan.change.biz.service.change.AdminChangeConfigService;
import com.netease.mail.yanxuan.change.biz.service.DESExportService;
import com.netease.mail.yanxuan.change.common.bean.RequestLocalBean;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeConfigDeleteReq;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeConfigQueryReq;
......@@ -30,6 +31,9 @@ public class ChangeConfigController {
@Autowired
private FlowRpcSupplierSendService supplierSendService;
@Autowired
private DESExportService desExportService;
/**
* 通过参数查询配置模板
......@@ -134,4 +138,32 @@ public class ChangeConfigController {
//return supplierSendService.queryByConditionForQc(req); 暂用模拟数据
return listAjaxResponse;
}
/**
* 导出变更配置列表
*
* @return
*/
@GetMapping("/export")
public AjaxResult<String> export(
@RequestParam(name = "changeDepartment", required = false) String changeDepartment,
@RequestParam(name = "changeExecDepartment", required = false) String changeExecDepartment,
@RequestParam(name = "parentChangeClassId", required = false) Integer parentChangeClassId,
@RequestParam(name = "sonChangeClassId", required = false) Integer sonChangeClassId,
@RequestParam(name = "changeLevel", required = false) Integer changeLevel,
@RequestParam(name = "createTime", required = false) Long createTime,
@RequestParam(name = "endTime", required = false) Long endTime,
@RequestParam(name = "serviceCode") String serviceCode) {
ChangeConfigQueryReq req = new ChangeConfigQueryReq();
req.setChangeDepartment(changeDepartment);
req.setChangeExecDepartment(changeExecDepartment);
req.setParentChangeClassId(parentChangeClassId);
req.setSonChangeClassId(sonChangeClassId);
req.setChangeLevel(changeLevel);
req.setCreateTime(createTime);
req.setUpdateTime(endTime);
String uid = RequestLocalBean.getUid();
String result = desExportService.changeConfigExport(req, uid, serviceCode);
return AjaxResult.success(result);
}
}
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