Commit 2c6ce126 by jx-art

Merge remote-tracking branch 'origin/feature-changeFlow-221110' into feature-changeFlow-221110

parents 5171d7ca e1c9a125
......@@ -416,7 +416,22 @@
<!-- <artifactId>assertj-core</artifactId>-->
<!-- <version>3.18.1</version>-->
<!-- </dependency>-->
<!--easypoi-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
......
......@@ -6,6 +6,11 @@
*/
package com.netease.mail.yanxuan.change.biz.biz;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
......@@ -13,8 +18,11 @@ import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
......@@ -58,6 +66,7 @@ import com.netease.mail.yanxuan.change.dal.meta.model.vo.BasicChangeFlowVO;
import com.netease.mail.yanxuan.change.dal.meta.model.vo.ChangeFlowExecVO;
import com.netease.mail.yanxuan.change.dal.meta.model.vo.ChangeFlowVO;
import com.netease.mail.yanxuan.change.dal.meta.model.vo.ItemVO;
import com.netease.mail.yanxuan.change.integration.excel.ChangeFlowExcelDTO;
import com.netease.mail.yanxuan.change.integration.flow.FlowRpcService;
import com.netease.yanxuan.flowx.sdk.meta.controller.communal.AjaxResponse;
import com.netease.yanxuan.flowx.sdk.meta.dto.base.FlowDataDTO;
......@@ -67,6 +76,8 @@ import com.netease.yanxuan.flowx.sdk.meta.dto.exec.UserBaseContainerDTO;
import com.netease.yanxuan.flowx.sdk.meta.dto.flow.FlowCreateReqDTO;
import com.netease.yanxuan.flowx.sdk.meta.dto.flow.NodeSubmitReqDTO;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import lombok.extern.slf4j.Slf4j;
/**
......@@ -160,8 +171,10 @@ public class ChangeFlowBiz {
changeRecord.setFlowNode(nodeId);
changeRecord.setUpdateTime(DateUtils.getCurrentTime());
changeFlowService.updateRecord(changeRecord);
// todo:502节点,发送邮件,变更执行
return flowId;
}
// todo: 变更发起人≠变更负责人,到达501节点,发送邮件,变更申请
return flowId;
}
......@@ -423,7 +436,7 @@ public class ChangeFlowBiz {
List<ChangeFile> changeFiles = buildChangeFileRecord(changeRecord.getId(), files);
changeFiles.forEach(file -> changeFileService.saveRecord(file));
}
// todo: 发送邮件
// todo: 502节点,发送邮件,变更执行
return submitNode;
case CHANGE_FLOW_CONFIRM:
......@@ -457,7 +470,6 @@ public class ChangeFlowBiz {
changeRecord.setUpdateTime(DateUtils.getCurrentTime());
changeFlowService.updateRecord(changeRecord);
changeExecRecordList.forEach(exec->changeFlowExecService.update(exec));
//todo: 发送邮件
return confirmNode;
case CANCEL:
// 取消填写取消原因
......@@ -469,7 +481,6 @@ public class ChangeFlowBiz {
changeRecord.setFlowNode(cancelNode);
changeRecord.setUpdateTime(DateUtils.getCurrentTime());
changeFlowService.updateRecord(changeRecord);
//todo: 发送邮件
return cancelNode;
case DELAY:
// 延期不流转工单
......@@ -495,7 +506,6 @@ public class ChangeFlowBiz {
changeFlowService.updateRecord(changeRecord);
changeExecRecords1.forEach(exec->changeFlowExecService.update(exec));
// 变更行动项
//todo: 发送邮件
return null;
default:
return null;
......@@ -554,6 +564,7 @@ public class ChangeFlowBiz {
changeRecord.setState(ChangeStatusEnum.CANCEL.getStatus());
changeRecord.setCancelReason(req.getCancelReason());
changeRecord.setUpdateTime(DateUtils.getCurrentTime());
// todo:取消501节点,取消工单,发送邮件
return changeFlowService.updateRecord(changeRecord);
}
......@@ -614,27 +625,22 @@ public class ChangeFlowBiz {
return changeFlowVO;
}
public PageInfo<ChangeRecord> query(Integer page, Integer pageSize, ChangeFlowListQueryReq changeFlowListQueryReq) {
public PageInfo<ChangeFlowVO> query(Integer page, Integer pageSize, ChangeFlowListQueryReq changeFlowListQueryReq) {
log.info("[query] page:{}, pageSize:{}, changeFlowListQueryReq:{}", page, pageSize, JSON.toJSONString(changeFlowListQueryReq));
//进行分页
PageHelper.startPage(page,pageSize);
return new PageInfo<ChangeRecord>(changeRecordMapper.selectByCondition(changeFlowListQueryReq));
// List<ChangeFlowVO> list = new ArrayList<>();
PageInfo<ChangeRecord> changeRecordPageInfo = new PageInfo<>(changeRecordMapper.selectByCondition(changeFlowListQueryReq));
List<ChangeRecord> changeRecords = changeRecordPageInfo.getList();
List<ChangeFlowVO> list = new ArrayList<>();
// 处理数据
/*if (CollectionUtils.isNotEmpty(changeRecords)) {
if (CollectionUtils.isNotEmpty(changeRecords)) {
list = changeRecords.stream().map(c -> {
ChangeFlowVO changeFlowVO = new ChangeFlowVO();
changeFlowVO.setId(c.getId());
changeFlowVO.setFlowId(c.getFlowId());
changeFlowVO.setChangeSubject(c.getChangeSubject());
ChangeType parentChangeType = changeTypeService.getChangeTypeById(c.getParentChangeClassId());
if (parentChangeType == null) {
throw ExceptionFactory.createBiz(ResponseCode.CHANGE_TYPE_NOT_EXIST, "变更类型不存在");
}
ChangeType sonChangeType = changeTypeService.getChangeTypeById(c.getSonChangeClassId());
if (sonChangeType == null) {
throw ExceptionFactory.createBiz(ResponseCode.CHANGE_TYPE_NOT_EXIST, "变更类型配置不存在");
}
changeFlowVO.setChangeType(parentChangeType.getTypeName() + ">" + sonChangeType.getTypeName());
changeFlowVO.setChangeDepartment(c.getChangeDepartment());
changeFlowVO.setChangeContent(c.getChangeContent());
......@@ -656,7 +662,13 @@ public class ChangeFlowBiz {
changeFlowVO.setRemark(c.getRemark());
return changeFlowVO;
}).collect(Collectors.toList());
}*/
}
PageInfo<ChangeFlowVO> changeFlowVOPageInfo = new PageInfo<>(list);
changeFlowVOPageInfo.setPageNum(changeRecordPageInfo.getPageNum());
changeFlowVOPageInfo.setPageSize(changeRecordPageInfo.getPageSize());
changeFlowVOPageInfo.setSize(changeRecordPageInfo.getSize());
changeFlowVOPageInfo.setPages(changeRecordPageInfo.getPages());
return changeFlowVOPageInfo;
}
public UserBaseContainerDTO getOperator(InterfaceInputDTO interfaceInput) {
......@@ -687,4 +699,62 @@ public class ChangeFlowBiz {
userBaseContainer.setUserList(totalUserList);
return userBaseContainer;
}
public void export(ChangeFlowListQueryReq changeFlowListQueryReq, HttpServletResponse response) {
List<ChangeRecord> changeRecords = changeRecordMapper.selectByCondition(changeFlowListQueryReq);
if (CollectionUtils.isEmpty(changeRecords)) {
throw ExceptionFactory.createBiz(ResponseCode.EMPTY, "无导出数据");
}
List<ChangeFlowExcelDTO> changeFlowExcelDTOList = changeRecords.stream().map(record -> {
ChangeFlowExcelDTO changeFlowExcelDTO = new ChangeFlowExcelDTO();
changeFlowExcelDTO.setId(record.getId());
changeFlowExcelDTO.setChangeSubject(ChangeSubjectEnum.getChangeSubjectEnum(record.getChangeSubject()).getDesc());
ChangeType parentChangeType = changeTypeService.getChangeTypeById(record.getParentChangeClassId());
ChangeType sonChangeType = changeTypeService.getChangeTypeById(record.getSonChangeClassId());
changeFlowExcelDTO.setChangeType(parentChangeType.getTypeName() + ">" + sonChangeType.getTypeName());
changeFlowExcelDTO.setChangeDepartment(record.getChangeDepartment());
changeFlowExcelDTO.setChangeContent(record.getChangeContent());
changeFlowExcelDTO.setChangeCommander(record.getChangeCommander());
String changeItemJsonStr = record.getChangeItem();
if (StringUtils.isNotBlank(changeItemJsonStr)) {
List<ItemVO> itemVOS = JSON.parseArray(changeItemJsonStr, ItemVO.class);
changeFlowExcelDTO.setChangeItems(itemVOS.stream().map(item -> item.getItemId() + item.getItemName())
.collect(Collectors.joining(",")));
}
if (StringUtils.isNotBlank(record.getChangeSupplier())) {
changeFlowExcelDTO.setSupplier(record.getChangeSupplier());
}
changeFlowExcelDTO.setChangeState(record.getState());
// todo:变更发起人组织查询:姓名(组织架构三级部门)/供应商ID/system+发起时间
changeFlowExcelDTO.setChangeCreator(record.getCreator());
changeFlowExcelDTO.setExecDepartmentStrList(record.getParticipateChangeExecDepartment());
changeFlowExcelDTO.setCreateTime(record.getCreateTime());
return changeFlowExcelDTO;
}).collect(Collectors.toList());
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), ChangeFlowExcelDTO.class, changeFlowExcelDTOList);
downLoadExcel("变更管理列表", response, workbook);
}
private void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
try {
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xls");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
response.setHeader("Content-Length", String.valueOf(baos.size()));
OutputStream out = response.getOutputStream();
out.write(baos.toByteArray());
} catch (IOException ex) {
throw ExceptionFactory.createBiz(ResponseCode.BAD_REQUEST);
}
}
public void deliver() {
// todo:501节点,转交工单,发送邮箱
}
}
......@@ -95,12 +95,10 @@ public class AutoSubmit extends IJobHandler {
changeRecord.setFlowNode(execNode);
changeRecord.setUpdateTime(DateUtils.getCurrentTime());
changeFlowService.updateRecord(changeRecord);
// todo: 发送邮件
} catch (Exception e) {
log.debug("[progressRecord] submit error, flowId{}", flowId);
}
} else if (ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getNodeId().equals(flowNode)) {
// todo: 发送邮件
}
// todo: 到达执行确认时间,发送邮件
}
}
\ No newline at end of file
/**
* @(#)ChangeFlowExcelDTO.java, 2022/11/25.
* <p/>
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.integration.excel;
import com.netease.mail.yanxuan.change.common.enums.ChangeStatusEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeSubjectEnum;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
/**
* @Author zcwang
* @Date 2022/11/25
*/
@Data
public class ChangeFlowExcelDTO {
/**
* 主键id
*/
@Excel(name = "变更ID")
private Long id;
/**
* 变更主体
* @see ChangeSubjectEnum
*/
@Excel(name = "变更主体")
private String changeSubject;
/**
* 变更类型,一级类型>二级类型
*/
@Excel(name = "变更类型")
private String changeType;
/**
* 变更负责部门名
*/
@Excel(name = "变更负责部门名")
private String changeDepartment;
/**
* 变更内容
*/
@Excel(name = "变更内容")
private String changeContent;
/**
* 变更负责人
*/
@Excel(name = "变更负责人")
private String changeCommander;
/**
* 变更商品列表,SPUID+商品名称
*/
@Excel(name = "变更商品")
private String changeItems;
/**
* 变更供应商,仅展示供应商ID,没有时展示为“/”
*/
@Excel(name = "变更供应商")
private String supplier;
/**
* 变更状态
* @see ChangeStatusEnum
*/
@Excel(name = "变更状态")
private Integer changeState;
/**
* 变更发起人
*/
@Excel(name = "变更发起人")
private String changeCreator;
/**
* 变更行动部门列表
*/
@Excel(name = "变更行动部门")
private String execDepartmentStrList;
/**
* 创建时间
*/
@Excel(name = "创建时间")
private Long createTime;
}
\ No newline at end of file
......@@ -6,6 +6,7 @@
*/
package com.netease.mail.yanxuan.change.web.controller;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -16,14 +17,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageInfo;
import com.netease.mail.yanxuan.change.biz.biz.ChangeFlowBiz;
import com.netease.mail.yanxuan.change.biz.config.TitleConfig;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService;
import com.netease.mail.yanxuan.change.common.bean.AjaxResult;
import com.netease.mail.yanxuan.change.common.util.DateUtils;
import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowCancelReq;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowCreateReq;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowListQueryReq;
......@@ -52,6 +50,7 @@ public class ChangeFlowController {
/**
* 变更工单详情查询
*
* @return
*/
@GetMapping("/detail")
......@@ -65,18 +64,18 @@ public class ChangeFlowController {
* @return
*/
@GetMapping("/query")
public AjaxResult<PageInfo<ChangeRecord>> query(@RequestParam(name = "page", defaultValue = "1") Integer page,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "itemId", required = false) String itemId,
@RequestParam(name = "supplier", required = false) String supplier,
@RequestParam(name = "parentChangeClassId", required = false) Long parentChangeClassId,
@RequestParam(name = "sonChangeClassId", required = false) Long sonChangeClassId,
@RequestParam(name = "changeState", required = false) Integer changeState,
@RequestParam(name = "changeCommander", required = false) String changeCommander,
@RequestParam(name = "changeDepartment", required = false) String changeDepartment,
@RequestParam(name = "changeExecDepartment", required = false) String changeExecDepartment,
@RequestParam(name = "startTime", required = false) Long startTime,
@RequestParam(name = "endTime", required = false) Long endTime) {
public AjaxResult<PageInfo<ChangeFlowVO>> query(@RequestParam(name = "page", defaultValue = "1") Integer page,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "itemId", required = false) String itemId,
@RequestParam(name = "supplier", required = false) String supplier,
@RequestParam(name = "parentChangeClassId", required = false) Long parentChangeClassId,
@RequestParam(name = "sonChangeClassId", required = false) Long sonChangeClassId,
@RequestParam(name = "changeState", required = false) Integer changeState,
@RequestParam(name = "changeCommander", required = false) String changeCommander,
@RequestParam(name = "changeDepartment", required = false) String changeDepartment,
@RequestParam(name = "changeExecDepartment", required = false) String changeExecDepartment,
@RequestParam(name = "startTime", required = false) Long startTime,
@RequestParam(name = "endTime", required = false) Long endTime) {
ChangeFlowListQueryReq changeFlowListQueryReq = new ChangeFlowListQueryReq();
changeFlowListQueryReq.setItemId(itemId);
changeFlowListQueryReq.setSupplier(supplier);
......@@ -93,6 +92,7 @@ public class ChangeFlowController {
/**
* 返回提示文案
*
* @return
*/
@GetMapping("/title")
......@@ -102,6 +102,7 @@ public class ChangeFlowController {
/**
* 发起变更,如果发起人=审核人,自动跳转到第一个节点
*
* @return
*/
@PostMapping("/create")
......@@ -111,6 +112,7 @@ public class ChangeFlowController {
/**
* 变更工单提交
*
* @return
*/
@PostMapping("/submit")
......@@ -120,15 +122,18 @@ public class ChangeFlowController {
/**
* 工单转交
*
* @return
*/
@PostMapping("/deliver")
public AjaxResult<Boolean> deliver() {
public AjaxResult<Void> deliver() {
changeFlowBiz.deliver();
return AjaxResult.success();
}
/**
* 工单取消
*
* @return
*/
@PostMapping("/cancel")
......@@ -138,6 +143,7 @@ public class ChangeFlowController {
/**
* 引用变更工单
*
* @return
*/
@GetMapping("/quote")
......@@ -145,19 +151,40 @@ public class ChangeFlowController {
return AjaxResult.success(changeFlowBiz.quote(flowId));
}
/**
* 导出变更
*
* @return
*/
@PostMapping("/export")
public AjaxResult<Void> export() {
public AjaxResult<Void> export(@RequestParam(name = "itemId", required = false) String itemId,
@RequestParam(name = "supplier", required = false) String supplier,
@RequestParam(name = "parentChangeClassId", required = false) Long parentChangeClassId,
@RequestParam(name = "sonChangeClassId", required = false) Long sonChangeClassId,
@RequestParam(name = "changeState", required = false) Integer changeState,
@RequestParam(name = "changeCommander", required = false) String changeCommander,
@RequestParam(name = "changeDepartment", required = false) String changeDepartment,
@RequestParam(name = "changeExecDepartment", required = false) String changeExecDepartment,
@RequestParam(name = "startTime", required = false) Long startTime,
@RequestParam(name = "endTime", required = false) Long endTime, HttpServletResponse response) {
ChangeFlowListQueryReq changeFlowListQueryReq = new ChangeFlowListQueryReq();
changeFlowListQueryReq.setItemId(itemId);
changeFlowListQueryReq.setSupplier(supplier);
changeFlowListQueryReq.setParentChangeClassId(parentChangeClassId);
changeFlowListQueryReq.setSonChangeClassId(sonChangeClassId);
changeFlowListQueryReq.setState(changeState);
changeFlowListQueryReq.setChangeCommander(changeCommander);
changeFlowListQueryReq.setChangeDepartment(changeDepartment);
changeFlowListQueryReq.setChangeExecDepartment(changeExecDepartment);
changeFlowListQueryReq.setStartTime(startTime);
changeFlowListQueryReq.setEndTime(endTime);
changeFlowBiz.export(changeFlowListQueryReq, response);
return AjaxResult.success();
}
/**
* 获取审批人
*
* @param interfaceInput
* @return
*/
......@@ -165,4 +192,4 @@ public class ChangeFlowController {
public AjaxResult<UserBaseContainerDTO> getOperator(@RequestBody InterfaceInputDTO interfaceInput) {
return AjaxResult.success(changeFlowBiz.getOperator(interfaceInput));
}
}
\ No newline at end of file
}
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