Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yanxuan-qc-change-system
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
胡园园
yanxuan-qc-change-system
Commits
3e160e5d
Commit
3e160e5d
authored
Dec 08, 2022
by
“zcwang”
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add: 平台下载
parent
178ce80b
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
667 additions
and
14 deletions
+667
-14
pom.xml
pom.xml
+32
-1
ChangeFlowBiz.java
...om/netease/mail/yanxuan/change/biz/biz/ChangeFlowBiz.java
+0
-0
ChangeFlowExportCallback.java
...yanxuan/change/biz/callback/ChangeFlowExportCallback.java
+117
-0
AppConfig.java
...com/netease/mail/yanxuan/change/biz/config/AppConfig.java
+4
-0
ExportMapper.java
...netease/mail/yanxuan/change/biz/convert/ExportMapper.java
+26
-0
ChangeFlowExportQuery.java
...ail/yanxuan/change/biz/service/ChangeFlowExportQuery.java
+84
-0
DESExportService.java
...ase/mail/yanxuan/change/biz/service/DESExportService.java
+48
-0
InteriorChangeConfigServiceImpl.java
...nge/biz/service/impl/InteriorChangeConfigServiceImpl.java
+5
-3
AdminChangeConfigServiceImpl.java
...biz/service/impl/change/AdminChangeConfigServiceImpl.java
+2
-1
AutoSubmit.java
.../com/netease/mail/yanxuan/change/biz/task/AutoSubmit.java
+20
-1
ExcelTitleName.java
...tease/mail/yanxuan/change/common/anno/ExcelTitleName.java
+24
-0
ExcelUtil.java
...om/netease/mail/yanxuan/change/common/util/ExcelUtil.java
+104
-0
ChangeExecRecord.java
...ease/mail/yanxuan/change/dal/entity/ChangeExecRecord.java
+1
-1
ChangeFlowListQueryReq.java
...uan/change/dal/meta/model/req/ChangeFlowListQueryReq.java
+1
-1
ChangeFlowRequest.java
.../yanxuan/change/dal/meta/model/req/ChangeFlowRequest.java
+26
-0
ChangeRecordMapper.xml
.../src/main/resources/mybatis/mapper/ChangeRecordMapper.xml
+2
-2
EmailTemplateEnum.java
...uan/change/integration/email/enums/EmailTemplateEnum.java
+1
-1
UasClientServiceImpl.java
.../integration/email/service/impl/UasClientServiceImpl.java
+1
-0
ChangeFlowExcelVo.java
...l/yanxuan/change/integration/excel/ChangeFlowExcelVo.java
+149
-0
ChangeFlowController.java
...l/yanxuan/change/web/controller/ChangeFlowController.java
+20
-3
No files found.
pom.xml
View file @
3e160e5d
...
...
@@ -59,7 +59,8 @@
<commonsio.version>
2.4
</commonsio.version>
<commonscollection.version>
4.1
</commonscollection.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>
<!-- 子模块可选依赖 -->
...
...
@@ -443,6 +444,36 @@
<version>
3.1.0
</version>
</dependency>
<dependency>
<groupId>
com.netease.mail.dp
</groupId>
<artifactId>
des-boot-starter
</artifactId>
<version>
${des.version}
</version>
</dependency>
<!-- mapstruct -->
<dependency>
<groupId>
org.mapstruct
</groupId>
<artifactId>
mapstruct
</artifactId>
<version>
${mapstruct.version}
</version>
</dependency>
<dependency>
<groupId>
org.mapstruct
</groupId>
<artifactId>
mapstruct-jdk8
</artifactId>
<version>
${mapstruct.version}
</version>
</dependency>
<dependency>
<groupId>
org.mapstruct
</groupId>
<artifactId>
mapstruct-processor
</artifactId>
<version>
${mapstruct.version}
</version>
</dependency>
<!-- mapStruct 支持 lombok -->
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok-mapstruct-binding
</artifactId>
<version>
0.2.0
</version>
</dependency>
</dependencies>
<repositories>
...
...
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/biz/ChangeFlowBiz.java
View file @
3e160e5d
This diff is collapsed.
Click to expand it.
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/callback/ChangeFlowExportCallback.java
0 → 100644
View file @
3e160e5d
/**
* @(#)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
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/config/AppConfig.java
View file @
3e160e5d
...
...
@@ -50,4 +50,7 @@ public class AppConfig {
*/
@Value
(
"${changeManageQM:cuiyixian@corp.netease.com}"
)
private
String
changeManageQM
;
@Value
(
"${exportLimit:20}"
)
private
Long
exportLimit
;
}
\ No newline at end of file
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/convert/ExportMapper.java
0 → 100644
View file @
3e160e5d
/**
* @(#)ExportMapper.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
.
convert
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.factory.Mappers
;
import
com.netease.mail.yanxuan.change.biz.service.ChangeFlowExportQuery
;
import
com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowRequest
;
/**
* @Author zcwang
* @Date 2022/12/8
*/
@Mapper
public
interface
ExportMapper
{
ExportMapper
INSTANCE
=
Mappers
.
getMapper
(
ExportMapper
.
class
);
ChangeFlowExportQuery
convertChangeFlowExport
(
ChangeFlowRequest
req
);
}
\ No newline at end of file
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/service/ChangeFlowExportQuery.java
0 → 100644
View file @
3e160e5d
/**
* @(#)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.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
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/service/DESExportService.java
0 → 100644
View file @
3e160e5d
/**
* @(#)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
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
;
/**
* @Author zcwang
* @Date 2022/12/8
*/
@Component
public
class
DESExportService
{
@Autowired
private
DesClient
desClient
;
@Autowired
private
AppConfig
appConfig
;
public
String
changeFlowExport
(
ChangeFlowExportQuery
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
);
return
desClient
.
addTask
(
taskReq
);
}
}
\ No newline at end of file
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/service/impl/InteriorChangeConfigServiceImpl.java
View file @
3e160e5d
...
...
@@ -7,7 +7,6 @@ import java.util.List;
import
java.util.Map
;
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.lang3.StringUtils
;
import
org.slf4j.Logger
;
...
...
@@ -15,6 +14,7 @@ import org.slf4j.LoggerFactory;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.Assert
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.netease.mail.yanxuan.change.biz.config.AppConfig
;
...
...
@@ -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.PfuApiRpcService
;
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.req.SupplierRelatedUserReq
;
import
com.netease.mail.yanxuan.change.integration.flow.supplier.rsp.SupplierUserRsp
;
...
...
@@ -120,7 +121,8 @@ public class InteriorChangeConfigServiceImpl implements InteriorChangeConfigServ
* @return
*/
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
;
}
Map
<
String
,
GoodsResponseRpc
>
map
=
new
HashMap
<
String
,
GoodsResponseRpc
>();
...
...
@@ -318,7 +320,7 @@ public class InteriorChangeConfigServiceImpl implements InteriorChangeConfigServ
return
commanderResponse
;
case
SUPPLIERS_ASSOCIATED:
String
changeSupplier
=
req
.
getChangeSupplier
();
Assert
.
isTrue
(
StringUtils
.
isNotBlank
(
changeSupplier
),
"变更负责人为供应商时,
商品列表
不可为空"
);
Assert
.
isTrue
(
StringUtils
.
isNotBlank
(
changeSupplier
),
"变更负责人为供应商时,
供应商
不可为空"
);
try
{
GoodsResponseRpc
supplierResponseRpc
=
queryChangeSupplier
(
changeCommanderEnum
,
changeSupplier
,
changeExecUser
);
...
...
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/service/impl/change/AdminChangeConfigServiceImpl.java
View file @
3e160e5d
package
com
.
netease
.
mail
.
yanxuan
.
change
.
biz
.
service
.
impl
.
change
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.netease.mail.yanxuan.change.biz.meta.exception.ExceptionFactory
;
import
com.netease.mail.yanxuan.change.biz.service.change.ChangeConfigService
;
...
...
@@ -104,7 +105,7 @@ public class AdminChangeConfigServiceImpl implements AdminChangeConfigService {
changeConfigVO
=
getChangeConfigVO
(
changeConfig
,
changeTypes
,
changeExecConfigs
);
//如果没有查询后返回redis
getValue
().
set
(
CHANGE_CONFIG
+
id
,
changeConfigVO
,
1
,
TimeUnit
.
DAYS
);
return
AjaxResult
.
success
(
JSON
Object
.
parseObject
(
changeConfigVO
,
ChangeConfigVO
.
class
));
return
AjaxResult
.
success
(
JSON
.
parseObject
(
changeConfigVO
,
ChangeConfigVO
.
class
));
}
@Override
...
...
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/task/AutoSubmit.java
View file @
3e160e5d
...
...
@@ -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.service.ChangeFlowService
;
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.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.util.DateUtils
;
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.handler.IJobHandler
;
import
com.netease.mail.yanxuan.dschedule.core.handler.annotation.JobHandler
;
...
...
@@ -47,6 +50,12 @@ public class AutoSubmit extends IJobHandler {
@Autowired
private
FlowService
flowService
;
@Autowired
private
ChangeFlowBiz
changeFlowBiz
;
@Autowired
private
SupplierSendService
sendSupplierEmail
;
@Override
public
ReturnT
<
String
>
execute
(
String
...
strings
)
throws
Exception
{
log
.
info
(
"AutoSubmit start"
);
...
...
@@ -100,6 +109,15 @@ public class AutoSubmit extends IJobHandler {
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
,
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
yanxuan-qc-change-system-common/src/main/java/com/netease/mail/yanxuan/change/common/anno/ExcelTitleName.java
0 → 100644
View file @
3e160e5d
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
;
}
yanxuan-qc-change-system-common/src/main/java/com/netease/mail/yanxuan/change/common/util/ExcelUtil.java
0 → 100644
View file @
3e160e5d
/**
* @(#)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
yanxuan-qc-change-system-dal/src/main/java/com/netease/mail/yanxuan/change/dal/entity/ChangeExecRecord.java
View file @
3e160e5d
...
...
@@ -54,7 +54,7 @@ public class ChangeExecRecord {
private
String
changeExecUser
;
/**
* 变更行动人
(不同类型存储不同内容)
* 变更行动人
邮箱
*/
private
String
changeExecUserEmail
;
...
...
yanxuan-qc-change-system-dal/src/main/java/com/netease/mail/yanxuan/change/dal/meta/model/req/ChangeFlowListQueryReq.java
View file @
3e160e5d
...
...
@@ -39,7 +39,7 @@ public class ChangeFlowListQueryReq {
/**
* 工单状态
*/
private
Integer
s
tate
;
private
Integer
changeS
tate
;
/**
* 变更负责人
...
...
yanxuan-qc-change-system-dal/src/main/java/com/netease/mail/yanxuan/change/dal/meta/model/req/ChangeFlowRequest.java
0 → 100644
View file @
3e160e5d
/**
* @(#)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
;
/**
* @Author zcwang
* @Date 2022/12/8
*/
public
class
ChangeFlowRequest
{
private
String
itemId
;
private
String
supplier
;
private
Long
parentChangeClassId
;
private
Long
sonChangeClassId
;
private
Integer
changeState
;
private
String
changeCommander
;
private
String
changeDepartment
;
private
String
changeExecDepartment
;
private
Long
startTime
;
private
Long
endTime
;
}
\ No newline at end of file
yanxuan-qc-change-system-dal/src/main/resources/mybatis/mapper/ChangeRecordMapper.xml
View file @
3e160e5d
...
...
@@ -60,8 +60,8 @@
<if
test=
"sonChangeClassId != null"
>
and son_change_class_id = #{sonChangeClassId}
</if>
<if
test=
"
s
tate != null"
>
and `state` = #{
s
tate}
<if
test=
"
changeS
tate != null"
>
and `state` = #{
changeS
tate}
</if>
<if
test=
"changeCommander != null and changeCommander != ''"
>
and `change_commander` = #{changeCommander}
...
...
yanxuan-qc-change-system-integration/src/main/java/com/netease/mail/yanxuan/change/integration/email/enums/EmailTemplateEnum.java
View file @
3e160e5d
...
...
@@ -11,7 +11,7 @@ public enum EmailTemplateEnum {
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 变更工单转交通知"
),
...
...
yanxuan-qc-change-system-integration/src/main/java/com/netease/mail/yanxuan/change/integration/email/service/impl/UasClientServiceImpl.java
View file @
3e160e5d
...
...
@@ -28,6 +28,7 @@ public class UasClientServiceImpl implements UasClientService {
@Autowired
private
EmailRpcService
service
;
@Override
public
void
sendEmail
(
String
subject
,
String
content
,
Collection
<
String
>
toList
,
Collection
<
String
>
ccList
,
List
<
File
>
fileList
)
{
if
(!
CollectionUtils
.
isEmpty
(
toList
))
{
Map
<
String
,
String
>
params
=
new
HashMap
();
...
...
yanxuan-qc-change-system-integration/src/main/java/com/netease/mail/yanxuan/change/integration/excel/ChangeFlowExcelVo.java
0 → 100644
View file @
3e160e5d
/**
* @(#)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
yanxuan-qc-change-system-web/src/main/java/com/netease/mail/yanxuan/change/web/controller/ChangeFlowController.java
View file @
3e160e5d
...
...
@@ -12,7 +12,6 @@ import javax.validation.Valid;
import
org.apache.logging.log4j.util.Strings
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.Assert
;
import
org.springframework.util.StringUtils
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -25,17 +24,22 @@ import com.netease.mail.yanxuan.change.biz.config.TitleConfig;
import
com.netease.mail.yanxuan.change.biz.service.ChangeFlowService
;
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.RequestLocalBean
;
import
com.netease.mail.yanxuan.change.common.enums.CreateSourceEnum
;
import
com.netease.mail.yanxuan.change.biz.service.ChangeFlowExportQuery
;
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.ChangeFlowCreateReq
;
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.ChangeFlowRequest
;
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.vo.BasicChangeFlowVO
;
import
com.netease.mail.yanxuan.change.dal.meta.model.vo.ChangeFlowListVO
;
import
com.netease.mail.yanxuan.change.dal.meta.model.vo.ChangeFlowVO
;
import
com.netease.mail.yanxuan.change.biz.convert.ExportMapper
;
import
com.netease.mail.yanxuan.change.biz.service.DESExportService
;
import
com.netease.yanxuan.flowx.sdk.meta.dto.exec.InterfaceInputDTO
;
import
com.netease.yanxuan.flowx.sdk.meta.dto.exec.UserBaseContainerDTO
;
...
...
@@ -50,6 +54,8 @@ import lombok.extern.slf4j.Slf4j;
@RequestMapping
(
"/change/flow"
)
public
class
ChangeFlowController
{
private
static
final
ExportMapper
exportMapper
=
ExportMapper
.
INSTANCE
;
@Autowired
private
ChangeFlowService
changeFlowService
;
...
...
@@ -59,6 +65,9 @@ public class ChangeFlowController {
@Autowired
private
InteriorChangeConfigService
interiorChangeConfigService
;
@Autowired
private
DESExportService
desExportService
;
/**
* 变更工单详情查询
*
...
...
@@ -93,7 +102,7 @@ public class ChangeFlowController {
changeFlowListQueryReq
.
setSupplier
(
supplier
);
changeFlowListQueryReq
.
setParentChangeClassId
(
parentChangeClassId
);
changeFlowListQueryReq
.
setSonChangeClassId
(
sonChangeClassId
);
changeFlowListQueryReq
.
setState
(
changeState
);
changeFlowListQueryReq
.
set
Change
State
(
changeState
);
changeFlowListQueryReq
.
setChangeCommander
(
changeCommander
);
changeFlowListQueryReq
.
setChangeDepartment
(
changeDepartment
);
changeFlowListQueryReq
.
setChangeExecDepartment
(
changeExecDepartment
);
...
...
@@ -191,7 +200,7 @@ public class ChangeFlowController {
changeFlowListQueryReq
.
setSupplier
(
supplier
);
changeFlowListQueryReq
.
setParentChangeClassId
(
parentChangeClassId
);
changeFlowListQueryReq
.
setSonChangeClassId
(
sonChangeClassId
);
changeFlowListQueryReq
.
setState
(
changeState
);
changeFlowListQueryReq
.
set
Change
State
(
changeState
);
changeFlowListQueryReq
.
setChangeCommander
(
changeCommander
);
changeFlowListQueryReq
.
setChangeDepartment
(
changeDepartment
);
changeFlowListQueryReq
.
setChangeExecDepartment
(
changeExecDepartment
);
...
...
@@ -201,6 +210,14 @@ public class ChangeFlowController {
return
AjaxResult
.
success
();
}
@GetMapping
(
"/getChangeFlowExport"
)
public
AjaxResult
exportAddressBook
(
ChangeFlowRequest
req
)
{
ChangeFlowExportQuery
query
=
exportMapper
.
convertChangeFlowExport
(
req
);
query
.
setUid
(
RequestLocalBean
.
getUid
());
desExportService
.
changeFlowExport
(
query
);
return
new
AjaxResult
();
}
/**
* 获取审批人
*
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment