TRX 1 năm trước cách đây
mục cha
commit
2635ca8774
27 tập tin đã thay đổi với 733 bổ sung111 xóa
  1. 14 17
      FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperModel.java
  2. 7 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperParam.java
  3. 3 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/OrganizationSearchParam.java
  4. 19 19
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/OrganizationSimpleModel.java
  5. 4 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/ProjectOrgModel.java
  6. 6 6
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserCountAddParam.java
  7. 7 3
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserCountSearchParam.java
  8. 40 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/orgModel/OrgSaveParam.java
  9. 30 27
      FullCardClient/src/main/java/com/zhongshu/card/client/model/project/ProjectSaveParam.java
  10. 10 4
      FullCardClient/src/main/java/com/zhongshu/card/client/service/org/OrganizationService.java
  11. 1 2
      FullCardClient/src/main/java/com/zhongshu/card/client/service/org/UserAccountService.java
  12. 1 1
      FullCardClient/src/main/java/com/zhongshu/card/client/type/OrganizationState.java
  13. 19 0
      FullCardClient/src/main/java/com/zhongshu/card/client/type/ProjectType.java
  14. 21 18
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/org/OrganizationController.java
  15. 43 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/org/OrganizationUserController.java
  16. 79 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/orgManager/OrganizationManagerController.java
  17. 1 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/user/UserManagerController.java
  18. 4 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/OrganizationDao.java
  19. 5 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/impl/OrganizationDaoImpl.java
  20. 4 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/impl/UserCountDaoImpl.java
  21. 4 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/impl/CardInfoDaoImpl.java
  22. 8 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/org/Organization.java
  23. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/projectAbout/PayShareList.java
  24. 87 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationServiceImpl.java
  25. 18 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationUserServiceImpl.java
  26. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/UserAccountServiceImpl.java
  27. 296 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/orgManager/OrganizationManagerServiceImpl.java

+ 14 - 17
FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperModel.java

