任务确认流程-发送消息- 模板需修改(暂时没有正确模板)

This commit is contained in:
wangzhijiang
2022-04-27 19:11:12 +08:00
parent ca6150f30c
commit f0f2736edf
5 changed files with 948 additions and 841 deletions
@@ -0,0 +1,46 @@
package com.jero.modules.project.enums;
/**
* 消息类型枚举类
*/
public enum MsgTypeEnum {
TASK_AFFIRM_START_MSG("任务确认发起消息","taskAffirmStartMsg"),
TASK_AFFIRM_ISSUE_DRE_MSG("任务确认分配dre消息","taskAffirmIssueDreMsg"),
TASK_AFFIRM_DRE_ACCEPTED("任务确认DRE通过消息","taskAffirmDreAccepted"),
TASK_AFFIRM_DRE_REJECTED("任务确认DRE退回消息","taskAffirmDreRejected"),
;
String name;
String value;
private MsgTypeEnum(String name, String value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public static String getTextByValue(String value) {
MsgTypeEnum[] values = values();
for (MsgTypeEnum msgTypeEnum : values) {
if (msgTypeEnum.value.equals(value)) {
return msgTypeEnum.name;
}
}
return null;
}
}
@@ -14,6 +14,7 @@ public enum OperatorTypeEnum {
UPDATE_STATUS("修改状态","updateStatus"), UPDATE_STATUS("修改状态","updateStatus"),
DELETE("删除","delete"), DELETE("删除","delete"),
QUERY("查询","query"), QUERY("查询","query"),
SEND_MSG("发送消息","sendMessage"),
TASK_AFFIRM_QUERY("任务确认流程,查询法规清单信息","taskAffirmQuery"), TASK_AFFIRM_QUERY("任务确认流程,查询法规清单信息","taskAffirmQuery"),
@@ -118,9 +118,10 @@ public class InventoryAffirmJob implements Job {
threeDaysUserIdList = threeDaysUserIdList.stream().distinct().collect(Collectors.toList()); threeDaysUserIdList = threeDaysUserIdList.stream().distinct().collect(Collectors.toList());
/*String msgContentCN = "您" + projectLibraryBase.getProjectName() + "(项目名称)法规清单的任务确认剩余处理时间还有3天,请及时查看处理";*/ /*String msgContentCN = "您" + projectLibraryBase.getProjectName() + "(项目名称)法规清单的任务确认剩余处理时间还有3天,请及时查看处理";*/
String msgContentEN = "The remaining processing time for the regulation task confirmationof GB 7258 in" // XXX .
String msgContentEN = "The remaining processing time for the regulation list confirmation of"
+ projectNameInfoEO.getProjectName() + projectNameInfoEO.getProjectName()
+ "(project name) is 3 days. Please check andhandle it in time."; + "(project name) is 3 days. Please check and handle it in time.";
//发送消息 //发送消息
projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLibraryBase.getId()); projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLibraryBase.getId());
} }
@@ -668,7 +668,8 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
/** /**
* 发送消息 * 发送消息
* @param msgContent * @param msgContent
* @param projectLawsInventoryEO * @param userIdList
* @param projectLibraryId
*/ */
@Override @Override
public void sendMessage(String msgContent, List<String> userIdList,String projectLibraryId){ public void sendMessage(String msgContent, List<String> userIdList,String projectLibraryId){
@@ -923,6 +924,9 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
if(StringUtils.equals(operatorType,OperatorTypeEnum.QUERY.getValue())){ if(StringUtils.equals(operatorType,OperatorTypeEnum.QUERY.getValue())){
} }
if(StringUtils.equals(operatorType,OperatorTypeEnum.SEND_MSG.getValue())){
workFlowSendMsg(jsonObject);
}
return new Result<>().success("调用成功!"); return new Result<>().success("调用成功!");
} }
@@ -978,4 +982,59 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
} }
return result; return result;
} }
/**
* 工作流发送消息
* @param jsonObject
*/
public void workFlowSendMsg(JSONObject jsonObject){
String msgType = jsonObject.getString("msgType"); //发送消息类型
if(StringUtils.isEmpty(msgType)){
throw new JeroBootException("发送消息类型不能为空,请检查!");
}
String id = jsonObject.getString("id"); //法规清单id
String currentUserId = jsonObject.getString("currentUserId"); //当前操作用户id
String taskAffirmDueDate = jsonObject.getString("taskAffirmDueDate"); //截止日期
String projectLibraryId = jsonObject.getString("projectLibraryId"); //项目库id
String engineeringInterfacePerson = jsonObject.getString("engineeringInterfacePerson"); //工程接口人id
ProjectLibraryBase projectLibraryBase = projectLibraryBaseMapper.selectOne(new QueryWrapper<ProjectLibraryBase>()
.lambda().eq(ProjectLibraryBase::getId, projectLibraryId));
QueryWrapper<ProjectNameInfoEO> projectNameInfoEOQueryWrapper = new QueryWrapper<>();
projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId,projectLibraryBase.getProjectNameId());
ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameInfoEOQueryWrapper);
SysUser sysUser = sysUserMapper.selectOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getId, currentUserId));
String msgContentEN = "";
List<String> userIdList = new ArrayList<>();
if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_START_MSG.getValue())) {
userIdList.add(engineeringInterfacePerson);
msgContentEN = sysUser.getUsername() + " initiated the regulation list confirmation of " + projectNameInfoEO.getProjectName()
+ " (project name).The due date is:" +taskAffirmDueDate+ ". Please check and deal with it in time.";
} else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_ISSUE_DRE_MSG.getValue())) {
String dreUserId = jsonObject.getString("dreUserId"); //dre用户id
userIdList.add(dreUserId);
//暂时没有英文消息模板。
msgContentEN = sysUser.getUsername() + " 将 " + projectNameInfoEO.getProjectName()
+ " (project name).的任务确认流程分发您,截止日期为:" +taskAffirmDueDate+ ". Please check and deal with it in time.";
} else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_DRE_REJECTED.getValue())) {
userIdList.add(engineeringInterfacePerson);
//暂时没有英文消息模板。
msgContentEN = sysUser.getUsername() + " 将 " + projectNameInfoEO.getProjectName()
+ " (project name).的任务确认流程退回,截止日期为:" +taskAffirmDueDate+ ". Please check and deal with it in time.";
} else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_DRE_ACCEPTED.getValue())) {
userIdList.add(engineeringInterfacePerson);
//暂时没有英文消息模板。
msgContentEN = sysUser.getUsername() + " 将 " + projectNameInfoEO.getProjectName()
+ " (project name).的任务确认流程通过,截止日期为:" +taskAffirmDueDate+ ". Please check and deal with it in time.";
}
if(CollectionUtils.isNotEmpty(userIdList) && StringUtils.isNotEmpty(msgContentEN)){
//发送消息
sendMessage(msgContentEN,userIdList,id);
}
}
} }
@@ -253,18 +253,18 @@
</template> </template>
<script> <script>
import ImportFile from '@/components/ImportFile/index' import ImportFile from '@/components/ImportFile/index'
import listAddModel from './listAddModel' import listAddModel from './listAddModel'
import listEditModel from './listEditModel' import listEditModel from './listEditModel'
import batSetting from './batSetting' import batSetting from './batSetting'
import transferList from './transferList' import transferList from './transferList'
import globalAdvancedQuery from '@/components/globalAdvancedQuery/index' import globalAdvancedQuery from '@/components/globalAdvancedQuery/index'
import { getAction, postAction, downloadFile, deleteAction } from '@/api/manage' import {getAction, postAction, downloadFile, deleteAction} from '@/api/manage'
import moment from 'moment' import moment from 'moment'
import { mapGetters } from 'vuex' import {mapGetters} from 'vuex'
import { Base64 } from 'js-base64' import {Base64} from 'js-base64'
export default { export default {
name: 'listOfRegulations', name: 'listOfRegulations',
components: { components: {
ImportFile, ImportFile,
@@ -283,7 +283,7 @@
dataIndex: 'serialNumber', dataIndex: 'serialNumber',
width: 180, width: 180,
fixed: 'left', fixed: 'left',
scopedSlots: { customRender: 'titleName' } scopedSlots: {customRender: 'titleName'}
}, },
{ {
title: this.$t('title'), title: this.$t('title'),
@@ -291,7 +291,7 @@
dataIndex: 'title', dataIndex: 'title',
width: 180, width: 180,
fixed: 'left', fixed: 'left',
scopedSlots: { customRender: 'titleName' } scopedSlots: {customRender: 'titleName'}
}, },
{ {
title: this.$t('subtitle'), title: this.$t('subtitle'),
@@ -299,7 +299,7 @@
dataIndex: 'subtitle', dataIndex: 'subtitle',
width: 180, width: 180,
fixed: 'left', fixed: 'left',
scopedSlots: { customRender: 'titleName' } scopedSlots: {customRender: 'titleName'}
}, },
{ {
title: this.$t('listConfirmationStatus'), title: this.$t('listConfirmationStatus'),
@@ -398,7 +398,7 @@
title: this.$t('Deliverables'), title: this.$t('Deliverables'),
dataIndex: 'designDeliverableTemplateName', dataIndex: 'designDeliverableTemplateName',
align: 'center', align: 'center',
scopedSlots: { customRender: 'designDeliverableTemplateName' } scopedSlots: {customRender: 'designDeliverableTemplateName'}
}, },
{ {
title: this.$t('Sponsor'), title: this.$t('Sponsor'),
@@ -424,7 +424,7 @@
title: this.$t('Deliverables'), title: this.$t('Deliverables'),
dataIndex: 'prehomoDeliverableTemplateName', dataIndex: 'prehomoDeliverableTemplateName',
align: 'center', align: 'center',
scopedSlots: { customRender: 'prehomoDeliverableTemplateName' } scopedSlots: {customRender: 'prehomoDeliverableTemplateName'}
}, },
{ {
title: this.$t('Sponsor'), title: this.$t('Sponsor'),
@@ -450,7 +450,7 @@
title: this.$t('Deliverables'), title: this.$t('Deliverables'),
dataIndex: 'verifyDeliverableTemplateName', dataIndex: 'verifyDeliverableTemplateName',
align: 'center', align: 'center',
scopedSlots: { customRender: 'verifyDeliverableTemplateName' } scopedSlots: {customRender: 'verifyDeliverableTemplateName'}
}, },
{ {
title: this.$t('Sponsor'), title: this.$t('Sponsor'),
@@ -474,7 +474,7 @@
align: 'center', align: 'center',
fixed: 'right', fixed: 'right',
width: 140, width: 140,
scopedSlots: { customRender: 'operation' } scopedSlots: {customRender: 'operation'}
} }
], ],
columnsFile: [ columnsFile: [
@@ -489,7 +489,7 @@
title: this.$t('operation'), title: this.$t('operation'),
align: 'center', align: 'center',
width: 130, width: 130,
scopedSlots: { customRender: 'fileOperation' } scopedSlots: {customRender: 'fileOperation'}
} }
], ],
visibleFile: false, visibleFile: false,
@@ -608,7 +608,7 @@
content: _this.$t('ConfirmReplication'), content: _this.$t('ConfirmReplication'),
onOk() { onOk() {
let idList = JSON.parse(JSON.stringify(_this.selectedRowKeys)) let idList = JSON.parse(JSON.stringify(_this.selectedRowKeys))
deleteAction(_this.url.copyUrl, { ids: idList.join(',') }).then((res) => { deleteAction(_this.url.copyUrl, {ids: idList.join(',')}).then((res) => {
if (res.success) { if (res.success) {
_this.$message.success(_this.$t('OperationSuccessful')) _this.$message.success(_this.$t('OperationSuccessful'))
_this.selectedRowKeys = [] _this.selectedRowKeys = []
@@ -648,7 +648,7 @@
content: _this.$t('ConfirmBatchDeletion'), content: _this.$t('ConfirmBatchDeletion'),
onOk() { onOk() {
let idList = JSON.parse(JSON.stringify(_this.selectedRowKeys)) let idList = JSON.parse(JSON.stringify(_this.selectedRowKeys))
deleteAction(_this.url.deleteBatch, { ids: idList.join(',') }).then((res) => { deleteAction(_this.url.deleteBatch, {ids: idList.join(',')}).then((res) => {
if (res.success) { if (res.success) {
_this.$message.success(_this.$t('OperationSuccessful')) _this.$message.success(_this.$t('OperationSuccessful'))
_this.selectedRowKeys = [] _this.selectedRowKeys = []
@@ -671,7 +671,7 @@
this.$confirm({ this.$confirm({
content: _this.$t('ConfirmDelete'), content: _this.$t('ConfirmDelete'),
onOk() { onOk() {
deleteAction(_this.url.deleteOne, { id: val.id }).then((res) => { deleteAction(_this.url.deleteOne, {id: val.id}).then((res) => {
if (res.success) { if (res.success) {
_this.$message.success(_this.$t('OperationSuccessful')) _this.$message.success(_this.$t('OperationSuccessful'))
_this.getList() _this.getList()
@@ -735,8 +735,8 @@
for (let i = 0; i < this.dataSource.length; i++) { for (let i = 0; i < this.dataSource.length; i++) {
for (let j = 0; j < selectedRowKeys.length; j++) { for (let j = 0; j < selectedRowKeys.length; j++) {
if (this.dataSource[i].id == selectedRowKeys[j]) { if (this.dataSource[i].id == selectedRowKeys[j]) {
if ((this.dataSource.inventoryAffirmStatus == 'Not started' || this.dataSource.inventoryAffirmStatus == 'rejected') && if ((this.dataSource[i].inventoryAffirmStatus == 'Not started' || this.dataSource[i].inventoryAffirmStatus == 'rejected') &&
this.dataSource.homologationEngineerId && this.dataSource.regulationOwnerId) { this.dataSource[i].homologationEngineerId && this.dataSource[i].regulationOwnerId) {
isTrue = true isTrue = true
} else { } else {
this.$message.warning(this.$t('dataConfirmation')) this.$message.warning(this.$t('dataConfirmation'))
@@ -920,7 +920,7 @@
content: num == 0 ? _this.$t('confirmSubmit') : _this.$t('confirmOverrule'), content: num == 0 ? _this.$t('confirmSubmit') : _this.$t('confirmOverrule'),
onOk() { onOk() {
let selectedRowKeys = JSON.parse(JSON.stringify(_this.selectedRowKeys)) let selectedRowKeys = JSON.parse(JSON.stringify(_this.selectedRowKeys))
_this.getRowKeys(selectedRowKeys, function() { _this.getRowKeys(selectedRowKeys, function () {
_this.updateStatusBatch(num, selectedRowKeys) _this.updateStatusBatch(num, selectedRowKeys)
}) })
} }
@@ -950,7 +950,7 @@
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix) let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank') window.open(url, '_blank')
} else { } else {
downloadFile('/sys/common/downLoadFile', fileQuery.fileName, { id: fileQuery.id }) downloadFile('/sys/common/downLoadFile', fileQuery.fileName, {id: fileQuery.id})
} }
}, },
pdfPreviewClick(name, id) { pdfPreviewClick(name, id) {
@@ -967,16 +967,16 @@
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + id + fileSuffix) let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + id + fileSuffix)
window.open(url, '_blank') window.open(url, '_blank')
} else { } else {
downloadFile('/sys/common/downLoadFile', name, { id: id }) downloadFile('/sys/common/downLoadFile', name, {id: id})
} }
}, },
download(item) { download(item) {
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id }) downloadFile('/sys/common/downLoadFile', item.fileName, {id: item.id})
}, },
clickButtonToUpload(item) { clickButtonToUpload(item) {
this.loading = true this.loading = true
this.visibleFile = true this.visibleFile = true
getAction('sys/common/getFileInfos', { id: item }).then((res) => { getAction('sys/common/getFileInfos', {id: item}).then((res) => {
if (res.success) { if (res.success) {
this.dataSourceFile = res.result this.dataSourceFile = res.result
this.loading = false this.loading = false
@@ -991,7 +991,7 @@
this.$confirm({ this.$confirm({
content: _this.$t('confirmBringInRelevantPersonnel'), content: _this.$t('confirmBringInRelevantPersonnel'),
onOk() { onOk() {
getAction(_this.url.matchRelevantPeople, { projectLibraryId: _this.$route.query.id }).then((res) => { getAction(_this.url.matchRelevantPeople, {projectLibraryId: _this.$route.query.id}).then((res) => {
if (res.success) { if (res.success) {
_this.$message.success(_this.$t('OperationSuccessful')) _this.$message.success(_this.$t('OperationSuccessful'))
_this.getList() _this.getList()
@@ -1003,13 +1003,13 @@
}) })
} }
} }
} }
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
@import '~@assets/less/common.less'; @import '~@assets/less/common.less';
.doc-detail { .doc-detail {
background: #fff; background: #fff;
height: 100%; height: 100%;
@@ -1059,29 +1059,29 @@
line-height: 42px; line-height: 42px;
} }
} }
} }
.header-text { .header-text {
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
height: 60px; height: 60px;
color: #000F16; color: #000F16;
line-height: 40px; line-height: 40px;
} }
.box-title-text { .box-title-text {
line-height: 1.4; line-height: 1.4;
display: flex; display: flex;
align-items: center; align-items: center;
margin-bottom: 10px; margin-bottom: 10px;
} }
.box-title-text-index { .box-title-text-index {
line-height: 1.4; line-height: 1.4;
display: flex; display: flex;
} }
.title-text { .title-text {
width: 32px; width: 32px;
color: #000F16; color: #000F16;
display: inline-block; display: inline-block;
@@ -1093,9 +1093,9 @@
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.title-text-index { .title-text-index {
width: 110px; width: 110px;
color: #000F16; color: #000F16;
display: inline-block; display: inline-block;
@@ -1108,69 +1108,69 @@
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
line-height: 40px; line-height: 40px;
} }
.box-input { .box-input {
display: inline-block; display: inline-block;
width: 70%; width: 70%;
height: 38px; height: 38px;
margin-top: 2px; margin-top: 2px;
} }
.Required { .Required {
color: red; color: red;
margin-right: 4px; margin-right: 4px;
} }
.box-button { .box-button {
height: 38px; height: 38px;
} }
.text-operation { .text-operation {
margin-right: 8px; margin-right: 8px;
} }
.page { .page {
text-align: right; text-align: right;
margin-top: 20px; margin-top: 20px;
} }
.operator-text-left { .operator-text-left {
font-size: 14px; font-size: 14px;
margin-right: 20px; margin-right: 20px;
background: #eff1f3; background: #eff1f3;
padding: 8px 8px; padding: 8px 8px;
cursor: pointer; cursor: pointer;
border-radius: 4px; border-radius: 4px;
} }
/deep/ .ant-popover-buttons { /deep/ .ant-popover-buttons {
display: none !important; display: none !important;
} }
.operator-text-title { .operator-text-title {
cursor: pointer; cursor: pointer;
margin-right: 22px; margin-right: 22px;
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
color: #040B29; color: #040B29;
margin-bottom: 22px; margin-bottom: 22px;
} }
</style> </style>
<style> <style>
.box-input .ant-select-selection { .box-input .ant-select-selection {
height: 38px !important; height: 38px !important;
} }
.box-input .ant-select-selection__rendered { .box-input .ant-select-selection__rendered {
line-height: 38px; line-height: 38px;
} }
.popconfirm .ant-popover-buttons { .popconfirm .ant-popover-buttons {
display: none !important; display: none !important;
} }
.popconfirm .anticon-exclamation-circle { .popconfirm .anticon-exclamation-circle {
display: none !important; display: none !important;
} }
</style> </style>