瀏覽代碼

单位信息(unitInfo)模块功能

bing 1 年之前
父節點
當前提交
b78bea9bfb
共有 20 個文件被更改,包括 1236 次插入3 次删除
  1. 2 1
      config/nacos/seata-server.properties
  2. 23 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemotePtSchoolService.java
  3. 171 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtSchoolBo.java
  4. 8 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteTenantService.java
  5. 98 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteSysTenantBo.java
  6. 3 1
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/TenantConstants.java
  7. 6 0
      ruoyi-modules/ruoyi-backstage/pom.xml
  8. 106 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtSchoolController.java
  9. 182 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/PtSchool.java
  10. 178 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/bo/PtSchoolBo.java
  11. 17 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/convert/PtSchoolBoConvert.java
  12. 75 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/vo/PtSchoolVo.java
  13. 15 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/mapper/PtSchoolMapper.java
  14. 69 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/IPtSchoolService.java
  15. 150 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/impl/PtSchoolServiceImpl.java
  16. 47 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/dubbo/RemotePtSchoolServiceImpl.java
  17. 46 0
      ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/basics/customer/PtSchoolMapper.xml
  18. 6 0
      ruoyi-modules/ruoyi-system/pom.xml
  19. 7 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteTenantServiceImpl.java
  20. 27 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java

+ 2 - 1
config/nacos/seata-server.properties

@@ -2,6 +2,7 @@ service.vgroupMapping.ruoyi-auth-group=default
 service.vgroupMapping.ruoyi-system-group=default
 service.vgroupMapping.ruoyi-resource-group=default
 service.vgroupMapping.ruoyi-workflow-group=default
+service.vgroupMapping.ruoyi-backstage-group=default
 
 service.enableDegrade=false
 service.disableGlobalTransaction=false
@@ -16,7 +17,7 @@ store.session.mode=db
 #These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block.
 store.db.datasource=hikari
 store.db.dbType=mysql
-store.db.driverClassName=com.mysql.cj.jdbc.Driver
+store.db.driverClassName=com.kingbase8.Driver
 store.db.url=jdbc:mysql://127.0.0.1:3306/ykt_seata?useUnicode=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
 store.db.user=root
 store.db.password=sql2016

+ 23 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemotePtSchoolService.java

@@ -0,0 +1,23 @@
+package org.dromara.backstage.api;
+
+import org.dromara.backstage.api.domain.bo.RemotePtSchoolBo;
+import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.exception.user.UserException;
+
+import java.util.List;
+
+/**
+ * 用户服务
+ *
+ * @author Lion Li
+ */
+public interface RemotePtSchoolService {
+
+    /**
+     * 新增学校
+     * @param bo
+     * @return
+     */
+    Boolean insertByBo(RemotePtSchoolBo bo);
+
+}

+ 171 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtSchoolBo.java

@@ -0,0 +1,171 @@
+package org.dromara.backstage.api.domain.bo;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+@NoArgsConstructor
+public class RemotePtSchoolBo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -6366812555164926232L;
+
+    /**
+     * 学校Id,主键
+     */
+    private Long schoolId;
+
+    /**
+     * 学校名称
+     */
+    private String schoolName;
+
+    /**
+     * 学校代码
+     */
+    private String schoolCode;
+
+    /**
+     * 学校英文名
+     */
+    private String englishName;
+
+    /**
+     * 学校地址
+     */
+    private String address;
+
+    /**
+     * 建校年月
+     */
+    private String foundYear;
+
+    /**
+     * 邮政编码
+     */
+    private String postCode;
+
+    /**
+     * 行政区划
+     */
+    private String administrative;
+
+    /**
+     * 校庆日
+     */
+    private String anniversary;
+
+    /**
+     * 办学类型,见BXLX字典类别
+     */
+    private String officeType;
+
+    /**
+     * 主管部门
+     */
+    private String chargeDept;
+
+    /**
+     * 法人代表工号
+     */
+    private String legalPerson;
+
+    /**
+     * 法人证书号
+     */
+    private String legalCertificate;
+
+    /**
+     * 校长姓名
+     */
+    private String masterName;
+
+    /**
+     * 校长工号
+     */
+    private String masterNum;
+
+    /**
+     * 党委负责人
+     */
+    private String partyPerson;
+
+    /**
+     * 组织机构码
+     */
+    private String orgCode;
+
+    /**
+     * 联系电话
+     */
+    private String telephone;
+
+    /**
+     * 传真
+     */
+    private String fax;
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 学校官网
+     */
+    private String homePage;
+
+    /**
+     * 历史沿革
+     */
+    private String history;
+
+    /**
+     * 单位办别,见DWBB字典类别
+     */
+    private String schoolType;
+
+    /**
+     * 主管单位
+     */
+    private String chargeUnit;
+
+    /**
+     * 所在地城乡类型,见SZDCXLX字典类别
+     */
+    private String cityType;
+
+    /**
+     * 所在地经济属性码,见SZDQJJSX字典类别
+     */
+    private String economicCode;
+
+    /**
+     * 所在地民族属性,见SZDMZSX字典类别
+     */
+    private String raceProperty;
+
+    /**
+     * 学制
+     */
+    private Long educationalSystem;
+
+    /**
+     * 入学年龄
+     */
+    private Long enrolAge;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    private String tenantId;
+
+}

