Browse Source

学校功能

TRX 1 year ago
parent
commit
7b82881c3a
25 changed files with 870 additions and 6 deletions
  1. 37 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/school/AreaModel.java
  2. 29 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/school/AreaParam.java
  3. 20 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/school/DictInfoParam.java
  4. 17 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/school/DictInfoSearch.java
  5. 23 0
      FullCardClient/src/main/java/com/zhongshu/card/client/service/school/AreaService.java
  6. 25 0
      FullCardClient/src/main/java/com/zhongshu/card/client/service/school/DictInfoService.java
  7. 20 0
      FullCardClient/src/main/java/com/zhongshu/card/client/utils/type/DeviceType.java
  8. 19 0
      FullCardClient/src/main/java/com/zhongshu/card/client/utils/type/DictInfoType.java
  9. 19 0
      FullCardClient/src/main/java/com/zhongshu/card/client/utils/type/OnLineState.java
  10. 78 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/school/DictInfoController.java
  11. 28 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/AreaDao.java
  12. 2 2
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/CollegeDao.java
  13. 22 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/DictInfoDao.java
  14. 18 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/extend/DictInfoDaoExtend.java
  15. 65 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/impl/DictInfoDaoImpl.java
  16. 47 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/school/Area.java
  17. 32 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/school/DeviceInfo.java
  18. 30 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/school/DictInfo.java
  19. 43 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/school/GateWay2Device.java
  20. 32 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/school/GateWayInfo.java
  21. 2 2
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/base/SuperService.java
  22. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/IndexService.java
  23. 134 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/AreaServiceImpl.java
  24. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/CollegeServiceImpl.java
  25. 126 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/DictInfoServiceImpl.java

+ 37 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/AreaModel.java

@@ -0,0 +1,37 @@
+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 AreaModel extends SuperModel implements ITree<AreaModel>, 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 DictInfoParam dictInfo;
+
+    @Schema(description = "子层级")
+    private List<AreaModel> children = new ArrayList<>();
+}

+ 29 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/AreaParam.java

@@ -0,0 +1,29 @@
+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 AreaParam 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;
+
+    @Schema(description = "所属类型")
+    private String dictInfoId;
+}

+ 20 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/DictInfoParam.java

@@ -0,0 +1,20 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.model.base.SuperParam;
+import com.zhongshu.card.client.utils.type.DictInfoType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2024/6/12
+ */
+@Data
+public class DictInfoParam extends SuperParam {
+    @Schema(description = "字典名称")
+    private String name;
+
+    @Schema(description = "字典类型")
+    DictInfoType dictInfoType;
+
+}

+ 17 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/DictInfoSearch.java

@@ -0,0 +1,17 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.model.base.SuperParam;
+import com.zhongshu.card.client.model.base.SuperSearch;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2024/6/12
+ */
+@Data
+public class DictInfoSearch extends SuperSearch {
+    @Schema(description = "字典名称")
+    private String name;
+
+}

+ 23 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/service/school/AreaService.java

@@ -0,0 +1,23 @@
+package com.zhongshu.card.client.service.school;
+
+import com.zhongshu.card.client.model.school.AreaParam;
+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 AreaService {
+
+    public ResultContent addArea(AreaParam param);
+
+    public ResultContent<List<ITree>> getAreaTree(String oid);
+
+    // 删除
+    ResultContent deleteArea(String id);
+
+}

+ 25 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/service/school/DictInfoService.java

@@ -0,0 +1,25 @@
+package com.zhongshu.card.client.service.school;
+
+import com.zhongshu.card.client.model.school.DictInfoParam;
+import com.zhongshu.card.client.model.school.DictInfoSearch;
+import com.zhongshu.card.client.ret.ResultContent;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * 字典
+ *
+ * @author TRX
+ * @date 2024/6/12
+ */
+public interface DictInfoService {
+
+    ResultContent addDict(DictInfoParam param);
+
+    ResultContent deleteDict(String id);
+
+    ResultContent<DictInfoParam> getDictInfo(String id);
+
+    ResultContent<Page<DictInfoParam>> page(DictInfoSearch param, Pageable pageable);
+
+}

