Browse Source

后端发布: 8.2.11

前端发布: 8.2.65
main
wangshaoping 4 weeks ago
parent
commit
21c097e6ba
  1. 2
      erm.frontend/package.json
  2. 2
      io.sc.engine.mv.frontend/package.json
  3. 2
      io.sc.engine.rule.frontend/package.json
  4. 2
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/controller/ResourcePermissionWebController.java
  5. 2
      io.sc.engine.st.frontend/package.json
  6. 2
      io.sc.platform.ai.frontend/package.json
  7. 2
      io.sc.platform.core.frontend/src/components/index.ts
  8. 43
      io.sc.platform.core.frontend/src/platform/layout/sub-layout/Topper.vue
  9. 8
      io.sc.platform.core.frontend/src/platform/layout/sub-layout/ViewNotificationDialog.vue
  10. 12
      io.sc.platform.core.frontend/src/platform/layout/sub-layout/ViewTaskDialog.vue
  11. 12
      io.sc.platform.core.frontend/src/routes/routes.json
  12. 4
      io.sc.platform.core.frontend/src/views/testcase/global-route/GlobalRoute.vue
  13. 4
      io.sc.platform.core.frontend/template-project/package.json
  14. 2
      io.sc.platform.developer.doc/package.json
  15. 2
      io.sc.platform.developer.frontend/package.json
  16. 19
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/api/ProcessVo.java
  17. 27
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/entity/ProcessEntity.java
  18. 79
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/ProcessQueryServiceImpl.java
  19. 40
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/support/BusinessKeyAndDescription.java
  20. 18
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/support/ProcessTaskWrapper.java
  21. 2
      io.sc.platform.flowable/src/main/resources/liquibase/io.sc.platform.flowable_8.0.0_20220606__Process Manager Database Schema DDL.xml
  22. 2
      io.sc.platform.lcdp.frontend/package.json
  23. 3
      io.sc.platform.lcdp.frontend/src/i18n/messages.json
  24. 3
      io.sc.platform.lcdp.frontend/src/i18n/messages_tw_CN.json
  25. 3
      io.sc.platform.lcdp.frontend/src/i18n/messages_zh_CN.json
  26. 39
      io.sc.platform.lcdp.frontend/src/views/bpm/Bpm.vue
  27. 2
      io.sc.platform.license.keygen.frontend/package.json
  28. 2
      io.sc.platform.mvc.frontend/package.json
  29. 2
      io.sc.platform.scheduler.manager.frontend/package.json
  30. 2
      io.sc.platform.system.frontend/package.json
  31. 12
      io.sc.platform.system/src/main/java/io/sc/platform/system/notification/service/impl/NotificationServiceImpl.java
  32. 2
      io.sc.standard.frontend/package.json
  33. 2
      io.sc.website/package.json

2
erm.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"pinia-undo": "0.2.4",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

2
io.sc.engine.mv.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"pinia-undo": "0.2.4",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

2
io.sc.engine.rule.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"pinia-undo": "0.2.4",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

2
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/controller/ResourcePermissionWebController.java