+ 8 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteTenantService.java

@@ -1,6 +1,7 @@
 package org.dromara.system.api;
 
 
+import org.dromara.system.api.domain.bo.RemoteSysTenantBo;
 import org.dromara.system.api.domain.vo.RemoteTenantVo;
 
 import java.util.List;
@@ -25,4 +26,11 @@ public interface RemoteTenantService {
      */
     List<RemoteTenantVo> queryList();
 
+    /**
+     * 新增租户
+     * @param bo
+     * @return
+     */
+    Boolean insertByBo(RemoteSysTenantBo bo);
+
 }

+ 98 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteSysTenantBo.java

@@ -0,0 +1,98 @@
+package org.dromara.system.api.domain.bo;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@NoArgsConstructor
+public class RemoteSysTenantBo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -1494723702540874366L;
+    /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * 租户编号
+     */
+    private String tenantId;
+
+    /**
+     * 联系人
+     */
+    private String contactUserName;
+
+    /**
+     * 联系电话
+     */
+    private String contactPhone;
+
+    /**
+     * 企业名称
+     */
+    private String companyName;
+
+    /**
+     * 用户名(创建系统用户)
+     */
+    private String username;
+
+    /**
+     * 密码(创建系统用户)
+     */
+    private String password;
+
+    /**
+     * 统一社会信用代码
+     */
+    private String licenseNumber;
+
+    /**
+     * 地址
+     */
+    private String address;
+
+    /**
+     * 域名
+     */
+    private String domain;
+
+    /**
+     * 企业简介
+     */
+    private String intro;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 租户套餐编号
+     */
+    private Long packageId;
+
+    /**
+     * 过期时间
+     */
+    private Date expireTime;
+
+    /**
+     * 用户数量(-1不限制)
+     */
+    private Long accountCount;
+
+    /**
+     * 租户状态(0正常 1停用)
+     */
+    private String status;
+}

+ 3 - 1
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/TenantConstants.java

@@ -40,6 +40,8 @@ public interface TenantConstants {
     /**
      * 默认租户ID
      */
-    String DEFAULT_TENANT_ID = "000000";
+    String DEFAULT_TENANT_ID = "20200813044411";
+
+    Long DEFAULT_TENANT_PACKAGE_ID = 1L;
 
 }

+ 6 - 0
ruoyi-modules/ruoyi-backstage/pom.xml

@@ -107,6 +107,12 @@
             <groupId>cn.com.kingbase</groupId>
             <artifactId>kingbase8</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-api-backstage</artifactId>
+            <version>2.2.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>

+ 106 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtSchoolController.java

