From d1eb1ce1d2fcb0c76f5d3b1a6ae00bf3f263b2f1 Mon Sep 17 00:00:00 2001
From: fujunling <2984387807@qq.com>
Date: 星期五, 09 六月 2023 14:21:54 +0800
Subject: [PATCH] Merge branch 'master' of http://dev.vci-tech.com:1065/r/ubcs

---
 Source/UBCS-WEB/src/api/integration/sysInfo.js                                                                 |   34 ++++
 Source/UBCS-WEB/src/views/integration/applicationForm.vue                                                      |   42 ++++-
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemServiceImpl.java  |   58 ++++++-
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingSystemService.java          |    2 
 Source/UBCS-WEB/src/views/integration/systemInfo.vue                                                           |  224 ++++++++++++++++++++++++++++++++
 Source/UBCS-WEB/src/api/integration/application.js                                                             |   10 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/DockingManagementController.java |   14 +
 Source/UBCS-WEB/vue.config.js                                                                                  |    7 
 8 files changed, 357 insertions(+), 34 deletions(-)

diff --git a/Source/UBCS-WEB/src/api/integration/application.js b/Source/UBCS-WEB/src/api/integration/application.js
index d95b8a2..796aab9 100644
--- a/Source/UBCS-WEB/src/api/integration/application.js
+++ b/Source/UBCS-WEB/src/api/integration/application.js
@@ -7,4 +7,12 @@
       method: 'get',
       params: params
     })
