Commit 53f964e8 by jx-art

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

parents 17b19a1d a738bffe
...@@ -59,7 +59,8 @@ ...@@ -59,7 +59,8 @@
<commonsio.version>2.4</commonsio.version> <commonsio.version>2.4</commonsio.version>
<commonscollection.version>4.1</commonscollection.version> <commonscollection.version>4.1</commonscollection.version>
<commons.lang.version>2.4</commons.lang.version> <commons.lang.version>2.4</commons.lang.version>
<des.version>1.0.2-SNAPSHOT</des.version>
<mapstruct.version>1.3.1.Final</mapstruct.version>
</properties> </properties>
<!-- 子模块可选依赖 --> <!-- 子模块可选依赖 -->
...@@ -443,6 +444,12 @@ ...@@ -443,6 +444,12 @@
<version>3.1.0</version> <version>3.1.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.netease.mail.dp</groupId>
<artifactId>des-boot-starter</artifactId>
<version>${des.version}</version>
</dependency>
</dependencies> </dependencies>
<repositories> <repositories>
......
...@@ -43,4 +43,8 @@ spring.redis.host=yx-cust23-online.ncr.cn-east-p1.internal. ...@@ -43,4 +43,8 @@ spring.redis.host=yx-cust23-online.ncr.cn-east-p1.internal.
spring.redis.port=32427 spring.redis.port=32427
# supplier # supplier
supplier.url=http://127.0.0.1:8550/proxy/test-v1.yanxuan-supplier-ms.service.mailsaas supplier.url=http://127.0.0.1:8550/proxy/test-v1.yanxuan-supplier-ms.service.mailsaas
\ No newline at end of file
### des\u914D\u7F6E
# \u5BFC\u51FA\u6587\u4EF6\u4E0A\u4F20\u5230\u54EA\u4E2A\u670D\u52A1\u5668\uFF0C\u6709test\u548Conline\u53EF\u9009
des.prop.env=online
\ No newline at end of file
...@@ -41,4 +41,8 @@ spring.redis.host=yx-cust23-test.ncr.cn-east-p1.internal ...@@ -41,4 +41,8 @@ spring.redis.host=yx-cust23-test.ncr.cn-east-p1.internal
spring.redis.port=31461 spring.redis.port=31461
# supplier # supplier
supplier.url=http://127.0.0.1:8550/proxy/test-v1.yanxuan-supplier-ms.service.mailsaas supplier.url=http://127.0.0.1:8550/proxy/test-v1.yanxuan-supplier-ms.service.mailsaas
\ No newline at end of file
### des\u914D\u7F6E
# \u5BFC\u51FA\u6587\u4EF6\u4E0A\u4F20\u5230\u54EA\u4E2A\u670D\u52A1\u5668\uFF0C\u6709test\u548Conline\u53EF\u9009
des.prop.env=test
\ No newline at end of file
...@@ -53,6 +53,7 @@ import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum; ...@@ -53,6 +53,7 @@ import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeResultEnum; import com.netease.mail.yanxuan.change.common.enums.ChangeResultEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeStatusEnum; import com.netease.mail.yanxuan.change.common.enums.ChangeStatusEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeSubjectEnum; import com.netease.mail.yanxuan.change.common.enums.ChangeSubjectEnum;
import com.netease.mail.yanxuan.change.common.enums.CreateSourceEnum;
import com.netease.mail.yanxuan.change.common.enums.FileTypeEnum; import com.netease.mail.yanxuan.change.common.enums.FileTypeEnum;
import com.netease.mail.yanxuan.change.common.enums.FlowOperationTypeEnum; import com.netease.mail.yanxuan.change.common.enums.FlowOperationTypeEnum;
import com.netease.mail.yanxuan.change.common.enums.FlowxOperationEnum; import com.netease.mail.yanxuan.change.common.enums.FlowxOperationEnum;
...@@ -66,6 +67,7 @@ import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord; ...@@ -66,6 +67,7 @@ import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord;
import com.netease.mail.yanxuan.change.dal.entity.ChangeType; import com.netease.mail.yanxuan.change.dal.entity.ChangeType;
import com.netease.mail.yanxuan.change.dal.mapper.ChangeRecordMapper; import com.netease.mail.yanxuan.change.dal.mapper.ChangeRecordMapper;
import com.netease.mail.yanxuan.change.dal.meta.model.po.ChangeCommanderPO; import com.netease.mail.yanxuan.change.dal.meta.model.po.ChangeCommanderPO;
import com.netease.mail.yanxuan.change.dal.meta.model.po.ChangeConfigPo;
import com.netease.mail.yanxuan.change.dal.meta.model.po.ChangeGoodsPrincipalPO; import com.netease.mail.yanxuan.change.dal.meta.model.po.ChangeGoodsPrincipalPO;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeExecConfigReq; import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeExecConfigReq;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowCancelReq; import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowCancelReq;
...@@ -233,7 +235,7 @@ public class ChangeFlowBiz { ...@@ -233,7 +235,7 @@ public class ChangeFlowBiz {
TaskCreateDTO todoTask = todoService.createTodoTask(changeRecord); TaskCreateDTO todoTask = todoService.createTodoTask(changeRecord);
changeRecord.setTodoId(todoTask.getId()); changeRecord.setTodoId(todoTask.getId());
changeFlowService.updateRecord(changeRecord); changeFlowService.updateRecord(changeRecord);
// 如果发起人=变更负责人 // 如果发起人=变更负责人,直接提交到执行节点,发送邮件
if (changeCommander.equals(uid)) { if (changeCommander.equals(uid)) {
log.debug("[createAndSubmit] changeCommander:{}, uid:{}", changeCommander, uid); log.debug("[createAndSubmit] changeCommander:{}, uid:{}", changeCommander, uid);
String nextNodeId = flowService.submitFlow(flowId, flowDataDTO, uid, String nextNodeId = flowService.submitFlow(flowId, flowDataDTO, uid,
...@@ -242,30 +244,66 @@ public class ChangeFlowBiz { ...@@ -242,30 +244,66 @@ public class ChangeFlowBiz {
throw ExceptionFactory.createBiz(ResponseCode.SUBMIT_FLOW_ERROR, "首次提交节点失败"); throw ExceptionFactory.createBiz(ResponseCode.SUBMIT_FLOW_ERROR, "首次提交节点失败");
} }
// 更新节点id // 更新节点id
changeRecord.setFlowNode(nodeId); changeRecord.setFlowNode(ChangeFlowEnum.CHANGE_FLOW_EXE.getNodeId());
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
changeFlowService.updateRecord(changeRecord); changeFlowService.updateRecord(changeRecord);
// todo:502节点,发送邮件,变更执行 HashMap<String, Object> param = new HashMap<>();
param.put("changeId", changeRecord.getId());
param.put("changeSubject", changeRecord.getChangeSubject());
param.put("changeContent", changeRecord.getChangeContent());
param.put("changeReason", changeRecord.getChangeReason());
param.put("changeCommander", changeRecord.getChangeCommander());
param.put("changeCommanderEmail", changeRecord.getChangeCommander());
param.put("flowUrl", changeRecord.getFlowId());
param.put("dataList", changeExecRecords);
qcSendEmail(changeCommander, changeRecord.getId().toString(), EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
// 如果是供应商,再次发送供应商邮件
if (changeFlowCreateReq.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
}
return flowId; return flowId;
} }
// todo: 变更发起人≠变更负责人,到达501节点,发送邮件,变更申请 // 如果发起人≠变更负责人,停留在变更申请提交节点,发送邮件
qcSendEmail(changeCommander, changeRecord);
// 如果是供应商,再次发送供应商邮件
HashMap<String, Object> param = new HashMap<>(); HashMap<String, Object> param = new HashMap<>();
param.put("changeId", changeRecord.getId()); param.put("changeId", changeRecord.getId());
param.put("changeSubject", changeRecord.getChangeSubject()); param.put("changeSubject", changeRecord.getChangeSubject());
param.put("changeType", changeRecord); ChangeConfigPo changeConfigPo = changeConfigService.queryInfoPo(parentChangeClassId, sonChangeClassId);
param.put("flowUrl", "工单链接"); StringBuilder changeType = new StringBuilder("");
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_RELEASE_FLOW, param); try {
changeType.append(changeConfigPo.getChangeTypes().get(0).getTypeName());
} catch (Exception e) {
log.error("queryInfoPo error:{}", JSON.toJSONString(changeConfigPo));
}
try {
changeType.append(changeConfigPo.getChangeTypes().get(1).getTypeName());
} catch (Exception e) {
log.error("queryInfoPo error:{}", JSON.toJSONString(changeConfigPo));
}
param.put("changeType", changeType.toString());
param.put("flowUrl", changeRecord.getFlowId());
qcSendEmail(changeCommander, changeRecord.getId().toString(), EmailTemplateEnum.YX_QC_CHANGE_RELEASE_FLOW, param);
// 如果是供应商,再次发送供应商邮件
if (changeFlowCreateReq.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_RELEASE_FLOW, param);
}
return flowId; return flowId;
} }
private void qcSendEmail(String changeCommander, ChangeRecord changeRecord) { /**
* 严选QC端发送邮件
* @param changeCommander 负责人
* @param subjectParam 主体参数
* @param emailTemplateEnum 邮件模板
* @param param 正文参数
*/
public void qcSendEmail(String changeCommander, String subjectParam, EmailTemplateEnum emailTemplateEnum,
Map<String, Object> param) {
IusDepartmentReq iusDepartmentReq = new IusDepartmentReq(); IusDepartmentReq iusDepartmentReq = new IusDepartmentReq();
iusDepartmentReq.setHasOrgPos(true); iusDepartmentReq.setHasOrgPos(true);
iusDepartmentReq.setIcac(true); iusDepartmentReq.setIcac(true);
iusDepartmentReq.setUids(Collections.singletonList(changeCommander)); iusDepartmentReq.setUids(Collections.singletonList(changeCommander));
HashMap<String, List<SecondaryDepartments>> map = iusService.queryDepartment(iusDepartmentReq); HashMap<String, List<SecondaryDepartments>> map = iusService.queryDepartment(iusDepartmentReq);
log.info("[qcSendEmail] subjectParam:{}, map:{}", subjectParam, map);
List<SecondaryDepartments> secondaryDepartments = map.get(changeCommander); List<SecondaryDepartments> secondaryDepartments = map.get(changeCommander);
List<String> ccList = new ArrayList<>(); List<String> ccList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(secondaryDepartments)) { if (CollectionUtils.isNotEmpty(secondaryDepartments)) {
...@@ -273,13 +311,8 @@ public class ChangeFlowBiz { ...@@ -273,13 +311,8 @@ public class ChangeFlowBiz {
} }
// 变更管理QM,所有邮件都要发 // 变更管理QM,所有邮件都要发
ccList.add(appConfig.getChangeManageQM()); ccList.add(appConfig.getChangeManageQM());
HashMap<String, Object> param = new HashMap<>(); iEmailService.sendEmail(Collections.singletonList(changeCommander), ccList, param, emailTemplateEnum,
param.put("changeId", changeRecord.getId()); subjectParam);
param.put("changeSubject", changeRecord.getChangeSubject());
param.put("changeType", changeRecord);
param.put("flowUrl", "工单链接");
iEmailService.sendEmail(Collections.singletonList(changeCommander), ccList, param,
EmailTemplateEnum.YX_QC_CHANGE_RELEASE_FLOW, Collections.singletonList(changeRecord.getId().toString()));
} }
private List<ChangeFile> buildChangeFileRecord(Long changeRecordId, List<ChangeFlowFile> files, Integer type) { private List<ChangeFile> buildChangeFileRecord(Long changeRecordId, List<ChangeFlowFile> files, Integer type) {
...@@ -462,8 +495,20 @@ public class ChangeFlowBiz { ...@@ -462,8 +495,20 @@ public class ChangeFlowBiz {
List<ChangeFile> changeFiles = buildChangeFileRecord(changeRecord.getId(), files, FileTypeEnum.CHANGE.getType()); List<ChangeFile> changeFiles = buildChangeFileRecord(changeRecord.getId(), files, FileTypeEnum.CHANGE.getType());
changeFiles.forEach(file -> changeFileService.saveRecord(file)); changeFiles.forEach(file -> changeFileService.saveRecord(file));
} }
// todo: 502节点,发送邮件,变更执行 HashMap<String, Object> param = new HashMap<>();
param.put("changeId", changeRecord.getId());
param.put("changeSubject", changeRecord.getChangeSubject());
param.put("changeContent", changeRecord.getChangeContent());
param.put("changeReason", changeRecord.getChangeReason());
param.put("changeCommander", changeRecord.getChangeCommander());
param.put("changeCommanderEmail", changeRecord.getChangeCommander());
param.put("flowUrl", changeRecord.getFlowId());
param.put("dataList", changeExecRecords);
qcSendEmail(changeRecord.getChangeCommander(), changeRecord.getId().toString(), EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
// 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
}
return submitNode; return submitNode;
case CHANGE_FLOW_CONFIRM: case CHANGE_FLOW_CONFIRM:
Integer changeResult = changeFlowSubmitReq.getChangeResult(); Integer changeResult = changeFlowSubmitReq.getChangeResult();
...@@ -495,7 +540,17 @@ public class ChangeFlowBiz { ...@@ -495,7 +540,17 @@ public class ChangeFlowBiz {
changeFlowService.updateRecord(changeRecord); changeFlowService.updateRecord(changeRecord);
changeExecRecordList.forEach(exec->changeFlowExecService.update(exec)); changeExecRecordList.forEach(exec->changeFlowExecService.update(exec));
todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType()); todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType());
// todo:完结工单,发送邮件 // 发送邮件
HashMap<String, Object> finishPartMap = new HashMap<>();
finishPartMap.put("changeId", changeRecord.getId());
finishPartMap.put("changeSubject", changeRecord.getChangeSubject());
finishPartMap.put("flowUrl", changeRecord.getFlowId());
qcSendEmail(changeRecord.getChangeCommander(), changeRecord.getId().toString(),
EmailTemplateEnum.YX_QC_CHANGE_FINISH, finishPartMap);
// 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_FINISH, finishPartMap);
}
return confirmNode; return confirmNode;
case CANCEL: case CANCEL:
// 取消填写取消原因 // 取消填写取消原因
...@@ -509,7 +564,16 @@ public class ChangeFlowBiz { ...@@ -509,7 +564,16 @@ public class ChangeFlowBiz {
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
changeFlowService.updateRecord(changeRecord); changeFlowService.updateRecord(changeRecord);
todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType()); todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType());
// todo:完结工单,发送邮件 // 发送邮件
HashMap<String, Object> cancelMap = new HashMap<>();
cancelMap.put("changeId", changeRecord.getId());
cancelMap.put("changeSubject", changeRecord.getChangeSubject());
cancelMap.put("flowUrl", changeRecord.getFlowId());
qcSendEmail(changeRecord.getChangeCommander(), changeRecord.getId().toString(), EmailTemplateEnum.YX_QC_CHANGE_FINISH, cancelMap);
// 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_FINISH, cancelMap);
}
return cancelNode; return cancelNode;
case DELAY: case DELAY:
// 延期不流转工单 // 延期不流转工单
...@@ -592,7 +656,11 @@ public class ChangeFlowBiz { ...@@ -592,7 +656,11 @@ public class ChangeFlowBiz {
changeRecord.setCancelReason(req.getCancelReason()); changeRecord.setCancelReason(req.getCancelReason());
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType()); todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType());
// todo:取消501节点,取消工单,发送邮件 /*qcSendEmail(changeCommander, changeRecord.getId().toString(), EmailTemplateEnum.YX_QC_CHANGE_RELEASE_FLOW, param);
// 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_RELEASE_FLOW, param);
}*/
return changeFlowService.updateRecord(changeRecord); return changeFlowService.updateRecord(changeRecord);
} }
...@@ -710,10 +778,12 @@ public class ChangeFlowBiz { ...@@ -710,10 +778,12 @@ public class ChangeFlowBiz {
} }
public ChangeFlowListVO query(Integer page, Integer pageSize, ChangeFlowListQueryReq changeFlowListQueryReq) { public ChangeFlowListVO query(Integer page, Integer pageSize, ChangeFlowListQueryReq changeFlowListQueryReq) {
log.info("[query] page:{}, pageSize:{}, changeFlowListQueryReq:{}", page, pageSize, JSON.toJSONString(changeFlowListQueryReq)); log.info("[query] page:{}, pageSize:{}, changeFlowListQueryReq:{}", page, pageSize,
JSON.toJSONString(changeFlowListQueryReq));
//进行分页 //进行分页
PageHelper.startPage(page,pageSize); PageHelper.startPage(page, pageSize);
PageInfo<ChangeRecord> changeRecordPageInfo = new PageInfo<>(changeRecordMapper.selectByCondition(changeFlowListQueryReq)); PageInfo<ChangeRecord> changeRecordPageInfo = new PageInfo<>(
changeRecordMapper.selectByCondition(changeFlowListQueryReq));
List<ChangeRecord> changeRecords = changeRecordPageInfo.getList(); List<ChangeRecord> changeRecords = changeRecordPageInfo.getList();
List<ChangeFlowVO> list = new ArrayList<>(); List<ChangeFlowVO> list = new ArrayList<>();
// 处理数据 // 处理数据
...@@ -747,7 +817,7 @@ public class ChangeFlowBiz { ...@@ -747,7 +817,7 @@ public class ChangeFlowBiz {
return changeFlowVO; return changeFlowVO;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
PageVO pageVO = buildPageVo(list.size(), pageSize, page); PageVO pageVO = buildPageVo(changeRecordPageInfo.getTotal(), pageSize, page);
ChangeFlowListVO changeFlowListVO = new ChangeFlowListVO(); ChangeFlowListVO changeFlowListVO = new ChangeFlowListVO();
changeFlowListVO.setPageVo(pageVO); changeFlowListVO.setPageVo(pageVO);
changeFlowListVO.setChangeFlowList(list); changeFlowListVO.setChangeFlowList(list);
...@@ -757,12 +827,13 @@ public class ChangeFlowBiz { ...@@ -757,12 +827,13 @@ public class ChangeFlowBiz {
/** /**
* 构建分页信息 * 构建分页信息
* *
* @param totalCount * @param total
* @param pageSize * @param pageSize
* @param page * @param page
* @return * @return
*/ */
private PageVO buildPageVo(int totalCount, Integer pageSize, Integer page) { private PageVO buildPageVo(Long total, Integer pageSize, Integer page) {
Integer totalCount = Math.toIntExact(total);
int totalPage; int totalPage;
int i = totalCount % pageSize; int i = totalCount % pageSize;
if (i != 0) { if (i != 0) {
......
/**
* @(#)ChangeFlowExportCallback.java, 2022/12/8.
* <p/>
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.biz.callback;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
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.process.api.entity.PivotTable;
import com.netease.mail.dp.des.starter.callback.DesCallbackService;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowExportQuery;
import com.netease.mail.yanxuan.change.biz.service.change.ChangeTypeService;
import com.netease.mail.yanxuan.change.common.enums.ChangeSubjectEnum;
import com.netease.mail.yanxuan.change.common.util.ExcelUtil;
import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord;
import com.netease.mail.yanxuan.change.dal.entity.ChangeType;
import com.netease.mail.yanxuan.change.dal.mapper.ChangeRecordMapper;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowListQueryReq;
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.excel.ChangeFlowExcelVo;
import lombok.extern.slf4j.Slf4j;
/**
* @Author zcwang
* @Date 2022/12/8
*/
@Slf4j
@Component
public class ChangeFlowExportCallback implements DesCallbackService {
@Autowired
private ChangeRecordMapper changeRecordMapper;
@Autowired
private ChangeTypeService changeTypeService;
@Override
public ExcelTitle queryExcelTitle(CallbackQueryReq req) {
log.info("[op: change flow export callback queryExcelTitle] req={}", JSON.toJSONString(req));
ChangeFlowExportQuery query = JSON.parseObject(req.getParamJson(), ChangeFlowExportQuery.class);
ChangeFlowListQueryReq changeFlowListQueryReq = new ChangeFlowListQueryReq();
BeanUtils.copyProperties(query, changeFlowListQueryReq);
List<ChangeRecord> list = changeRecordMapper.selectByCondition(changeFlowListQueryReq);
ExcelTitle excelTitle = ExcelUtil.fetchExceltile(ChangeFlowExcelVo.class);
excelTitle.setTotal((long) list.size());
log.info("[op: change flow export callback queryExcelTitle] result={}", JSON.toJSONString(excelTitle));
return excelTitle;
}
@Override
public List<List<ExcelCell>> queryExcelData(CallbackQueryReq req) {
log.info("[op: address book export callback queryExcelData] req={}", JSON.toJSONString(req));
ChangeFlowExportQuery query = JSON.parseObject(req.getParamJson(), ChangeFlowExportQuery.class);
List<ChangeFlowExcelDTO> list = getExportList(query);
return list.stream().map(ChangeFlowExcelVo::init).collect(Collectors.toList());
}
private List<ChangeFlowExcelDTO> getExportList(ChangeFlowExportQuery query) {
ChangeFlowListQueryReq changeFlowListQueryReq = new ChangeFlowListQueryReq();
BeanUtils.copyProperties(query, changeFlowListQueryReq);
List<ChangeRecord> changeRecords = changeRecordMapper.selectByCondition(changeFlowListQueryReq);
if (CollectionUtils.isEmpty(changeRecords)) {
return Lists.newArrayList();
}
return 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());
}
@Override
public PivotTable queryPivotTable(CallbackQueryReq callbackQueryReq) {
return null;
}
}
\ No newline at end of file
...@@ -50,4 +50,7 @@ public class AppConfig { ...@@ -50,4 +50,7 @@ public class AppConfig {
*/ */
@Value("${changeManageQM:cuiyixian@corp.netease.com}") @Value("${changeManageQM:cuiyixian@corp.netease.com}")
private String changeManageQM; private String changeManageQM;
@Value("${exportLimit:20}")
private Long exportLimit;
} }
\ No newline at end of file
/**
* @(#)ChangeFlowExportQuery.java, 2022/12/8.
* <p/>
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.biz.service;
import com.netease.mail.yanxuan.change.common.enums.CreateSourceEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
/**
* @Author zcwang
* @Date 2022/12/8
*/
@Data
public class ChangeFlowExportQuery {
/**
* 变更商品(变更主体为商品时有效)
*/
private String itemId;
/**
* 变更供应商(变更主体为供应商时有效)
*/
private String supplier;
/**
* 一级变更类型id
*/
private Long parentChangeClassId;
/**
* 二级变更类型id
*/
private Long sonChangeClassId;
/**
* 工单状态
*/
private Integer changeState;
/**
* 变更负责人
*/
private String changeCommander;
/**
* 变更负责部门名
*/
private String changeDepartment;
/**
* 变更行动部门
*/
private String changeExecDepartment;
/**
* 开始时间
*/
private Long startTime;
/**
* 结束时间
*/
private Long endTime;
/**
* 创建端
* @see CreateSourceEnum
*/
private Integer createSource;
/**
* 服务编码 yanxuan-qc-change-flow
*/
protected String serviceCode;
/**
* 登录用户
*/
protected String uid;
}
\ No newline at end of file
/**
* @(#)DESExport.java, 2022/12/8.
* <p/>
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.biz.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.netease.mail.dp.des.common.api.enums.DataType;
import com.netease.mail.dp.des.common.api.enums.TaskType;
import com.netease.mail.dp.des.common.api.query.CallbackQueryParam;
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;
/**
* @Author zcwang
* @Date 2022/12/8
*/
@Component
@Slf4j
public class DESExportService {
@Autowired
private DesClient desClient;
@Autowired
private AppConfig appConfig;
public String changeFlowExport(ChangeFlowRequest query) {
TaskReq taskReq = new TaskReq();
taskReq.setUserEmail(query.getUid());
taskReq.setProductCode(query.getServiceCode());
taskReq.setFileName("变更管理列表导出");
taskReq.setTaskType(TaskType.BIVARIATE);
taskReq.setDataType(DataType.CALLBACK);
CallbackQueryParam callbackQueryParam = new CallbackQueryParam();
callbackQueryParam.setParamJson(JSON.toJSONString(query));
callbackQueryParam.setCallbackBeanName("changeFlowExportCallback");
callbackQueryParam.setLimit(appConfig.getExportLimit());
taskReq.setCallbackQueryParam(callbackQueryParam);
String desResult = desClient.addTask(taskReq);
log.info("create task result: {}", desResult);
return desResult;
}
}
\ No newline at end of file
...@@ -7,7 +7,6 @@ import java.util.List; ...@@ -7,7 +7,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.netease.mail.yanxuan.change.integration.flow.supplier.FlowRpcSupplierInfoService;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -15,6 +14,7 @@ import org.slf4j.LoggerFactory; ...@@ -15,6 +14,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.netease.mail.yanxuan.change.biz.config.AppConfig; import com.netease.mail.yanxuan.change.biz.config.AppConfig;
...@@ -37,6 +37,7 @@ import com.netease.mail.yanxuan.change.dal.meta.model.vo.ItemVO; ...@@ -37,6 +37,7 @@ import com.netease.mail.yanxuan.change.dal.meta.model.vo.ItemVO;
import com.netease.mail.yanxuan.change.integration.flow.goods.ItemcenterApiRpcService; import com.netease.mail.yanxuan.change.integration.flow.goods.ItemcenterApiRpcService;
import com.netease.mail.yanxuan.change.integration.flow.goods.PfuApiRpcService; import com.netease.mail.yanxuan.change.integration.flow.goods.PfuApiRpcService;
import com.netease.mail.yanxuan.change.integration.flow.goods.QcApiRpcService; import com.netease.mail.yanxuan.change.integration.flow.goods.QcApiRpcService;
import com.netease.mail.yanxuan.change.integration.flow.supplier.FlowRpcSupplierInfoService;
import com.netease.mail.yanxuan.change.integration.flow.supplier.FlowRpcSupplierSendService; import com.netease.mail.yanxuan.change.integration.flow.supplier.FlowRpcSupplierSendService;
import com.netease.mail.yanxuan.change.integration.flow.supplier.req.SupplierRelatedUserReq; import com.netease.mail.yanxuan.change.integration.flow.supplier.req.SupplierRelatedUserReq;
import com.netease.mail.yanxuan.change.integration.flow.supplier.rsp.SupplierUserRsp; import com.netease.mail.yanxuan.change.integration.flow.supplier.rsp.SupplierUserRsp;
...@@ -120,7 +121,8 @@ public class InteriorChangeConfigServiceImpl implements InteriorChangeConfigServ ...@@ -120,7 +121,8 @@ public class InteriorChangeConfigServiceImpl implements InteriorChangeConfigServ
* @return * @return
*/ */
private GoodsResponseRpc queryGoodsCommander(ChangeCommanderEnum commanderEnum,List<Long> goodsInfos,String commander){ private GoodsResponseRpc queryGoodsCommander(ChangeCommanderEnum commanderEnum,List<Long> goodsInfos,String commander){
if (commanderEnum.getId() != ChangeCommanderEnum.GOODS_ASSOCIATED.getId() || CollectionUtils.isEmpty(goodsInfos) || commander == null){ if (!commanderEnum.getId().equals(ChangeCommanderEnum.GOODS_ASSOCIATED.getId())
|| CollectionUtils.isEmpty(goodsInfos) || commander == null) {
return null; return null;
} }
Map<String,GoodsResponseRpc> map = new HashMap<String,GoodsResponseRpc>(); Map<String,GoodsResponseRpc> map = new HashMap<String,GoodsResponseRpc>();
...@@ -318,7 +320,7 @@ public class InteriorChangeConfigServiceImpl implements InteriorChangeConfigServ ...@@ -318,7 +320,7 @@ public class InteriorChangeConfigServiceImpl implements InteriorChangeConfigServ
return commanderResponse; return commanderResponse;
case SUPPLIERS_ASSOCIATED: case SUPPLIERS_ASSOCIATED:
String changeSupplier = req.getChangeSupplier(); String changeSupplier = req.getChangeSupplier();
Assert.isTrue(StringUtils.isNotBlank(changeSupplier), "变更负责人为供应商时,商品列表不可为空"); Assert.isTrue(StringUtils.isNotBlank(changeSupplier), "变更负责人为供应商时,供应商不可为空");
try { try {
GoodsResponseRpc supplierResponseRpc = queryChangeSupplier(changeCommanderEnum, GoodsResponseRpc supplierResponseRpc = queryChangeSupplier(changeCommanderEnum,
changeSupplier, changeExecUser); changeSupplier, changeExecUser);
......
package com.netease.mail.yanxuan.change.biz.service.impl.change; package com.netease.mail.yanxuan.change.biz.service.impl.change;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.netease.mail.yanxuan.change.biz.meta.exception.ExceptionFactory; import com.netease.mail.yanxuan.change.biz.meta.exception.ExceptionFactory;
import com.netease.mail.yanxuan.change.biz.service.change.ChangeConfigService; import com.netease.mail.yanxuan.change.biz.service.change.ChangeConfigService;
...@@ -104,7 +105,7 @@ public class AdminChangeConfigServiceImpl implements AdminChangeConfigService { ...@@ -104,7 +105,7 @@ public class AdminChangeConfigServiceImpl implements AdminChangeConfigService {
changeConfigVO = getChangeConfigVO(changeConfig, changeTypes, changeExecConfigs); changeConfigVO = getChangeConfigVO(changeConfig, changeTypes, changeExecConfigs);
//如果没有查询后返回redis //如果没有查询后返回redis
getValue().set(CHANGE_CONFIG+id,changeConfigVO,1, TimeUnit.DAYS); getValue().set(CHANGE_CONFIG+id,changeConfigVO,1, TimeUnit.DAYS);
return AjaxResult.success(JSONObject.parseObject(changeConfigVO, ChangeConfigVO.class)); return AjaxResult.success(JSON.parseObject(changeConfigVO, ChangeConfigVO.class));
} }
@Override @Override
......
...@@ -42,14 +42,13 @@ public class SupplierSendService { ...@@ -42,14 +42,13 @@ public class SupplierSendService {
* @param emailTemplateEnum * @param emailTemplateEnum
* @param param * @param param
*/ */
public void sendSupplierEmail(ChangeRecord changeRecord, EmailTemplateEnum emailTemplateEnum, Map<String, Object> param) { public void sendSupplierEmail(ChangeRecord changeRecord, EmailTemplateEnum emailTemplateEnum,
Map<String, Object> param) {
SupplierSendEmailReq req = new SupplierSendEmailReq(); SupplierSendEmailReq req = new SupplierSendEmailReq();
req.setSupplierId(changeRecord.getChangeSupplier()); req.setSupplierId(changeRecord.getChangeSupplier());
req.setMailSubject(String.format(emailTemplateEnum.getSubject(), changeRecord.getId())); req.setMailSubject(String.format(emailTemplateEnum.getSubject(), changeRecord.getId()));
EmailFactor emailFactor = new EmailFactor(); EmailFactor factor = EmailFactor.builder().data(param).emailTemplateEnum(emailTemplateEnum)
EmailFactor factor = EmailFactor.builder() .subject(req.getMailSubject()).type(EmailTypeEnum.HTML.getType()).build();
.data(param).emailTemplateEnum(emailTemplateEnum)
.subject(req.getMailSubject()).type(EmailTypeEnum.HTML.getType()).build();
req.setMailContent(this.content(factor)); req.setMailContent(this.content(factor));
log.debug("[sendSupplierEmail] 发送供应商邮件内容 flowId:{}, req:{}", changeRecord.getFlowId(), JSON.toJSONString(req)); log.debug("[sendSupplierEmail] 发送供应商邮件内容 flowId:{}, req:{}", changeRecord.getFlowId(), JSON.toJSONString(req));
flowRpcSupplierSendService.sendEmail(req); flowRpcSupplierSendService.sendEmail(req);
......
...@@ -20,11 +20,14 @@ import com.alibaba.fastjson.JSON; ...@@ -20,11 +20,14 @@ import com.alibaba.fastjson.JSON;
import com.netease.mail.yanxuan.change.biz.biz.ChangeFlowBiz; import com.netease.mail.yanxuan.change.biz.biz.ChangeFlowBiz;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService; import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService;
import com.netease.mail.yanxuan.change.biz.service.rpc.FlowService; import com.netease.mail.yanxuan.change.biz.service.rpc.FlowService;
import com.netease.mail.yanxuan.change.biz.service.rpc.SupplierSendService;
import com.netease.mail.yanxuan.change.common.bean.CommonConstants; import com.netease.mail.yanxuan.change.common.bean.CommonConstants;
import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum; import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum;
import com.netease.mail.yanxuan.change.common.enums.CreateSourceEnum;
import com.netease.mail.yanxuan.change.common.enums.FlowOperationTypeEnum; import com.netease.mail.yanxuan.change.common.enums.FlowOperationTypeEnum;
import com.netease.mail.yanxuan.change.common.util.DateUtils; 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.entity.ChangeRecord;
import com.netease.mail.yanxuan.change.integration.email.enums.EmailTemplateEnum;
import com.netease.mail.yanxuan.dschedule.core.biz.model.ReturnT; import com.netease.mail.yanxuan.dschedule.core.biz.model.ReturnT;
import com.netease.mail.yanxuan.dschedule.core.handler.IJobHandler; import com.netease.mail.yanxuan.dschedule.core.handler.IJobHandler;
import com.netease.mail.yanxuan.dschedule.core.handler.annotation.JobHandler; import com.netease.mail.yanxuan.dschedule.core.handler.annotation.JobHandler;
...@@ -47,6 +50,12 @@ public class AutoSubmit extends IJobHandler { ...@@ -47,6 +50,12 @@ public class AutoSubmit extends IJobHandler {
@Autowired @Autowired
private FlowService flowService; private FlowService flowService;
@Autowired
private ChangeFlowBiz changeFlowBiz;
@Autowired
private SupplierSendService sendSupplierEmail;
@Override @Override
public ReturnT<String> execute(String... strings) throws Exception { public ReturnT<String> execute(String... strings) throws Exception {
log.info("AutoSubmit start"); log.info("AutoSubmit start");
...@@ -100,6 +109,16 @@ public class AutoSubmit extends IJobHandler { ...@@ -100,6 +109,16 @@ public class AutoSubmit extends IJobHandler {
log.debug("[progressRecord] submit error, flowId{}", flowId); log.debug("[progressRecord] submit error, flowId{}", flowId);
} }
} }
// todo: 到达执行确认时间,发送邮件 // 发送邮件
HashMap<String, Object> map = new HashMap<>();
map.put("changeId", changeRecord.getId());
map.put("changeSubject", changeRecord.getChangeSubject());
map.put("flowUrl", changeRecord.getFlowId());
changeFlowBiz.qcSendEmail(changeRecord.getChangeCommander(), changeRecord.getId().toString(),
EmailTemplateEnum.YX_QC_CHANGE_AFFIRM, map);
// 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_AFFIRM, map);
}
} }
} }
\ No newline at end of file
package com.netease.mail.yanxuan.change.common.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author lfmu
*/
@Target(value = { ElementType.TYPE_PARAMETER, ElementType.FIELD })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ExcelTitleName {
/**
* 表头列名
*/
String title() default "";
/**
* 列数
*/
int order() default -1;
}
...@@ -8,7 +8,7 @@ public enum ChangeCommanderEnum { ...@@ -8,7 +8,7 @@ public enum ChangeCommanderEnum {
COMMANDER_ORIGINATOR(1,"发起人"), COMMANDER_ORIGINATOR(1,"发起人"),
FIXED_PERSON(2,"固定人"), FIXED_PERSON(2,"固定人"),
GOODS_ASSOCIATED(3,"品关联角色"), GOODS_ASSOCIATED(3,"品关联角色"),
SUPPLIERS_ASSOCIATED(4,"供应商关联角色"); SUPPLIERS_ASSOCIATED(4,"供应商关联角色");
ChangeCommanderEnum(Integer id, String name) { ChangeCommanderEnum(Integer id, String name) {
......
...@@ -6,7 +6,7 @@ package com.netease.mail.yanxuan.change.common.enums; ...@@ -6,7 +6,7 @@ package com.netease.mail.yanxuan.change.common.enums;
*/ */
public enum ChangePrincipalEnum { public enum ChangePrincipalEnum {
GOODS_BU(1,"商品BU"), GOODS_BU(1,"商品开发"),
PURCHASE(2,"采购"), PURCHASE(2,"采购"),
PROSPECTUS(3,"计划"), PROSPECTUS(3,"计划"),
SQE(4,"SQE"); SQE(4,"SQE");
......
/**
* @(#)ExcelUtil.java, 2022/7/5.
* <p/>
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.common.util;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.web.multipart.MultipartFile;
import com.netease.mail.dp.des.common.api.enums.ExcelCellType;
import com.netease.mail.dp.des.process.api.entity.ExcelCell;
import com.netease.mail.dp.des.process.api.entity.ExcelTitle;
import com.netease.mail.yanxuan.change.common.anno.ExcelTitleName;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
/**
* @author ysl (wb.yeshunliang01@mesg.corp.netease.com)
*/
public class ExcelUtil {
private static final List<Field> NULL_FIELDS = Collections.emptyList();
private static Map<Class<?>, List<Field>> annotedFieldMap = new ConcurrentHashMap<>(4);
/**
* 解析excel,转换成list
* @param file
* @param clazz
* @param <T>
* @return
*/
public static <T> List<T> parseExcelList(MultipartFile file, Class<T> clazz) {
List<T> list;
try {
InputStream inputStream = file.getInputStream();
ImportParams importParams = new ImportParams();
list = ExcelImportUtil.importExcel(inputStream, clazz, importParams);
} catch (Exception e) {
throw new IllegalArgumentException("上传的文件错误");
}
return list;
}
public static <T> ExcelTitle fetchExceltile(Class<T> clazz) {
if (clazz == null) {
throw new RuntimeException("clazz参数不能为空");
}
List<Field> sortedFields = fetchAnnotedFields(clazz);
if (sortedFields == NULL_FIELDS) {
throw new RuntimeException("未找到表头字段");
}
ExcelTitle excelTitle = new ExcelTitle();
List<ExcelCell> excelCells = new ArrayList<>();
sortedFields.forEach(field -> {
ExcelCell excelCell = new ExcelCell();
excelCell.setValue(field.getAnnotation(ExcelTitleName.class).title());
excelCell.setCellType(ExcelCellType.NORMAL);
excelCells.add(excelCell);
});
excelTitle.setTitle(excelCells);
return excelTitle;
}
private static <T> List<Field> fetchAnnotedFields(Class<T> clazz) {
if (annotedFieldMap.containsKey(clazz)) {
return annotedFieldMap.get(clazz);
}
Field[] fields = clazz.getDeclaredFields();
Map<Field, ExcelTitleName> fieldMap = new HashMap<>(4);
for (Field field: fields) {
ExcelTitleName column = field.getAnnotation(ExcelTitleName.class);
if (column == null) {
continue;
}
fieldMap.put(field, column);
}
if (fieldMap.isEmpty()) {
annotedFieldMap.put(clazz, NULL_FIELDS);
return NULL_FIELDS;
}
List<Field> fieldList = new ArrayList<>(fieldMap.keySet());
Collections.sort(fieldList, (field1, field2) -> {
ExcelTitleName column1 = fieldMap.get(field1);
ExcelTitleName column2 = fieldMap.get(field2);
return column1.order() - column2.order();
});
annotedFieldMap.put(clazz, fieldList);
return fieldList;
}
}
\ No newline at end of file
...@@ -54,7 +54,7 @@ public class ChangeExecRecord { ...@@ -54,7 +54,7 @@ public class ChangeExecRecord {
private String changeExecUser; private String changeExecUser;
/** /**
* 变更行动人(不同类型存储不同内容) * 变更行动人邮箱
*/ */
private String changeExecUserEmail; private String changeExecUserEmail;
......
...@@ -39,7 +39,7 @@ public class ChangeFlowListQueryReq { ...@@ -39,7 +39,7 @@ public class ChangeFlowListQueryReq {
/** /**
* 工单状态 * 工单状态
*/ */
private Integer state; private Integer changeState;
/** /**
* 变更负责人 * 变更负责人
......
/**
* @(#)ChangeFlowRequest.java, 2022/12/8.
* <p/>
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.dal.meta.model.req;
import com.netease.mail.yanxuan.change.common.enums.CreateSourceEnum;
import lombok.Data;
/**
* @Author zcwang
* @Date 2022/12/8
*/
@Data
public class ChangeFlowRequest {
/**
* 变更商品(变更主体为商品时有效)
*/
private String itemId;
/**
* 变更供应商(变更主体为供应商时有效)
*/
private String supplier;
/**
* 一级变更类型id
*/
private Long parentChangeClassId;
/**
* 二级变更类型id
*/
private Long sonChangeClassId;
/**
* 工单状态
*/
private Integer changeState;
/**
* 变更负责人
*/
private String changeCommander;
/**
* 变更负责部门名
*/
private String changeDepartment;
/**
* 变更行动部门
*/
private String changeExecDepartment;
/**
* 开始时间
*/
private Long startTime;
/**
* 结束时间
*/
private Long endTime;
/**
* 创建端
* @see CreateSourceEnum
*/
private Integer createSource;
private String serviceCode;
private String uid;
}
\ No newline at end of file
...@@ -60,8 +60,8 @@ ...@@ -60,8 +60,8 @@
<if test="sonChangeClassId != null"> <if test="sonChangeClassId != null">
and son_change_class_id = #{sonChangeClassId} and son_change_class_id = #{sonChangeClassId}
</if> </if>
<if test="state != null"> <if test="changeState != null">
and `state` = #{state} and `state` = #{changeState}
</if> </if>
<if test="changeCommander != null and changeCommander != ''"> <if test="changeCommander != null and changeCommander != ''">
and `change_commander` = #{changeCommander} and `change_commander` = #{changeCommander}
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
<if test="endTime != null"> <if test="endTime != null">
and create_time <![CDATA[ < ]]> #{endTime} and create_time <![CDATA[ < ]]> #{endTime}
</if> </if>
order by create_time desc
</where> </where>
</select> </select>
</mapper> </mapper>
\ No newline at end of file
...@@ -11,15 +11,15 @@ public enum EmailTemplateEnum { ...@@ -11,15 +11,15 @@ public enum EmailTemplateEnum {
YX_QC_CHANGE_RELEASE_FLOW("yxqc_change_release_flow","发起变更","【待处理】%s 变更申请提交 "), YX_QC_CHANGE_RELEASE_FLOW("yxqc_change_release_flow","发起变更","【待处理】%s 变更申请提交 "),
YX_QC_CHANGE_SUBMIT_CANCEL("yx_qc_change_submit_cancel","变更取消","【待处理】%s 变更申请提交 "), YX_QC_CHANGE_SUBMIT_CANCEL("yx_qc_change_submit_cancel","变更取消","【待处理】%s 变更取消通知"),
YX_QC_CHANGE_SUBMIT_FORWARD("yx_qc_change_submit_forward","变更转交","%s 变更工单转交通知"), YX_QC_CHANGE_SUBMIT_FORWARD("yx_qc_change_submit_forward","变更转交","%s 变更工单转交通知"),
YX_QC_CHANGE_EXECUTE(" yx_qc_change_execute","变更执行","【待处理】变更行动项确认 %s %s %s"), YX_QC_CHANGE_EXECUTE(" yx_qc_change_execute","变更执行","【待处理】变更行动项确认 %s"),
YX_QC_CHANGE_AFFIRM("yx_qc_change_affirm","变更确认","【待处理】变更结果确认 %s %s %s"), YX_QC_CHANGE_AFFIRM("yx_qc_change_affirm","变更确认","【待处理】变更结果确认 %s"),
YX_QC_CHANGE_FINISH("yx_qc_change_finish","工单完结","【已完结】%s %s %s 变更风险行动项已完结,请开始执行变更。"), YX_QC_CHANGE_FINISH("yx_qc_change_finish","工单完结","【已完结】%s 变更风险行动项已完结,请开始执行变更。"),
YX_QC_CHANGE_PENDING("yx_qc_change_pending","待处理","【待处理】执行标准号 执行标准名称已变更 请排查对应的商品变更"); YX_QC_CHANGE_PENDING("yx_qc_change_pending","待处理","【待处理】执行标准号 执行标准名称已变更 请排查对应的商品变更");
/** /**
......
...@@ -3,6 +3,7 @@ package com.netease.mail.yanxuan.change.integration.email.service; ...@@ -3,6 +3,7 @@ package com.netease.mail.yanxuan.change.integration.email.service;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import com.netease.mail.yanxuan.change.integration.email.enums.EmailTemplateEnum; import com.netease.mail.yanxuan.change.integration.email.enums.EmailTemplateEnum;
...@@ -19,8 +20,8 @@ public interface IEmailService { ...@@ -19,8 +20,8 @@ public interface IEmailService {
* @param ccList 抄送人 * @param ccList 抄送人
* @param map 邮箱参数 * @param map 邮箱参数
* @param emailTemplateEnum 标题枚举 * @param emailTemplateEnum 标题枚举
* @param subjectParams 标题参数 * @param subjectParam 标题参数
*/ */
void sendEmail(Collection<String> toList, Collection<String> ccList, HashMap<String, Object> map, void sendEmail(Collection<String> toList, Collection<String> ccList, Map<String, Object> map,
EmailTemplateEnum emailTemplateEnum, List<String> subjectParams); EmailTemplateEnum emailTemplateEnum, String subjectParam);
} }
...@@ -5,13 +5,17 @@ import com.netease.mail.yanxuan.change.integration.email.enums.EmailTemplateEnum ...@@ -5,13 +5,17 @@ import com.netease.mail.yanxuan.change.integration.email.enums.EmailTemplateEnum
import com.netease.mail.yanxuan.change.integration.email.enums.EmailTypeEnum; import com.netease.mail.yanxuan.change.integration.email.enums.EmailTypeEnum;
import com.netease.mail.yanxuan.change.integration.email.service.IEmailService; import com.netease.mail.yanxuan.change.integration.email.service.IEmailService;
import com.netease.mail.yanxuan.change.integration.email.service.UasClientService; import com.netease.mail.yanxuan.change.integration.email.service.UasClientService;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
...@@ -25,8 +29,8 @@ public class EmailServiceImpl implements IEmailService { ...@@ -25,8 +29,8 @@ public class EmailServiceImpl implements IEmailService {
@Override @Override
@Async("asyncEmail") @Async("asyncEmail")
public void sendEmail(Collection<String> toList, Collection<String> ccList, public void sendEmail(Collection<String> toList, Collection<String> ccList, Map<String, Object> map,
HashMap<String,Object> map, EmailTemplateEnum emailTemplateEnum, List<String>subjectParams) { EmailTemplateEnum emailTemplateEnum, String subjectParam) {
EmailFactor emailFactor = new EmailFactor(); EmailFactor emailFactor = new EmailFactor();
//固定 //固定
emailFactor.setType(EmailTypeEnum.TEXT.getType()); emailFactor.setType(EmailTypeEnum.TEXT.getType());
...@@ -42,8 +46,8 @@ public class EmailServiceImpl implements IEmailService { ...@@ -42,8 +46,8 @@ public class EmailServiceImpl implements IEmailService {
} }
String subject = emailFactor.getSubject(); String subject = emailFactor.getSubject();
//标题参数处理 //标题参数处理
if (subjectParams != null){ if (Strings.isNotBlank(subjectParam)) {
subject = String.format(subject,subjectParams.toArray()); subject = String.format(subject, subjectParam);
} }
uasClient.sendEmail(subject, content, toList, ccList, null); uasClient.sendEmail(subject, content, toList, ccList, null);
} }
......
...@@ -28,6 +28,7 @@ public class UasClientServiceImpl implements UasClientService { ...@@ -28,6 +28,7 @@ public class UasClientServiceImpl implements UasClientService {
@Autowired @Autowired
private EmailRpcService service; private EmailRpcService service;
@Override
public void sendEmail(String subject, String content, Collection<String> toList, Collection<String> ccList, List<File> fileList) { public void sendEmail(String subject, String content, Collection<String> toList, Collection<String> ccList, List<File> fileList) {
if (!CollectionUtils.isEmpty(toList)) { if (!CollectionUtils.isEmpty(toList)) {
Map<String, String> params = new HashMap(); Map<String, String> params = new HashMap();
......
/**
* @(#)ChangeFlowExcelVo.java, 2022/12/8.
* <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 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 com.netease.mail.yanxuan.change.common.enums.ChangeStatusEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeSubjectEnum;
import lombok.Data;
/**
* @Author zcwang
* @Date 2022/12/8
*/
@Data
public class ChangeFlowExcelVo {
/**
* 主键id
*/
@ExcelTitleName(title = "主键id", order = 1)
private Long id;
/**
* 变更主体
* @see ChangeSubjectEnum
*/
@ExcelTitleName(title = "变更主体", order = 2)
private String changeSubject;
/**
* 变更类型,一级类型>二级类型
*/
@ExcelTitleName(title = "变更类型", order = 3)
private String changeType;
/**
* 变更负责部门名
*/
@ExcelTitleName(title = "变更负责部门名", order = 4)
private String changeDepartment;
/**
* 变更内容
*/
@ExcelTitleName(title = "变更内容", order = 5)
private String changeContent;
/**
* 变更负责人
*/
@ExcelTitleName(title = "变更负责人", order = 6)
private String changeCommander;
/**
* 变更商品列表,SPUID+商品名称
*/
@ExcelTitleName(title = "变更商品列表", order = 7)
private String changeItems;
/**
* 变更供应商,仅展示供应商ID,没有时展示为“/”
*/
@ExcelTitleName(title = "变更供应商", order = 8)
private String supplier;
/**
* 变更状态
* @see ChangeStatusEnum
*/
@ExcelTitleName(title = "变更状态", order = 9)
private Integer changeState;
/**
* 变更发起人
*/
@ExcelTitleName(title = "变更发起人", order = 10)
private String changeCreator;
/**
* 变更行动部门列表
*/
@ExcelTitleName(title = "变更行动部门列表", order = 11)
private String execDepartmentStrList;
/**
* 创建时间
*/
@ExcelTitleName(title = "创建时间", order = 12)
private Long createTime;
public static List<ExcelCell> init(ChangeFlowExcelDTO dto) {
List<ExcelCell> cellInfo = new ArrayList<>();
ExcelCell excelCell = new ExcelCell();
excelCell.setCellType(ExcelCellType.TEXT);
// id
excelCell.setValue(dto.getId());
cellInfo.add(excelCell);
// 变更主体
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeSubject());
cellInfo.add(excelCell);
// 变更类型
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeType());
cellInfo.add(excelCell);
// 变更负责部门名
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeDepartment());
cellInfo.add(excelCell);
// 变更内容
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeContent());
cellInfo.add(excelCell);
// 变更负责人
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeCommander());
cellInfo.add(excelCell);
// 变更商品列表
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeItems());
cellInfo.add(excelCell);
// 变更供应商
excelCell = new ExcelCell();
excelCell.setValue(dto.getSupplier());
cellInfo.add(excelCell);
// 变更状态
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeState());
cellInfo.add(excelCell);
// 变更发起人
excelCell = new ExcelCell();
excelCell.setValue(dto.getChangeCreator());
cellInfo.add(excelCell);
// 变更行动部门列表
excelCell = new ExcelCell();
excelCell.setValue(dto.getExecDepartmentStrList());
cellInfo.add(excelCell);
// 创建时间
excelCell = new ExcelCell();
excelCell.setValue(dto.getCreateTime());
cellInfo.add(excelCell);
return cellInfo;
}
}
\ No newline at end of file
...@@ -26,7 +26,7 @@ public class WebMvcConfig implements WebMvcConfigurer { ...@@ -26,7 +26,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
@Override @Override
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(userInterceptor).addPathPatterns("/**").excludePathPatterns("/i/health") registry.addInterceptor(userInterceptor).addPathPatterns("/**").excludePathPatterns("/i/health")
.excludePathPatterns("/change/flow/getOperator", "/test/createToDo","/test/progressTodo","/test/submit"); .excludePathPatterns("/change/flow/getOperator", "/test/**", "/api/des/callback/**");
registry.addInterceptor(adminUserLoginInterceptor).addPathPatterns("test/**"); registry.addInterceptor(adminUserLoginInterceptor).addPathPatterns("test/**");
} }
......
...@@ -6,13 +6,11 @@ ...@@ -6,13 +6,11 @@
*/ */
package com.netease.mail.yanxuan.change.web.controller; package com.netease.mail.yanxuan.change.web.controller;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -22,15 +20,19 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -22,15 +20,19 @@ import org.springframework.web.bind.annotation.RestController;
import com.netease.mail.yanxuan.change.biz.biz.ChangeFlowBiz; 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.config.TitleConfig;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowExportQuery;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService; import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService;
import com.netease.mail.yanxuan.change.biz.service.DESExportService;
import com.netease.mail.yanxuan.change.biz.service.InteriorChangeConfigService; import com.netease.mail.yanxuan.change.biz.service.InteriorChangeConfigService;
import com.netease.mail.yanxuan.change.common.bean.AjaxResult; import com.netease.mail.yanxuan.change.common.bean.AjaxResult;
import com.netease.mail.yanxuan.change.common.bean.RequestLocalBean;
import com.netease.mail.yanxuan.change.common.enums.CreateSourceEnum; import com.netease.mail.yanxuan.change.common.enums.CreateSourceEnum;
import com.netease.mail.yanxuan.change.dal.meta.model.po.QueryCommanderEmailReq; import com.netease.mail.yanxuan.change.dal.meta.model.po.QueryCommanderEmailReq;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowCancelReq; 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.ChangeFlowCreateReq;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowDeliverReq; import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowDeliverReq;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowListQueryReq; import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowListQueryReq;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowRequest;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowSubmitReq; import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowSubmitReq;
import com.netease.mail.yanxuan.change.dal.meta.model.rpc.CommanderResponse; import com.netease.mail.yanxuan.change.dal.meta.model.rpc.CommanderResponse;
import com.netease.mail.yanxuan.change.dal.meta.model.vo.BasicChangeFlowVO; import com.netease.mail.yanxuan.change.dal.meta.model.vo.BasicChangeFlowVO;
...@@ -59,6 +61,9 @@ public class ChangeFlowController { ...@@ -59,6 +61,9 @@ public class ChangeFlowController {
@Autowired @Autowired
private InteriorChangeConfigService interiorChangeConfigService; private InteriorChangeConfigService interiorChangeConfigService;
@Autowired
private DESExportService desExportService;
/** /**
* 变更工单详情查询 * 变更工单详情查询
* *
...@@ -93,13 +98,13 @@ public class ChangeFlowController { ...@@ -93,13 +98,13 @@ public class ChangeFlowController {
changeFlowListQueryReq.setSupplier(supplier); changeFlowListQueryReq.setSupplier(supplier);
changeFlowListQueryReq.setParentChangeClassId(parentChangeClassId); changeFlowListQueryReq.setParentChangeClassId(parentChangeClassId);
changeFlowListQueryReq.setSonChangeClassId(sonChangeClassId); changeFlowListQueryReq.setSonChangeClassId(sonChangeClassId);
changeFlowListQueryReq.setState(changeState); changeFlowListQueryReq.setChangeState(changeState);
changeFlowListQueryReq.setChangeCommander(changeCommander); changeFlowListQueryReq.setChangeCommander(changeCommander);
changeFlowListQueryReq.setChangeDepartment(changeDepartment); changeFlowListQueryReq.setChangeDepartment(changeDepartment);
changeFlowListQueryReq.setChangeExecDepartment(changeExecDepartment); changeFlowListQueryReq.setChangeExecDepartment(changeExecDepartment);
changeFlowListQueryReq.setStartTime(startTime); changeFlowListQueryReq.setStartTime(startTime);
changeFlowListQueryReq.setEndTime(endTime); changeFlowListQueryReq.setEndTime(endTime);
// QC端可以查看所有,不加入过滤条件 // QC端可以查看所有,不加入过滤条件
if (!CreateSourceEnum.QC.getType().equals(createSource)) { if (!CreateSourceEnum.QC.getType().equals(createSource)) {
changeFlowListQueryReq.setCreateSource(createSource); changeFlowListQueryReq.setCreateSource(createSource);
} }
...@@ -175,30 +180,45 @@ public class ChangeFlowController { ...@@ -175,30 +180,45 @@ public class ChangeFlowController {
* *
* @return * @return
*/ */
@PostMapping("/export") @GetMapping("/export")
public AjaxResult<Void> export(@RequestParam(name = "itemId", required = false) String itemId, public AjaxResult<String> export(@RequestParam(name = "itemId", required = false) String itemId,
@RequestParam(name = "supplier", required = false) String supplier, @RequestParam(name = "supplier", required = false) String supplier,
@RequestParam(name = "parentChangeClassId", required = false) Long parentChangeClassId, @RequestParam(name = "parentChangeClassId", required = false) Long parentChangeClassId,
@RequestParam(name = "sonChangeClassId", required = false) Long sonChangeClassId, @RequestParam(name = "sonChangeClassId", required = false) Long sonChangeClassId,
@RequestParam(name = "changeState", required = false) Integer changeState, @RequestParam(name = "changeState", required = false) Integer changeState,
@RequestParam(name = "changeCommander", required = false) String changeCommander, @RequestParam(name = "changeCommander", required = false) String changeCommander,
@RequestParam(name = "changeDepartment", required = false) String changeDepartment, @RequestParam(name = "changeDepartment", required = false) String changeDepartment,
@RequestParam(name = "changeExecDepartment", required = false) String changeExecDepartment, @RequestParam(name = "changeExecDepartment", required = false) String changeExecDepartment,
@RequestParam(name = "startTime", required = false) Long startTime, @RequestParam(name = "startTime", required = false) Long startTime,
@RequestParam(name = "endTime", required = false) Long endTime, HttpServletResponse response) { @RequestParam(name = "endTime", required = false) Long endTime,
ChangeFlowListQueryReq changeFlowListQueryReq = new ChangeFlowListQueryReq(); @RequestParam(name = "createSource", required = false, defaultValue = "1") Integer createSource,
changeFlowListQueryReq.setItemId(itemId); @RequestParam(name = "serviceCode") String serviceCode) {
changeFlowListQueryReq.setSupplier(supplier); ChangeFlowRequest changeFlowRequest = new ChangeFlowRequest();
changeFlowListQueryReq.setParentChangeClassId(parentChangeClassId); changeFlowRequest.setItemId(itemId);
changeFlowListQueryReq.setSonChangeClassId(sonChangeClassId); changeFlowRequest.setSupplier(supplier);
changeFlowListQueryReq.setState(changeState); changeFlowRequest.setParentChangeClassId(parentChangeClassId);
changeFlowListQueryReq.setChangeCommander(changeCommander); changeFlowRequest.setSonChangeClassId(sonChangeClassId);
changeFlowListQueryReq.setChangeDepartment(changeDepartment); changeFlowRequest.setChangeState(changeState);
changeFlowListQueryReq.setChangeExecDepartment(changeExecDepartment); changeFlowRequest.setChangeCommander(changeCommander);
changeFlowListQueryReq.setStartTime(startTime); changeFlowRequest.setChangeDepartment(changeDepartment);
changeFlowListQueryReq.setEndTime(endTime); changeFlowRequest.setChangeExecDepartment(changeExecDepartment);
changeFlowBiz.export(changeFlowListQueryReq, response); changeFlowRequest.setStartTime(startTime);
return AjaxResult.success(); changeFlowRequest.setEndTime(endTime);
changeFlowRequest.setServiceCode(serviceCode);
// QC端可以查看所有,不加入过滤条件
if (!CreateSourceEnum.QC.getType().equals(createSource)) {
changeFlowRequest.setCreateSource(createSource);
}
if (CreateSourceEnum.TONG_ZHOU.getType().equals(createSource)) {
Assert.isTrue(Strings.isNotBlank(supplier), "同舟端查询供应商id不可为空");
}
String s = this.exportAddressBook(changeFlowRequest);
return AjaxResult.success(s);
}
public String exportAddressBook(ChangeFlowRequest req) {
req.setUid(RequestLocalBean.getUid());
return desExportService.changeFlowExport(req);
} }
/** /**
......
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