@@ -0,0 +1,106 @@
+package org.dromara.backstage.basics.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.backstage.basics.domain.vo.PtSchoolVo;
+import org.dromara.backstage.basics.domain.bo.PtSchoolBo;
+import org.dromara.backstage.basics.service.IPtSchoolService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 单位信息
+ * 前端访问路由地址为:/customer/ptSchool
+ *
+ * @author bing
+ * @date 2024-08-06
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/customer/ptSchool")
+public class PtSchoolController extends BaseController {
+
+    private final IPtSchoolService ptSchoolService;
+
+    /**
+     * 查询单位信息列表
+     */
+    @SaCheckPermission("customer:ptSchool:list")
+    @GetMapping("/list")
+    public TableDataInfo<PtSchoolVo> list(PtSchoolBo bo, PageQuery pageQuery) {
+        return ptSchoolService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出单位信息列表
+     */
+    @SaCheckPermission("customer:ptSchool:export")
+    @Log(title = "单位信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PtSchoolBo bo, HttpServletResponse response) {
+        List<PtSchoolVo> list = ptSchoolService.queryList(bo);
+        ExcelUtil.exportExcel(list, "单位信息", PtSchoolVo.class, response);
+    }
+
+    /**
+     * 获取单位信息详细信息
+     *
+     * @param schoolId 主键
+     */
+    @SaCheckPermission("customer:ptSchool:query")
+    @GetMapping("/{schoolId}")
+    public R<PtSchoolVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable Long schoolId) {
+        return R.ok(ptSchoolService.queryById(schoolId));
+    }
+
+    /**
+     * 新增单位信息
+     */
+    @SaCheckPermission("customer:ptSchool:add")
+    @Log(title = "单位信息", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PtSchoolBo bo) {
+        return toAjax(ptSchoolService.insertByBo(bo));
+    }
+
+    /**
+     * 修改单位信息
+     */
+    @SaCheckPermission("customer:ptSchool:edit")
+    @Log(title = "单位信息", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PtSchoolBo bo) {
+        return toAjax(ptSchoolService.updateByBo(bo));
+    }
+
+    /**
+     * 删除单位信息
+     *
+     * @param schoolIds 主键串
+     */
+    @SaCheckPermission("customer:ptSchool:remove")
+    @Log(title = "单位信息", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{schoolIds}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable Long[] schoolIds) {
+        return toAjax(ptSchoolService.deleteWithValidByIds(List.of(schoolIds), true));
+    }
+}

+ 182 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/PtSchool.java

@@ -0,0 +1,182 @@
+package org.dromara.backstage.basics.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 单位信息对象 t_pt_school
+ *
+ * @author bing
+ * @date 2024-08-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("t_pt_school")
+public class PtSchool extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 学校Id,主键
+     */
+    @TableId(value = "school_id")
+    private Long schoolId;
+
+    /**
+     * 学校名称
+     */
+    private String schoolName;
+
+    /**
+     * 学校代码
+     */
+    private String schoolCode;
+
+    /**
+     * 学校英文名
+     */
+    private String englishName;
+
+    /**
+     * 学校地址
+     */
+    private String address;
+
+    /**
+     * 建校年月
+     */
+    private String foundYear;
+
+    /**
+     * 邮政编码
+     */
+    private String postCode;
+
+    /**
+     * 行政区划
+     */
+    private String administrative;
+
+    /**
+     * 校庆日
+     */
+    private String anniversary;
+
+    /**
+     * 办学类型,见BXLX字典类别
+     */
+    private String officeType;
+
+    /**
+     * 主管部门
+     */
+    private String chargeDept;
+
+    /**
+     * 法人代表工号
+     */
+    private String legalPerson;
+
+    /**
+     * 法人证书号
+     */
+    private String legalCertificate;
+
+    /**
+     * 校长姓名
+     */
+    private String masterName;
+
+    /**
+     * 校长工号
+     */
+    private String masterNum;
+
+    /**
+     * 党委负责人
+     */
+    private String partyPerson;
+
+    /**
+     * 组织机构码
+     */
+    private String orgCode;
+
+    /**
+     * 联系电话
+     */
+    private String telephone;
+
+    /**
+     * 传真
+     */
+    private String fax;
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 学校官网
+     */
+    private String homePage;
+
+    /**
+     * 历史沿革
+     */
+    private String history;
+
+    /**
+     * 单位办别,见DWBB字典类别
+     */
+    private String schoolType;
+
+    /**
+     * 主管单位
+     */
+    private String chargeUnit;
+
+    /**
+     * 所在地城乡类型,见SZDCXLX字典类别
+     */
+    private String cityType;
+
+    /**
+     * 所在地经济属性码,见SZDQJJSX字典类别
+     */
+    private String economicCode;
+
+    /**
+     * 所在地民族属性,见SZDMZSX字典类别
+     */
+    private String raceProperty;
+
+    /**
+     * 学制
+     */
+    private Long educationalSystem;
+
+    /**
+     * 入学年龄
+     */
+    private Long enrolAge;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 删除标志(0-未删除 2-已删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+
+}

+ 178 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/bo/PtSchoolBo.java

