提交 52d3e7d8 编写于 作者: ibizdev's avatar ibizdev

lab_qyk 部署微服务应用

上级 92e6f245
......@@ -75,8 +75,7 @@ import AppOrgSelect from './components/app-org-select/app-org-select.vue'
import AppDepartmentSelect from './components/app-department-select/app-department-select.vue'
import IBizGroupSelect from './components/ibiz-group-select/ibiz-group-select.vue'
import IBizGroupPicker from './components/ibiz-group-picker/ibiz-group-picker.vue'
import AppWFApproval from './components/app-wf-approval/app-wf-approval.vue'
// 全局挂载UI实体服务注册中心
window['uiServiceRegister'] = uiServiceRegister;
......@@ -161,5 +160,6 @@ export const AppComponents = {
v.component('app-department-select',AppDepartmentSelect);
v.component('ibiz-group-select',IBizGroupSelect);
v.component('ibiz-group-picker',IBizGroupPicker);
v.component('app-wf-approval',AppWFApproval);
},
};
\ No newline at end of file
.app-wf-approval{
width:400px;
.app-wf-approval-header{
width: 100%;
text-align: center;
background: #9acdf5;
height: 32px;
line-height: 32px;
font-size: 16px;
border: 1px solid #565656;
.approval-header-left{
margin-right: 24px;
}
}
.app-wf-approval-bottom{
width: 100%;
text-align: center;
background: #9acdf5;
height: 32px;
line-height: 32px;
font-size: 16px;
border-style: solid;
border-width: 0px 1px 1px 1px;
border-color: #565656;
}
.app-wf-approval-content{
border-left: 1px solid #565656;
border-right: 1px solid #565656;
.approval-content-item{
display: flex;
align-items: center;
font-size: 16px;
border-bottom: 1px solid #565656;
.approval-content-item-left{
width: 30%;
padding: 8px;
}
.approval-content-item-right{
width: 70%;
border-left:1px solid #565656;
.approval-content-item-wait{
padding: 0px 4px;
height: 32px;
line-height: 32px;
font-size: 16px;
border-bottom:1px solid #565656;
background: #d1ef5c;
>span{
font-size: 18px;
color: #000;
font-weight: 600;
}
}
.approval-content-item-info{
.approval-content-item-info-item {
padding: 0px 4px;
height: 32px;
line-height: 32px;
border-bottom:1px solid #565656;
}
.approval-content-item-info-top{
font-size: 16px;
}
.approval-content-item-info-bottom{
font-size: 14px;
text-align: right;
>span{
margin-right:6px;
}
.info-bottom-name{
font-size: 18px;
font-weight: 600;
}
}
> div:nth-last-child(1){
> .approval-content-item-info-item:nth-last-child(1){
border-bottom: 0;
}
}
}
.approval-content-item-memo{
border-top:1px solid #565656;
padding: 0px 4px;
.el-textarea__inner{
border: 0px !important;
padding: 0px !important;
}
}
}
}
}
}
\ No newline at end of file
<template>
<div class='app-wf-approval'>
<div class="app-wf-approval-header">
<span class="approval-header-left">{{data.startTime}}</span>
<span>{{data.startUserName}}提交</span>
</div>
<div class="app-wf-approval-content" v-if="data.usertasks.length >0">
<div class="approval-content-item" v-for="(usertask,index) in data.usertasks" :key="index">
<div class="approval-content-item-left">
{{usertask.userTaskName}}
</div>
<div class="approval-content-item-right">
<div class="approval-content-item-wait" v-if="usertask.identitylinks.length >0">
等待<span v-for="(identitylink,inx) in usertask.identitylinks" :key="inx">{{identitylink.displayname}}<span v-if="inx >0"></span></span>处理
</div>
<div class="approval-content-item-info" v-if="usertask.comments.length >0">
<div v-for="(comment,commentInx) in usertask.comments" :key="commentInx">
<div class="approval-content-item-info-item approval-content-item-info-top">
{{`【${comment.type}】${comment.fullMessage}`}}
</div>
<div class="approval-content-item-info-item approval-content-item-info-bottom">
<span class="info-bottom-name">{{comment.authorName}}</span>
<span>{{comment.time}}</span>
</div>
</div>
</div>
<div class="approval-content-item-memo" v-if="usertask.userTaskId === 'tid-2-c60d498abacb47b510e0aa9d64a55e57'">
<el-input type="textarea" :rows="2" v-model="input" placeholder="请输入内容"></el-input>
</div>
</div>
</div>
</div>
<div class="app-wf-approval-bottom">
<span v-if="data.endTime">{{data.endTime}}结束</span>
</div>
</div>
</template>
<script lang = 'ts'>
import { Vue, Component } from 'vue-property-decorator';
@Component({
})
export default class AppWFApproval extends Vue {
public input:any ="";
/**
* 传入数据
*
* @memberof AppWFApproval
*/
public data:any = {
"id": "40833204-9be4-11ea-9c94-0242130d84ce",
"name": null,
"processDefinitionKey": null,
"processDefinitionName": null,
"businessKey": "DC20200522022",
"startTime": "2020-05-22 12:25:22",
"endTime": null,
"startUserId": "001-004_0001",
"startUserName": "隆俊杰",
"usertasks": [{
"userTaskId": "tid-1-1f3eda90105907e25e6f2e8c0f82b903",
"userTaskName": "管理员审批",
"processDefinitionKey": null,
"processDefinitionName": null,
"identitylinks": [],
"comments": [{
"id": "44eddf40-9be4-11ea-9c94-0242130d84ce",
"author": "001-004_0001",
"authorName": "隆俊杰",
"fullMessage": "",
"time": "2020-05-22 12:25:29",
"type": "审批不通过",
"taskId": "40844383-9be4-11ea-9c94-0242130d84ce",
"processInstanceId": "40833204-9be4-11ea-9c94-0242130d84ce",
"processInstanceBusinessKey": "DC20200522022"
}, {
"id": "b39cfc68-9be4-11ea-9c94-0242130d84ce",
"author": "450000-000",
"authorName": "ibzadmin",
"fullMessage": "",
"time": "2020-05-22 12:28:35",
"type": "审批不通过",
"taskId": "a6c57ad1-9be4-11ea-9c94-0242130d84ce",
"processInstanceId": "40833204-9be4-11ea-9c94-0242130d84ce",
"processInstanceBusinessKey": "DC20200522022"
}]
}, {
"userTaskId": "tid-2-c60d498abacb47b510e0aa9d64a55e57",
"userTaskName": "被驳回",
"processDefinitionKey": null,
"processDefinitionName": null,
"identitylinks": [{
"id": "001-004_0001",
"firstname": null,
"displayname": "隆俊杰"
}],
"comments": [{
"id": "a6c21f6e-9be4-11ea-9c94-0242130d84ce",
"author": "001-004_0001",
"authorName": "隆俊杰",
"fullMessage": "",
"time": "2020-05-22 12:28:14",
"type": "提交",
"taskId": "44f09e63-9be4-11ea-9c94-0242130d84ce",
"processInstanceId": "40833204-9be4-11ea-9c94-0242130d84ce",
"processInstanceBusinessKey": "DC20200522022"
}]
}]
};
}
</script>
<style lang="less">
@import './app-wf-approval.less';
</style>
\ No newline at end of file
......@@ -619,7 +619,7 @@ export default class EntityService {
* @memberof EntityService
*/
public async removeBatch(context: any = {},data: any, isloading?: boolean): Promise<any> {
return Http.getInstance().delete(`/${this.APPDENAME}/batch`,isloading,data);
return Http.getInstance().delete(`/${this.APPDENAME}/batch`,isloading,data[this.APPDEKEY]);
}
/**
......@@ -765,6 +765,19 @@ export default class EntityService {
return Http.getInstance().get(`/wfcore/${this.SYSTEMNAME}-app-${this.APPNAME}/${this.APPDENAME}/${context[this.APPLYDEKEY]}/usertasks/${data['taskDefinitionKey']}/ways`);
}
/**
* GetWFHistory接口方法(根据业务主键获取工作流程记录)
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof EntityService
*/
public async GetWFHistory(context: any = {},data: any = {}, isloading?: boolean):Promise<any> {
return Http.getInstance().get(`/${this.SYSTEMNAME}-app-${this.APPNAME}/${this.APPDENAME}/${context[this.APPLYDEKEY]}/process-instances/alls/history`);
}
/**
* WFSubmit接口方法
*
......
......@@ -752,8 +752,9 @@ export default class MainBase extends Vue implements ControlInterface {
keys.push(data.srfkey);
});
let _removeAction = keys.length > 1 ? 'removeBatch' : this.removeAction ;
let _keys = keys.length > 1 ? keys : keys[0] ;
const context:any = JSON.parse(JSON.stringify(this.context));
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ sysauthlog: keys.join(';') }),Object.assign({ sysauthlog: keys.join(';') },{viewparams:this.viewparams}), this.showBusyIndicator);
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ sysauthlog: _keys }),Object.assign({ sysauthlog: _keys },{viewparams:this.viewparams}), this.showBusyIndicator);
return new Promise((resolve: any, reject: any) => {
post.then((response: any) => {
if (!response || response.status !== 200) {
......
......@@ -932,7 +932,7 @@ export default class MainBase extends Vue implements ControlInterface {
*/
public print(){
let _this:any = this;
_this.$print({id:'form',popTitle:'主编辑表单'});
_this.$print({id:'syspermission_main',popTitle:'主编辑表单'});
}
/**
......
......@@ -652,8 +652,9 @@ export default class MainBase extends Vue implements ControlInterface {
keys.push(data.srfkey);
});
let _removeAction = keys.length > 1 ? 'removeBatch' : this.removeAction ;
let _keys = keys.length > 1 ? keys : keys[0] ;
const context:any = JSON.parse(JSON.stringify(this.context));
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ syspermission: keys.join(';') }),Object.assign({ syspermission: keys.join(';') },{viewparams:this.viewparams}), this.showBusyIndicator);
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ syspermission: _keys }),Object.assign({ syspermission: _keys },{viewparams:this.viewparams}), this.showBusyIndicator);
return new Promise((resolve: any, reject: any) => {
post.then((response: any) => {
if (!response || response.status !== 200) {
......
......@@ -1053,7 +1053,7 @@ export default class MainBase extends Vue implements ControlInterface {
*/
public print(){
let _this:any = this;
_this.$print({id:'form',popTitle:'主编辑表单'});
_this.$print({id:'sysrolepermission_main',popTitle:'主编辑表单'});
}
/**
......
......@@ -680,8 +680,9 @@ export default class MainBase extends Vue implements ControlInterface {
keys.push(data.srfkey);
});
let _removeAction = keys.length > 1 ? 'removeBatch' : this.removeAction ;
let _keys = keys.length > 1 ? keys : keys[0] ;
const context:any = JSON.parse(JSON.stringify(this.context));
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ sysrolepermission: keys.join(';') }),Object.assign({ sysrolepermission: keys.join(';') },{viewparams:this.viewparams}), this.showBusyIndicator);
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ sysrolepermission: _keys }),Object.assign({ sysrolepermission: _keys },{viewparams:this.viewparams}), this.showBusyIndicator);
return new Promise((resolve: any, reject: any) => {
post.then((response: any) => {
if (!response || response.status !== 200) {
......
......@@ -1063,7 +1063,7 @@ export default class MainBase extends Vue implements ControlInterface {
*/
public print(){
let _this:any = this;
_this.$print({id:'form',popTitle:'主编辑表单'});
_this.$print({id:'sysrole_main',popTitle:'主编辑表单'});
}
/**
......
......@@ -694,8 +694,9 @@ export default class MainBase extends Vue implements ControlInterface {
keys.push(data.srfkey);
});
let _removeAction = keys.length > 1 ? 'removeBatch' : this.removeAction ;
let _keys = keys.length > 1 ? keys : keys[0] ;
const context:any = JSON.parse(JSON.stringify(this.context));
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ sysrole: keys.join(';') }),Object.assign({ sysrole: keys.join(';') },{viewparams:this.viewparams}), this.showBusyIndicator);
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ sysrole: _keys }),Object.assign({ sysrole: _keys },{viewparams:this.viewparams}), this.showBusyIndicator);
return new Promise((resolve: any, reject: any) => {
post.then((response: any) => {
if (!response || response.status !== 200) {
......
......@@ -1066,7 +1066,7 @@ export default class MainBase extends Vue implements ControlInterface {
*/
public print(){
let _this:any = this;
_this.$print({id:'form',popTitle:'主编辑表单'});
_this.$print({id:'sysuserrole_main',popTitle:'主编辑表单'});
}
/**
......
......@@ -694,8 +694,9 @@ export default class MainBase extends Vue implements ControlInterface {
keys.push(data.srfkey);
});
let _removeAction = keys.length > 1 ? 'removeBatch' : this.removeAction ;
let _keys = keys.length > 1 ? keys : keys[0] ;
const context:any = JSON.parse(JSON.stringify(this.context));
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ sysuserrole: keys.join(';') }),Object.assign({ sysuserrole: keys.join(';') },{viewparams:this.viewparams}), this.showBusyIndicator);
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ sysuserrole: _keys }),Object.assign({ sysuserrole: _keys },{viewparams:this.viewparams}), this.showBusyIndicator);
return new Promise((resolve: any, reject: any) => {
post.then((response: any) => {
if (!response || response.status !== 200) {
......
......@@ -971,7 +971,7 @@ export default class MainBase extends Vue implements ControlInterface {
*/
public print(){
let _this:any = this;
_this.$print({id:'form',popTitle:'主编辑表单'});
_this.$print({id:'sysuser_main',popTitle:'主编辑表单'});
}
/**
......
......@@ -680,8 +680,9 @@ export default class MainBase extends Vue implements ControlInterface {
keys.push(data.srfkey);
});
let _removeAction = keys.length > 1 ? 'removeBatch' : this.removeAction ;
let _keys = keys.length > 1 ? keys : keys[0] ;
const context:any = JSON.parse(JSON.stringify(this.context));
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ sysuser: keys.join(';') }),Object.assign({ sysuser: keys.join(';') },{viewparams:this.viewparams}), this.showBusyIndicator);
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ sysuser: _keys }),Object.assign({ sysuser: _keys },{viewparams:this.viewparams}), this.showBusyIndicator);
return new Promise((resolve: any, reject: any) => {
post.then((response: any) => {
if (!response || response.status !== 200) {
......
......@@ -37,6 +37,11 @@
git clone -b master $para2 ibzuaa/
export NODE_OPTIONS=--max-old-space-size=4096
cd ibzuaa/
mvn clean package -Pweb
cd ibzuaa-app/ibzuaa-app-web
mvn -Pweb docker:build
mvn -Pweb docker:push
docker -H $para1 stack deploy --compose-file=src/main/docker/ibzuaa-app-web.yaml ibzlab-rt --with-registry-auth
</command>
</hudson.tasks.Shell>
</builders>
......
......@@ -9,6 +9,6 @@ CMD echo "The application will start in ${IBZ_SLEEP}s..." && \
sleep ${IBZ_SLEEP} && \
java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /ibzuaa-app-web.jar
EXPOSE 8080
EXPOSE 30002
ADD ibzuaa-app-web.jar /ibzuaa-app-web.jar
......@@ -3,9 +3,23 @@ services:
ibzuaa-app-web:
image: registry.cn-shanghai.aliyuncs.com/ibizsys/ibzuaa-app-web:latest
ports:
- "8080:8080"
- "30002:30002"
networks:
- agent_network
environment:
- SPRING_CLOUD_NACOS_DISCOVERY_IP=172.16.180.237
- SERVER_PORT=30002
- SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR=172.16.102.211:8848
- SPRING_REDIS_HOST=172.16.100.243
- SPRING_REDIS_PORT=6379
- SPRING_REDIS_DATABASE=0
- SPRING_DATASOURCE_USERNAME=a_A_5d9d78509
- SPRING_DATASOURCE_PASSWORD=@6dEfb3@
- SPRING_DATASOURCE_URL=jdbc:mysql://172.16.180.232:3306/a_A_5d9d78509?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true
- SPRING_DATASOURCE_DRIVER-CLASS-NAME=com.mysql.jdbc.Driver
- SPRING_DATASOURCE_DEFAULTSCHEMA=a_A_5d9d78509
- ABC=1
- DEC=2
deploy:
mode: replicated
replicas: 1
......
......@@ -67,6 +67,12 @@ public class SysAppMenuItemServiceImpl extends ServiceImpl<SysAppMenuItemMapper,
}
}
@Override
public boolean saveBatch(Collection<SysAppMenuItem> list) {
saveOrUpdateBatch(list,batchSize);
return true;
}
@Override
public void saveBatch(List<SysAppMenuItem> list) {
saveOrUpdateBatch(list,batchSize);
......
......@@ -130,6 +130,12 @@ public class SysAuthLogServiceImpl extends ServiceImpl<SysAuthLogMapper, SysAuth
}
}
@Override
public boolean saveBatch(Collection<SysAuthLog> list) {
saveOrUpdateBatch(list,batchSize);
return true;
}
@Override
public void saveBatch(List<SysAuthLog> list) {
saveOrUpdateBatch(list,batchSize);
......
......@@ -130,6 +130,12 @@ public class SysOperatorPrivServiceImpl extends ServiceImpl<SysOperatorPrivMappe
}
}
@Override
public boolean saveBatch(Collection<SysOperatorPriv> list) {
saveOrUpdateBatch(list,batchSize);
return true;
}
@Override
public void saveBatch(List<SysOperatorPriv> list) {
saveOrUpdateBatch(list,batchSize);
......
......@@ -116,6 +116,12 @@ public class SysPSSystemServiceImpl extends ServiceImpl<SysPSSystemMapper, SysPS
}
}
@Override
public boolean saveBatch(Collection<SysPSSystem> list) {
saveOrUpdateBatch(list,batchSize);
return true;
}
@Override
public void saveBatch(List<SysPSSystem> list) {
saveOrUpdateBatch(list,batchSize);
......
......@@ -70,6 +70,12 @@ public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper, S
}
}
@Override
public boolean saveBatch(Collection<SysPermission> list) {
saveOrUpdateBatch(list,batchSize);
return true;
}
@Override
public void saveBatch(List<SysPermission> list) {
saveOrUpdateBatch(list,batchSize);
......
......@@ -125,6 +125,13 @@ public class SysRolePermissionServiceImpl extends ServiceImpl<SysRolePermissionM
}
}
@Override
public boolean saveBatch(Collection<SysRolePermission> list) {
list.forEach(item->fillParentData(item));
saveOrUpdateBatch(list,batchSize);
return true;
}
@Override
public void saveBatch(List<SysRolePermission> list) {
list.forEach(item->fillParentData(item));
......
......@@ -73,6 +73,12 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
}
}
@Override
public boolean saveBatch(Collection<SysRole> list) {
saveOrUpdateBatch(list,batchSize);
return true;
}
@Override
public void saveBatch(List<SysRole> list) {
saveOrUpdateBatch(list,batchSize);
......
......@@ -81,6 +81,12 @@ public class SysUniResServiceImpl extends ServiceImpl<SysUniResMapper, SysUniRes
}
}
@Override
public boolean saveBatch(Collection<SysUniRes> list) {
saveOrUpdateBatch(list,batchSize);
return true;
}
@Override
public void saveBatch(List<SysUniRes> list) {
saveOrUpdateBatch(list,batchSize);
......
......@@ -141,6 +141,13 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
}
}
@Override
public boolean saveBatch(Collection<SysUserRole> list) {
list.forEach(item->fillParentData(item));
saveOrUpdateBatch(list,batchSize);
return true;
}
@Override
public void saveBatch(List<SysUserRole> list) {
list.forEach(item->fillParentData(item));
......
......@@ -117,6 +117,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
}
}
@Override
public boolean saveBatch(Collection<SysUser> list) {
saveOrUpdateBatch(list,batchSize);
return true;
}
@Override
public void saveBatch(List<SysUser> list) {
saveOrUpdateBatch(list,batchSize);
......
......@@ -183,7 +183,7 @@ public class DEFieldCacheMap {
Field field = DEFieldCacheMap.getField(clazz,fieldname);
if(field!=null) {
DEField deField=field.getAnnotation(DEField.class);
if(deField!=null&&deField.name()!=null)
if(deField!=null&& !StringUtils.isEmpty(deField.name()))
return deField.name();
}
return fieldname;
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册