From 2d15fa034660d03a84c1d51928ab28b9219f16f8 Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期一, 30 六月 2025 09:42:04 +0800 Subject: [PATCH] 最新版本541200007 --- server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CompanyDocuments.java | 91 +++++ server/db/business.company_documents.permissions.sql | 6 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyDocumentsServiceImpl.java | 158 +++++++++ admin/src/components/common/uploadProgress.vue | 211 ++++++++++++ admin/src/components/business/OperaCompanyDocumentsWindow.vue | 71 ++++ admin/src/views/business/inoutRecord.vue | 5 admin/src/api/business/companyDocuments.js | 32 + server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java | 4 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyDocumentsService.java | 100 +++++ server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyDocumentsController.java | 90 +++++ server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CompanyDocumentsMapper.java | 12 admin/src/views/business/companyDocuments.vue | 102 ++++++ server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyDocumentsCloudController.java | 93 +++++ 13 files changed, 970 insertions(+), 5 deletions(-) diff --git a/admin/src/api/business/companyDocuments.js b/admin/src/api/business/companyDocuments.js new file mode 100644 index 0000000..39b3cd6 --- /dev/null +++ b/admin/src/api/business/companyDocuments.js @@ -0,0 +1,32 @@ +import request from '../../utils/request' + +// 鏌ヨ +export function fetchList (data) { + return request.post('/business/companyDocuments/page', data, { + trim: true + }) +} + +// 鍒涘缓 +export function create (data) { + return request.post('/business/companyDocuments/create', data) +} + +// 淇敼 +export function updateById (data) { + return request.post('/business/companyDocuments/updateById', data) +} + +// 鍒犻櫎 +export function deleteById (id) { + return request.get(`/business/companyDocuments/delete/${id}`) +} + +// 鎵归噺鍒犻櫎 +export function deleteByIdInBatch (ids) { + return request.get('/business/companyDocuments/delete/batch', { + params: { + ids + } + }) +} diff --git a/admin/src/components/business/OperaCompanyDocumentsWindow.vue b/admin/src/components/business/OperaCompanyDocumentsWindow.vue new file mode 100644 index 0000000..7e70f3a --- /dev/null +++ b/admin/src/components/business/OperaCompanyDocumentsWindow.vue @@ -0,0 +1,71 @@ +<template> + <GlobalWindow + :title="title" + :visible.sync="visible" + :confirm-working="isWorking" + @confirm="confirm" + > + <el-form :model="form" ref="form" :rules="rules"> + <el-form-item label="璧勬枡鍚嶇О" prop="name"> + <el-input v-model="form.name" placeholder="璇疯緭鍏ヨ祫鏂欏悕绉�" v-trim/> + </el-form-item> + <el-form-item label="璧勬枡绫诲瀷" prop="categoryId"> + <el-input v-model="form.categoryId" placeholder="璇疯緭鍏ヨ矗浠婚儴闂ㄧ紪鐮�(鍏宠仈company)" v-trim/> + </el-form-item> + <el-form-item label="璐d换閮ㄩ棬" prop="companyId"> + <el-input v-model="form.companyId" placeholder="璇疯緭鍏ヨ矗浠婚儴闂ㄧ紪鐮�(鍏宠仈company)" v-trim/> + </el-form-item> + <el-form-item label="鎺掑簭鐮�" prop="sortnum"> + <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/> + </el-form-item> + <el-form-item label="闄勪欢鍦板潃" prop="fileurl"> + <el-input v-model="form.fileurl" placeholder="璇疯緭鍏ラ檮浠跺湴鍧�" v-trim/> + </el-form-item> + <el-form-item label="闄勪欢鎻忚堪" prop="content"> + <el-input type="textarea" v-model="form.content" placeholder="璇疯緭鍏ラ檮浠舵弿杩�" v-trim/> + </el-form-item> + </el-form> + </GlobalWindow> +</template> + +<script> +import BaseOpera from '@/components/base/BaseOpera' +import GlobalWindow from '@/components/common/GlobalWindow' +export default { + name: 'OperaCompanyDocumentsWindow', + extends: BaseOpera, + components: { GlobalWindow }, + data () { + return { + // 琛ㄥ崟鏁版嵁 + form: { + id: null, + creator: '', + createDate: '', + editor: '', + editDate: '', + isdeleted: '', + name: '', + remark: '', + status: '', + sortnum: '', + fileurl: '', + fileName: '', + fileSize: '', + categoryId: '', + companyId: '', + content: '' + }, + // 楠岃瘉瑙勫垯 + rules: { + } + } + }, + created () { + this.config({ + api: '/business/companyDocuments', + 'field.id': 'id' + }) + } +} +</script> diff --git a/admin/src/components/common/uploadProgress.vue b/admin/src/components/common/uploadProgress.vue new file mode 100644 index 0000000..cb4bc39 --- /dev/null +++ b/admin/src/components/common/uploadProgress.vue @@ -0,0 +1,211 @@ +<template> + <div class="file"> + <div class="file_list"> + <div class="file_list_item" :style="{width: width, height: height}" v-for="(item, index) in list" :key="index"> + <div class="dele" @click="deleItem(index)"> + <i class="el-icon-close"></i> + </div> + <img :src="item.url" v-if="fileType(item.url) === 'img'" /> + <video controls autoplay :src="item.url" v-else></video> + </div> + <div class="file_list_item" :style="{width: width, height: height, cursor: 'pointer'}" @click="$refs.file.click()"> + <i class="el-icon-plus"></i> + </div> + </div> + <div style="display: block;"> + <input type="file" ref="file" :accept="accept" @change="getFile" /> +<!-- <progress id="progressBar" value="0" max="100" ></progress>--> +<!-- <span id="status">0%</span>--> + </div> + </div> +</template> + +<script> +import axios from 'axios' +export default { + props: { + width: { + type: String, + default: '90px' + }, + height: { + type: String, + default: '90px' + }, + list: { + type: Array, + // eslint-disable-next-line vue/require-valid-default-prop + default: [] + }, + accept: { + type: String, + default: '' + }, + folder: { + type: String, + default: '' + } + }, + data () { + return { + loading:null, + uuid: null, + timer: null, + message:'寮�濮嬩笂浼�', + uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload', + uploadProgressUrl: process.env.VUE_APP_API_PREFIX + '/public' + } + }, + + methods: { + fileType (url) { + if (url.indexOf('.mp4') !== -1) { + return 'video' + } else { + return 'img' + } + }, + getFile (e) { + if (e.target && e.target.files.length > 0) { + var that = this + const config = { + onUploadProgress: function (progressEvent) { + console.log(progressEvent) + const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total) + // document.getElementById('progressBar').value = percentCompleted + // document.getElementById('status').textContent = '鍑嗗' + percentCompleted + '%' + that.loading.setText('涓婁紶涓�� ' + percentCompleted + ' 銆�%') + }, + headers: { + 'Content-Type': 'multipart/form-data' + } + } + this.loading = this.$loading({ + lock: true, + text: '涓婁紶涓紝璇风瓑寰�', + spinner: 'el-icon-loading', + customClass: 'loadingclz', + background: 'rgba(0, 0, 0, 0.7)' + }) + this.$emit('loading') + const formdate = new FormData() + this.uuid = this.generateUUID().replaceAll('-', '') + formdate.append('file', e.target.files[0]) + formdate.append('folder', this.folder) + formdate.append('uuid', this.uuid) + axios.post(this.uploadImgUrl, formdate, config) + .then(res => { + if(res.data.data == null || res.data.data.imgaddr == null){ + this.$message.error('鏁版嵁涓婁紶澶辫触锛�') + }else{ + this.$emit('success', res.data.data) + } + }) + .catch(e => { + if(this.timer){ + clearInterval(this.timer) + } + this.$message.error(e) + }) + .finally(() => { + if(this.timer){ + clearInterval(this.timer) + } + that.loading.close() + this.$refs.file.value = null + }) + this.startProgress() + } + }, + startProgress () { + }, + generateUUID () { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + const r = (Math.random() * 16) | 0 + const v = c === 'x' ? r : (r & 0x3) | 0x8 + return v.toString(16) + }) + }, + deleItem (index) { + this.$emit('dele', index) + } + } +} +</script> +<style> + .loadingclz { + .el-loading-text{ + font-size: 18px !important; + color: #2977f8 !important; + } + .el-loading-spinner i { + color: #2977f8 !important; + } + } +</style> +<style lang="scss" scoped> + .file { + /*width: 100%;*/ + /*height: 90px;*/ + padding: 10px; + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-between; + position: relative; + margin-bottom: 10px; + /* margin-right: 20px; */ + /* margin: 10px 0;*/ + input { + opacity: 0; + } + .file_list { + width: 100%; + height: 100%; + display: flex; + align-items: center; + flex-wrap: wrap; + .file_list_item { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + overflow: hidden; + border-radius: 5px; + border: 1px solid #d5d5d5; + margin-left: 15px; + position: relative; + &:first-child { + margin: 0 !important; + } + .dele { + position: absolute; + right: 0; + top: 0; + width: 20px; + height: 20px; + background: red; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + .el-icon-close { + color: #ffffff; + font-size: 19px; + } + } + .el-icon-plus { + font-size: 30px; + color: black; + } + img { + width: 100%; + } + video { + width: 100%; + height: 100%; + } + } + } + } +</style> diff --git a/admin/src/views/business/companyDocuments.vue b/admin/src/views/business/companyDocuments.vue new file mode 100644 index 0000000..9525c11 --- /dev/null +++ b/admin/src/views/business/companyDocuments.vue @@ -0,0 +1,102 @@ +<template> + <TableLayout :permissions="['business:companydocuments:query']"> + <!-- 鎼滅储琛ㄥ崟 --> + <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> + <el-form-item label="璧勬枡鍚嶇О" prop="name"> + <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ヨ祫鏂欏悕绉�" @keypress.enter.native="search"></el-input> + </el-form-item> + <el-form-item label="绠$悊閮ㄩ棬" prop="companyName"> + <el-input v-model="searchForm.companyName" clearable placeholder="璇疯緭鍏ョ鐞嗛儴闂�" @keypress.enter.native="search"></el-input> + </el-form-item> + <el-form-item label="璧勬枡绫诲瀷" prop="categoryId"> + <el-input v-model="searchForm.categoryId" clearable placeholder="璇烽�夋嫨璧勬枡绫诲瀷" @keypress.enter.native="search"></el-input> + </el-form-item> + <section> + <el-button type="primary" @click="search">鎼滅储</el-button> + <el-button @click="reset">閲嶇疆</el-button> + </section> + </el-form> + <!-- 琛ㄦ牸鍜屽垎椤� --> + <template v-slot:table-wrap> + <ul class="toolbar" v-permissions="['business:companydocuments:create', 'business:companydocuments:delete']"> + <li><el-button type="primary" @click="$refs.operaCompanyDocumentsWindow.open('鏂板璧勬枡')" icon="el-icon-plus" v-permissions="['business:companydocuments:create']">鏂板缓</el-button></li> + <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:companydocuments:delete']">鍒犻櫎</el-button></li> + </ul> + <el-table + v-loading="isWorking.search" + :data="tableData.list" + stripe + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55"></el-table-column> + <el-table-column prop="name" label="璧勬枡鍚嶇О" min-width="150px"></el-table-column> + <el-table-column prop="categoryName" label="璧勬枡绫诲瀷" min-width="100px"></el-table-column> + <el-table-column prop="content" label="闄勪欢鎻忚堪" min-width="200px"></el-table-column> + <el-table-column prop="companyName" label="绠$悊閮ㄩ棬" min-width="150px"></el-table-column> + <el-table-column prop="sortnum" label="鎺掑簭鐮�(鍊掑簭)" min-width="100px"></el-table-column> + <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="150px"></el-table-column> + <el-table-column prop="creatorName" label="鍒涘缓浜�" min-width="100px"></el-table-column> +<!-- <el-table-column prop="fileName" label="闄勪欢鍚嶇О" min-width="100px"></el-table-column> + <el-table-column prop="fileSize" label="闄勪欢澶у皬" min-width="100px"></el-table-column>--> + <el-table-column + v-if="containPermissions(['business:companydocuments:update', 'business:companydocuments:delete'])" + label="鎿嶄綔" + min-width="120" + fixed="right" + > + <template slot-scope="{row}"> + <el-button type="text" @click="$refs.operaCompanyDocumentsWindow.open('缂栬緫璧勬枡', row)" icon="el-icon-edit" v-permissions="['business:companydocuments:update']">缂栬緫</el-button> + <el-button type="text" v-if="row.fileurlFull" @click="download(row)" icon="el-icon-download" v-permissions="['business:companydocuments:download']">涓嬭浇</el-button> + <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:companydocuments:delete']">鍒犻櫎</el-button> + </template> + </el-table-column> + </el-table> + <pagination + @size-change="handleSizeChange" + @current-change="handlePageChange" + :pagination="tableData.pagination" + > + </pagination> + </template> + <!-- 鏂板缓/淇敼 --> + <OperaCompanyDocumentsWindow ref="operaCompanyDocumentsWindow" @success="handlePageChange"/> + </TableLayout> +</template> + +<script> +import BaseTable from '@/components/base/BaseTable' +import TableLayout from '@/layouts/TableLayout' +import Pagination from '@/components/common/Pagination' +import OperaCompanyDocumentsWindow from '@/components/business/OperaCompanyDocumentsWindow' +export default { + name: 'CompanyDocuments', + extends: BaseTable, + components: { TableLayout, Pagination, OperaCompanyDocumentsWindow }, + data () { + return { + // 鎼滅储 + searchForm: { + name: '', + categoryId: '', + companyId: '' + } + } + }, + created () { + this.config({ + module: '璧勬枡绠$悊', + api: '/business/companyDocuments', + 'field.id': 'id', + 'field.main': 'id' + }) + this.search() + }, + methods:{ + download(row){ + if(row.fileurlFull){ + window.open(row.fileurlFull) + } + } + } +} +</script> diff --git a/admin/src/views/business/inoutRecord.vue b/admin/src/views/business/inoutRecord.vue index c976ee6..6b0c029 100644 --- a/admin/src/views/business/inoutRecord.vue +++ b/admin/src/views/business/inoutRecord.vue @@ -68,8 +68,7 @@ @click="exportExcel">瀵煎嚭</el-button> </li> </ul> - <el-table - :height="tableHeightNew" + <el-table :height="tableHeightNew+10" v-loading="isWorking.search" :data="tableData.list" stripe @@ -141,7 +140,7 @@ export default { name: 'InoutRecord', extends: BaseTable, - components: { TableLayout, Pagination, OperaInoutRecordWindow }, + components: { TableLayout, Pagination, OperaInoutRecordWindow }, data () { return { // 鎼滅储 diff --git a/server/db/business.company_documents.permissions.sql b/server/db/business.company_documents.permissions.sql new file mode 100644 index 0000000..ccc3ff1 --- /dev/null +++ b/server/db/business.company_documents.permissions.sql @@ -0,0 +1,6 @@ +INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:companydocuments:create', '鏂板缓闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); +INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:companydocuments:delete', '鍒犻櫎闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); +INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:companydocuments:update', '淇敼闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); +INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:companydocuments:query', '鏌ヨ闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); +INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:companydocuments:exportExcel', '瀵煎嚭闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); + diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyDocumentsController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyDocumentsController.java new file mode 100644 index 0000000..08c2e9a --- /dev/null +++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyDocumentsController.java @@ -0,0 +1,90 @@ +package com.doumee.api.business; + +import com.doumee.api.BaseController; +import com.doumee.core.annotation.excel.ExcelExporter; +import com.doumee.core.annotation.pr.PreventRepeat; +import com.doumee.dao.business.model.CompanyDocuments; +import com.doumee.service.business.CompanyDocumentsService; +import com.doumee.service.business.third.model.ApiResponse; +import com.doumee.service.business.third.model.PageData; +import com.doumee.service.business.third.model.PageWrap; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author 姹熻箘韫� + * @date 2025/06/27 16:01 + */ +@Api(tags = "闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛�") +@RestController +@RequestMapping("/business/companyDocuments") +public class CompanyDocumentsController extends BaseController { + + @Autowired + private CompanyDocumentsService companyDocumentsService; + + @PreventRepeat + @ApiOperation("鏂板缓") + @PostMapping("/create") + @RequiresPermissions("business:companydocuments:create") + public ApiResponse create(@RequestBody CompanyDocuments companyDocuments) { + return ApiResponse.success(companyDocumentsService.create(companyDocuments)); + } + + @ApiOperation("鏍规嵁ID鍒犻櫎") + @GetMapping("/delete/{id}") + @RequiresPermissions("business:companydocuments:delete") + public ApiResponse deleteById(@PathVariable Integer id) { + companyDocumentsService.deleteById(id,this.getLoginUser(null)); + return ApiResponse.success(null); + } + + @ApiOperation("鎵归噺鍒犻櫎") + @GetMapping("/delete/batch") + @RequiresPermissions("business:companydocuments:delete") + public ApiResponse deleteByIdInBatch(@RequestParam String ids) { + String [] idArray = ids.split(","); + List<Integer> idList = new ArrayList<>(); + for (String id : idArray) { + idList.add(Integer.valueOf(id)); + } + companyDocumentsService.deleteByIdInBatch(idList,this.getLoginUser(null)); + return ApiResponse.success(null); + } + + @ApiOperation("鏍规嵁ID淇敼") + @PostMapping("/updateById") + @RequiresPermissions("business:companydocuments:update") + public ApiResponse updateById(@RequestBody CompanyDocuments companyDocuments) { + companyDocumentsService.updateById(companyDocuments); + return ApiResponse.success(null); + } + + @ApiOperation("鍒嗛〉鏌ヨ") + @PostMapping("/page") + @RequiresPermissions("business:companydocuments:query") + public ApiResponse<PageData<CompanyDocuments>> findPage (@RequestBody PageWrap<CompanyDocuments> pageWrap) { + return ApiResponse.success(companyDocumentsService.findPage(pageWrap)); + } + + @ApiOperation("瀵煎嚭Excel") + @PostMapping("/exportExcel") + @RequiresPermissions("business:companydocuments:exportExcel") + public void exportExcel (@RequestBody PageWrap<CompanyDocuments> pageWrap, HttpServletResponse response) { + ExcelExporter.build(CompanyDocuments.class).export(companyDocumentsService.findPage(pageWrap).getRecords(), "闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛�", response); + } + + @ApiOperation("鏍规嵁ID鏌ヨ") + @GetMapping("/{id}") + @RequiresPermissions("business:companydocuments:query") + public ApiResponse findById(@PathVariable Integer id) { + return ApiResponse.success(companyDocumentsService.findById(id)); + } +} diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyDocumentsCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyDocumentsCloudController.java new file mode 100644 index 0000000..b0094e4 --- /dev/null +++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyDocumentsCloudController.java @@ -0,0 +1,93 @@ +package com.doumee.cloud.admin; + +import com.doumee.api.BaseController; +import com.doumee.config.annotation.CloudRequiredPermission; +import com.doumee.core.annotation.excel.ExcelExporter; +import com.doumee.core.annotation.pr.PreventRepeat; +import com.doumee.core.utils.Constants; +import com.doumee.dao.business.model.CompanyDocuments; +import com.doumee.service.business.CompanyDocumentsService; +import com.doumee.service.business.third.model.ApiResponse; +import com.doumee.service.business.third.model.PageData; +import com.doumee.service.business.third.model.PageWrap; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; + +/** + * @author 姹熻箘韫� + * @date 2025/06/27 16:01 + */ +@Api(tags = "闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛�") +@RestController +@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/companyDocuments") +public class CompanyDocumentsCloudController extends BaseController { + + @Autowired + private CompanyDocumentsService companyDocumentsService; + + @PreventRepeat + @ApiOperation("鏂板缓") + @PostMapping("/create") + @CloudRequiredPermission("business:companydocuments:create") + public ApiResponse create(@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@RequestBody CompanyDocuments companyDocuments) { + companyDocuments.setLoginUserInfo(this.getLoginUser(token)); + return ApiResponse.success(companyDocumentsService.create(companyDocuments)); + } + + @ApiOperation("鏍规嵁ID鍒犻櫎") + @GetMapping("/delete/{id}") + @CloudRequiredPermission("business:companydocuments:delete") + public ApiResponse deleteById(@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@PathVariable Integer id) { + companyDocumentsService.deleteById(id,this.getLoginUser(token)); + return ApiResponse.success(null); + } + + @ApiOperation("鎵归噺鍒犻櫎") + @GetMapping("/delete/batch") + @CloudRequiredPermission("business:companydocuments:delete") + public ApiResponse deleteByIdInBatch(@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@RequestParam String ids) { + String [] idArray = ids.split(","); + List<Integer> idList = new ArrayList<>(); + for (String id : idArray) { + idList.add(Integer.valueOf(id)); + } + companyDocumentsService.deleteByIdInBatch(idList,this.getLoginUser(token)); + return ApiResponse.success(null); + } + + @ApiOperation("鏍规嵁ID淇敼") + @PostMapping("/updateById") + @CloudRequiredPermission("business:companydocuments:update") + public ApiResponse updateById(@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@RequestBody CompanyDocuments companyDocuments) { + companyDocuments.setLoginUserInfo(this.getLoginUser(token)); + companyDocumentsService.updateById(companyDocuments); + return ApiResponse.success(null); + } + + @ApiOperation("鍒嗛〉鏌ヨ") + @PostMapping("/page") + @CloudRequiredPermission("business:companydocuments:query") + public ApiResponse<PageData<CompanyDocuments>> findPage (@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@RequestBody PageWrap<CompanyDocuments> pageWrap) { + return ApiResponse.success(companyDocumentsService.findPage(pageWrap)); + } + + @ApiOperation("瀵煎嚭Excel") + @PostMapping("/exportExcel") + @CloudRequiredPermission("business:companydocuments:exportExcel") + public void exportExcel (@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@RequestBody PageWrap<CompanyDocuments> pageWrap, HttpServletResponse response) { + ExcelExporter.build(CompanyDocuments.class).export(companyDocumentsService.findPage(pageWrap).getRecords(), "闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛�", response); + } + + @ApiOperation("鏍规嵁ID鏌ヨ") + @GetMapping("/{id}") + @CloudRequiredPermission("business:companydocuments:query") + public ApiResponse findById(@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@PathVariable Integer id) { + return ApiResponse.success(companyDocumentsService.findById(id)); + } +} diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CompanyDocumentsMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CompanyDocumentsMapper.java new file mode 100644 index 0000000..6034e25 --- /dev/null +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CompanyDocumentsMapper.java @@ -0,0 +1,12 @@ +package com.doumee.dao.business; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.doumee.dao.business.model.CompanyDocuments; + +/** + * @author 姹熻箘韫� + * @date 2025/06/27 16:01 + */ +public interface CompanyDocumentsMapper extends BaseMapper<CompanyDocuments> { + +} diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CompanyDocuments.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CompanyDocuments.java new file mode 100644 index 0000000..d810f29 --- /dev/null +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CompanyDocuments.java @@ -0,0 +1,91 @@ +package com.doumee.dao.business.model; + +import com.doumee.core.annotation.excel.ExcelColumn; +import com.doumee.service.business.third.model.LoginUserModel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import java.util.Date; + +/** + * 闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛� + * @author 姹熻箘韫� + * @date 2025/06/27 16:01 + */ +@Data +@ApiModel("闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛�") +@TableName("`company_documents`") +public class CompanyDocuments extends LoginUserModel { + + @TableId(type = IdType.AUTO) + @ApiModelProperty(value = "涓婚敭", example = "1") + @ExcelColumn(name="涓婚敭") + private Integer id; + + @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1") + @ExcelColumn(name="鍒涘缓浜虹紪鐮�") + private Integer creator; + + @ApiModelProperty(value = "鍒涘缓鏃堕棿") + @ExcelColumn(name="鍒涘缓鏃堕棿") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date createDate; + + @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1") + @ExcelColumn(name="鏇存柊浜虹紪鐮�") + private Integer editor; + + @ApiModelProperty(value = "鏇存柊鏃堕棿") + @ExcelColumn(name="鏇存柊鏃堕棿") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date editDate; + + @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1") + @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�") + private Integer isdeleted; + + @ApiModelProperty(value = "鍚嶇О") + @ExcelColumn(name="鍚嶇О") + private String name; + + @ApiModelProperty(value = "澶囨敞") + @ExcelColumn(name="澶囨敞") + private String remark; + + @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1") + @ExcelColumn(name="鐘舵�� 0鍚敤 1绂佺敤") + private Integer status; + + @ApiModelProperty(value = "鎺掑簭鐮�", example = "1") + @ExcelColumn(name="鎺掑簭鐮�") + private Integer sortnum; + + @ApiModelProperty(value = "闄勪欢鍦板潃") + @ExcelColumn(name="闄勪欢鍦板潃") + private String fileurl; + + @ApiModelProperty(value = "闄勪欢鍚嶇О") + @ExcelColumn(name="闄勪欢鍚嶇О") + private String fileName; + + @ApiModelProperty(value = "闄勪欢澶у皬锛坆ytes)", example = "1") + @ExcelColumn(name="闄勪欢澶у皬锛坆ytes)") + private Long fileSize; + + @ApiModelProperty(value = "鍒嗙被缂栫爜锛堝叧鑱攃ategory锛�", example = "1") + @ExcelColumn(name="鍒嗙被缂栫爜锛堝叧鑱攃ategory锛�") + private Integer categoryId; + + @ApiModelProperty(value = "璐d换閮ㄩ棬缂栫爜(鍏宠仈company)", example = "1") + @ExcelColumn(name="璐d换閮ㄩ棬缂栫爜(鍏宠仈company)") + private Integer companyId; + + @ApiModelProperty(value = "闄勪欢鎻忚堪") + @ExcelColumn(name="闄勪欢鎻忚堪") + private String content; + +} diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java index 2bc7807..06d20a5 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java @@ -76,8 +76,8 @@ @ExcelColumn(name="瀹夊叏鍛樺鍚嶉泦鍚堬紝澶氫釜鑻辨枃閫楀彿闅斿紑") private String memberNames; - @ApiModelProperty(value = "绫诲瀷 0闅愭偅鍖哄煙 1闅愭偅绫诲瀷", example = "1") - @ExcelColumn(name="绫诲瀷 0闅愭偅鍖哄煙 1闅愭偅绫诲瀷") + @ApiModelProperty(value = "绫诲瀷 0闅愭偅鍖哄煙 1闅愭偅绫诲瀷 2妫�鏌ョ被鍨�", example = "1") + @ExcelColumn(name="绫诲瀷 0闅愭偅鍖哄煙 1闅愭偅绫诲瀷 2妫�鏌ョ被鍨�") private Integer type; @ApiModelProperty(value = "鐢ㄦ埛缂栫爜闆嗗悎", example = "1") @TableField(exist = false) diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyDocumentsService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyDocumentsService.java new file mode 100644 index 0000000..0b38154 --- /dev/null +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyDocumentsService.java @@ -0,0 +1,100 @@ +package com.doumee.service.business; + +import com.doumee.dao.business.model.CompanyDocuments; +import com.doumee.service.business.third.model.LoginUserInfo; +import com.doumee.service.business.third.model.LoginUserModel; +import com.doumee.service.business.third.model.PageData; +import com.doumee.service.business.third.model.PageWrap; + +import java.util.List; + +/** + * 闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛⊿ervice瀹氫箟 + * @author 姹熻箘韫� + * @date 2025/06/27 16:01 + */ +public interface CompanyDocumentsService { + + /** + * 鍒涘缓 + * + * @param companyDocuments 瀹炰綋瀵硅薄 + * @return Integer + */ + Integer create(CompanyDocuments companyDocuments); + + /** + * 涓婚敭鍒犻櫎 + * + * @param id 涓婚敭 + */ + void deleteById(Integer id, LoginUserInfo user); + + /** + * 鍒犻櫎 + * + * @param companyDocuments 瀹炰綋瀵硅薄 + */ + void delete(CompanyDocuments companyDocuments); + + /** + * 鎵归噺涓婚敭鍒犻櫎 + * + * @param ids 涓婚敭闆� + */ + void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user); + + /** + * 涓婚敭鏇存柊 + * + * @param companyDocuments 瀹炰綋瀵硅薄 + */ + void updateById(CompanyDocuments companyDocuments); + + /** + * 鎵归噺涓婚敭鏇存柊 + * + * @param companyDocumentss 瀹炰綋闆� + */ + void updateByIdInBatch(List<CompanyDocuments> companyDocumentss); + + /** + * 涓婚敭鏌ヨ + * + * @param id 涓婚敭 + * @return CompanyDocuments + */ + CompanyDocuments findById(Integer id); + + /** + * 鏉′欢鏌ヨ鍗曟潯璁板綍 + * + * @param companyDocuments 瀹炰綋瀵硅薄 + * @return CompanyDocuments + */ + CompanyDocuments findOne(CompanyDocuments companyDocuments); + + /** + * 鏉′欢鏌ヨ + * + * @param companyDocuments 瀹炰綋瀵硅薄 + * @return List<CompanyDocuments> + */ + List<CompanyDocuments> findList(CompanyDocuments companyDocuments); + + /** + * 鍒嗛〉鏌ヨ + * + * @param pageWrap 鍒嗛〉瀵硅薄 + * @return PageData<CompanyDocuments> + */ + PageData<CompanyDocuments> findPage(PageWrap<CompanyDocuments> pageWrap); + + /** + * 鏉′欢缁熻 + * + * @param companyDocuments 瀹炰綋瀵硅薄 + * @return long + */ + long count(CompanyDocuments companyDocuments); +} diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyDocumentsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyDocumentsServiceImpl.java new file mode 100644 index 0000000..33712c1 --- /dev/null +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyDocumentsServiceImpl.java @@ -0,0 +1,158 @@ +package com.doumee.service.business.impl; + +import com.doumee.core.utils.Utils; +import com.doumee.dao.business.CompanyDocumentsMapper; +import com.doumee.dao.business.model.CompanyDocuments; +import com.doumee.service.business.CompanyDocumentsService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.doumee.service.business.third.model.LoginUserInfo; +import com.doumee.service.business.third.model.PageData; +import com.doumee.service.business.third.model.PageWrap; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * 闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛⊿ervice瀹炵幇 + * @author 姹熻箘韫� + * @date 2025/06/27 16:01 + */ +@Service +public class CompanyDocumentsServiceImpl implements CompanyDocumentsService { + + @Autowired + private CompanyDocumentsMapper companyDocumentsMapper; + + @Override + public Integer create(CompanyDocuments companyDocuments) { + companyDocumentsMapper.insert(companyDocuments); + return companyDocuments.getId(); + } + + @Override + public void deleteById(Integer id, LoginUserInfo user) { + companyDocumentsMapper.deleteById(id); + } + + @Override + public void delete(CompanyDocuments companyDocuments) { + UpdateWrapper<CompanyDocuments> deleteWrapper = new UpdateWrapper<>(companyDocuments); + companyDocumentsMapper.delete(deleteWrapper); + } + + @Override + public void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user) { + if (CollectionUtils.isEmpty(ids)) { + return; + } + companyDocumentsMapper.deleteBatchIds(ids); + } + + @Override + public void updateById(CompanyDocuments companyDocuments) { + companyDocumentsMapper.updateById(companyDocuments); + } + + @Override + public void updateByIdInBatch(List<CompanyDocuments> companyDocumentss) { + if (CollectionUtils.isEmpty(companyDocumentss)) { + return; + } + for (CompanyDocuments companyDocuments: companyDocumentss) { + this.updateById(companyDocuments); + } + } + + @Override + public CompanyDocuments findById(Integer id) { + return companyDocumentsMapper.selectById(id); + } + + @Override + public CompanyDocuments findOne(CompanyDocuments companyDocuments) { + QueryWrapper<CompanyDocuments> wrapper = new QueryWrapper<>(companyDocuments); + return companyDocumentsMapper.selectOne(wrapper); + } + + @Override + public List<CompanyDocuments> findList(CompanyDocuments companyDocuments) { + QueryWrapper<CompanyDocuments> wrapper = new QueryWrapper<>(companyDocuments); + return companyDocumentsMapper.selectList(wrapper); + } + + @Override + public PageData<CompanyDocuments> findPage(PageWrap<CompanyDocuments> pageWrap) { + IPage<CompanyDocuments> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); + QueryWrapper<CompanyDocuments> queryWrapper = new QueryWrapper<>(); + Utils.MP.blankToNull(pageWrap.getModel()); + if (pageWrap.getModel().getId() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getId, pageWrap.getModel().getId()); + } + if (pageWrap.getModel().getCreator() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getCreator, pageWrap.getModel().getCreator()); + } + if (pageWrap.getModel().getCreateDate() != null) { + queryWrapper.lambda().ge(CompanyDocuments::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); + queryWrapper.lambda().le(CompanyDocuments::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); + } + if (pageWrap.getModel().getEditor() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getEditor, pageWrap.getModel().getEditor()); + } + if (pageWrap.getModel().getEditDate() != null) { + queryWrapper.lambda().ge(CompanyDocuments::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); + queryWrapper.lambda().le(CompanyDocuments::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); + } + if (pageWrap.getModel().getIsdeleted() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getIsdeleted, pageWrap.getModel().getIsdeleted()); + } + if (pageWrap.getModel().getName() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getName, pageWrap.getModel().getName()); + } + if (pageWrap.getModel().getRemark() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getRemark, pageWrap.getModel().getRemark()); + } + if (pageWrap.getModel().getStatus() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getStatus, pageWrap.getModel().getStatus()); + } + if (pageWrap.getModel().getSortnum() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getSortnum, pageWrap.getModel().getSortnum()); + } + if (pageWrap.getModel().getFileurl() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getFileurl, pageWrap.getModel().getFileurl()); + } + if (pageWrap.getModel().getFileName() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getFileName, pageWrap.getModel().getFileName()); + } + if (pageWrap.getModel().getFileSize() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getFileSize, pageWrap.getModel().getFileSize()); + } + if (pageWrap.getModel().getCategoryId() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getCategoryId, pageWrap.getModel().getCategoryId()); + } + if (pageWrap.getModel().getCompanyId() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getCompanyId, pageWrap.getModel().getCompanyId()); + } + if (pageWrap.getModel().getContent() != null) { + queryWrapper.lambda().eq(CompanyDocuments::getContent, pageWrap.getModel().getContent()); + } + for(PageWrap.SortData sortData: pageWrap.getSorts()) { + if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { + queryWrapper.orderByDesc(sortData.getProperty()); + } else { + queryWrapper.orderByAsc(sortData.getProperty()); + } + } + return PageData.from(companyDocumentsMapper.selectPage(page, queryWrapper)); + } + + @Override + public long count(CompanyDocuments companyDocuments) { + QueryWrapper<CompanyDocuments> wrapper = new QueryWrapper<>(companyDocuments); + return companyDocumentsMapper.selectCount(wrapper); + } +} -- Gitblit v1.9.3