+ 20 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/utils/type/DeviceType.java

@@ -0,0 +1,20 @@
+package com.zhongshu.card.client.utils.type;
+
+import lombok.Getter;
+
+/**
+ *
+ */
+public enum DeviceType {
+    Consumer("消费机"),
+    Door("门禁机"),
+    Elevator("电梯"),
+    ;
+
+    @Getter
+    private String remark;
+
+    DeviceType(String remark) {
+        this.remark = remark;
+    }
+}

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

@@ -0,0 +1,19 @@
+package com.zhongshu.card.client.utils.type;
+
+import lombok.Getter;
+
+/**
+ * 字典类型
+ */
+public enum DictInfoType {
+    AreaType("区域类型"),
+    Position("人员职位"),
+    ;
+
+    @Getter
+    private String remark;
+
+    DictInfoType(String remark) {
+        this.remark = remark;
+    }
+}

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

@@ -0,0 +1,19 @@
+package com.zhongshu.card.client.utils.type;
+
+import lombok.Getter;
+
+/**
+ * 在线状态
+ */
+public enum OnLineState {
+    OnLine("在线"),
+    OffLine("离线"),
+    ;
+
+    @Getter
+    private String remark;
+
+    OnLineState(String remark) {
+        this.remark = remark;
+    }
+}

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