@ -23,8 +23,6 @@ public class ResourcePermissionWebController {
/**
* 列出所有资源,并且将角色所拥有的资源列表作出标记
* @param request HttpServletRequest 对象
* @param response HttpServletResponse 对象
* @param roleId 角色ID
* @return 所有资源,并且将角色所拥有的资源列表作出标记
* @throws Exception 违例

2
io.sc.engine.st.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"pinia-undo": "0.2.4",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

2
io.sc.platform.ai.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"pinia-undo": "0.2.4",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

2
io.sc.platform.core.frontend/src/components/index.ts

@ -2,6 +2,7 @@
* ,
*/
import component_testcase_globalRoute from '@/views/testcase/global-route/GlobalRoute.vue';
import component_testcase_openNoMenuRoute from '@/views/testcase/route/OpenNoMenuRoute.vue';
import component_testcase_noMenuRoute from '@/views/testcase/route/NoMenuRoute.vue';
import component_testcase_mathEditor from '@/views/testcase/math/MathEditor.vue';
@ -23,6 +24,7 @@ import component_testcase_gridLayout from '@/views/likm/GridLayout.vue';
import component_testcase_likmTreeGrid from '@/views/likm/TreeGrid.vue';
const localComponents = {
'component.testcase.globalRoute': component_testcase_globalRoute,
'component.testcase.openNoMenuRoute': component_testcase_openNoMenuRoute,
'component.testcase.noMenuRoute': component_testcase_noMenuRoute,
'component.testcase.mathEditor': component_testcase_mathEditor,

43
io.sc.platform.core.frontend/src/platform/layout/sub-layout/Topper.vue

@ -62,18 +62,26 @@
<q-tab-panel name="myTasks">
<q-list>
<q-item v-if="unCompletedTasksRef.length <= 0"></q-item>
<q-item v-for="item in unCompletedTasksRef" :key="item.id" v-ripple clickable class="px-0 pb-2" @click="viewTask(item)">
<q-item
v-for="item in unCompletedTasksRef"
:key="item.id"
v-ripple
v-close-popup
clickable
class="px-0 pb-2"
:to="item.routePath + '?taskId=' + item.id"
exact
>
<q-item-section avatar style="min-width: 0px; padding-right: 5px">
<q-icon color="blue" name="bi-dot" size="xl" />
</q-item-section>
<q-item-section>
<q-item-label>{{ item.name }}</q-item-label>
<q-item-label caption lines="2"><div v-html="item.description"></div></q-item-label>
<q-item-label>{{ item.businessDescription }}</q-item-label>
<q-item-label caption lines="2">{{ item.processDefinitionName }} [{{ item.name }}]</q-item-label>
</q-item-section>
<q-item-section side top>
<q-item-label caption>{{ item.createTimeAndNowDiff }}{{ $t(item.createTimeAndNowDiffUnit) }}{{ $t('before') }}</q-item-label>
<q-item-label caption>{{ item.processDefinitionName }}</q-item-label>
</q-item-section>
</q-item>
</q-list>
@ -81,7 +89,15 @@
<q-tab-panel name="myMessages">
<q-list>
<q-item v-if="unReadedNotificationsRef.length <= 0"></q-item>
<q-item v-for="item in unReadedNotificationsRef" :key="item.id" v-ripple clickable class="px-0 pb-2" @click="viewNotification(item)">
<q-item
v-for="item in unReadedNotificationsRef"
:key="item.id"
v-ripple
v-close-popup
clickable
class="px-0 pb-2"
@click="viewNotification(item)"
>
<q-item-section avatar style="min-width: 0px; padding-right: 5px">
<q-icon color="blue" name="bi-dot" size="xl" />
</q-item-section>
@ -100,7 +116,15 @@
<q-tab-panel name="systemAnnouncements">
<q-list>
<q-item v-if="unReadedAnnouncementsRef.length <= 0"></q-item>
<q-item v-for="item in unReadedAnnouncementsRef" :key="item.id" v-ripple clickable class="px-0 pb-2" @click="viewAnnouncement(item)">
<q-item
v-for="item in unReadedAnnouncementsRef"
:key="item.id"
v-ripple
v-close-popup
clickable
class="px-0 pb-2"
@click="viewAnnouncement(item)"
>
<q-item-section avatar style="min-width: 0px; padding-right: 5px">
<q-icon color="blue" name="bi-dot" size="xl" />
</q-item-section>
@ -195,6 +219,7 @@
<AboutDialog ref="aboutDialog"></AboutDialog>
<ChangePasswordDialog ref="changePasswordDialog"></ChangePasswordDialog>
<ChangeRoleDialog ref="changeRoleDialog"></ChangeRoleDialog>
<ViewTaskDialog ref="viewTaskDialog"></ViewTaskDialog>
<ViewNotificationDialog ref="viewNotificationDialog"></ViewNotificationDialog>
<ViewAnnouncementDialog ref="viewAnnouncementDialog"></ViewAnnouncementDialog>
</template>
@ -209,6 +234,7 @@ import LoginDialog from '@/platform/views/LoginDialog';
import AboutDialog from './AboutDialog.vue';
import ChangePasswordDialog from './ChangePasswordDialog.vue';
import ChangeRoleDialog from './ChangeRoleDialog.vue';
import ViewTaskDialog from './ViewTaskDialog.vue';
import ViewNotificationDialog from './ViewNotificationDialog.vue';
import ViewAnnouncementDialog from './ViewAnnouncementDialog.vue';
@ -221,6 +247,7 @@ const loginDialog = ref();
const aboutDialog = ref();
const changePasswordDialog = ref();
const changeRoleDialog = ref();
const viewTaskDialog = ref();
const viewNotificationDialog = ref();
const viewAnnouncementDialog = ref();
const { t } = useI18n();
@ -322,6 +349,10 @@ const findUnReadedAnnouncements = () => {
});
};
const viewTask = (item) => {
viewNotificationDialog.value.open(item);
};
const viewNotification = (item) => {
viewNotificationDialog.value.open(item);
};