@@ -0,0 +1,178 @@
+package org.dromara.backstage.basics.domain.bo;
+
+import org.dromara.backstage.basics.domain.PtSchool;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 单位信息业务对象 t_pt_school
+ *
+ * @author bing
+ * @date 2024-08-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PtSchool.class, reverseConvertGenerate = false)
+public class PtSchoolBo extends BaseEntity {
+
+    /**
+     * 学校Id,主键
+     */
+    @NotNull(message = "学校Id,主键不能为空", groups = { EditGroup.class })
+    private Long schoolId;
+
+    /**
+     * 学校名称
+     */
+    @NotBlank(message = "学校名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String schoolName;
+
+    /**
+     * 学校代码
+     */
+    private String schoolCode;
+
+    /**
+     * 学校英文名
+     */
+    private String englishName;
+
+    /**
+     * 学校地址
+     */
+    @NotBlank(message = "学校地址不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String address;
+
+    /**
+     * 建校年月
+     */
+    private String foundYear;
+
+    /**
+     * 邮政编码
+     */
+    private String postCode;
+
+    /**
+     * 行政区划
+     */
+    private String administrative;
+
+    /**
+     * 校庆日
+     */
+    private String anniversary;
+
+    /**
+     * 办学类型,见BXLX字典类别
+     */
+    private String officeType;
+
+    /**
+     * 主管部门
+     */
+    private String chargeDept;
+
+    /**
+     * 法人代表工号
+     */
+    private String legalPerson;
+
+    /**
+     * 法人证书号
+     */
+    private String legalCertificate;
+
+    /**
+     * 校长姓名
+     */
+    private String masterName;
+
+    /**
+     * 校长工号
+     */
+    private String masterNum;
+
+    /**
+     * 党委负责人
+     */
+    private String partyPerson;
+
+    /**
+     * 组织机构码
+     */
+    private String orgCode;
+
+    /**
+     * 联系电话
+     */
+    private String telephone;
+
+    /**
+     * 传真
+     */
+    private String fax;
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 学校官网
+     */
+    private String homePage;
+
+    /**
+     * 历史沿革
+     */
+    private String history;
+
+    /**
+     * 单位办别,见DWBB字典类别
+     */
+    private String schoolType;
+
+    /**
+     * 主管单位
+     */
+    private String chargeUnit;
+
+    /**
+     * 所在地城乡类型,见SZDCXLX字典类别
+     */
+    private String cityType;
+
+    /**
+     * 所在地经济属性码,见SZDQJJSX字典类别
+     */
+    private String economicCode;
+
+    /**
+     * 所在地民族属性,见SZDMZSX字典类别
+     */
+    private String raceProperty;
+
+    /**
+     * 学制
+     */
+    private Long educationalSystem;
+
+    /**
+     * 入学年龄
+     */
+    private Long enrolAge;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+    private String tenantId;
+}

+ 17 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/convert/PtSchoolBoConvert.java

@@ -0,0 +1,17 @@
+package org.dromara.backstage.basics.domain.convert;
+
+import io.github.linpeilie.BaseMapper;
+import org.dromara.backstage.api.domain.bo.RemotePtSchoolBo;
+import org.dromara.backstage.basics.domain.bo.PtSchoolBo;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * 用户信息转换器
+ * @author bing
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface PtSchoolBoConvert extends BaseMapper<RemotePtSchoolBo, PtSchoolBo> {
+
+}

+ 75 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/vo/PtSchoolVo.java

@@ -0,0 +1,75 @@
+package org.dromara.backstage.basics.domain.vo;
+
+import org.dromara.backstage.basics.domain.PtSchool;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 单位信息视图对象 t_pt_school
+ *
+ * @author bing
+ * @date 2024-08-06
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PtSchool.class)
+public class PtSchoolVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 学校Id,主键
+     */
+    @ExcelProperty(value = "学校Id,主键")
+    private Long schoolId;
+
+    /**
+     * 学校名称
+     */
+    @ExcelProperty(value = "学校名称")
+    private String schoolName;
+
+    /**
+     * 学校代码
+     */
+    @ExcelProperty(value = "学校代码")
+    private String schoolCode;
+
+    /**
+     * 学校地址
+     */
+    @ExcelProperty(value = "学校地址")
+    private String address;
+
+    /**
+     * 邮政编码
+     */
+    @ExcelProperty(value = "邮政编码")
+    private String postCode;
+
+    /**
+     * 学校官网
+     */
+    @ExcelProperty(value = "学校官网")
+    private String homePage;
+
+    /**
+     * 单位办别,见DWBB字典类别
+     */
+    @ExcelProperty(value = "单位办别,见DWBB字典类别", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "DWBB")
+    private String schoolType;
+
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/mapper/PtSchoolMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.backstage.basics.mapper;
+
+import org.dromara.backstage.basics.domain.PtSchool;
+import org.dromara.backstage.basics.domain.vo.PtSchoolVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 单位信息Mapper接口
+ *
+ * @author bing
+ * @date 2024-08-06
+ */
+public interface PtSchoolMapper extends BaseMapperPlus<PtSchool, PtSchoolVo> {
+
+}

+ 69 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/IPtSchoolService.java

@@ -0,0 +1,69 @@
+package org.dromara.backstage.basics.service;
+
+import org.dromara.backstage.basics.domain.PtSchool;
+import org.dromara.backstage.basics.domain.vo.PtSchoolVo;
+import org.dromara.backstage.basics.domain.bo.PtSchoolBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 单位信息Service接口
+ *
+ * @author bing
+ * @date 2024-08-06
+ */
+public interface IPtSchoolService {
+
+    /**
+     * 查询单位信息
+     *
+     * @param schoolId 主键
+     * @return 单位信息
+     */
+    PtSchoolVo queryById(Long schoolId);
+
+    /**
+     * 分页查询单位信息列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 单位信息分页列表
+     */
+    TableDataInfo<PtSchoolVo> queryPageList(PtSchoolBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的单位信息列表
+     *
+     * @param bo 查询条件
+     * @return 单位信息列表
+     */
+    List<PtSchoolVo> queryList(PtSchoolBo bo);
+
+    /**
+     * 新增单位信息
+     *
+     * @param bo 单位信息
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(PtSchoolBo bo);
+
+    /**
+     * 修改单位信息
+     *
+     * @param bo 单位信息
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(PtSchoolBo bo);
+
+    /**
+     * 校验并批量删除单位信息信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 150 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/impl/PtSchoolServiceImpl.java

@@ -0,0 +1,150 @@
+package org.dromara.backstage.basics.service.impl;
+
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.dromara.system.api.RemoteTenantService;
+import org.dromara.system.api.domain.bo.RemoteSysTenantBo;
+import org.springframework.stereotype.Service;
+import org.dromara.backstage.basics.domain.bo.PtSchoolBo;
+import org.dromara.backstage.basics.domain.vo.PtSchoolVo;
+import org.dromara.backstage.basics.domain.PtSchool;
+import org.dromara.backstage.basics.mapper.PtSchoolMapper;
+import org.dromara.backstage.basics.service.IPtSchoolService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 单位信息Service业务层处理
+ *
+ * @author bing
+ * @date 2024-08-06
+ */
+@RequiredArgsConstructor
+@Service
+public class PtSchoolServiceImpl implements IPtSchoolService {
+
+    private final PtSchoolMapper baseMapper;
+
+    /*@DubboReference
+    private final RemoteTenantService remoteTenantService;*/
+
+    /**
+     * 查询单位信息
+     *
+     * @param schoolId 主键
+     * @return 单位信息
+     */
+    @Override
+    public PtSchoolVo queryById(Long schoolId){
+        return baseMapper.selectVoById(schoolId);
+    }
+
+    /**
+     * 分页查询单位信息列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 单位信息分页列表
+     */
+    @Override
+    public TableDataInfo<PtSchoolVo> queryPageList(PtSchoolBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PtSchool> lqw = buildQueryWrapper(bo);
+        Page<PtSchoolVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的单位信息列表
+     *
+     * @param bo 查询条件
+     * @return 单位信息列表
+     */
+    @Override
+    public List<PtSchoolVo> queryList(PtSchoolBo bo) {
+        LambdaQueryWrapper<PtSchool> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<PtSchool> buildQueryWrapper(PtSchoolBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PtSchool> lqw = Wrappers.lambdaQuery();
+        lqw.like(StringUtils.isNotBlank(bo.getSchoolName()), PtSchool::getSchoolName, bo.getSchoolName());
+        lqw.eq(StringUtils.isNotBlank(bo.getSchoolType()), PtSchool::getSchoolType, bo.getSchoolType());
+        return lqw;
+    }
+
+    /**
+     * 新增单位信息
+     *
+     * @param bo 单位信息
+     * @return 是否新增成功
+     */
+    @Override
+//    @Transactional(rollbackFor = Exception.class)
+    public Boolean insertByBo(PtSchoolBo bo) {
+        PtSchool add = MapstructUtils.convert(bo, PtSchool.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setSchoolId(add.getSchoolId());
+        }
+        //在创建租户的时候创建学校
+        /*RemoteSysTenantBo remoteSysTenantBo = new RemoteSysTenantBo();
+
+        remoteTenantService.insertByBo(remoteSysTenantBo);*/
+        return flag;
+    }
+
+    /**
+     * 修改单位信息
+     *
+     * @param bo 单位信息
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PtSchoolBo bo) {
+        PtSchool update = MapstructUtils.convert(bo, PtSchool.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PtSchool entity){
+        //做一些数据校验,如唯一约束 : 名称一样即重复
+        LambdaQueryWrapper<PtSchool> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(PtSchool::getSchoolName, entity.getSchoolName());
+        wrapper.ne(entity.getSchoolId() !=null,PtSchool::getSchoolId, entity.getSchoolId());
+        if (baseMapper.selectCount(wrapper) > 0) {
+            throw new ServiceException("单位名称已经存在");
+        }
+    }
+
+    /**
+     * 校验并批量删除单位信息信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //学校不能删除
+            return false;
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 47 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/dubbo/RemotePtSchoolServiceImpl.java

@@ -0,0 +1,47 @@
+package org.dromara.backstage.dubbo;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.backstage.api.RemotePtSchoolService;
+import org.dromara.backstage.api.domain.bo.RemotePtSchoolBo;
+import org.dromara.backstage.basics.domain.bo.PtSchoolBo;
+import org.dromara.backstage.basics.service.IPtSchoolService;
+import org.dromara.common.core.enums.UserStatus;
+import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.exception.user.UserException;
+import org.dromara.common.core.utils.DateUtils;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.mybatis.helper.DataPermissionHelper;
+import org.dromara.common.tenant.helper.TenantHelper;
+import org.dromara.system.api.RemoteUserService;
+import org.dromara.system.api.domain.bo.RemoteUserBo;
+import org.dromara.system.api.domain.vo.RemoteUserVo;
+import org.dromara.system.api.model.LoginUser;
+import org.dromara.system.api.model.RoleDTO;
+import org.dromara.system.api.model.XcxLoginUser;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 用户服务
+ *
+ * @author Lion Li
+ */
+@RequiredArgsConstructor
+@Service
+@DubboService
+public class RemotePtSchoolServiceImpl implements RemotePtSchoolService {
+
+    private final IPtSchoolService ptSchoolService;
+
+
+    @Override
+    public Boolean insertByBo(RemotePtSchoolBo bo) {
+        PtSchoolBo ptSchoolBo = MapstructUtils.convert(bo, PtSchoolBo.class);
+        return ptSchoolService.insertByBo(ptSchoolBo);
+    }
+}

+ 46 - 0
ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/basics/customer/PtSchoolMapper.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.backstage.basics.mapper.PtSchoolMapper">
+
+    <resultMap type="org.dromara.backstage.basics.domain.PtSchool" id="PtSchoolResult">
+            <result property="schoolId"    column="school_id"    />
+            <result property="tenantId"    column="tenant_id"    />
+            <result property="schoolName"    column="school_name"    />
+            <result property="schoolCode"    column="school_code"    />
+            <result property="englishName"    column="english_name"    />
+            <result property="address"    column="address"    />
+            <result property="foundYear"    column="found_year"    />
+            <result property="postCode"    column="post_code"    />
+            <result property="administrative"    column="administrative"    />
+            <result property="anniversary"    column="anniversary"    />
+            <result property="officeType"    column="office_type"    />
+            <result property="chargeDept"    column="charge_dept"    />
+            <result property="legalPerson"    column="legal_person"    />
+            <result property="legalCertificate"    column="legal_certificate"    />
+            <result property="masterName"    column="master_name"    />
+            <result property="masterNum"    column="master_num"    />
+            <result property="partyPerson"    column="party_person"    />
+            <result property="orgCode"    column="org_code"    />
+            <result property="telephone"    column="telephone"    />
+            <result property="fax"    column="fax"    />
+            <result property="email"    column="email"    />
+            <result property="homePage"    column="home_page"    />
+            <result property="history"    column="history"    />
+            <result property="schoolType"    column="school_type"    />
+            <result property="chargeUnit"    column="charge_unit"    />
+            <result property="cityType"    column="city_Type"    />
+            <result property="economicCode"    column="economic_code"    />
+            <result property="raceProperty"    column="race_property"    />
+            <result property="educationalSystem"    column="educational_system"    />
+            <result property="enrolAge"    column="enrol_age"    />
+            <result property="remark"    column="remark"    />
+            <result property="delFlag"    column="del_flag"    />
+            <result property="createDept"    column="create_dept"    />
+            <result property="createBy"    column="create_by"    />
+            <result property="createTime"    column="create_time"    />
+            <result property="updateBy"    column="update_by"    />
+            <result property="updateTime"    column="update_time"    />
+    </resultMap>
+</mapper>

+ 6 - 0
ruoyi-modules/ruoyi-system/pom.xml

@@ -107,6 +107,12 @@
             <groupId>cn.com.kingbase</groupId>
             <artifactId>kingbase8</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-api-backstage</artifactId>
+            <version>2.2.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>

+ 7 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteTenantServiceImpl.java

@@ -4,6 +4,7 @@ import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.system.api.RemoteTenantService;
+import org.dromara.system.api.domain.bo.RemoteSysTenantBo;
 import org.dromara.system.api.domain.vo.RemoteTenantVo;
 import org.dromara.system.domain.bo.SysTenantBo;
 import org.dromara.system.domain.vo.SysTenantVo;
@@ -40,4 +41,10 @@ public class RemoteTenantServiceImpl implements RemoteTenantService {
         return MapstructUtils.convert(list, RemoteTenantVo.class);
     }
 
+    @Override
+    public Boolean insertByBo(RemoteSysTenantBo bo) {
+        SysTenantBo tenantBo = MapstructUtils.convert(bo, SysTenantBo.class);
+        return tenantService.insertByBo(tenantBo);
+    }
+
 }

+ 27 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java

@@ -8,6 +8,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.backstage.api.RemotePtSchoolService;
+import org.dromara.backstage.api.domain.bo.RemotePtSchoolBo;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.constant.Constants;
 import org.dromara.common.core.constant.TenantConstants;
@@ -53,6 +56,9 @@ public class SysTenantServiceImpl implements ISysTenantService {
     private final SysDictDataMapper dictDataMapper;
     private final SysConfigMapper configMapper;
 
+    @DubboReference
+    private final RemotePtSchoolService remotePtSchoolService;
+
     /**
      * 查询租户
      */
@@ -186,6 +192,23 @@ public class SysTenantServiceImpl implements ISysTenantService {
             config.setTenantId(tenantId);
         }
         configMapper.insertBatch(sysConfigList);
+
+        //新增学校 一个学校就一个租户
+        try{
+            RemotePtSchoolBo remotePtSchoolBo = new RemotePtSchoolBo();
+            remotePtSchoolBo.setSchoolId(bo.getId());
+            remotePtSchoolBo.setSchoolName(bo.getCompanyName());
+            remotePtSchoolBo.setAddress(bo.getAddress());
+            remotePtSchoolBo.setTelephone(bo.getContactPhone());
+            remotePtSchoolBo.setTenantId(tenantId);
+
+            Boolean aBoolean = remotePtSchoolService.insertByBo(remotePtSchoolBo);
+            if (!aBoolean) {
+                throw new ServiceException("创建学校(单位)失败");
+            }
+        }catch (Exception e){
+            throw new ServiceException("创建学校(单位)失败");
+        }
         return true;
     }
 
@@ -216,7 +239,10 @@ public class SysTenantServiceImpl implements ISysTenantService {
         // 获取租户套餐
         SysTenantPackage tenantPackage = tenantPackageMapper.selectById(packageId);
         if (ObjectUtil.isNull(tenantPackage)) {
-            throw new ServiceException("套餐不存在");
+            tenantPackage = tenantPackageMapper.selectById(TenantConstants.DEFAULT_TENANT_PACKAGE_ID);
+            if(ObjectUtil.isNull(tenantPackage)){
+                throw new ServiceException("套餐不存在");
+            }
         }
         // 获取套餐菜单id
         List<Long> menuIds = StringUtils.splitTo(tenantPackage.getMenuIds(), Convert::toLong);