@@ -25,32 +25,29 @@ public class SuperModel implements Serializable {
     @Schema(description = "所属机构ID")
     private String oid;
 
-    @Schema(description = "所属项目oid")
-    private String projectOid;
-
-    @Schema(description = "数据主题的oid")
-    private String aboutOid;
-
-    @Schema(description = "数据主题管理的oid机构类型")
-    private AuthType aboutAuthType;
-
-    @Schema(description = "创建时间")
-    private Long createTime;
-
-    @Schema(description = "最后编辑时间")
-    private Long updateTime;
-
     @Schema(description = "排序", hidden = true)
     private Long sort = 0l;
 
     @Schema(description = "备注")
     private String remark = "";
 
+    @Schema(description = "所属项目oid")
+    private String projectOid;
+//
+//    @Schema(description = "数据主题的oid")
+//    private String aboutOid;
+//
+//    @Schema(description = "数据主题管理的oid机构类型")
+//    private AuthType aboutAuthType;
+
+    @Schema(description = "创建时间")
+    private Long createTime;
+
     @Schema(description = "添加用户名称")
     private String createUserName;
 
-    @Schema(description = "创建用户ID")
-    private String updateUserId;
+    @Schema(description = "最后编辑时间")
+    private Long updateTime;
 
     @Schema(description = "添加用户名称")
     private String updateUserName;

+ 7 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperParam.java

@@ -1,6 +1,7 @@
 package com.zhongshu.card.client.model.base;
 
 import com.github.microservice.auth.security.type.AuthType;
+import io.swagger.v3.oas.annotations.Hidden;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -19,15 +20,18 @@ public class SuperParam implements Serializable {
     private String id = null;
 
     @Schema(description = "所属机构ID", hidden = true)
+    @Hidden
     private String oid;
 
     @Schema(description = "所属项目oid")
     private String projectOid;
 
     @Schema(description = "数据主题的oid")
+    @Hidden
     private String aboutOid;
 
     @Schema(description = "数据主题管理的oid机构类型")
+    @Hidden
     private AuthType aboutAuthType;
 
     @Schema(description = "排序")
@@ -37,11 +41,14 @@ public class SuperParam implements Serializable {
     private String remark;
 
     @Schema(description = "创建用户ID", hidden = true)
+    @Hidden
     private String createUserId;
 
     @Schema(description = "添加用户名称", hidden = true)
+    @Hidden
     private String createUserName;
 
     @Schema(description = "添加用户电话", hidden = true)
+    @Hidden
     private String createPhone;
 }

+ 3 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/OrganizationSearchParam.java

@@ -58,4 +58,7 @@ public class OrganizationSearchParam extends SuperSearch {
 
     @Schema(description = "管理员userId搜索,当用户不是平台管理员时,")
     private String managerUserId;
+
+    @Schema(description = "是否是机构")
+    private Boolean isOrg;
 }

+ 19 - 19
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/OrganizationSimpleModel.java

@@ -16,27 +16,9 @@ public class OrganizationSimpleModel extends SuperModel {
     @Schema(description = "机构名称")
     private String name;
 
-    @Schema(description = "编码、项目ID")
+    @Schema(description = "编码、项目ID、机构编号")
     private String code;
 
-    @Schema(description = "联系人电话")
-    private String contactPhone;
-
-    @Schema(description = "logo")
-    private String logo;
-
-    @Schema(description = "地址")
-    private String address;
-
-    @Schema(description = " 行政区划编码")
-    private String adminDivisionItemCode;
-
-    @Schema(description = "经度")
-    private String mapLon;
-
-    @Schema(description = "纬度")
-    private String mapLat;
-
     @Schema(description = "机构类型")
     private AuthType authType = AuthType.Enterprise;
 
@@ -52,4 +34,22 @@ public class OrganizationSimpleModel extends SuperModel {
         return "";
     }
 
+    @Schema(description = "联系人电话")
+    private String contactPhone;
+//
+//    @Schema(description = "logo")
+//    private String logo;
+//
+//    @Schema(description = "地址")
+//    private String address;
+//
+//    @Schema(description = " 行政区划编码")
+//    private String adminDivisionItemCode;
+//
+//    @Schema(description = "经度")
+//    private String mapLon;
+//
+//    @Schema(description = "纬度")
+//    private String mapLat;
+
 }

+ 4 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/ProjectOrgModel.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.client.model.org;
 
+import com.zhongshu.card.client.type.ProjectType;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -13,6 +14,9 @@ import java.util.List;
 @Data
 public class ProjectOrgModel extends OrganizationModel {
 
+    @Schema(description = "项目类型")
+    private ProjectType dataAuthType;
+
     @Schema(description = "学校数量")
     private Long schoolNumber = 0L;
 

+ 6 - 6
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserCountAddParam.java

@@ -36,7 +36,7 @@ public class UserCountAddParam extends SuperParam {
     private String address;
 
     @Schema(description = "证件类型")
-    CertificateType certificateType = CertificateType.IDCard;
+    private CertificateType certificateType = CertificateType.IDCard;
 
     @Schema(description = "证件号码")
     private String cardNumber;
@@ -51,14 +51,14 @@ public class UserCountAddParam extends SuperParam {
     private OrganizationUserType userType = OrganizationUserType.Teacher;
 
     @Schema(description = "用户状态")
-    UserState state = UserState.Normal;
+    private UserState state = UserState.Normal;
 
     @Schema(description = "部门信息")
-    String departmentId;
+    private String departmentId;
 
-    @Schema(description = "角色信息")
-    List<String> roleIds;
+    @Schema(description = "角色信息-人员类型")
+    private List<String> roleIds;
 
     @Schema(description = "密码")
-    String passWord;
+    private String passWord;
 }

+ 7 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserCountSearchParam.java

@@ -14,6 +14,7 @@ import lombok.Data;
  */
 @Data
 public class UserCountSearchParam extends SuperSearch {
+
     @Schema(description = "用户ID(由鉴权中心颁发)")
     private String userId;
 
@@ -39,11 +40,14 @@ public class UserCountSearchParam extends SuperSearch {
     private String address;
 
     @Schema(description = "用户状态")
-    UserState state = UserState.Normal;
+    private UserState state = UserState.Normal;
 
     @Schema(description = "可登录端类型")
-    UserLoginType loginType = UserLoginType.All;
+    private UserLoginType loginType = UserLoginType.All;
 
     @Schema(description = "用户类型")
-    UserType userType;
+    private UserType userType;
+
+    @Schema(description = "搜索")
+    private String keyWord;
 }

+ 40 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/orgModel/OrgSaveParam.java

@@ -0,0 +1,40 @@
+package com.zhongshu.card.client.model.orgModel;
+
+import com.github.microservice.auth.security.type.AuthType;
+import com.zhongshu.card.client.model.base.SuperParam;
+import com.zhongshu.card.client.type.OrganizationState;
+import com.zhongshu.card.client.type.ProjectType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 保存机构信息的模型
+ *
+ * @author TRX
+ * @date 2024/5/31
+ */
+@Data
+public class OrgSaveParam extends SuperParam {
+
+    @Schema(description = "机构名称", required = true)
+    @NotEmpty(message = "name不能为空")
+    private String name;
+
+    @NotEmpty
+    @Schema(description = "编码、项目ID")
+    private String code;
+
+    @NotNull
+    @Schema(description = "机构类型")
+    private AuthType authType = AuthType.Enterprise;
+
+    @NotNull
+    @Schema(description = "机构状态")
+    private OrganizationState state = OrganizationState.Normal;
+
+}

+ 30 - 27
FullCardClient/src/main/java/com/zhongshu/card/client/model/project/ProjectSaveParam.java

@@ -3,6 +3,8 @@ package com.zhongshu.card.client.model.project;
 import com.github.microservice.auth.security.type.AuthType;
 import com.zhongshu.card.client.model.base.SuperParam;
 import com.zhongshu.card.client.type.OrganizationState;
+import com.zhongshu.card.client.type.ProjectType;
+import io.swagger.v3.oas.annotations.Hidden;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotEmpty;
 import jakarta.validation.constraints.NotNull;
@@ -28,12 +30,12 @@ public class ProjectSaveParam extends SuperParam {
     @Schema(description = "编码、项目ID")
     private String code;
 
-    @NotNull
     @Schema(description = "机构类型")
+    @Hidden
     private AuthType authType = AuthType.Enterprise;
 
     @Schema(description = "项目类型")
-    private AuthType dataAuthType;
+    private ProjectType dataAuthType;
 
     @NotNull
     @Schema(description = "机构状态")
@@ -42,30 +44,31 @@ public class ProjectSaveParam extends SuperParam {
     @Schema(description = "管理员userId")
     private List<String> managerUserIds = new ArrayList<>();
 
-    @Schema(description = "统一社会信用代码")
-    private String orgCode;
-
-    @Schema(description = "联系人邮箱")
-    private String contactEmail;
-
-    @Schema(description = "联系人-用来初始管理员")
-    private String contactName;
-
-    @Schema(description = "联系人电话", required = false)
-    private String contactPhone;
-
-    @Schema(description = "logo")
-    private String logo;
-
-    @Schema(description = " 行政区划编码,01,02,03")
-    private String adminDivisionItemCode;
-
-    @Schema(description = "地址")
-    private String address;
-
-    @Schema(description = "经度")
-    private String mapLon;
 
-    @Schema(description = "纬度")
-    private String mapLat;
+//    @Schema(description = "统一社会信用代码")
+//    private String orgCode;
+
+//    @Schema(description = "联系人邮箱")
+//    private String contactEmail;
+
+//    @Schema(description = "联系人-用来初始管理员")
+//    private String contactName;
+//
+//    @Schema(description = "联系人电话", required = false)
+//    private String contactPhone;
+
+//    @Schema(description = "logo")
+//    private String logo;
+
+//    @Schema(description = " 行政区划编码,01,02,03")
+//    private String adminDivisionItemCode;
+//
+//    @Schema(description = "地址")
+//    private String address;
+//
+//    @Schema(description = "经度")
+//    private String mapLon;
+//
+//    @Schema(description = "纬度")
+//    private String mapLat;
 }

+ 10 - 4
FullCardClient/src/main/java/com/zhongshu/card/client/service/org/OrganizationService.java

@@ -1,8 +1,8 @@
 package com.zhongshu.card.client.service.org;
 
 import com.github.microservice.auth.security.type.AuthType;
-import com.zhongshu.card.client.model.org.*;
 import com.github.microservice.net.ResultContent;
+import com.zhongshu.card.client.model.org.*;
 import com.zhongshu.card.client.model.project.ProjectSaveParam;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -28,6 +28,15 @@ public interface OrganizationService {
      */
     ResultContent<Page<ProjectOrgModel>> pageProject(OrganizationSearchParam param, Pageable pageable);
 
+    /**
+     * 得到项目详情
+     * @param oid
+     * @return
+     */
+    ResultContent<ProjectOrgModel> getProjectDetail(String oid);
+
+    ResultContent  deleteProject(String oid);
+
     /**
      * 通用添加结构信息
      *
@@ -64,9 +73,6 @@ public interface OrganizationService {
     // 查询结构详情
     ResultContent<OrganizationSimpleModel> getDetail(String oid);
 
-    // 得到项目的信息
-    ResultContent<ProjectOrgModel> getProjectDetail(String projectOid);
-
     // 得到学校详情
     ResultContent<OrganizationModel> getSchoolDetail(String schoolOid);
 

+ 1 - 2
FullCardClient/src/main/java/com/zhongshu/card/client/service/org/UserAccountService.java

@@ -17,8 +17,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
 public interface UserAccountService {
 
     @Operation(summary = "编辑-添加用户", description = "编辑添加用户")
-    @RequestMapping(value = "update", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
-    ResultContent update(@RequestBody UserCountAddParam param);
+    ResultContent update(UserCountAddParam param);
 
     // 注册基本用户
     ResultContent<String> registerUserAccount(RegisterUserAccountParam param);

+ 1 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/type/OrganizationState.java

@@ -8,7 +8,7 @@ import lombok.Getter;
 public enum OrganizationState {
 
     Normal("正常"),
-    Locked("锁定"),
+    Locked("禁用"),
     Frozen("冻结"),
     ;
 

+ 19 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/type/ProjectType.java

@@ -0,0 +1,19 @@
+package com.zhongshu.card.client.type;
+
+import lombok.Getter;
+
+/**
+ * 字典类型
+ */
+public enum ProjectType {
+    School("学校"),
+    Hospital("医院"),
+    ;
+
+    @Getter
+    private String remark;
+
+    ProjectType(String remark) {
+        this.remark = remark;
+    }
+}

+ 21 - 18
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/org/OrganizationController.java

@@ -44,21 +44,29 @@ public class OrganizationController {
     @ResourceAuth(value = AuthConstant.SuperAdmin, type = AuthType.Platform)
     @Operation(summary = "项目列表-分页查询", description = "项目列表-分页查询")
     @RequestMapping(value = {"pageProject"}, method = {RequestMethod.POST})
-    public ResultContent<Page<ProjectOrgModel>> pageProject(
-            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
-            @Parameter(required = false) OrganizationSearchParam param) {
+    public ResultContent<Page<ProjectOrgModel>> pageProject(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable, @Parameter(required = false) OrganizationSearchParam param) {
         param.setAuthType(AuthType.Project);
         return organizationService.pageProject(param, pageable);
     }
 
     @ResourceAuth(value = "user", type = AuthType.User)
-    @ResourceAuth(value = AuthConstant.SuperAdmin, type = AuthType.Platform)
-    @Operation(summary = "项目-编辑", description = "项目-编辑")
-    @RequestMapping(value = "updateProject", method = {RequestMethod.POST})
-    public ResultContent updateProject(@RequestBody ProjectUpdateParam param) {
-        return this.organizationService.updateProject(param);
+    @Operation(summary = "得到项目详情", description = "得到项目详情")
+    @RequestMapping(value = "getProjectDetail", method = {RequestMethod.GET})
+    public ResultContent<ProjectOrgModel> getProjectDetail(@Parameter(name = "oid", description = "机构oid", example = "") @RequestParam("oid") String oid) {
+        Assert.hasText(oid, "oid不能为空");
+        return this.organizationService.getProjectDetail(oid);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "删除项目信息", description = "删除项目信息")
+    @RequestMapping(value = "deleteProject", method = {RequestMethod.GET})
+    public ResultContent<ProjectOrgModel> deleteProject(@Parameter(name = "oid", description = "机构oid", example = "") @RequestParam("oid") String oid) {
+        Assert.hasText(oid, "oid不能为空");
+        return this.organizationService.deleteProject(oid);
     }
 
+
+    //-----------------------------old start ---------------------------
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "得到平台管理端的机构数据", description = "得到平台管理端的机构数据")
     @RequestMapping(value = "getPlatformInfo", method = {RequestMethod.GET})
@@ -66,6 +74,7 @@ public class OrganizationController {
         return this.organizationService.getPlatformInfo();
     }
 
+
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "得到机构详情", description = "得到机构详情--学校、商户")
     @RequestMapping(value = "getOrgDetail", method = {RequestMethod.GET})
@@ -98,25 +107,21 @@ public class OrganizationController {
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "学校列表-分页查询", description = "学校列表-分页查询")
     @RequestMapping(value = {"pageSchool"}, method = {RequestMethod.POST})
-    public ResultContent<Page<OrganizationModel>> pageSchool(
-            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
-            @Parameter(required = false) OrganizationSearchParam param) {
+    public ResultContent<Page<OrganizationModel>> pageSchool(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable, @Parameter(required = false) OrganizationSearchParam param) {
         param.setAuthType(AuthType.School);
         return organizationService.page(param, pageable);
     }
 
     @Operation(summary = "得到所有可用的学校数据", description = "得到可用的学校数据")
     @RequestMapping(value = {"getUsableSchool"}, method = {RequestMethod.POST})
-    public ResultContent<List<OrganizationSimpleModel>> getUsableSchool(
-            @Parameter(required = false) OrganizationSearchParam param) {
+    public ResultContent<List<OrganizationSimpleModel>> getUsableSchool(@Parameter(required = false) OrganizationSearchParam param) {
         param.setAuthType(AuthType.School);
         return organizationService.list(param);
     }
 
     @Operation(summary = "得到可用的商户数据", description = "得到可用的商户数据")
     @RequestMapping(value = {"getUsableShop"}, method = {RequestMethod.POST})
-    public ResultContent<List<OrganizationSimpleModel>> getUsableShop(
-            @Parameter(required = false) OrganizationSearchParam param) {
+    public ResultContent<List<OrganizationSimpleModel>> getUsableShop(@Parameter(required = false) OrganizationSearchParam param) {
         param.setAuthType(AuthType.BusinessMain);
         return organizationService.list(param);
     }
@@ -145,9 +150,7 @@ public class OrganizationController {
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "商户列表-分页查询", description = "商户列表-分页查询")
     @RequestMapping(value = {"pageShop"}, method = {RequestMethod.POST})
-    public ResultContent<Page<OrganizationModel>> pageShop(
-            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
-            @Parameter(required = false) OrganizationSearchParam param) {
+    public ResultContent<Page<OrganizationModel>> pageShop(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable, @Parameter(required = false) OrganizationSearchParam param) {
         param.setAuthType(AuthType.BusinessMain);
         return organizationService.page(param, pageable);
     }

+ 43 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/org/OrganizationUserController.java

@@ -0,0 +1,43 @@
+package com.zhongshu.card.server.core.controller.org;
+
+import com.github.microservice.auth.client.constant.AuthConstant;
+import com.github.microservice.auth.security.annotations.ResourceAuth;
+import com.github.microservice.auth.security.type.AuthType;
+import com.github.microservice.net.ResultContent;
+import com.zhongshu.card.client.model.base.OidModel;
+import com.zhongshu.card.client.model.org.*;
+import com.zhongshu.card.client.model.project.ProjectSaveParam;
+import com.zhongshu.card.client.service.org.OrganizationService;
+import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.util.Assert;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@RestController
+@RequestMapping("organization")
+@Tag(name = "机构管理")
+public class OrganizationUserController {
+
+    @Autowired
+    private OrganizationUserServiceImpl organizationUserService;
+
+    //------------------------------项目管理 start----------------------
+    @ResourceAuth(value = "saveProjectInfo", type = AuthType.Platform, remark = "项目管理_保存项目_1_Button")
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @ResourceAuth(value = AuthConstant.SuperAdmin, type = AuthType.Platform)
+    @Operation(summary = "项目-保存", description = "项目-保存")
+    @RequestMapping(value = "addProjectUser", method = {RequestMethod.POST})
+    public ResultContent addProjectUser(@RequestBody @Valid UserCountAddParam param) {
+        return this.organizationUserService.addProjectUser(param);
+    }
+
+}

+ 79 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/orgManager/OrganizationManagerController.java

@@ -0,0 +1,79 @@
+package com.zhongshu.card.server.core.controller.orgManager;
+
+import com.github.microservice.auth.client.constant.AuthConstant;
+import com.github.microservice.auth.security.annotations.ResourceAuth;
+import com.github.microservice.auth.security.type.AuthType;
+import com.github.microservice.net.ResultContent;
+import com.zhongshu.card.client.model.base.OidModel;
+import com.zhongshu.card.client.model.base.ProjectOidParam;
+import com.zhongshu.card.client.model.org.*;
+import com.zhongshu.card.client.model.orgModel.OrgSaveParam;
+import com.zhongshu.card.client.model.project.ProjectSaveParam;
+import com.zhongshu.card.client.service.org.OrganizationService;
+import com.zhongshu.card.server.core.service.orgManager.OrganizationManagerServiceImpl;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.util.Assert;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@RestController
+@RequestMapping("organizationManager")
+@Tag(name = "机构管理")
+public class OrganizationManagerController {
+
+    @Autowired
+    private OrganizationService organizationService;
+
+    @Autowired
+    private OrganizationManagerServiceImpl organizationManagerService;
+
+    //------------------------------机构管理 start----------------------
+    @ResourceAuth(value = "saveOrgInfo", type = AuthType.Platform, remark = "项目管理_保存项目_1_Button")
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @ResourceAuth(value = AuthConstant.SuperAdmin, type = AuthType.Platform)
+    @Operation(summary = "机构信息-保存", description = "机构信息-保存")
+    @RequestMapping(value = "saveOrgInfo", method = {RequestMethod.POST})
+    public ResultContent saveOrgInfo(@RequestBody @Valid OrgSaveParam param) {
+        return this.organizationManagerService.saveOrgInfo(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @ResourceAuth(value = AuthConstant.SuperAdmin, type = AuthType.Platform)
+    @Operation(summary = "机构列表-分页查询", description = "机构列表-分页查询")
+    @RequestMapping(value = {"orgPage"}, method = {RequestMethod.POST})
+    public ResultContent<Page<OrganizationSimpleModel>> orgPage(
+            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+            @Parameter(required = false) OrganizationSearchParam param) {
+        return organizationManagerService.orgPage(param, pageable);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "得到项目下所有的机构列表数据", description = "得到项目下所有的机构列表数据")
+    @RequestMapping(value = "getProjectOrgList", method = {RequestMethod.POST})
+    public ResultContent<List<OrganizationSimpleModel>> getProjectOrgList(@RequestBody ProjectOidParam param) {
+        return this.organizationManagerService.getProjectOrgList(param.getProjectOid());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "得到机构详情", description = "得到机构详情")
+    @RequestMapping(value = "getOrgDetail", method = {RequestMethod.POST})
+    public ResultContent<OrganizationSimpleModel> getOrgDetail(@RequestBody OidModel param) {
+        return this.organizationManagerService.getOrgDetail(param.getOid());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "删除机构信息", description = "删除机构信息")
+    @RequestMapping(value = "deleteOrg", method = {RequestMethod.POST})
+    public ResultContent deleteOrg(@RequestBody OidModel param) {
+        return this.organizationManagerService.deleteOrg(param.getOid());
+    }
+
+}

+ 1 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/user/UserManagerController.java

@@ -91,6 +91,7 @@ public class UserManagerController {
         return userAccountService.list(param, pageable);
     }
 
+
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "重置用户密码", description = "重置用户密码(重置为默认密码)")
     @RequestMapping(value = {"resetPassWord"}, method = {RequestMethod.POST})

+ 4 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/OrganizationDao.java

@@ -18,6 +18,10 @@ public interface OrganizationDao extends MongoDao<Organization>, OrganizationDao
 
     Organization findTopByOid(String oid);
 
+    List<Organization> findByProjectOidAndIsOrg(String projectOid, Boolean isOrg);
+
+    int countByProjectOid(String projectOid, Boolean isOrg);
+
     Organization findTopByNameAndAuthType(String name, AuthType authType);
 
     List<Organization> findByOidIn(List<String> oids);

+ 5 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/impl/OrganizationDaoImpl.java

@@ -65,6 +65,11 @@ public class OrganizationDaoImpl extends BaseImpl implements OrganizationDaoExte
             criteria.and("projectOid").is(param.getProjectOid());
         }
 
+        // 是否是机构数据
+        if (param.getIsOrg() != null) {
+            criteria.and("isOrg").is(param.getIsOrg());
+        }
+
         if (StringUtils.isNotEmpty(param.getManagerUserId())) {
             Pattern pattern = Pattern.compile("^.*" + param.getManagerUserId() + ".*$");
             criteria.and("managerUserIds").is(pattern);

+ 4 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/impl/UserCountDaoImpl.java

@@ -73,10 +73,10 @@ public class UserCountDaoImpl extends BaseImpl implements UserCountDaoExtend {
             criteria.andOperator(criterias.toArray(new Criteria[]{}));
         }
 
-//        if (StringUtils.isNotEmpty(param.getTitle())) {
-//            Pattern pattern = Pattern.compile("^.*" + param.getTitle() + ".*$");
-//            criteria.orOperator(Criteria.where("name").regex(pattern), Criteria.where("content").regex(pattern));
-//        }
+        if (StringUtils.isNotEmpty(param.getKeyWord())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getKeyWord() + ".*$");
+            criteria.orOperator(Criteria.where("name").regex(pattern), Criteria.where("phone").regex(pattern));
+        }
 
         criteria.and("isDelete").is(Boolean.FALSE);
         Sort sort = buildSort(param);

+ 4 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/impl/CardInfoDaoImpl.java

@@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.util.CollectionUtils;
@@ -30,6 +31,9 @@ public class CardInfoDaoImpl extends BaseImpl implements CardInfoDaoExtend {
     @Autowired
     private DBHelper dbHelper;
 
+    @Autowired
+    MongoTemplate mongoTemplate;
+
     @Override
     public Page<CardInfo> page(Pageable pageable, CardInfoSearch param) {
         Criteria criteria = new Criteria();

+ 8 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/org/Organization.java

@@ -2,6 +2,7 @@ package com.zhongshu.card.server.core.domain.org;
 
 import com.github.microservice.auth.security.type.AuthType;
 import com.zhongshu.card.client.type.OrganizationState;
+import com.zhongshu.card.client.type.ProjectType;
 import com.zhongshu.card.server.core.domain.base.SuperMain;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
@@ -36,11 +37,17 @@ public class Organization extends SuperMain {
     private AuthType authType = AuthType.Enterprise;
 
     @Schema(description = "项目类型")
-    private AuthType dataAuthType;
+    private ProjectType dataAuthType;
+
+    @Schema(description = "状态")
+    private OrganizationState state = OrganizationState.Normal;
 
     @Schema(description = "管理员userId")
     private List<String> managerUserIds = new ArrayList<>();
 
+    @Schema(description = "是否是机构类型")
+    private Boolean isOrg = Boolean.FALSE;
+
     @Schema(description = "统一社会信用代码")
     @Indexed
     private String orgCode;
@@ -72,9 +79,6 @@ public class Organization extends SuperMain {
     @Schema(description = "纬度")
     private String mapLat;
 
-    @Schema(description = "状态")
-    private OrganizationState state = OrganizationState.Normal;
-
     public static Organization build(String id) {
         Organization entity = new Organization();
         entity.setId(id);

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/projectAbout/PayShareList.java

@@ -15,7 +15,7 @@ import org.springframework.data.mongodb.core.mapping.Document;
 import java.math.BigDecimal;
 
 /**
- * 自营支付
+ * 分账规则
  *
  * @author TRX
  * @date 2024/9/25

+ 87 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationServiceImpl.java

@@ -24,6 +24,7 @@ import com.zhongshu.card.server.core.dao.org.*;
 import com.zhongshu.card.server.core.dataConfig.CardSystemDefault;
 import com.zhongshu.card.server.core.domain.org.*;
 import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.service.orgManager.OrganizationManagerServiceImpl;
 import com.zhongshu.card.server.core.service.projectAbout.ProjectCommonConfigService;
 import com.zhongshu.card.server.core.service.projectAbout.ProjectIotInfoService;
 import com.zhongshu.card.server.core.service.projectAbout.ProjectWeChatInfoService;
@@ -112,6 +113,10 @@ public class OrganizationServiceImpl extends SuperService implements Organizatio
     @Autowired
     ProjectCommonConfigService projectCommonConfigService;
 
+    @Autowired
+    OrganizationManagerServiceImpl organizationManagerService;
+
+
     /**
      * 保存项目信息
      *
@@ -120,6 +125,65 @@ public class OrganizationServiceImpl extends SuperService implements Organizatio
      */
     @Transactional
     public ResultContent saveProjectInfo(ProjectSaveParam param) {
+        AuthType authType = param.getAuthType();
+        String code = param.getCode();
+        if (StringUtils.isEmpty(code)) {
+            code = NextNoUtil.getNextNo(authType.getCode().toUpperCase());
+            param.setCode(code);
+        }
+        String name = param.getName();
+        if (ObjectUtils.isEmpty(param.getManagerUserIds())) {
+            return ResultContent.buildFail("项目负责人不能为空");
+        }
+        String currentOid = getCurrentOid();
+        List<UserAccount> userAccounts = userAccountService.getUserAccounts(param.getManagerUserIds());
+        if (userAccounts.size() != param.getManagerUserIds().size()) {
+            return ResultContent.buildFail("managerUserIds错误");
+        }
+        Organization organization = null;
+        Organization nameOrganization = organizationDao.findTopByNameAndAuthType(name, authType);
+        if (StringUtils.isNotEmpty(param.getId())) {
+            organization = organizationDao.findTopById(param.getId());
+            if (ObjectUtils.isEmpty(organization)) {
+                return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+            }
+            if (ObjectUtils.isNotEmpty(nameOrganization) && !nameOrganization.getId().equals(organization.getId())) {
+                return ResultContent.buildFail(String.format(ResultMessage.NAME_EXIST, param.getName()));
+            }
+            BeanUtils.copyProperties(param, organization, "code");
+            initUpdateEntity(organization);
+        } else {
+            if (ObjectUtils.isNotEmpty(nameOrganization)) {
+                return ResultContent.buildFail(String.format(ResultMessage.NAME_EXIST, param.getName()));
+            }
+            // 初始权限中心的项目(机构)信息
+            ResultContent<String> initOrgContent = authCenterAddOrgInfo(name, authType, param.getRemark());
+            if (initOrgContent.isFailed()) {
+                return ResultContent.buildFail(initOrgContent.getMsg());
+            }
+            String oid = initOrgContent.getContent();
+            organization = new Organization();
+            BeanUtils.copyProperties(param, organization);
+            initEntityNoCheckOid(organization);
+
+            organization.setOid(oid);
+            organization.setProjectOid(oid);
+            organization.setAboutOid(currentOid);
+            organization.setCreateUserId(getCurrentUserId());
+            organizationDao.save(organization);
+        }
+        organizationUserServiceImpl.orgBindManager(organization, userAccounts);
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 保存机构信息
+     *
+     * @param param
+     * @return
+     */
+    @Transactional
+    public ResultContent saveOrg(ProjectSaveParam param) {
         AuthType authType = param.getAuthType();
         String code = param.getCode();
         if (StringUtils.isEmpty(code)) {
@@ -201,7 +265,7 @@ public class OrganizationServiceImpl extends SuperService implements Organizatio
      * @param remark
      * @return
      */
-    private ResultContent<String> authCenterAddOrgInfo(String name, AuthType authType, String remark) {
+    public ResultContent<String> authCenterAddOrgInfo(String name, AuthType authType, String remark) {
         String oid = "";
         com.github.microservice.auth.client.model.OrganizationModel organizationModel = new com.github.microservice.auth.client.model.OrganizationModel();
         organizationModel.setName(name);
@@ -525,10 +589,30 @@ public class OrganizationServiceImpl extends SuperService implements Organizatio
         if (ObjectUtils.isEmpty(organization)) {
             return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, projectOid));
         }
-        OrganizationModel model = toProjectModel(organization);
+        ProjectOrgModel model = toProjectModel(organization);
         return ResultContent.buildSuccess(model);
     }
 
+    @Override
+    public ResultContent deleteProject(String projectOid) {
+        Organization organization = organizationDao.findTopByOid(projectOid);
+        if (ObjectUtils.isEmpty(organization)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, projectOid));
+        }
+
+        // 判断项目是否可以删除
+        long count = organizationManagerService.countProjectOrgNumber(projectOid);
+        if (count > 0) {
+            return ResultContent.buildFail(String.format("%s 项目下包含机构,不能删除", organization.getName()));
+        }
+        // 删除项目信息
+        organizationDao.delete(organization);
+
+        // 删除项目关联的信息
+
+        return ResultContent.buildSuccess();
+    }
+
     /**
      * 得到学校详情
      *
@@ -616,8 +700,7 @@ public class OrganizationServiceImpl extends SuperService implements Organizatio
                     // 如果是商户
                     shopOid = oid;
                     // 商户绑定的学校信息
-                    OrganizationRelation relation = organizationRelationDao.findTopByMainOrganizationAndRelationType(
-                            organization, OrganizationRelationType.ShopToSchool);
+                    OrganizationRelation relation = organizationRelationDao.findTopByMainOrganizationAndRelationType(organization, OrganizationRelationType.ShopToSchool);
                     if (ObjectUtils.isNotEmpty(relation)) {
                         Organization schoolOrg = relation.getRelOrganization();
                         if (ObjectUtils.isNotEmpty(schoolOrg)) {

+ 18 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationUserServiceImpl.java

@@ -5,6 +5,7 @@ import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.client.model.org.DepartmentModel;
 import com.zhongshu.card.client.model.org.OrganizationUserModel;
 import com.zhongshu.card.client.model.org.OrganizationUserSimpleModel;
+import com.zhongshu.card.client.model.org.UserCountAddParam;
 import com.zhongshu.card.client.model.school.RegisterBindSchoolParam;
 import com.zhongshu.card.client.type.OrganizationUserType;
 import com.zhongshu.card.client.type.UserState;
@@ -50,6 +51,23 @@ public class OrganizationUserServiceImpl extends SuperService {
     @Autowired
     private RoleDao roleDao;
 
+    /**
+     * 项目添加用户
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent addProjectUser(UserCountAddParam param) {
+        String projectOid = param.getProjectOid();
+        Organization projectInfo = organizationDao.findTopByOid(projectOid);
+        if (ObjectUtils.isEmpty(projectInfo)) {
+            return ResultContent.buildFail(String.format("项目不存在:%s", projectOid));
+        }
+
+
+        return ResultContent.buildSuccess();
+    }
+
     /**
      * 绑定结构管理员 (已新的为准,以前的删除掉)
      *

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/UserAccountServiceImpl.java

@@ -233,7 +233,7 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
         organizationUser.setDepartment(department);
         organizationUserDao.save(organizationUser);
 
-        // 权限中心
+        // 权限中心 绑定用户
         com.github.microservice.auth.client.content.ResultContent<Void> resultContent = organizationUserService.update(organization.getOid(), new String[]{userId});
         if (resultContent.getState() == ResultState.Success) {
             log.info("权限中心:绑定机构和用户关系成功");

+ 296 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/orgManager/OrganizationManagerServiceImpl.java

@@ -0,0 +1,296 @@
+package com.zhongshu.card.server.core.service.orgManager;
+
+import com.github.microservice.auth.client.constant.AuthConstant;
+import com.github.microservice.auth.client.content.ResultState;
+import com.github.microservice.auth.client.model.RoleGroupModel;
+import com.github.microservice.auth.client.model.RoleModel;
+import com.github.microservice.auth.client.model.UserAuthModel;
+import com.github.microservice.auth.client.model.UserModel;
+import com.github.microservice.auth.client.service.OrganizationUserService;
+import com.github.microservice.auth.client.service.RoleService;
+import com.github.microservice.auth.client.service.UserService;
+import com.github.microservice.auth.client.type.LoginType;
+import com.github.microservice.auth.security.helper.AuthHelper;
+import com.github.microservice.auth.security.type.AuthType;
+import com.github.microservice.components.data.base.util.PageEntityUtil;
+import com.github.microservice.net.ResultContent;
+import com.github.microservice.net.ResultMessage;
+import com.zhongshu.card.client.model.org.*;
+import com.zhongshu.card.client.model.orgModel.OrgSaveParam;
+import com.zhongshu.card.client.model.project.ProjectSaveParam;
+import com.zhongshu.card.client.service.org.OrganizationService;
+import com.zhongshu.card.client.type.*;
+import com.zhongshu.card.client.utils.DateUtils;
+import com.zhongshu.card.server.core.dao.org.*;
+import com.zhongshu.card.server.core.dataConfig.CardSystemDefault;
+import com.zhongshu.card.server.core.domain.org.*;
+import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.service.org.*;
+import com.zhongshu.card.server.core.service.projectAbout.ProjectCommonConfigService;
+import com.zhongshu.card.server.core.service.projectAbout.ProjectIotInfoService;
+import com.zhongshu.card.server.core.service.projectAbout.ProjectWeChatInfoService;
+import com.zhongshu.card.server.core.service.sync.ProjectSyncIotCenterService;
+import com.zhongshu.card.server.core.util.BeanUtils;
+import com.zhongshu.card.server.core.util.NextNoUtil;
+import com.zhongshu.card.server.core.util.ValidateResult;
+import com.zhongshu.card.server.core.util.ValidateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * 机构管理
+ *
+ * @author TRX
+ * @date 2024/5/31
+ */
+@Slf4j
+@Service
+public class OrganizationManagerServiceImpl extends SuperService {
+
+    @Autowired
+    OrganizationDao organizationDao;
+
+    @Autowired
+    com.github.microservice.auth.client.service.OrganizationService organizationService;
+
+    @Autowired
+    OrganizationUserService organizationUserService;
+
+    @Autowired
+    RoleService roleService;
+
+    @Autowired
+    UserService userService;
+
+    @Autowired
+    UserCountDao userCountDao;
+
+    @Autowired
+    UserAccountServiceImpl userAccountService;
+
+    @Autowired
+    private OrganizationUserDao organizationUserDao;
+
+    @Autowired
+    RoleDao roleDao;
+
+    @Autowired
+    DepartmentServiceImpl departmentService;
+
+    @Autowired
+    AuthHelper authHelper;
+
+    @Autowired
+    RegionDao regionDao;
+
+    @Autowired
+    OrganizationRelationDao organizationRelationDao;
+
+    @Autowired
+    ProjectSyncIotCenterService projectSyncIotCenterService;
+
+    @Autowired
+    OrganizationUserServiceImpl organizationUserServiceImpl;
+
+    @Autowired
+    RoleServiceImpl roleServiceImpl;
+
+    @Autowired
+    ProjectIotInfoService projectIotInfoService;
+
+    @Autowired
+    ProjectWeChatInfoService projectWeChatInfoService;
+
+    @Autowired
+    ProjectCommonConfigService projectCommonConfigService;
+
+    @Autowired
+    OrganizationServiceImpl organizationServiceImpl;
+
+    /**
+     * 保存项目 下的机构信息
+     *
+     * @param param
+     * @return
+     */
+    @Transactional
+    public ResultContent saveOrgInfo(OrgSaveParam param) {
+        AuthType authType = param.getAuthType();
+        if (authType == AuthType.User || authType == AuthType.Platform
+                || authType == AuthType.Project) {
+            return ResultContent.buildFail("authType 类型错误");
+        }
+        // 项目信息
+        ResultContent<Organization> checkProjectContent = checkProject(param.getProjectOid());
+        if (checkProjectContent.isFailed()) {
+            return ResultContent.buildFail(checkProjectContent.getMsg());
+        }
+        Organization projectInfo = checkProjectContent.getContent();
+
+        String code = param.getCode();
+        if (StringUtils.isEmpty(code)) {
+            code = NextNoUtil.getNextNo(authType.getCode().toUpperCase());
+            param.setCode(code);
+        }
+        String name = param.getName();
+
+        Organization organization = null;
+        Organization nameOrganization = organizationDao.findTopByNameAndAuthType(name, authType);
+        if (StringUtils.isNotEmpty(param.getId())) {
+            organization = organizationDao.findTopById(param.getId());
+            if (ObjectUtils.isEmpty(organization)) {
+                return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+            }
+            if (ObjectUtils.isNotEmpty(nameOrganization) && !nameOrganization.getId().equals(organization.getId())) {
+                return ResultContent.buildFail(String.format(ResultMessage.NAME_EXIST, param.getName()));
+            }
+            BeanUtils.copyProperties(param, organization, "code");
+            initUpdateEntity(organization);
+        } else {
+            if (ObjectUtils.isNotEmpty(nameOrganization)) {
+                return ResultContent.buildFail(String.format(ResultMessage.NAME_EXIST, param.getName()));
+            }
+            // 初始权限中心的机构信息
+            ResultContent<String> initOrgContent = organizationServiceImpl.authCenterAddOrgInfo(name, authType, param.getRemark());
+            if (initOrgContent.isFailed()) {
+                return ResultContent.buildFail(initOrgContent.getMsg());
+            }
+            String oid = initOrgContent.getContent();
+            organization = new Organization();
+            BeanUtils.copyProperties(param, organization);
+            initEntityNoCheckOid(organization);
+            organization.setIsOrg(Boolean.TRUE);
+
+            organization.setOid(oid);
+            organization.setProjectOid(projectInfo.getOid());
+            organization.setAboutOid(projectInfo.getOid());
+            organization.setAboutAuthType(projectInfo.getAuthType());
+            organizationDao.save(organization);
+        }
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 机构列表
+     *
+     * @param param
+     * @param pageable
+     * @return
+     */
+    public ResultContent<Page<OrganizationSimpleModel>> orgPage(OrganizationSearchParam param, Pageable pageable) {
+        initSearchParam(param);
+        param.setIsOrg(Boolean.TRUE);
+        Page<Organization> page = organizationDao.page(pageable, param);
+        return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toSimpleModel));
+    }
+
+    /**
+     * 机构详情
+     *
+     * @param oid
+     * @return
+     */
+    public ResultContent<OrganizationSimpleModel> getOrgDetail(String oid) {
+        Organization organization = organizationDao.findTopByOid(oid);
+        if (ObjectUtils.isEmpty(organization)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, oid));
+        }
+        return ResultContent.buildSuccess(toSimpleModel(organization));
+    }
+
+    /**
+     * 删除机构
+     *
+     * @param oid
+     * @return
+     */
+    @Transactional
+    public ResultContent deleteOrg(String oid) {
+        Organization organization = organizationDao.findTopByOid(oid);
+        if (ObjectUtils.isEmpty(organization)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, oid));
+        }
+        if (organization.getIsOrg() == null || !organization.getIsOrg()) {
+            return ResultContent.buildFail("当前不属于结构类型,不能删除");
+        }
+
+        //1. 判断是否可以删除
+
+        //2. 删除机构
+        organizationDao.delete(organization);
+
+        //3. 删除关联的信息
+
+        return ResultContent.buildSuccess();
+    }
+
+    //---------------------------------供其他服务调用接口 start---------------------
+
+    /**
+     * 查询项目下所有的机构信息列表
+     *
+     * @param projectOid
+     * @return
+     */
+    public ResultContent<List<OrganizationSimpleModel>> getProjectOrgList(String projectOid) {
+        List<OrganizationSimpleModel> models = new ArrayList<>();
+        List<Organization> list = organizationDao.findByProjectOidAndIsOrg(projectOid, Boolean.TRUE);
+        if (ObjectUtils.isNotEmpty(list)) {
+            models = list.stream().map(this::toSimpleModel).collect(Collectors.toList());
+        }
+        return ResultContent.buildSuccess(models);
+    }
+
+
+    /**
+     * 项目关联的结构 数量
+     *
+     * @param projectOid
+     * @return
+     */
+    public long countProjectOrgNumber(String projectOid) {
+        return organizationDao.countByProjectOid(projectOid, Boolean.TRUE);
+    }
+
+    /**
+     * 检查项目是否存在  是否是项目类型
+     *
+     * @param projectOid
+     * @return
+     */
+    public ResultContent<Organization> checkProject(String projectOid) {
+        if (StringUtils.isEmpty(projectOid)) {
+            return ResultContent.buildFail("projectOid不能为空");
+        }
+        Organization organization = organizationDao.findTopByOid(projectOid);
+        if (ObjectUtils.isEmpty(organization)) {
+            return ResultContent.buildFail(String.format("项目不存在:%s", projectOid));
+        }
+        if (organization.getAuthType() != AuthType.Project) {
+            return ResultContent.buildFail(String.format("%s 不属于项目类型", organization.getName()));
+        }
+        return ResultContent.buildSuccess(organization);
+    }
+
+    public OrganizationSimpleModel toSimpleModel(Organization entity) {
+        OrganizationSimpleModel model = new OrganizationSimpleModel();
+        if (ObjectUtils.isNotEmpty(entity)) {
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+
+}