diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Tenant.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Tenant.java new file mode 100644 index 00000000..bfa92fc5 --- /dev/null +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Tenant.java @@ -0,0 +1,58 @@ +package com.cloud.kicc.system.api.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cloud.kicc.common.data.entity.CommonEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +/** + *

+ * 多租户实体类 + *

+ * + * @Author: entfrm开发团队-王翔 + * @Date: 2022/5/9 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("sys_tenant") +public class Tenant extends CommonEntity { + + /** + * 租户ID + */ + @TableId + private String id; + + /** + * 租户名称 + */ + private String name; + + /** + * 租户编码 + */ + private String code; + + /** + * 租户开始时间 + */ + private LocalDateTime startTime; + + /** + * 租户结束时间 + */ + private LocalDateTime endTime; + + /** + * 租户状态 + */ + private String status; + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/TenantController.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/TenantController.java new file mode 100644 index 00000000..95e2747f --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/TenantController.java @@ -0,0 +1,86 @@ +package com.cloud.kicc.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.cloud.kicc.common.core.api.R; +import com.cloud.kicc.common.core.constant.AppConstants; +import com.cloud.kicc.common.core.constant.CacheConstants; +import com.cloud.kicc.common.core.constant.SecurityConstants; +import com.cloud.kicc.common.log.annotation.SysLog; +import com.cloud.kicc.common.security.annotation.Inner; +import com.cloud.kicc.system.api.entity.DictData; +import com.cloud.kicc.system.api.entity.Tenant; +import com.cloud.kicc.system.api.feign.RemoteDictService; +import com.cloud.kicc.system.service.DictDataService; +import com.cloud.kicc.system.service.TenantService; +import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; + +/** + *

+ * 多租户控制类 + *

+ * + * @Author: entfrm开发团队-王翔 + * @Date: 2022/5/9 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping(AppConstants.APP_SYSTEM + "/tenant") +public class TenantController { + + private final TenantService tenantService; + + private LambdaQueryWrapper getQueryWrapper(Tenant tenant) { + return new LambdaQueryWrapper() + .like(StrUtil.isNotBlank(tenant.getName()), Tenant::getName, tenant.getName()) + .eq(StrUtil.isNotBlank(tenant.getCode()), Tenant::getCode, tenant.getCode()) + .eq(StrUtil.isNotBlank(tenant.getStatus()), Tenant::getStatus, tenant.getStatus()); + } + + @GetMapping("/list") + @PreAuthorize("@pms.hasPermission('tenant_view')") + public R list(Page page, Tenant tenant) { + IPage tenantPage = tenantService.page(page, getQueryWrapper(tenant)); + return R.ok(tenantPage.getRecords(), tenantPage.getTotal()); + } + + @GetMapping("/{id:\\w+}") + public R getById(@PathVariable("id") String id) { + return R.ok(tenantService.getById(id)); + } + + + @SysLog("多租户新增") + @PostMapping("/save") + @PreAuthorize("@pms.hasPermission('tenant_add')") + public R save(@RequestBody Tenant tenant) { + tenantService.save(tenant); + return R.ok(); + } + + @SysLog("多租户修改") + @PutMapping("/update") + @PreAuthorize("@pms.hasPermission('tenant_edit')") + public R update(@RequestBody Tenant tenant) { + tenantService.updateById(tenant); + return R.ok(); + } + + @SysLog("多租户删除") + @DeleteMapping("/remove/{ids:[\\w,]+}") + @PreAuthorize("@pms.hasPermission('tenant_del')") + public R remove(@PathVariable String[] ids) { + tenantService.removeByIds(Arrays.asList(ids)); + return R.ok(); + } + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/mapper/TenantMapper.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/mapper/TenantMapper.java new file mode 100644 index 00000000..978212b5 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/mapper/TenantMapper.java @@ -0,0 +1,16 @@ +package com.cloud.kicc.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cloud.kicc.system.api.entity.Tenant; + +/** + *

+ * 多租户 Mapper 接口 + *

+ * + * @Author: entfrm开发团队-王翔 + * @Date: 2022/5/9 + */ +public interface TenantMapper extends BaseMapper { + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/TenantService.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/TenantService.java new file mode 100644 index 00000000..a630675b --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/TenantService.java @@ -0,0 +1,16 @@ +package com.cloud.kicc.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.cloud.kicc.system.api.entity.Tenant; + +/** + *

+ * 多租户服务类 + *

+ * + * @Author: entfrm开发团队-王翔 + * @Date: 2022/5/9 + */ +public interface TenantService extends IService { + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/TenantServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/TenantServiceImpl.java new file mode 100644 index 00000000..e3a135b1 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/TenantServiceImpl.java @@ -0,0 +1,20 @@ +package com.cloud.kicc.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cloud.kicc.system.api.entity.Tenant; +import com.cloud.kicc.system.mapper.TenantMapper; +import com.cloud.kicc.system.service.TenantService; +import org.springframework.stereotype.Service; + +/** + *

+ * 多租户服务实现类 + *

+ * + * @Author: entfrm开发团队-王翔 + * @Date: 2022/5/9 + */ +@Service +public class TenantServiceImpl extends ServiceImpl implements TenantService { + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/TenantMapper.xml b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/TenantMapper.xml new file mode 100644 index 00000000..acf40009 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/TenantMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/kicc-ui/src/api/platform/system/controller/tenant.ts b/kicc-ui/src/api/platform/system/controller/tenant.ts new file mode 100644 index 00000000..37fe1850 --- /dev/null +++ b/kicc-ui/src/api/platform/system/controller/tenant.ts @@ -0,0 +1,30 @@ +/** + * 提供api模板规范代码参考,请尽量保证编写代码风格跟模板规范代码一致 + * Copyright © 2020-2022 entfrm All rights reserved. + * author entfrm开发团队-王翔 + */ +import type { Tenant, TenantParams, TenantResult } from '/@/api/platform/system/entity/tenant'; +import { defHttp } from '/@/utils/http/axios'; + +enum Api { + list = '/system_proxy/system/tenant/list', + add = '/system_proxy/system/tenant/save', + get = '/system_proxy/system/tenant', + edit = '/system_proxy/system/tenant/update', + del = '/system_proxy/system/tenant/remove' +} + +/** 查询多租户列表 */ +export const listTenant = (params?: Partial) => defHttp.get({ url: Api.list, params }, { isReturnResultResponse: true }); + +/** 新增多租户 */ +export const addTenant = (params: Partial) => defHttp.post({ url: Api.add, data: params }); + +/** 修改多租户 */ +export const editTenant = (params: Partial) => defHttp.put({ url: Api.edit, data: params }); + +/** 查询多租户详细 */ +export const getTenant = (id: string) => defHttp.get({ url: `${Api.get}/${id}` }); + +/** 删除多租户 */ +export const delTenant = (ids: string) => defHttp.delete({ url: `${Api.del}/${ids}` }); diff --git a/kicc-ui/src/api/platform/system/entity/tenant.ts b/kicc-ui/src/api/platform/system/entity/tenant.ts new file mode 100644 index 00000000..af608dd8 --- /dev/null +++ b/kicc-ui/src/api/platform/system/entity/tenant.ts @@ -0,0 +1,26 @@ +/** + * @program: kicc-ui + * @description: 多租户实体类 + * 类型定义 + * @author: entfrm开发团队-王翔 + * @create: 2022/4/8 + */ +import type { R } from '/#/axios'; +import type { CommonEntity, Page } from '/@/api/common/data/entity'; + +/** 多租户查询参数 */ +export type TenantParams = Page & Tenant; + +/** 多租户对象 */ +export interface Tenant extends CommonEntity { + id: string; + name: string; + code: string; + startTime: string; + endTime: string; + status: string; + [key: string]: any; +} + +/** 多租户响应对象 */ +export type TenantResult = R; diff --git a/kicc-ui/src/views/system/dict/DictModal.vue b/kicc-ui/src/views/system/dict/DictModal.vue index 18f69849..1a8aaea8 100644 --- a/kicc-ui/src/views/system/dict/DictModal.vue +++ b/kicc-ui/src/views/system/dict/DictModal.vue @@ -14,7 +14,7 @@ * Copyright © 2020-2022 entfrm All rights reserved. * author entfrm开发团队-王翔 */ - import {ref, toRaw, unref} from 'vue'; + import { ref, unref } from 'vue'; import { BasicForm, useForm } from '/@/components/Form/index'; import { formSchema } from './dict.data'; import { addDict, editDict, getDict } from '/@/api/platform/system/controller/dict'; diff --git a/kicc-ui/src/views/system/tenant/TenantModal.vue b/kicc-ui/src/views/system/tenant/TenantModal.vue new file mode 100644 index 00000000..85ac519a --- /dev/null +++ b/kicc-ui/src/views/system/tenant/TenantModal.vue @@ -0,0 +1,78 @@ + + diff --git a/kicc-ui/src/views/system/tenant/index.vue b/kicc-ui/src/views/system/tenant/index.vue new file mode 100644 index 00000000..542b44cb --- /dev/null +++ b/kicc-ui/src/views/system/tenant/index.vue @@ -0,0 +1,140 @@ + + + diff --git a/kicc-ui/src/views/system/tenant/tenant.data.ts b/kicc-ui/src/views/system/tenant/tenant.data.ts new file mode 100644 index 00000000..7c75ea72 --- /dev/null +++ b/kicc-ui/src/views/system/tenant/tenant.data.ts @@ -0,0 +1,164 @@ +/** + * @program: kicc-ui + * @description: 多租户模块动态渲染配置 + * @author: entfrm开发团队-王翔 + * @create: 2022/4/21 + */ + +import { BasicColumn } from '/@/components/Table'; +import { FormSchema } from '/@/components/Table'; +import { h } from 'vue'; +import { Tag } from 'ant-design-vue'; + +/** 表格列配置 */ +export const columns: BasicColumn[] = [ + { + title: '多租户名称', + dataIndex: 'name' + }, + { + title: '多租户编码', + dataIndex: 'code', + }, + { + title: '开始时间', + dataIndex: 'startTime', + width: 200 + }, + { + title: '结束时间', + dataIndex: 'endTime', + width: 200 + }, + { + title: '状态', + dataIndex: 'status', + width: 120, + customRender: ({record}) => { + const status = record.status; + const enable = ~~status === 0; + const color = enable ? 'green' : 'red'; + const text = enable ? '启动' : '冻结'; + return h(Tag, { color: color }, () => text); + } + }, + { + title: '备注', + dataIndex: 'remarks', + customRender: ({record}) => { + return record.remarks || h(Tag, { color: 'red' }, () => '暂无数据'); + } + } +]; + +/** 搜索表单配置 */ +export const searchFormSchema: FormSchema[] = [ + { + field: 'name', + label: '多租户名称', + component: 'Input', + componentProps: { + placeholder: '请输入多租户名称', + }, + colProps: { span: 8 } + }, + { + field: 'code', + label: '多租户编码', + component: 'Input', + componentProps: { + placeholder: '请输入多租户编码', + }, + colProps: { span: 7 } + }, + { + field: 'status', + label: '状态', + component: 'Select', + componentProps: { + options: [ + { label: '启动', value: '0' }, + { label: '冻结', value: '1' } + ] + }, + colProps: { span: 8 } + } +]; + +/** 用户表单配置 */ +export const formSchema: FormSchema[] = [ + { + field: 'id', + label: 'ID', + component: 'Input', + show: false + }, + { + field: 'name', + label: '多租户名称', + component: 'Input', + required: true, + colProps: { + span: 12 + } + }, + { + field: 'code', + label: '多租户编码', + component: 'Input', + required: true, + colProps: { + span: 12 + } + }, + { + field: 'startTime', + label: '开始时间', + component: 'DatePicker', + required: true, + componentProps: { + style: { width:'100%' }, + valueFormat: 'YYYY-MM-DD', + placeholder: '请选择开始日期' + }, + colProps: { span: 12 } + }, + { + field: 'endTime', + label: '结束时间', + component: 'DatePicker', + required: true, + componentProps: { + style: { width:'100%' }, + valueFormat: 'YYYY-MM-DD', + placeholder: '请选择开始日期' + }, + colProps: { span: 12 } + }, + { + field: 'status', + label: '状态', + component: 'RadioGroup', + defaultValue: '0', + componentProps: { + options: [ + { label: '启动', value: '0' }, + { label: '冻结', value: '1' } + ] + }, + colProps: { + span: 12 + } + }, + { + label: '备注', + field: 'remarks', + component: 'InputTextArea', + componentProps: { + rows: 6 + }, + colProps: { + span: 24 + } + } +];