@@ -0,0 +1,78 @@
+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.school.*;
+import com.zhongshu.card.client.ret.ResultContent;
+import com.zhongshu.card.client.service.school.BookInfoService;
+import com.zhongshu.card.client.service.school.DictInfoService;
+import com.zhongshu.card.client.service.school.NoticeInfoService;
+import com.zhongshu.card.client.utils.type.OrganizationUserType;
+import com.zhongshu.card.server.core.service.org.RoleServiceImpl;
+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.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;
+
+/**
+ * 字典管理
+ *
+ * @author TRX
+ * @date 2024/6/5
+ */
+@RestController
+@RequestMapping("dictInfo")
+@Tag(name = "字典管理")
+public class DictInfoController {
+
+    @Autowired
+    RoleServiceImpl roleService;
+
+    @Autowired
+    NoticeInfoService noticeInfoService;
+
+    @Autowired
+    BookInfoService bookInfoService;
+
+    @Autowired
+    DictInfoService dictInfoService;
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "添加-编辑字典", description = "添加-编辑字典")
+    @RequestMapping(value = "addDict", method = {RequestMethod.POST})
+    public ResultContent addDict(@RequestBody DictInfoParam param) {
+        return this.dictInfoService.addDict(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "删除字典", description = "删除字典")
+    @RequestMapping(value = "deleteDict", method = {RequestMethod.POST})
+    public ResultContent deleteDict(@RequestBody IDParam param) {
+        return this.dictInfoService.deleteDict(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "字典详情", description = "字典详情")
+    @RequestMapping(value = "getDictInfo", method = {RequestMethod.POST})
+    public ResultContent<DictInfoParam> getDictInfo(@RequestBody IDParam param) {
+        return this.dictInfoService.getDictInfo(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "字典列表-分页查询", description = "字典列表-分页查询")
+    @RequestMapping(value = {"page"}, method = {RequestMethod.POST})
+    public ResultContent<Page<DictInfoParam>> pageTeacher(
+            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+            @Parameter(required = false) DictInfoSearch param) {
+        return dictInfoService.page(param, pageable);
+    }
+
+}

+ 28 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/AreaDao.java

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

+ 2 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/CollegeDao.java → FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/CollegeDao.java

@@ -1,12 +1,12 @@
-package com.zhongshu.card.server.core.dao.org;
+package com.zhongshu.card.server.core.dao.school;
 
 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;
 
 /**
+ * 院级Dao
  * @author TRX
  * @date 2024/3/21
  */

+ 22 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/DictInfoDao.java

@@ -0,0 +1,22 @@
+package com.zhongshu.card.server.core.dao.school;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zhongshu.card.server.core.dao.school.extend.DictInfoDaoExtend;
+import com.zhongshu.card.server.core.domain.school.Area;
+import com.zhongshu.card.server.core.domain.school.DictInfo;
+
+import java.util.List;
+
+/**
+ * 字典Dao
+ *
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface DictInfoDao extends MongoDao<DictInfo>, DictInfoDaoExtend {
+
+    DictInfo findTopById(String id);
+
+    DictInfo findTopByNameAndOid(String name, String oid);
+
+}

+ 18 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/extend/DictInfoDaoExtend.java

@@ -0,0 +1,18 @@
+package com.zhongshu.card.server.core.dao.school.extend;
+
+import com.zhongshu.card.client.model.school.BookInfoSearch;
+import com.zhongshu.card.client.model.school.DictInfoParam;
+import com.zhongshu.card.client.model.school.DictInfoSearch;
+import com.zhongshu.card.server.core.domain.school.BookInfo;
+import com.zhongshu.card.server.core.domain.school.DictInfo;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/7/7
+ * @Version: 1.0
+ */
+public interface DictInfoDaoExtend {
+    Page<DictInfo> page(Pageable pageable, DictInfoSearch param);
+}

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

@@ -0,0 +1,65 @@
+package com.zhongshu.card.server.core.dao.school.impl;
+
+import com.github.microservice.components.data.mongo.mongo.helper.DBHelper;
+import com.zhongshu.card.client.model.school.BookInfoSearch;
+import com.zhongshu.card.client.model.school.DictInfoParam;
+import com.zhongshu.card.client.model.school.DictInfoSearch;
+import com.zhongshu.card.server.core.dao.BaseImpl;
+import com.zhongshu.card.server.core.dao.school.extend.BookInfoDaoExtend;
+import com.zhongshu.card.server.core.dao.school.extend.DictInfoDaoExtend;
+import com.zhongshu.card.server.core.domain.org.Department;
+import com.zhongshu.card.server.core.domain.school.BookInfo;
+import com.zhongshu.card.server.core.domain.school.DictInfo;
+import com.zhongshu.card.server.core.util.CommonUtil;
+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.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;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/4/12
+ * @Version: 1.0
+ */
+public class DictInfoDaoImpl extends BaseImpl implements DictInfoDaoExtend {
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    @Autowired
+    private DBHelper dbHelper;
+
+    @Override
+    public Page<DictInfo> page(Pageable pageable, DictInfoSearch param) {
+        Criteria criteria = new Criteria();
+
+        // 机构ID
+        if (ObjectUtils.isNotEmpty(param.getOid())) {
+            criteria.and("oid").is(param.getOid());
+        }
+
+        // 模糊搜索
+        List<Criteria> criterias = new ArrayList<>();
+        if (StringUtils.isNotEmpty(param.getName())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getName() + ".*$");
+            criterias.add(Criteria.where("name").is(pattern));
+        }
+        criteria.and("isDelete").is(Boolean.FALSE);
+        param.setIsSortDesc(Boolean.FALSE);
+        Sort sort = buildSort(param);
+        Query query = Query.query(criteria);
+        query.with(sort);
+        return dbHelper.pages(query, pageable, DictInfo.class);
+    }
+
+}

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

@@ -0,0 +1,47 @@
+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/12
+ */
+@Data
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+@NonLeaked
+public class Area 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;
+
+    @Schema(description = "区域类型")
+    private DictInfo dictInfo;
+
+    public static Area build(String id) {
+        Area entity = new Area();
+        entity.setId(id);
+        return entity;
+    }
+}

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