-  }
\ No newline at end of file
+  }
+  // 鐢抽鍗曠姸鎬�
+export const queryApplyStat = (params) => {
+  return request({
+    url: '/api/ubcs-applyjtcodeservice/DockingPreApplyCode/queryApplyState',
+    method: 'get',
+    params: params
+  })
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/api/integration/sysInfo.js b/Source/UBCS-WEB/src/api/integration/sysInfo.js
new file mode 100644
index 0000000..83449bc
--- /dev/null
+++ b/Source/UBCS-WEB/src/api/integration/sysInfo.js
@@ -0,0 +1,34 @@
+import request from '@/router/axios';
+
+// 闆嗘垚绯荤粺淇℃伅绠$悊鍒楄〃
+export const getSysInfoList = (params) => {
+    return request({
+      url: '/api/ubcs-code/dockingManagement/gridSysIntBase',
+      method: 'get',
+      params: params
+    })
+  }
+  // 闆嗘垚绯荤粺淇℃伅绠$悊鏂板
+export const sysInfoAdd = (params) => {
+  return request({
+    url: '/api/ubcs-code/dockingManagement/addSave',
+    method: 'post',
+    data: params
+  })
+}
+ // 闆嗘垚绯荤粺淇℃伅绠$悊鏂板
+ export const sysInfoEdit = (params) => {
+    return request({
+      url: '/api/ubcs-code/dockingManagement/editSave',
+      method: 'put',
+      data: params
+    })
+  }
+   // 闆嗘垚绯荤粺淇℃伅绠$悊鏂板
+export const sysInfoDel = (params) => {
+    return request({
+      url: '/api/ubcs-code/dockingManagement/deleteDataById',
+      method: 'delete',
+      params: params
+    })
+  }
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/views/integration/applicationForm.vue b/Source/UBCS-WEB/src/views/integration/applicationForm.vue
index 7a3c48b..db577fa 100644
--- a/Source/UBCS-WEB/src/views/integration/applicationForm.vue
+++ b/Source/UBCS-WEB/src/views/integration/applicationForm.vue
@@ -2,7 +2,8 @@
     <basic-container>
         <avue-crud :table-loading="loading" :data="data" :option="option" :search.sync="searchParam" :page.sync="page"
             ref="crud" @refresh-change="getDataList" @search-change="handleSearch" @search-reset="handleReset"
-            @size-change="handleSizePage" @current-change="handleCurrentPage" @on-load="getDataList">
+            @size-change="handleSizePage" @current-change="handleCurrentPage" @on-load="getDataList"
+            @selection-change="selectionChange" @row-click="handleRowClick">
             <template slot="menuLeft">
                 <el-button icon="el-icon-document" size="small" type="primary" @click="handleStatus">闆嗗洟鐢宠鐘舵��
                 </el-button>
@@ -12,7 +13,7 @@
 </template>
 
 <script>
-import { getList } from '@/api/integration/application.js'
+import { getList, queryApplyStat } from '@/api/integration/application.js'
 import { dateFormat } from '@/util/date.js'
 export default {
     data() {
@@ -25,6 +26,7 @@
                 total: 0
             },
             searchParam: {},
+            stateParam: {},
             option: {
                 height: "auto",
                 index: true,
@@ -33,7 +35,8 @@
                 columnBtn: false,
                 searchMenuSpan: 8,
                 highlightCurrentRow: true,
-                menu:false,
+                menu: false,
+                selection: true,
                 column: [
                     {
                         label: '鐢宠鍗曞彿',
@@ -77,9 +80,6 @@
                         prop: 'lastModifyTime',
                         type: 'datetime',
                         search: true,
-                        formatter: () => {
-
-                        }
                     }, {
                         label: '杩斿洖鏍囪瘑',
                         width: 100,
@@ -100,8 +100,20 @@
         }
     },
     methods: {
-        handleStatus() {
-
+        async handleStatus() {
+            const { oids } = this.stateParam
+            if (this.$utilFunc.isEmpty(oids)) {
+                this.$message({
+                    type: "error",
+                    message: "璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�!"
+                })
+            } else {
+                console.log(this.stateParam)
+                const response = await queryApplyStat(this.stateParam)
+                if (response.status === 200) {
+                    console.log(response)
+                }
+            }
         },
         async getDataList() {
             this.loading = true
@@ -140,7 +152,19 @@
             this.page.currentPage = 1
             this.getDataList()
             done()
-        }
+        },
+        selectionChange(list) {
+            console.log(list)
+            let newData = list.map(item => {
+                const { dataOid } = item
+                return dataOid
+            })
+            this.stateParam = { oids: newData.toString() }
+            console.log(newData)
+        },
+        handleRowClick(row) {
+            this.$refs.crud.toggleRowSelection(row, true)
+        },
     }
 }
 </script>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/views/integration/systemInfo.vue b/Source/UBCS-WEB/src/views/integration/systemInfo.vue
new file mode 100644
index 0000000..f1f2b78
--- /dev/null
+++ b/Source/UBCS-WEB/src/views/integration/systemInfo.vue
@@ -0,0 +1,224 @@
+<template>
+    <basic-container>
+        <avue-crud ref="crud" :table-loading="loading" :data="data" :option="option" :page.sync="page" :search.sync="search"
+            @on-load="getDataList" @row-save="handleSave" @row-del="handleDelete" @row-update="handleEdit"
+            @refresh-change="handleRefresh" @size-change="handleSizePage" @current-change="handleCurrentPage"
+            @selection-change="selectionChange" @row-click="handleRowClick">
+            <template slot="menuLeft">
+                <el-button icon="el-icon-search" size="small" type="primary" @click="handleStatus">鏌� 璇�
+                </el-button>
+                <el-button icon="el-icon-delete" size="small" type="danger" @click="handleDeleteByIds">鍒� 闄�
+                </el-button>
+            </template>
+            <template slot="search" slot-scope="{row,size}">
+                <el-select v-model="selectValue" size="small" @change="handleSelect">
+                    <el-option v-for="item in selectOption" :key="item.value" :label="item.label" :value="item.value">
+                    </el-option>
+                </el-select>
+                <el-input :placeholder="`璇疯緭鍏�${selectValue === 'id' ? '绯荤粺缂栧彿' : '绯荤粺鍚嶇О'}骞舵寜鍥炶溅鏌ヨ`" :size="size"
+                    style="width:300px;margin-left: 10px;" v-model="search[selectValue]" clearable
+                    @keyup.enter.native="handleEnter" @clear="handleClear"></el-input>
+            </template>
+        </avue-crud>
+    </basic-container>
+</template>
+<script>
+import { getSysInfoList, sysInfoAdd, sysInfoEdit, sysInfoDel } from '@/api/integration/sysInfo.js'
+export default {
+    data() {
+        return {
+            loading: false,
+            page: {
+                currentPage: 1,
+                pageSize: 10,
+                total: 0
+            },
+            selectOption: [{
+                value: 'id',
+                label: '绯荤粺缂栧彿'
+            }, {
+                value: 'name',
+                label: '绯荤粺鍚嶇О'
+            }],
+            selectValue: 'id',
+            search: {},
+            delIds: [],
+            data: [],
+            option: {
+                height: "auto",
+                border: true,
+                align: 'center',
+                menuAlign: 'center',
+                index: true,
+                searchMenuSpan: 8,
+                searchBtn: false,
+                emptyBtn: false,
+                columnBtn: false,
+                defaultSort: {
+                    prop: 'id,name',
+                    order: 'descending'
+                },
+                selection: true,
+                column: [
+                    {
+                        label: '绯荤粺缂栧彿',
+                        prop: 'id',
+                        sortable: true,
+                        rules: [{
+                            required: true,
+                            message: '绯荤粺缂栧彿涓嶈兘涓虹┖',
+                            trigger: 'blur'
+                        }]
+                    }, {
+                        label: '绯荤粺鍚嶇О',
+                        prop: 'name',
+                        sortable: true,
+                        rules: [{
+                            required: true,
+                            message: '绯荤粺鍚嶇О涓嶈兘涓虹┖',
+                            trigger: 'blur'
+                        }]
+                    },
+                    {
+                        label: '绯荤粺鎻忚堪',
+                        prop: 'description',
+                        type: 'textarea'
+                    }
+                ]
+            },
+        }
+    },
+    methods: {
+        // 鑾峰彇鍒楄〃
+        async getDataList() {
+            this.loading = true
+            console.log(this.search)
+            const { pageSize, currentPage } = this.page
+            let param = { size: pageSize, current: currentPage }
+            const response = await getSysInfoList({ ...param, ...this.search })
+            if (response.status === 200) {
+                console.log(response)
+                this.loading = false
+                const data = response.data.data
+                this.data = data.records
+                this.page.total = data.total
+            } else this.loading = false
+        },
+        // 鏂板
+        async handleSave(row, done, loading) {
+            const response = await sysInfoAdd(row)
+            if (response.status === 200) {
+                loading()
+                this.$message({
+                    type: 'success',
+                    message: '鏂板鏁版嵁鎴愬姛锛�'
+                })
+                done()
+                this.$refs.crud.refreshTable()
+                this.getDataList()
+            }
+        },
+        // 缂栬緫
+        async handleEdit(row, index, done, loading) {
+            console.log(row)
+            const { oid, id, name, description } = row
+            const response = await sysInfoEdit({ oid, id, name, description })
+            if (response.status === 200) {
+                loading()
+                this.$message({
+                    type: 'success',
+                    message: '淇敼鏁版嵁鎴愬姛锛�'
+                })
+                done()
+                this.getDataList()
+            }
+        },
+        // 鍒犻櫎鍗曟潯
+        handleDelete(row) {
+            const { oid } = row
+            this.deleteSysInfo({ oids: oid })
+        },
+        // 澶氭潯鏁版嵁鍒犻櫎
+        handleDeleteByIds() {
+            const { oids } = this.delIds
+            if (this.$utilFunc.isEmpty(oids)) {
+                this.$message({
+                    type: "error",
+                    message: "璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�!"
+                })
+            } else {
+                this.deleteSysInfo(this.delIds)
+            }
+        },
+        // 鍒犻櫎鎺ュ彛
+        deleteSysInfo(param) {
+            this.$confirm('鏄惁纭畾鍒犻櫎閫夋嫨鐨勯泦鎴愮郴缁�?', '鎻愮ず', {
+                confirmButtonText: '纭畾',
+                cancelButtonText: '鍙栨秷',
+                type: 'warning'
+            }).then(async () => {
+                const response = await sysInfoDel(param)
+                if (response.status === 200) {
+                    console.log(response)
+                    this.$message({
+                        type: 'success',
+                        message: '鍒犻櫎鎴愬姛!'
+                    });
+                    this.getDataList()
+                }
+            })
+        },
+        // 閫夋嫨妗嗗唴瀹归�夋嫨鍚�
+        handleSelect(event) {
+            this.selectValue = event
+            if (this.selectValue === 'id') {
+                this.search['name'] = ''
+                delete this.search['name']
+            } else {
+                this.search['id'] = ''
+                delete this.search['id']
+            }
+        },
+        // enter鎼滅储
+        handleEnter() {
+            if (this.search[this.selectValue] === '') return
+            else this.getDataList()
+
+        },
+        // 杈撳叆妗嗘竻绌�
+        handleClear() {
+            this.search = {}
+            this.getDataList()
+        },
+        // 鍒锋柊鎸夐挳
+        handleRefresh() {
+            this.getDataList()
+        },
+        handleSizePage(event) {
+            this.page.pageSize = event
+        },
+        handleCurrentPage(event) {
+            this.page.currentPage = event
+        },
+        // 鐐瑰嚮閫夋嫨
+        handleRowClick(row) {
+            this.$refs.crud.toggleRowSelection(row, true)
+        },
+        // 澶氶��
+        selectionChange(list) {
+            console.log(list)
+            let newData = list.map(item => {
+                const { oid } = item
+                return oid
+            })
+            this.delIds = { oids: newData.toString() }
+            console.log(this.delIds)
+        },
+    }
+}
+</script>
+<style lang="scss" scoped>
+::v-deep(.avue-crud .el-select) {
+    width: 100px !important;
+}
+</style>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/vue.config.js b/Source/UBCS-WEB/vue.config.js
index 98c3012..18858ab 100644
--- a/Source/UBCS-WEB/vue.config.js
+++ b/Source/UBCS-WEB/vue.config.js
@@ -26,16 +26,11 @@
     proxy: {
       '/api': {
         //鏈湴鏈嶅姟鎺ュ彛鍦板潃
-         target: 'http://localhost:37000',
         //  target: 'http://localhost:37000',
         //target: 'http://192.168.1.51:37000',
-        //target: 'http://192.168.3.7:37000',
-        // target: 'http://dev.vci-tech.com:37000',
-        // target: 'http://192.168.1.51:37000/',
-        //   target: 'http://localhost:37000',
         // target: 'http://192.168.1.63:37000',
         //target: 'http://192.168.3.7:37000',
-        // target: 'http://dev.vci-tech.com:37000',
+        target: 'http://dev.vci-tech.com:37000',
         //target: 'http://192.168.1.51:37000/',
         //杩滅▼婕旂ず鏈嶅姟鍦板潃,鍙敤浜庣洿鎺ュ惎鍔ㄩ」鐩�
         // target: 'https://saber.bladex.vip/api',
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/DockingManagementController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/DockingManagementController.java
index 07131a6..e3e0864 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/DockingManagementController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/DockingManagementController.java
@@ -14,6 +14,7 @@
 import com.vci.ubcs.code.wrapper.CodeRuleWrapper;
 import com.vci.ubcs.code.wrapper.DockingSystemConfigWrapper;
 import com.vci.ubcs.code.wrapper.DockingSystemWrapper;
+import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -84,12 +85,17 @@
 
 	/**
 	 * 鍒犻櫎绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
-	 * @param dockingSystemDTO 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @param oids 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
 	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
 	 */
-	@DeleteMapping( "/deleteData")
-	public R delSystemData( DockingSystemDTO dockingSystemDTO) {
-		return R.status(dockingSystemService.delSystemData(dockingSystemDTO));
+	@DeleteMapping( "/deleteDataById")
+	public R deleteDataById( String oids) {
+		try {
+			return R.status(dockingSystemService.deleteDataById(oids));
+		}catch (VciBaseException e){
+			R.fail(e.getMessage());
+		}
+		return R.success("鎿嶄綔鎴愬姛");
 	}
 	/**
 	 * 绯荤粺闆嗘垚鍩虹淇℃伅鍒楄〃
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingSystemService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingSystemService.java
index b53618f..f9ff701 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingSystemService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingSystemService.java
@@ -26,5 +26,5 @@
 	DockingSystemVO editSave(DockingSystemDTO dockingSystemDTO);
 
 
-	boolean delSystemData(DockingSystemDTO dockingSystemDTO);
+	boolean deleteDataById(String oids);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemServiceImpl.java
index 46a17e6..f71967b 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemServiceImpl.java
@@ -1,14 +1,18 @@
 package com.vci.ubcs.code.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
 import com.vci.ubcs.code.dto.DockingSystemDTO;
 import com.vci.ubcs.code.entity.CodeRule;
 import com.vci.ubcs.code.entity.DockingSystem;
+import com.vci.ubcs.code.entity.DockingSystemConfig;
+import com.vci.ubcs.code.mapper.DockingSystemConfigMapper;
 import com.vci.ubcs.code.mapper.DockingSystemMapper;
 import com.vci.ubcs.code.service.IDockingSystemService;
 import com.vci.ubcs.code.vo.pagemodel.DockingSystemVO;
 import com.vci.ubcs.code.wrapper.DockingSystemWrapper;
+import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
 import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
@@ -17,8 +21,10 @@
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING;
 import static com.vci.ubcs.code.constant.MdmLifeCycleConstant.CODE_RULE_LC;
@@ -35,6 +41,12 @@
 	 */
 	@Autowired(required = false)
 	private  DockingSystemMapper dockingSystemMapper;
+
+	/***
+	 * 闆嗘垚绯荤粺绠$悊鏈嶅姟
+	 */
+	@Autowired(required = false)
+	private DockingSystemConfigMapper dockingSystemConfigMapper;
 
 	/**
 	 * 瀵硅薄鐨勬搷浣�
@@ -69,20 +81,40 @@
 		return DockingSystemWrapper.build().entityVO(dockingSystem);
 	}
 
+	/***
+	 * 鏍规嵁绯荤粺涓婚敭鍒犻櫎绯荤粺鍚嶇О
+	 * @param oids
+	 * @return
+	 * @throws VciBaseException
+	 */
 	@Override
-	public boolean delSystemData(DockingSystemDTO dockingSystemDTO) {
-		VciBaseUtil.alertNotNull(dockingSystemDTO,"绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞�",dockingSystemDTO.getOid(),"绯荤粺闆嗘垚鐨勭郴缁熶俊鎭殑涓婚敭");
-		/*DockingSystem dockingSystem = dockingSystemMapper.selectById(dockingSystemDTO.getOid());
-		BaseResult baseResult = checkIsCanDeleteForDO(sysIntBaseDTO,sysIntBaseDO);
-		if(baseResult.isSuccess()) {
+	public boolean deleteDataById(String oids) throws VciBaseException {
+		String message="";
+		try {
+			VciBaseUtil.alertNotNull(oids, "绯荤粺闆嗘垚鐨勭郴缁熶俊鎭殑涓婚敭");
+			List<DockingSystem> dockingSystemList = dockingSystemMapper.selectBatchIds(VciBaseUtil.str2List(oids));
+			Map<String/**绯荤粺oid**/, String/**绯荤粺鍚嶇О**/> systemNameMap = dockingSystemList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t.getName(),(o1, o2)->o2));
+			List<DockingSystemConfig> dockingSystemConfigList = dockingSystemConfigMapper.selectList(Wrappers.<DockingSystemConfig>query().lambda().in(DockingSystemConfig::getSourceSystemOid, VciBaseUtil.str2List(oids)));
+			Set<String> systemOidList=new HashSet<>();
+			Map<String,String> errorMap = new HashMap<>();
+			if (!CollectionUtils.isEmpty(dockingSystemConfigList)) {
+				dockingSystemConfigList.stream().forEach(dockingSystemConfig -> {
+					if(!systemOidList.contains(dockingSystemConfig.getSourceSystemOid())&&
+						systemNameMap.containsKey(dockingSystemConfig.getSourceSystemOid())){
+						String systemName=systemNameMap.get(dockingSystemConfig.getSourceSystemOid());
+						errorMap.put("error",errorMap.getOrDefault("error","") + ";"+systemName);
+					}
+					systemOidList.add(dockingSystemConfig.getSourceSystemOid());
+				});
+			}
+			if(errorMap.size()>0){
+				throw  new Throwable(errorMap.getOrDefault("error",""));
+			}
+			return	dockingSystemMapper.deleteBatchIds(VciBaseUtil.str2List(oids))>0;
+		}catch (Throwable e){
+			e.printStackTrace();
+			throw  new VciBaseException(e.getMessage());
 
-		}else{
-			return baseResult;
 		}
-		//鎵ц鍒犻櫎鎿嶄綔
-		BatchCBO batchCBO = sysIntBaseMapper.deleteByPrimaryKey(sysIntBaseDO.getOid());
-		return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-*/
-		return false;
 	}
 }

--
Gitblit v1.9.3