8
io.sc.platform.core.frontend/src/platform/layout/sub-layout/ViewNotificationDialog.vue

@ -15,8 +15,9 @@
bg-color="primary"
>
<template #avatar>
<q-icon name="bi-person-circle" size="48px" color="blue" right />
<q-icon name="bi-person-circle" size="36px" color="blue" right />
</template>
<q-markdown :src="':::\n' + item.title + '\n:::'"> </q-markdown>
</q-chat-message>
<q-chat-message
v-else
@ -53,7 +54,7 @@
</template>
<script setup lang="ts">
import { ref, reactive, nextTick } from 'vue';
import { useQuasar, uid } from 'quasar';
import { useQuasar } from 'quasar';
import { axios, PConst, Environment, SessionManager, noErrorAxios, NotifyManager } from '@/platform';
const $q = useQuasar();
@ -85,12 +86,11 @@ const loadNotifications = async () => {
if (messagesRef.value && messagesRef.value.length > 0) {
document.getElementById(messagesRef.value[messagesRef.value.length - 1].id).scrollIntoView();
}
Environment.executeAction('findUnReadedNotifications');
});
});
};
const updateLastReadAnnouncementDate = () => {};
const sendMessage = (event: any) => {
if (imeRef.value) {
// ,

12
io.sc.platform.core.frontend/src/platform/layout/sub-layout/ViewTaskDialog.vue

@ -0,0 +1,12 @@
<template>
<w-dialog ref="dialogRef" width="800px" :title="$t('myMessages')" :can-maximize="false" @hide="Environment.executeAction('loadSystemAnnouncements')">
<router-view v-slot="{ Component }" class="full">
<keep-alive>
<suspense>
<component :is="Component" :key="route.fullPath" />
</suspense>
</keep-alive>
</router-view>
</w-dialog>
</template>
<script setup lang="ts"></script>

12
io.sc.platform.core.frontend/src/routes/routes.json

@ -1,4 +1,16 @@
[
{
"name": "route.testcase.globalRoute",
"path": "/testcase/globalRoute",
"parent": null,
"priority": 0,
"component": "component.testcase.globalRoute",
"componentPath": "@/views/testcase/global-route/GlobalRoute.vue",
"redirect": null,
"meta": {
"permissions": ["/testcase/loading/**/*"]
}
},
{
"name": "route.testcase.openNoMenuRoute",
"path": "testcase/openNoMenuRoute",

4
io.sc.platform.core.frontend/src/views/testcase/global-route/GlobalRoute.vue

@ -0,0 +1,4 @@
<template>
<div style="height: 100%">XXXX</div>
</template>
<script setup lang="ts"></script>

4
io.sc.platform.core.frontend/template-project/package.json

@ -1,6 +1,6 @@
{
"name": "platform-core",
"version": "8.2.63",
"version": "8.2.65",
"description": "前端核心包,用于快速构建前端的脚手架",
"private": false,
"keywords": [],
@ -111,7 +111,7 @@
"mockjs": "1.1.0",
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

2
io.sc.platform.developer.doc/package.json

@ -28,7 +28,7 @@
"vuepress": "2.0.0-rc.15"
},
"dependencies": {
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"vue": "3.5.13",
"vue-i18n": "11.0.1"

2
io.sc.platform.developer.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"pinia-undo": "0.2.4",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

19
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/api/ProcessVo.java

@ -14,7 +14,8 @@ public class ProcessVo extends CorporationAuditorVo {
private String xml;
private ProcessStatus status;
private Boolean canClaimTask;
private String taskDescriptionSql;
private String businessDescriptionSql;
private String routePath;
public String getId() {
return id;
@ -96,11 +97,19 @@ public class ProcessVo extends CorporationAuditorVo {
this.canClaimTask = canClaimTask;
}
public String getTaskDescriptionSql() {
return taskDescriptionSql;
public String getBusinessDescriptionSql() {
return businessDescriptionSql;
}
public void setTaskDescriptionSql(String taskDescriptionSql) {
this.taskDescriptionSql = taskDescriptionSql;
public void setBusinessDescriptionSql(String businessDescriptionSql) {
this.businessDescriptionSql = businessDescriptionSql;
}
public String getRoutePath() {
return routePath;
}
public void setRoutePath(String routePath) {
this.routePath = routePath;
}
}

27
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/entity/ProcessEntity.java

@ -76,9 +76,13 @@ public class ProcessEntity extends CorporationAuditorEntity<ProcessVo> {
@Convert(converter= NumericBooleanConverter.class)
private Boolean canClaimTask;
@Column(name="TASK_DESCRIPTION_SQL_")
@Column(name="BUSINESS_DESC_SQL_")
@Size(max=1024)
private String taskDescriptionSql;
private String businessDescriptionSql;
@Column(name="ROUTE_PATH_")
@Size(max=1024)
private String routePath;
@Override
public ProcessVo toVo() {
@ -94,7 +98,8 @@ public class ProcessEntity extends CorporationAuditorEntity<ProcessVo> {
vo.setXml(this.getXml());
vo.setStatus(this.getStatus());
vo.setCanClaimTask(this.getCanClaimTask());
vo.setTaskDescriptionSql(this.getTaskDescriptionSql());
vo.setBusinessDescriptionSql(this.getBusinessDescriptionSql());
vo.setRoutePath(this.getRoutePath());
return vo;
}
@ -178,12 +183,20 @@ public class ProcessEntity extends CorporationAuditorEntity<ProcessVo> {
this.canClaimTask = canClaimTask;
}
public String getTaskDescriptionSql() {
return taskDescriptionSql;
public String getBusinessDescriptionSql() {
return businessDescriptionSql;
}
public void setBusinessDescriptionSql(String businessDescriptionSql) {
this.businessDescriptionSql = businessDescriptionSql;
}
public String getRoutePath() {
return routePath;
}
public void setTaskDescriptionSql(String taskDescriptionSql) {
this.taskDescriptionSql = taskDescriptionSql;
public void setRoutePath(String routePath) {
this.routePath = routePath;
}
@Override

79
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/ProcessQueryServiceImpl.java

@ -1,5 +1,7 @@
package io.sc.platform.flowable.service.impl;
import io.sc.platform.core.support.KeyValue;
import io.sc.platform.flowable.jpa.entity.ProcessEntity;
import io.sc.platform.flowable.service.AssigneeQueryService;
import io.sc.platform.flowable.service.ProcessEntityService;
import io.sc.platform.flowable.service.ProcessQueryService;
@ -10,6 +12,7 @@ import io.sc.platform.orm.service.support.QueryResult;
import io.sc.platform.orm.service.support.criteria.Criteria;
import io.sc.platform.orm.service.support.criteria.impl.Equals;
import io.sc.platform.util.CollectionUtil;
import io.sc.platform.util.StringUtil;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.EndEvent;
import org.flowable.bpmn.model.FlowElement;
@ -274,6 +277,7 @@ public class ProcessQueryServiceImpl implements ProcessQueryService {
List<ProcessTaskWrapper> wrappers =new ArrayList<>();
Set<String> processIntanceIds =new HashSet<>();
Map<String,Map<String, BusinessKeyAndDescription>> processDefineAndInstanceAndBusinessMap =new HashMap<>();
for(Task item : items){
ProcessTaskWrapper wrapper =new ProcessTaskWrapper();
wrapper.setId(item.getId());
@ -298,23 +302,86 @@ public class ProcessQueryServiceImpl implements ProcessQueryService {
wrapper.setFormKey(item.getFormKey());
wrapper.setClaimTime(item.getClaimTime());
wrappers.add(wrapper);
Map<String,BusinessKeyAndDescription> processInstanceAndBusinessMap =processDefineAndInstanceAndBusinessMap.get(item.getProcessDefinitionId());
if(processInstanceAndBusinessMap==null){
processInstanceAndBusinessMap =new HashMap<>();
processDefineAndInstanceAndBusinessMap.put(item.getProcessDefinitionId(),processInstanceAndBusinessMap);
}
processInstanceAndBusinessMap.put(item.getProcessInstanceId(),new BusinessKeyAndDescription());
processIntanceIds.add(item.getProcessInstanceId());
}
Map<String,String[]> businessKeyMap =new HashMap<>();
// 建立流程实例和业务Key的关系
List<ProcessInstance> processInstances =runtimeService.createProcessInstanceQuery().processInstanceIds(processIntanceIds).list();
if(CollectionUtil.hasElements(processInstances)) {
for (ProcessInstance processInstance : processInstances) {
businessKeyMap.put(processInstance.getId(), new String[]{processInstance.getBusinessKey(),processInstance.getProcessDefinitionName()});
Map<String,BusinessKeyAndDescription> processInstanceAndBusinessMap =processDefineAndInstanceAndBusinessMap.get(processInstance.getProcessDefinitionId());
if(processInstanceAndBusinessMap!=null){
BusinessKeyAndDescription businessKeyAndDescription =processInstanceAndBusinessMap.get(processInstance.getId());
if(businessKeyAndDescription!=null){
businessKeyAndDescription.setProcessDefinitionName(processInstance.getProcessDefinitionName());
businessKeyAndDescription.setBusinessKey(processInstance.getBusinessKey());
businessKeyAndDescription.setBusinessDescription(processInstance.getProcessDefinitionName());
}
}
}
}
for(String processDefineId : processDefineAndInstanceAndBusinessMap.keySet()) {
Map<String,BusinessKeyAndDescription> processInstanceAndBusinessMap =processDefineAndInstanceAndBusinessMap.get(processDefineId);
if(processInstanceAndBusinessMap==null || processInstanceAndBusinessMap.size()<=0){
continue;
}
ProcessEntity processEntity =processEntityService.getRepository().findByDeployedId(processDefineId);
for(String processInstanceId : processInstanceAndBusinessMap.keySet()){
BusinessKeyAndDescription businessKeyAndDescription =processInstanceAndBusinessMap.get(processInstanceId);
if(businessKeyAndDescription!=null){
businessKeyAndDescription.setRoutePath(processEntity.getRoutePath());
}
}
if(processEntity==null){
continue;
}
String sql =processEntity.getBusinessDescriptionSql();
if(!StringUtils.hasText(sql)){
continue;
}
Set<String> businessKeys =new HashSet<>();
for(Map.Entry<String,BusinessKeyAndDescription> entry: processInstanceAndBusinessMap.entrySet()){
businessKeys.add(entry.getValue().getBusinessKey());
}
if(!CollectionUtil.hasElements(businessKeys)){
continue;
}
Map<String,Object> variables =new HashMap<>();
variables.put("bussinessKeys","'" + StringUtil.combine("','",businessKeys) + "'");
sql =StringUtil.format(sql,variables);
List<Map<String,Object>> result =jdbcTemplate.queryForList(sql);
if(!CollectionUtil.hasElements(result)){
continue;
}
for(Map<String,Object> row : result){
String bussinessKey =row.get("BUSSINESS_KEY").toString();
String bussinessDescription =row.get("BUSSINESS_DESCRIPTION").toString();
for(String processInstanceId : processInstanceAndBusinessMap.keySet()){
BusinessKeyAndDescription businessKeyAndDescription =processInstanceAndBusinessMap.get(processInstanceId);
if(businessKeyAndDescription.getBusinessKey().equals(bussinessKey)){
businessKeyAndDescription.setBusinessDescription(bussinessDescription);
break;
}
}
}
}
//合并
for(ProcessTaskWrapper wrapper : wrappers){
String[] item =businessKeyMap.get(wrapper.getProcessInstanceId());
wrapper.setBusinessKey(item[0]);
wrapper.setProcessDefinitionName(item[1]);
Map<String,BusinessKeyAndDescription> processInstanceAndBusinessMap =processDefineAndInstanceAndBusinessMap.get(wrapper.getProcessDefinitionId());
BusinessKeyAndDescription businessKeyAndDescription =processInstanceAndBusinessMap.get(wrapper.getProcessInstanceId());
wrapper.setBusinessKey(businessKeyAndDescription.getBusinessKey());
wrapper.setBusinessDescription(businessKeyAndDescription.getBusinessDescription());
wrapper.setProcessDefinitionName(businessKeyAndDescription.getProcessDefinitionName());
wrapper.setRoutePath(businessKeyAndDescription.getRoutePath());
}
return new PageImpl<ProcessTaskWrapper>(wrappers,pageable,total);

40
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/support/BusinessKeyAndDescription.java

@ -0,0 +1,40 @@
package io.sc.platform.flowable.support;
public class BusinessKeyAndDescription {
private String processDefinitionName;
private String businessKey;
private String businessDescription;
private String routePath;
public String getProcessDefinitionName() {
return processDefinitionName;
}
public void setProcessDefinitionName(String processDefinitionName) {
this.processDefinitionName = processDefinitionName;
}
public String getBusinessKey() {
return businessKey;
}
public void setBusinessKey(String businessKey) {
this.businessKey = businessKey;
}
public String getBusinessDescription() {
return businessDescription;
}
public void setBusinessDescription(String businessDescription) {
this.businessDescription = businessDescription;
}
public String getRoutePath() {
return routePath;
}
public void setRoutePath(String routePath) {
this.routePath = routePath;
}
}

18
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/support/ProcessTaskWrapper.java

@ -33,6 +33,8 @@ public class ProcessTaskWrapper {
private String processDefinitionName;
private String businessKey;
private String businessDescription;
private String routePath;
private long createTimeAndNowDiff;
private ChronoUnit createTimeAndNowDiffUnit;
@ -180,6 +182,22 @@ public class ProcessTaskWrapper {
this.businessKey = businessKey;
}
public String getBusinessDescription() {
return businessDescription;
}
public void setBusinessDescription(String businessDescription) {
this.businessDescription = businessDescription;
}
public String getRoutePath() {
return routePath;
}
public void setRoutePath(String routePath) {
this.routePath = routePath;
}
public long getCreateTimeAndNowDiff() {
return createTimeAndNowDiff;
}

2
io.sc.platform.flowable/src/main/resources/liquibase/io.sc.platform.flowable_8.0.0_20220606__Process Manager Database Schema DDL.xml

@ -25,7 +25,7 @@
<column name="XML_" type="CLOB" remarks="流程定义BPM XML内容"></column>
<column name="STATUS_" type="NVARCHAR(10)" remarks="流程定义状态"></column>
<column name="CAN_CLAIM_TASK_" type="SMALLINT" remarks="是否可以领取任务"></column>
<column name="TASK_DESCRIPTION_SQL_" type="NVARCHAR(1024)" remarks="任务描述SQL语句,用于生成带业务信息的任务描述"></column>
<column name="BUSINESS_DESC_SQL_" type="NVARCHAR(1024)" remarks="任务描述SQL语句,用于生成带业务信息的任务描述"></column>
<column name="JPA_VERSION_" type="INTEGER" remarks="JPA乐观锁版本"/>
<column name="DATA_COME_FROM_" type="NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)"/>

2
io.sc.platform.lcdp.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"pinia-undo": "0.2.4",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

3
io.sc.platform.lcdp.frontend/src/i18n/messages.json

@ -164,7 +164,8 @@
"lcdp.bpm.processDefine.grid.toolbar.queryProcessInstance": "Query Process Instance",
"lcdp.bpm.processDefine.grid.entity.deployId": "Deploy ID",
"lcdp.bpm.processDefine.grid.entity.canClaimTask": "Can Claim Task",
"lcdp.bpm.processDefine.grid.entity.taskDescriptionSql": "Task Description SQL with Bussiness Properties",
"lcdp.bpm.processDefine.grid.entity.businessDescriptionSql": "Bussiness Description SQL",
"lcdp.bpm.processDefine.grid.entity.routePath": "Front End Route Path (start with /)",
"lcdp.bpm.designer.dialog.title.prefix": "Process Designer",

3
io.sc.platform.lcdp.frontend/src/i18n/messages_tw_CN.json

@ -164,7 +164,8 @@
"lcdp.bpm.processDefine.grid.toolbar.queryProcessInstance": "查詢流程實例",
"lcdp.bpm.processDefine.grid.entity.deployId": "發佈 ID",
"lcdp.bpm.processDefine.grid.entity.canClaimTask": "允許領取任務",
"lcdp.bpm.processDefine.grid.entity.taskDescriptionSql": "任務描述 SQL 語句(帶業務屬性)",
"lcdp.bpm.processDefine.grid.entity.businessDescriptionSql": "業務描述 SQL",
"lcdp.bpm.processDefine.grid.entity.routePath": "前端路由路徑(以 / 開頭)",
"lcdp.bpm.designer.dialog.title.prefix": "流程設計器",

3
io.sc.platform.lcdp.frontend/src/i18n/messages_zh_CN.json

@ -164,7 +164,8 @@
"lcdp.bpm.processDefine.grid.toolbar.queryProcessInstance": "查询流程实例",
"lcdp.bpm.processDefine.grid.entity.deployId": "发布 ID",
"lcdp.bpm.processDefine.grid.entity.canClaimTask": "允许领取任务",
"lcdp.bpm.processDefine.grid.entity.taskDescriptionSql": "任务描述 SQL 语句(带业务属性)",
"lcdp.bpm.processDefine.grid.entity.businessDescriptionSql": "业务描述 SQL",
"lcdp.bpm.processDefine.grid.entity.routePath": "前端路由路径(以 / 开头)",
"lcdp.bpm.designer.dialog.title.prefix": "流程设计器",

39
io.sc.platform.lcdp.frontend/src/views/bpm/Bpm.vue

@ -19,7 +19,7 @@
:checkbox-selection="true"
:data-url="Environment.apiContextPath('/api/flowable/process')"
:pageable="true"
:sort-by="['-lastModifyDate']"
:sort-by="['key', '-status', '-version']"
:query-form-cols-num="4"
:query-form-fields="[
{ name: 'key', label: $t('code'), type: 'w-text', clearable: true },
@ -176,7 +176,7 @@
]"
:editor="{
dialog: {
width: '600px',
width: '800px',
},
form: {
colsNum: 1,
@ -216,21 +216,42 @@
{ name: 'xml', label: $t('xml'), type: 'w-textarea' },
{ name: 'status', label: $t('status'), type: 'w-text', defaultValue: 'SKETCH', showIf: false },
{ name: 'canClaimTask', label: $t('lcdp.bpm.processDefine.grid.entity.canClaimTask'), type: 'w-checkbox', defaultValue: true, rule: [] },
{ name: 'routePath', label: $t('lcdp.bpm.processDefine.grid.entity.routePath'), type: 'w-text', defaultValue: '/' },
{
type: 'w-form-group',
align: 'right',
fields: [
{
name: 'taskDescriptionSqlSample',
label: $t('lcdp.bpm.processDefine.grid.entity.taskDescriptionSql'),
name: 'businessDescriptionSqlExample',
label: $t('example'),
type: 'q-btn',
outline: true,
style: 'width:200px',
noCaps: true,
style: 'width:100px',
onClick: (args: any) => {
let sql = 'select\n';
sql += '\tbusinessKeyFieldName BUSSINESS_KEY,\n';
sql += '\tbusinessDescriptionFieldName BUSSINESS_DESCRIPTION\n';
sql += 'from bussinessTable\n';
sql += 'where businessKeyFieldName in (${bussinessKeys})';
processDefineGridRef.getEditorForm().setFieldValue('businessDescriptionSql', sql);
},
},
],
},
{
name: 'taskDescriptionSql',
label: $t('lcdp.bpm.processDefine.grid.entity.taskDescriptionSql'),
name: 'businessDescriptionSql',
label: $t('lcdp.bpm.processDefine.grid.entity.businessDescriptionSql'),
type: 'w-code-mirror',
rows: 5,
rows: 6,
lang: 'sql',
toolbar: false,
modelValue: 'select \'任务描述\' from 业务表\nwhere 业务表.id in (${bussinessKeys})',
lineHeight: '1.3rem',
fontSize: '0.75rem',
lineNumber: true,
lineWrap: false,
lineBreak: true,
placeholder: true,
},
],
},

2
io.sc.platform.license.keygen.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"pinia-undo": "0.2.4",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

2
io.sc.platform.mvc.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"pinia-undo": "0.2.4",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

2
io.sc.platform.scheduler.manager.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"pinia-undo": "0.2.4",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

2
io.sc.platform.system.frontend/package.json

@ -111,7 +111,7 @@
"mockjs": "1.1.0",
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

12
io.sc.platform.system/src/main/java/io/sc/platform/system/notification/service/impl/NotificationServiceImpl.java

@ -9,11 +9,14 @@ import io.sc.platform.system.api.notification.NotificationVo;
import io.sc.platform.system.notification.jpa.entity.NotificationEntity;
import io.sc.platform.system.notification.jpa.repository.NotificationRepository;
import io.sc.platform.system.notification.service.NotificationService;
import io.sc.platform.util.CollectionUtil;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.transaction.Transactional;
import java.util.Collections;
import java.util.Date;
import java.util.List;
@Service("io.sc.platform.system.notification.service.impl.NotificationServiceImpl")
@ -35,10 +38,17 @@ public class NotificationServiceImpl extends DaoServiceImpl<NotificationEntity,
}
@Override
@Transactional
public List<NotificationVo> findNotificationsBySender(String sender) throws Exception {
if(!StringUtils.hasText(sender)){
return Collections.emptyList();
}
return EntityVoUtil.toVo(repository.findNotificationsBySender(sender,SecurityUtil.getLoginName()));
List<NotificationEntity> entities =repository.findNotificationsBySender(sender,SecurityUtil.getLoginName());
if(CollectionUtil.hasElements(entities)){
for(NotificationEntity entity : entities){
entity.setReceiveDate(new Date());
}
}
return EntityVoUtil.toVo(entities);
}
}

2
io.sc.standard.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6",
"pinia": "2.3.0",
"pinia-undo": "0.2.4",
"platform-core": "8.2.63",
"platform-core": "8.2.65",
"quasar": "2.17.6",
"sort-array": "5.0.0",
"svg-path-commander": "2.1.7",

2
io.sc.website/package.json

@ -28,6 +28,6 @@
},
"dependencies": {
"vue": "3.5.13",
"platform-core": "8.2.63"
"platform-core": "8.2.65"
}
}
Loading…
Cancel
Save