@@ -0,0 +1,32 @@
+package com.zhongshu.card.server.core.domain.school;
+
+import com.zhongshu.card.client.utils.type.DeviceType;
+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.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * 物联网设备信息
+ *
+ * @author TRX
+ * @date 2024/5/14
+ */
+@Data
+@Document
+@NoArgsConstructor
+@AllArgsConstructor
+public class DeviceInfo extends SuperMain {
+
+    @Schema(description = "设备ID")
+    private String deviceId;
+
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备类型")
+    private DeviceType deviceType;
+
+}

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

@@ -0,0 +1,30 @@
+package com.zhongshu.card.server.core.domain.school;
+
+import com.zhongshu.card.client.utils.type.DictInfoType;
+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.mapping.Document;
+
+/**
+ * 字典管理
+ *
+ * @author TRX
+ * @date 2024/6/12
+ */
+@Data
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+@NonLeaked
+public class DictInfo extends SuperMain {
+    @Schema(description = "字典名称")
+    private String name;
+
+    @Schema(description = "字典类型")
+    DictInfoType dictInfoType;
+
+}

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

@@ -0,0 +1,43 @@
+package com.zhongshu.card.server.core.domain.school;
+
+import com.zhongshu.card.client.utils.type.OnLineState;
+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.springframework.data.mongodb.core.mapping.DBRef;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * 网关和设备的绑定关系 可能一个设备绑定多个网关 一个网关多个设备 (多对多的关系)
+ *
+ * @author TRX
+ * @date 2024/5/14
+ */
+@Data
+@Document
+@NoArgsConstructor
+@AllArgsConstructor
+public class GateWay2Device extends SuperMain {
+
+    @DBRef(lazy = true)
+    @Schema(description = "硬件设备网关信息")
+    private GateWayInfo gateWayInfo;
+
+    @DBRef(lazy = true)
+    @Schema(description = "关联的设备信息")
+    private DeviceInfo deviceInfo;
+
+    @Schema(description = "设备在线状态")
+    private OnLineState state;
+
+    @Schema(description = "绑定时间")
+    private String bindTimeStr;
+
+    @Schema(description = "绑定的项目ID")
+    private String projectId;
+
+    @Schema(description = "所属区域")
+    private String address;
+}

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

@@ -0,0 +1,32 @@
+package com.zhongshu.card.server.core.domain.school;
+
+import com.zhongshu.card.client.utils.type.OnLineState;
+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.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * 物联网 硬件设备  网关信息
+ *
+ * @author TRX
+ * @date 2024/5/14
+ */
+@Data
+@Document
+@NoArgsConstructor
+@AllArgsConstructor
+public class GateWayInfo extends SuperMain {
+
+    @Schema(description = "网关ID")
+    private String gateWayId;
+
+    @Schema(description = "网关名称")
+    private String gateWayName;
+
+    @Schema(description = "网关在线状态")
+    private OnLineState state;
+
+}

+ 2 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/base/SuperService.java

@@ -80,7 +80,7 @@ public abstract class SuperService {
             if (authHelper != null && authHelper.getCurrentUser() != null) {
                 entity.setCreateUserId(authHelper.getCurrentUser().getUserId());
                 entity.setCreateUserName(authHelper.getCurrentUser().getUserName());
-                entity.setCreateUserName(authHelper.getCurrentUser().getPhone());
+                entity.setCreatePhone(authHelper.getCurrentUser().getPhone());
             }
         }
     }
@@ -99,7 +99,7 @@ public abstract class SuperService {
         if (authHelper != null && authHelper.getCurrentUser() != null) {
             param.setCreateUserId(authHelper.getCurrentUser().getUserId());
             param.setCreateUserName(authHelper.getCurrentUser().getUserName());
-            param.setCreateUserName(authHelper.getCurrentUser().getPhone());
+            param.setCreatePhone(authHelper.getCurrentUser().getPhone());
         }
     }
 

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

