TRX 1 år sedan
förälder
incheckning
343ce7d201

+ 71 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/project/ProjectSaveParam.java

@@ -0,0 +1,71 @@
+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 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 ProjectSaveParam 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;
+
+    @Schema(description = "项目类型")
+    private AuthType dataAuthType;
+
+    @NotNull
+    @Schema(description = "机构状态")
+    private OrganizationState state;
+
+    @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;
+}

+ 9 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/service/org/OrganizationService.java

@@ -3,6 +3,7 @@ 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.project.ProjectSaveParam;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
@@ -10,6 +11,14 @@ import java.util.List;
 
 public interface OrganizationService {
 
+    /**
+     * 保存项目信息
+     *
+     * @param param
+     * @return
+     */
+    ResultContent saveProjectInfo(ProjectSaveParam param);
+
     /**
      * 通用添加结构信息
      *

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

@@ -6,6 +6,7 @@ import com.github.microservice.auth.security.type.AuthType;
 import com.zhongshu.card.client.model.base.OidModel;
 import com.zhongshu.card.client.model.org.*;
 import com.github.microservice.net.ResultContent;
+import com.zhongshu.card.client.model.project.ProjectSaveParam;
 import com.zhongshu.card.client.service.org.OrganizationService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -17,6 +18,7 @@ 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
@@ -28,13 +30,14 @@ public class OrganizationController {
     private OrganizationService organizationService;
 
     //------------------------------项目管理 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 = "addProject", method = {RequestMethod.POST})
-    public ResultContent addProject(@RequestBody OrganizationAddParam param) {
+    @Operation(summary = "项目-保存", description = "项目-保存")
+    @RequestMapping(value = "saveProjectInfo", method = {RequestMethod.POST})
+    public ResultContent saveProjectInfo(@RequestBody @Valid ProjectSaveParam param) {
         param.setAuthType(AuthType.Project);
-        return this.organizationService.addOrganization(param);
+        return this.organizationService.saveProjectInfo(param);
     }
 
     @ResourceAuth(value = "user", type = AuthType.User)

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

@@ -18,6 +18,8 @@ public interface OrganizationDao extends MongoDao<Organization>, OrganizationDao
 
     Organization findTopByOid(String oid);
 
+    Organization findTopByNameAndAuthType(String name, AuthType authType);
+
     List<Organization> findByOidIn(List<String> oids);
 
     Organization findTopByName(String name);

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

@@ -18,6 +18,8 @@ public interface OrganizationUserDao extends MongoDao<OrganizationUser>, Organiz
 
     OrganizationUser findTopById(String id);
 
+    List<OrganizationUser> findByOrganizationAndIsAdmin(Organization organization, Boolean isAdmin);
+
     // 查询用户在机构的信息
     OrganizationUser findTopByOrganizationAndUser(Organization organization, UserAccount user);
 

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

@@ -4,6 +4,8 @@ import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
 import com.zhongshu.card.server.core.dao.org.extend.UserCountDaoExtend;
 import com.zhongshu.card.server.core.domain.org.UserAccount;
 
+import java.util.List;
+
 /**
  * @author TRX
  * @date 2024/3/21
@@ -14,6 +16,8 @@ public interface UserCountDao extends MongoDao<UserAccount>, UserCountDaoExtend
 
     UserAccount findTopByUserId(String userId);
 
+    List<UserAccount> findByUserIdIn(List<String> userIds);
+
     UserAccount findTopByPhone(String phone);
 
     UserAccount findTopByLoginName(String loginName);

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

@@ -8,6 +8,9 @@ import lombok.*;
 import org.springframework.data.mongodb.core.index.Indexed;
 import org.springframework.data.mongodb.core.mapping.Document;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 机构信息
  *
@@ -29,6 +32,15 @@ public class Organization extends SuperMain {
     @Schema(description = "编码")
     private String code;
 
+    @Schema(description = "机构类型")
+    private AuthType authType = AuthType.Enterprise;
+
+    @Schema(description = "项目类型")
+    private AuthType dataAuthType;
+
+    @Schema(description = "管理员userId")
+    private List<String> managerUserIds = new ArrayList<>();
+
     @Schema(description = "统一社会信用代码")
     @Indexed
     private String orgCode;
@@ -60,9 +72,6 @@ public class Organization extends SuperMain {
     @Schema(description = "纬度")
     private String mapLat;
 
-    @Schema(description = "机构类型")
-    private AuthType authType = AuthType.Enterprise;
-
     @Schema(description = "状态")
     private OrganizationState state = OrganizationState.Normal;
 

+ 25 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/model/org/OrgBindUserParam.java

@@ -0,0 +1,25 @@
+package com.zhongshu.card.server.core.model.org;
+
+import com.zhongshu.card.server.core.domain.org.Organization;
+import com.zhongshu.card.server.core.domain.org.UserAccount;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2024/9/24
+ */
+@Data
+public class OrgBindUserParam {
+    @Schema(description = "机构信息")
+    private Organization organization;
+
+    @Schema(description = "用户信息")
+    private UserAccount userAccount;
+
+    @Schema(description = "是否是管理员")
+    private Boolean isAdmin = Boolean.FALSE;
+
+    @Schema(description = "项目oid")
+    private String projectOid;
+}

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

@@ -16,6 +16,7 @@ import com.github.microservice.components.data.base.util.PageEntityUtil;
 import com.zhongshu.card.client.model.org.*;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.net.ResultMessage;
+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;
@@ -93,6 +94,99 @@ public class OrganizationServiceImpl extends SuperService implements Organizatio
     @Autowired
     ProjectSyncIotCenterService projectSyncIotCenterService;
 
+    @Autowired
+    OrganizationUserServiceImpl organizationUserServiceImpl;
+
+    /**
+     * 保存项目信息
+     *
+     * @param param
+     * @return
+     */
+    @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);
+            organization.setOid(oid);
+            organization.setProjectOid(oid);
+            organization.setAboutOid(currentOid);
+            organization.setCreateUserId(getCurrentUserId());
+            initEntity(organization);
+            organizationDao.save(organization);
+        }
+        organizationUserServiceImpl.orgBindManager(organization, userAccounts);
+        return ResultContent.buildSuccess();
+    }
+
+
+    //------------------------------------------------------------------------------------
+
+    /**
+     * 权限中心添加结构信息
+     *
+     * @param name
+     * @param authType
+     * @param remark
+     * @return
+     */
+    private 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);
+        organizationModel.setAuthType(authType);
+        organizationModel.setRemark(remark);
+        com.github.microservice.auth.client.content.ResultContent<String> resultContent = organizationService.add(organizationModel);
+        if (resultContent.getState() == ResultState.Success) {
+            log.info("平台初始成功: {}", resultContent.getContent());
+            oid = resultContent.getContent();
+        } else {
+            String msg = resultContent.getMsg();
+            if (StringUtils.isEmpty(msg) && resultContent.getException() != null) {
+                msg = resultContent.getException().getMessage();
+            }
+            log.info("initSuperOrganization {}", msg);
+            return ResultContent.buildFail(msg);
+        }
+        return ResultContent.buildSuccess(oid);
+    }
+
     /**
      * 添加机构 (只是添加、没得编辑)
      *

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

@@ -10,6 +10,7 @@ import com.zhongshu.card.client.type.OrganizationUserType;
 import com.zhongshu.card.client.type.UserState;
 import com.zhongshu.card.server.core.dao.org.*;
 import com.zhongshu.card.server.core.domain.org.*;
+import com.zhongshu.card.server.core.model.org.OrgBindUserParam;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
@@ -41,13 +42,44 @@ public class OrganizationUserServiceImpl extends SuperService {
     private DepartmentDao departmentDao;
 
     @Autowired
-    UserCountDao userCountDao;
+    private UserCountDao userCountDao;
 
     @Autowired
-    OrganizationDao organizationDao;
+    private OrganizationDao organizationDao;
 
     @Autowired
-    RoleDao roleDao;
+    private RoleDao roleDao;
+
+    /**
+     * 绑定结构管理员 (已新的为准,以前的删除掉)
+     *
+     * @param organization
+     * @param userAccounts
+     * @return
+     */
+    public ResultContent orgBindManager(Organization organization, List<UserAccount> userAccounts) {
+        List<OrganizationUser> oldList = organizationUserDao.findByOrganizationAndIsAdmin(organization, Boolean.TRUE);
+        List<String> newIds = new ArrayList<>();
+        for (UserAccount userAccount : userAccounts) {
+            OrgBindUserParam _param = new OrgBindUserParam();
+            _param.setOrganization(organization);
+            _param.setUserAccount(userAccount);
+            _param.setIsAdmin(Boolean.TRUE);
+            OrganizationUser temp = buildOrgUserInfo(_param);
+            if (temp != null) {
+                newIds.add(temp.getId());
+            }
+        }
+        if (ObjectUtils.isNotEmpty(oldList)) {
+            List<OrganizationUser> _tempList = oldList.stream().filter(it -> {
+                return newIds.contains(it.getId());
+            }).collect(Collectors.toList());
+            if (ObjectUtils.isNotEmpty(_tempList)) {
+                organizationUserDao.deleteAll(_tempList);
+            }
+        }
+        return ResultContent.buildSuccess();
+    }
 
     /**
      * 得到用户所在的机构简单数据
@@ -67,6 +99,44 @@ public class OrganizationUserServiceImpl extends SuperService {
         return models;
     }
 
+    /**
+     * 用户绑定机构
+     *
+     * @param param
+     * @return
+     */
+    private OrganizationUser buildOrgUserInfo(OrgBindUserParam param) {
+        Organization organization = param.getOrganization();
+        UserAccount userAccount = param.getUserAccount();
+        Boolean isAdmin = param.getIsAdmin();
+
+        OrganizationUser organizationUser = null;
+        if (ObjectUtils.isNotEmpty(userAccount) && ObjectUtils.isNotEmpty(organization)) {
+            organizationUser = organizationUserDao.findTopByOrganizationAndUser(organization, userAccount);
+            if (ObjectUtils.isEmpty(organizationUser)) {
+                organizationUser = new OrganizationUser();
+                organizationUser.setState(UserState.Normal);
+                organizationUser.setCode("");
+            }
+            organizationUser.setUser(userAccount);
+            organizationUser.setName(userAccount.getName());
+            organizationUser.setPhone(userAccount.getPhone());
+            organizationUser.setUserId(userAccount.getUserId());
+
+            organizationUser.setOrganization(organization);
+            organizationUser.setOid(organization.getOid());
+            organizationUser.setAuthType(organization.getAuthType());
+            organizationUser.setIsAdmin(isAdmin);
+
+            organizationUser.setAboutOid(organization.getOid());
+            organizationUser.setAuthType(organization.getAuthType());
+
+            organizationUser.setProjectOid(param.getProjectOid());
+            organizationUserDao.save(organizationUser);
+        }
+        return organizationUser;
+    }
+
     /**
      * 绑定用户到机构
      *

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

@@ -645,6 +645,20 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
         return ResultContent.buildSuccess();
     }
 
+    /**
+     * 查询用户列表
+     *
+     * @param userIds
+     * @return
+     */
+    public List<UserAccount> getUserAccounts(List<String> userIds) {
+        List<UserAccount> list = new ArrayList<>(userIds.size());
+        if (ObjectUtils.isNotEmpty(userIds)) {
+            list = userCountDao.findByUserIdIn(userIds);
+        }
+        return list;
+    }
+
     public UserCountModel toModel(UserAccount entity) {
         UserCountModel model = null;
         if (ObjectUtils.isNotEmpty(entity)) {