Bladeren bron

学校功能

TRX 1 jaar geleden
bovenliggende
commit
f42260f190

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

@@ -20,6 +20,9 @@ public class DepartmentModel extends SuperModel implements ITree<DepartmentModel
     @Schema(description = "部门名称")
     private String name;
 
+    @Schema(description = "部门编码")
+    private String code;
+
     @Schema(description = "部门状态")
     private DataState state = DataState.Enable;
 

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

@@ -15,6 +15,9 @@ public class DepartmentParam extends SuperParam {
     @Schema(description = "部门名称")
     private String name;
 
+    @Schema(description = "部门编码")
+    private String code;
+
     @Schema(description = "部门状态")
     private DataState state = DataState.Enable;
 

+ 34 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CollegeModel.java

@@ -0,0 +1,34 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.utils.ITree;
+import com.zhongshu.card.client.utils.type.DataState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/6/3
+ */
+@Data
+public class CollegeModel extends SuperModel implements ITree<CollegeModel>, Serializable {
+
+    @Schema(description = "院级名称")
+    private String name;
+
+    @Schema(description = "院级编码")
+    private String code;
+
+    @Schema(description = "院级状态")
+    private DataState state = DataState.Enable;
+
+    @Schema(description = "上级ID")
+    private String parentId;
+
+    @Schema(description = "子层级")
+    private List<CollegeModel> children = new ArrayList<>();
+}

+ 26 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CollegeParam.java

@@ -0,0 +1,26 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.model.base.SuperParam;
+import com.zhongshu.card.client.utils.ITree;
+import com.zhongshu.card.client.utils.type.DataState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2024/6/3
+ */
+@Data
+public class CollegeParam extends SuperParam {
+    @Schema(description = "院级名称")
+    private String name;
+
+    @Schema(description = "院级编码")
+    private String code;
+
+    @Schema(description = "院级状态")
+    private DataState state = DataState.Enable;
+
+    @Schema(description = "上级ID")
+    private String parentId = ITree.ROOT_ID;
+}

+ 23 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/service/org/CollegeService.java

@@ -0,0 +1,23 @@
+package com.zhongshu.card.client.service.org;
+
+import com.zhongshu.card.client.model.org.DepartmentParam;
+import com.zhongshu.card.client.model.school.CollegeParam;
+import com.zhongshu.card.client.ret.ResultContent;
+import com.zhongshu.card.client.utils.ITree;
+
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/6/3
+ */
+public interface CollegeService {
+
+    public ResultContent addCollege(CollegeParam param);
+
+    public ResultContent<List<ITree>> getCollegeTree(String oid);
+
+    // 删除部门
+    ResultContent deleteCollege(String id);
+
+}

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

@@ -0,0 +1,19 @@
+package com.zhongshu.card.client.utils.type;
+
+import lombok.Getter;
+
+/**
+ * 微信小程序端使用的类型
+ */
+public enum WxxcxType {
+    Student("学生"),
+    Shop("商家"),
+    ;
+
+    @Getter
+    private String remark;
+
+    WxxcxType(String remark) {
+        this.remark = remark;
+    }
+}

+ 49 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/school/CollegeController.java

@@ -0,0 +1,49 @@
+package com.zhongshu.card.server.core.controller.school;
+
+import com.github.microservice.auth.security.annotations.ResourceAuth;
+import com.github.microservice.auth.security.type.AuthType;
+import com.zhongshu.card.client.model.base.IDParam;
+import com.zhongshu.card.client.model.base.OidModel;
+import com.zhongshu.card.client.model.org.DepartmentParam;
+import com.zhongshu.card.client.model.school.CollegeParam;
+import com.zhongshu.card.client.ret.ResultContent;
+import com.zhongshu.card.client.service.org.CollegeService;
+import com.zhongshu.card.client.service.org.DepartmentService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/school/college")
+@Tag(name = "院级管理")
+public class CollegeController {
+
+    @Autowired
+    private CollegeService collegeService;
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "添加-编辑院级", description = "添加-编辑院级")
+    @RequestMapping(value = "addCollege", method = {RequestMethod.POST})
+    public ResultContent addCollege(@RequestBody CollegeParam param) {
+        return this.collegeService.addCollege(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "得到机构院级树", description = "得到机构院级树")
+    @RequestMapping(value = "getCollegeTree", method = {RequestMethod.POST})
+    public ResultContent getCollegeTree(@RequestBody OidModel param) {
+        return this.collegeService.getCollegeTree(param.getOid());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "删除院级", description = "删除院级")
+    @RequestMapping(value = "deleteCollege", method = {RequestMethod.POST})
+    public ResultContent deleteCollege(@RequestBody IDParam param) {
+        return this.collegeService.deleteCollege(param.getId());
+    }
+
+}

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

@@ -0,0 +1,26 @@
+package com.zhongshu.card.server.core.dao.org;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zhongshu.card.server.core.domain.org.Department;
+import com.zhongshu.card.server.core.domain.school.College;
+
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface CollegeDao extends MongoDao<College> {
+
+    College findTopById(String id);
+
+    List<College> findByOidOrderBySortAsc(String oid);
+
+    College findByNameAndOid(String name, String oid);
+
+    College findTopByCodeAndOid(String code, String oid);
+
+    List<College> findByParentIdAndOid(String parentId, String oid);
+
+    List<College> findByOidAndIdIn(String oid, List<String> ids);
+}

+ 3 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/DepartmentDao.java

@@ -17,7 +17,9 @@ public interface DepartmentDao extends MongoDao<Department> {
 
     List<Department> findByOidOrderBySortAsc(String oid);
 
-    Department findByName(String name);
+    Department findByNameAndOid(String name, String oid);
+
+    Department findTopByCodeAndOid(String code, String oid);
 
     List<Department> findByParentIdAndOid(String parentId, String oid);
 

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

@@ -25,6 +25,9 @@ public class Department extends SuperMain {
     @Schema(description = "部门名称")
     private String name;
 
+    @Schema(description = "部门编码")
+    private String code;
+
     @Schema(description = "部门状态")
     private DataState state = DataState.Enable;
 

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/org/OrganizationRelation.java

@@ -10,7 +10,7 @@ import org.springframework.data.mongodb.core.mapping.DBRef;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
- * 机构关系
+ * 机构关系  比如 学校(主)关联项目  商户(主)关联 学校
  * @author TRX
  * @date 2024/6/4
  */

+ 45 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/school/College.java

@@ -0,0 +1,45 @@
+package com.zhongshu.card.server.core.domain.school;
+
+import com.zhongshu.card.client.utils.ITree;
+import com.zhongshu.card.client.utils.type.DataState;
+import com.zhongshu.card.server.core.domain.base.SuperMain;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.checkerframework.common.aliasing.qual.NonLeaked;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * 院级管理
+ *
+ * @author TRX
+ * @date 2024/6/3
+ */
+@Data
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+@NonLeaked
+public class College extends SuperMain {
+
+    @Schema(description = "院级名称")
+    private String name;
+
+    @Schema(description = "院级编码")
+    private String code;
+
+    @Schema(description = "院级状态")
+    private DataState state = DataState.Enable;
+
+    @Schema(description = "上级ID")
+    @Indexed
+    private String parentId = ITree.ROOT_ID;
+
+    public static College build(String id) {
+        College entity = new College();
+        entity.setId(id);
+        return entity;
+    }
+}

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

@@ -0,0 +1,132 @@
+package com.zhongshu.card.server.core.service.org;
+
+import com.zhongshu.card.client.model.school.CollegeModel;
+import com.zhongshu.card.client.model.school.CollegeParam;
+import com.zhongshu.card.client.ret.ResultContent;
+import com.zhongshu.card.client.ret.ResultMessage;
+import com.zhongshu.card.client.service.org.CollegeService;
+import com.zhongshu.card.client.utils.ITree;
+import com.zhongshu.card.client.utils.TreeUtil;
+import com.zhongshu.card.client.utils.type.DataState;
+import com.zhongshu.card.server.core.dao.org.CollegeDao;
+import com.zhongshu.card.server.core.domain.school.College;
+import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.util.BeanUtils;
+import com.zhongshu.card.server.core.util.CommonUtil;
+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.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author TRX
+ * @date 2024/6/3
+ */
+@Slf4j
+@Service
+public class CollegeServiceImpl extends SuperService implements CollegeService {
+
+    @Autowired
+    CollegeDao collegeDao;
+
+    /**
+     * 添加院级
+     *
+     * @param param
+     * @return
+     */
+    @Override
+    public ResultContent<College> addCollege(CollegeParam param) {
+        initDefaultUserAndOid(param);
+
+        if (CommonUtil.longIsEmpty(param.getSort())) {
+            param.setSort(1L);
+        }
+        if (StringUtils.isEmpty(param.getParentId())) {
+            param.setParentId(ITree.ROOT_ID);
+        }
+        if (!param.getParentId().equals(ITree.ROOT_ID)) {
+            College temp = collegeDao.findTopById(param.getParentId());
+            if (ObjectUtils.isEmpty(temp)) {
+                return ResultContent.buildFail(String.format("上级数据ID不存在:%s", param.getParentId()));
+            }
+        }
+        if (param.getState() == null) {
+            param.setState(DataState.Enable);
+        }
+        College college = null;
+        if (StringUtils.isNotEmpty(param.getId())) {
+            college = collegeDao.findTopById(param.getId());
+            if (ObjectUtils.isEmpty(college)) {
+                return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+            }
+            if (StringUtils.isNotEmpty(param.getCode())) {
+                college = collegeDao.findTopByCodeAndOid(param.getCode(), param.getOid());
+                if (ObjectUtils.isNotEmpty(college) && !college.getId().equals(param.getId())) {
+                    return ResultContent.buildFail(String.format("%s code已存在", param.getCode()));
+                }
+            }
+        } else {
+            if (StringUtils.isNotEmpty(param.getCode())) {
+                college = collegeDao.findTopByCodeAndOid(param.getCode(), college.getOid());
+                if (ObjectUtils.isNotEmpty(college)) {
+                    return ResultContent.buildFail(String.format("%s code已存在", param.getCode()));
+                }
+            }
+            college = new College();
+        }
+        BeanUtils.copyProperties(param, college);
+        collegeDao.save(college);
+        return ResultContent.buildSuccess(college);
+    }
+
+    /**
+     * 删除院级
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public ResultContent deleteCollege(String id) {
+        String oid = getCurrentOid();
+        College college = collegeDao.findTopById(id);
+        if (ObjectUtils.isEmpty(college)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        List<College> childrens = collegeDao.findByParentIdAndOid(id, oid);
+        if (ObjectUtils.isNotEmpty(childrens)) {
+            return ResultContent.buildFail(String.format("%s 有下级院级,不能删除", college.getName()));
+        }
+        collegeDao.delete(college);
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 得到结构所有部门信息 (树形结构)
+     *
+     * @param oid
+     * @return
+     */
+    @Override
+    public ResultContent<List<ITree>> getCollegeTree(String oid) {
+        if (StringUtils.isEmpty(oid)) {
+            oid = getCurrentOid();
+        }
+        List<College> list = collegeDao.findByOidOrderBySortAsc(oid);
+        List<ITree> models = list.stream().map(this::toModel).collect(Collectors.toList());
+        List<ITree> iTrees = TreeUtil.buildTree(models, ITree.ROOT_ID);
+        return ResultContent.buildSuccess(iTrees);
+    }
+
+    public CollegeModel toModel(College entity) {
+        CollegeModel model = new CollegeModel();
+        if (ObjectUtils.isNotEmpty(entity)) {
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+}

+ 16 - 13
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/DepartmentServiceImpl.java

@@ -1,7 +1,5 @@
 package com.zhongshu.card.server.core.service.org;
 
-import com.github.microservice.auth.client.service.UserService;
-import com.github.microservice.auth.security.helper.AuthHelper;
 import com.zhongshu.card.client.model.org.DepartmentModel;
 import com.zhongshu.card.client.model.org.DepartmentParam;
 import com.zhongshu.card.client.ret.ResultContent;
@@ -36,12 +34,6 @@ public class DepartmentServiceImpl extends SuperService implements DepartmentSer
     @Autowired
     DepartmentDao departmentDao;
 
-    @Autowired
-    private AuthHelper authHelper;
-
-    @Autowired
-    private UserService userService;
-
     /**
      * 添加部门
      *
@@ -50,10 +42,8 @@ public class DepartmentServiceImpl extends SuperService implements DepartmentSer
      */
     @Override
     public ResultContent<Department> addDepartment(DepartmentParam param) {
-        if (StringUtils.isEmpty(param.getOid())) {
-            String oid = getCurrentOid();
-            param.setOid(oid);
-        }
+        initDefaultUserAndOid(param);
+
         if (CommonUtil.longIsEmpty(param.getSort())) {
             param.setSort(1L);
         }
@@ -66,7 +56,7 @@ public class DepartmentServiceImpl extends SuperService implements DepartmentSer
                 return ResultContent.buildFail(String.format("上级部门ID不存在:%s", param.getParentId()));
             }
         }
-        if(param.getState() == null) {
+        if (param.getState() == null) {
             param.setState(DataState.Enable);
         }
         Department department = null;
@@ -75,7 +65,19 @@ public class DepartmentServiceImpl extends SuperService implements DepartmentSer
             if (ObjectUtils.isEmpty(department)) {
                 return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
             }
+            if (StringUtils.isNotEmpty(param.getCode())) {
+                department = departmentDao.findTopByCodeAndOid(param.getCode(), department.getOid());
+                if (ObjectUtils.isNotEmpty(department) && !department.getId().equals(param.getId())) {
+                    return ResultContent.buildFail(String.format("%s code已存在", param.getCode()));
+                }
+            }
         } else {
+            if (StringUtils.isNotEmpty(param.getCode())) {
+                department = departmentDao.findTopByCodeAndOid(param.getCode(), param.getOid());
+                if (ObjectUtils.isNotEmpty(department)) {
+                    return ResultContent.buildFail(String.format("%s code已存在", param.getCode()));
+                }
+            }
             department = new Department();
         }
         BeanUtils.copyProperties(param, department);
@@ -119,6 +121,7 @@ public class DepartmentServiceImpl extends SuperService implements DepartmentSer
         if (ObjectUtils.isNotEmpty(childrens)) {
             return ResultContent.buildFail(String.format("%s 有下级部门,不能删除", department.getName()));
         }
+        departmentDao.delete(department);
         return ResultContent.buildSuccess();
     }