@@ -233,7 +233,7 @@ public class IndexService {
     public ResultContent<PhoneModel> getPhoneNum(GetPhoneModel param) {
         try {
             String code = param.getCode();
-            String iv = param.getIv()
+            String iv = param.getIv();
             WechatPhoneNumber phoneNumber = wechatCUtil.getPhoneNumber(code);
             String phone = "";
             if (Objects.nonNull(phoneNumber) && Objects.nonNull(phoneNumber.getPurePhoneNumber())) {

+ 134 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/AreaServiceImpl.java

@@ -0,0 +1,134 @@
+package com.zhongshu.card.server.core.service.school;
+
+import com.zhongshu.card.client.model.school.AreaModel;
+import com.zhongshu.card.client.model.school.AreaParam;
+import com.zhongshu.card.client.ret.ResultContent;
+import com.zhongshu.card.client.ret.ResultMessage;
+import com.zhongshu.card.client.service.school.AreaService;
+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.school.AreaDao;
+import com.zhongshu.card.server.core.dao.school.CollegeDao;
+import com.zhongshu.card.server.core.domain.school.Area;
+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 AreaServiceImpl extends SuperService implements AreaService {
+
+    @Autowired
+    AreaDao areaDao;
+
+    /**
+     * 添加院级
+     *
+     * @param param
+     * @return
+     */
+    @Override
+    public ResultContent<College> addArea(AreaParam 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)) {
+            Area temp = areaDao.findTopById(param.getParentId());
+            if (ObjectUtils.isEmpty(temp)) {
+                return ResultContent.buildFail(String.format("上级数据ID不存在:%s", param.getParentId()));
+            }
+        }
+        if (param.getState() == null) {
+            param.setState(DataState.Enable);
+        }
+        Area entity = null;
+        if (StringUtils.isNotEmpty(param.getId())) {
+            entity = areaDao.findTopById(param.getId());
+            if (ObjectUtils.isEmpty(entity)) {
+                return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+            }
+            if (StringUtils.isNotEmpty(param.getCode())) {
+                entity = areaDao.findTopByCodeAndOid(param.getCode(), param.getOid());
+                if (ObjectUtils.isNotEmpty(entity) && !entity.getId().equals(param.getId())) {
+                    return ResultContent.buildFail(String.format("%s code已存在", param.getCode()));
+                }
+            }
+        } else {
+            if (StringUtils.isNotEmpty(param.getCode())) {
+                entity = areaDao.findTopByCodeAndOid(param.getCode(), entity.getOid());
+                if (ObjectUtils.isNotEmpty(entity)) {
+                    return ResultContent.buildFail(String.format("%s code已存在", param.getCode()));
+                }
+            }
+            entity = new Area();
+        }
+        BeanUtils.copyProperties(param, entity);
+        areaDao.save(entity);
+        return ResultContent.buildSuccess(entity);
+    }
+
+    /**
+     * 删除
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public ResultContent deleteArea(String id) {
+        String oid = getCurrentOid();
+        Area entity = areaDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        List<Area> childrens = areaDao.findByParentIdAndOid(id, oid);
+        if (ObjectUtils.isNotEmpty(childrens)) {
+            return ResultContent.buildFail(String.format("%s 有下级数据,不能删除", entity.getName()));
+        }
+        areaDao.delete(entity);
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 得到所有信息 (树形结构)
+     *
+     * @param oid
+     * @return
+     */
+    @Override
+    public ResultContent<List<ITree>> getAreaTree(String oid) {
+        if (StringUtils.isEmpty(oid)) {
+            oid = getCurrentOid();
+        }
+        List<Area> list = areaDao.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 AreaModel toModel(Area entity) {
+        AreaModel model = new AreaModel();
+        if (ObjectUtils.isNotEmpty(entity)) {
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+}

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/CollegeServiceImpl.java

@@ -8,7 +8,7 @@ import com.zhongshu.card.client.service.school.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.dao.school.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;

+ 126 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/DictInfoServiceImpl.java

@@ -0,0 +1,126 @@
+package com.zhongshu.card.server.core.service.school;
+
+import com.github.microservice.components.data.base.util.PageEntityUtil;
+import com.zhongshu.card.client.model.school.BookInfoModel;
+import com.zhongshu.card.client.model.school.BookInfoSearch;
+import com.zhongshu.card.client.model.school.DictInfoParam;
+import com.zhongshu.card.client.model.school.DictInfoSearch;
+import com.zhongshu.card.client.ret.ResultContent;
+import com.zhongshu.card.client.ret.ResultMessage;
+import com.zhongshu.card.client.service.school.DictInfoService;
+import com.zhongshu.card.server.core.dao.school.DictInfoDao;
+import com.zhongshu.card.server.core.domain.school.BookInfo;
+import com.zhongshu.card.server.core.domain.school.DictInfo;
+import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.util.BeanUtils;
+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.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+/**
+ * 字典管理服务
+ *
+ * @author TRX
+ * @date 2024/6/12
+ */
+@Slf4j
+@Service
+public class DictInfoServiceImpl extends SuperService implements DictInfoService {
+
+    @Autowired
+    DictInfoDao dictInfoDao;
+
+    /**
+     * 添加-编辑字典
+     *
+     * @param param
+     * @return
+     */
+    @Override
+    public ResultContent addDict(DictInfoParam param) {
+        Assert.hasText(param.getName(), "name不能为空");
+        Assert.isNull(param.getDictInfoType(), "dictInfoType不能为空");
+        initDefaultUserParam(param);
+        if (param.getSort() == null) {
+            param.setSort(1L);
+        }
+        DictInfo dictInfo = new DictInfo();
+        if (StringUtils.isNotEmpty(param.getId())) {
+            dictInfo = dictInfoDao.findTopById(param.getId());
+            if (ObjectUtils.isEmpty(dictInfo)) {
+                return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+            }
+            DictInfo temp = dictInfoDao.findTopByNameAndOid(param.getName(), param.getOid());
+            if (ObjectUtils.isNotEmpty(temp) && !temp.getId().equals(dictInfo.getId())) {
+                return ResultContent.buildFail(String.format("name已存在:%s", param.getName()));
+            }
+        } else {
+            DictInfo temp = dictInfoDao.findTopByNameAndOid(param.getName(), param.getOid());
+            if (ObjectUtils.isNotEmpty(temp)) {
+                return ResultContent.buildFail(String.format("name已存在:%s", param.getName()));
+            }
+        }
+        BeanUtils.copyProperties(param, dictInfo);
+        dictInfoDao.save(dictInfo);
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 删除字典
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public ResultContent deleteDict(String id) {
+        DictInfo dictInfo = dictInfoDao.findTopById(id);
+        if (ObjectUtils.isEmpty(dictInfo)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        dictInfoDao.delete(dictInfo);
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * @param id
+     * @return
+     */
+    @Override
+    public ResultContent<DictInfoParam> getDictInfo(String id) {
+        DictInfo dictInfo = dictInfoDao.findTopById(id);
+        if (ObjectUtils.isEmpty(dictInfo)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        DictInfoParam model = toModel(dictInfo);
+        return ResultContent.buildSuccess(model);
+    }
+
+    /**
+     * 分页查询
+     *
+     * @param param
+     * @param pageable
+     * @return
+     */
+    @Override
+    public ResultContent<Page<DictInfoParam>> page(DictInfoSearch param, Pageable pageable) {
+        initOidSearchParam(param);
+        Page<DictInfo> page = dictInfoDao.page(pageable, param);
+        return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
+    }
+
+
+    public DictInfoParam toModel(DictInfo dictInfo) {
+        DictInfoParam model = new DictInfoParam();
+        if (ObjectUtils.isNotEmpty(dictInfo)) {
+            BeanUtils.copyProperties(dictInfo, model);
+        }
+        return model;
+    }
+
+}