TRX il y a 1 an
Parent
commit
ea6be63ea7

+ 52 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/BookInfoAddParam.java

@@ -0,0 +1,52 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.model.base.SuperParam;
+import com.zhongshu.card.client.utils.type.BookState;
+import com.zhongshu.card.client.utils.type.OrganizationUserType;
+import com.zhongshu.card.client.utils.type.Sex;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/6/7
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BookInfoAddParam extends SuperParam {
+    @Schema(description = "类型  学生 、教师")
+    OrganizationUserType userType;
+
+    @Schema(description = "姓名")
+    private String name;
+
+    @Schema(description = "部门,教师使用")
+    private String departmentId;
+
+    @Schema(description = "性别")
+    private Sex sex;
+
+    @Schema(description = "电话")
+    private String phone;
+
+    @Schema(description = "身份证号")
+    private String idCard;
+
+    @Schema(description = "教师 入校时间")
+    private Long inSchoolTime;
+
+    @Schema(description = "学号 学生使用")
+    private String code;
+
+    @Schema(description = "学生:班级")
+    private String className;
+
+    @Schema(description = "学生:入学年份")
+    private Long inSchoolYear;
+
+    @Schema(description = "状态")
+    private BookState bookState;
+}

+ 78 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/BookInfoModel.java

@@ -0,0 +1,78 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.model.org.DepartmentModel;
+import com.zhongshu.card.client.model.org.OrganizationModel;
+import com.zhongshu.card.client.model.org.OrganizationUserModel;
+import com.zhongshu.card.client.model.org.UserCountModel;
+import com.zhongshu.card.client.utils.type.BookState;
+import com.zhongshu.card.client.utils.type.OrganizationUserType;
+import com.zhongshu.card.client.utils.type.Sex;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/6/7
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BookInfoModel extends SuperModel {
+    @Schema(description = "类型  学生 、教师")
+    OrganizationUserType userType;
+
+    @Schema(description = "姓名")
+    private String name;
+
+    @Schema(description = "部门,教师使用")
+    private DepartmentModel department;
+
+    @Schema(description = "性别")
+    private Sex sex;
+
+    @Schema(description = "电话")
+    private String phone;
+
+    @Schema(description = "身份证号")
+    private String idCard;
+
+    @Schema(description = "教师 入校时间")
+    private Long inSchoolTime;
+
+    @Schema(description = "学号 学生使用")
+    private String code;
+
+    @Schema(description = "学生:班级")
+    private String className;
+
+    @Schema(description = "学生:入学年份")
+    private Long inSchoolYear;
+
+    @Schema(description = "状态")
+    private BookState bookState;
+
+    private String bookStateStr;
+
+    public String getBookStateStr() {
+        if (bookState != null) {
+            return bookState.getRemark();
+        }
+        return "";
+    }
+
+    //------------------------关联平台 数据信息 start--------------------
+    @Schema(description = "所在学校")
+    private OrganizationModel organization;
+
+    @Schema(description = "关联账号信息")
+    private UserCountModel userAccount;
+
+    @Schema(description = "用户UserId")
+    private String userId;
+
+    @Schema(description = "关联的结构用户信息")
+    private OrganizationUserModel organizationUser;
+}

+ 56 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/BookInfoSearch.java

@@ -0,0 +1,56 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.model.base.SuperSearch;
+import com.zhongshu.card.client.utils.type.BookState;
+import com.zhongshu.card.client.utils.type.OrganizationUserType;
+import com.zhongshu.card.client.utils.type.Sex;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/6/7
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BookInfoSearch extends SuperSearch {
+
+    @Schema(description = "搜索关键字")
+    private String keyWord;
+
+    @Schema(description = "类型  学生 、教师")
+    OrganizationUserType userType;
+
+    @Schema(description = "姓名")
+    private String name;
+
+    @Schema(description = "部门,教师使用")
+    private String departmentId;
+
+    @Schema(description = "性别")
+    private Sex sex;
+
+    @Schema(description = "电话")
+    private String phone;
+
+    @Schema(description = "身份证号")
+    private String idCard;
+
+    @Schema(description = "教师 入校时间")
+    private Long inSchoolTime;
+
+    @Schema(description = "学号 学生使用")
+    private String code;
+
+    @Schema(description = "学生:班级")
+    private String className;
+
+    @Schema(description = "学生:入学年份")
+    private Long inSchoolYear;
+
+    @Schema(description = "状态")
+    private BookState bookState;
+}

+ 8 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/service/school/BookInfoService.java

@@ -0,0 +1,8 @@
+package com.zhongshu.card.client.service.school;
+
+/**
+ * @author TRX
+ * @date 2024/6/7
+ */
+public interface BookInfoService {
+}

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

@@ -0,0 +1,20 @@
+package com.zhongshu.card.client.utils.type;
+
+import lombok.Getter;
+
+/**
+ *
+ */
+public enum BookState {
+    OnJob("在职"),
+    Leave("离职"),
+    Registered("在籍"),
+    ;
+
+    @Getter
+    private String remark;
+
+    BookState(String remark) {
+        this.remark = remark;
+    }
+}

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

@@ -0,0 +1,95 @@
+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.NoticeInfoService;
+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("/school/bookInfo")
+@Tag(name = "学校-通讯录")
+public class BookInfoController {
+
+    @Autowired
+    RoleServiceImpl roleService;
+
+    @Autowired
+    NoticeInfoService noticeInfoService;
+
+    @Autowired
+    BookInfoService bookInfoService;
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "添加-编辑公告", description = "添加-编辑公告")
+    @RequestMapping(value = "addNoticeInfo", method = {RequestMethod.POST})
+    public ResultContent addNoticeInfo(@RequestBody NoticeInfoAddParam param) {
+        return this.noticeInfoService.addNoticeInfo(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "删除公告", description = "删除公告")
+    @RequestMapping(value = "deleteNoticeInfo", method = {RequestMethod.POST})
+    public ResultContent deleteNoticeInfo(@RequestBody IDParam param) {
+        return this.noticeInfoService.deleteNoticeInfo(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "置顶公告", description = "置顶公告")
+    @RequestMapping(value = "topping", method = {RequestMethod.POST})
+    public ResultContent topping(@RequestBody IDParam param) {
+        return this.noticeInfoService.topping(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "公告详情", description = "公告详情")
+    @RequestMapping(value = "getDetail", method = {RequestMethod.POST})
+    public ResultContent<NoticeInfoModel> getDetail(@RequestBody IDParam param) {
+        return this.noticeInfoService.getDetail(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "公告增加阅读量", description = "公告增加阅读量")
+    @RequestMapping(value = "addView", method = {RequestMethod.POST})
+    public ResultContent addView(@RequestBody IDParam param) {
+        return this.noticeInfoService.addView(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "公告列表-分页查询", description = "公告列表-分页查询")
+    @RequestMapping(value = {"page"}, method = {RequestMethod.POST})
+    public ResultContent<Page<NoticeInfoModel>> page(
+            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+            @Parameter(required = false) NoticeInfoSearchParam param) {
+        return noticeInfoService.page(param, pageable);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "公告阅读量列表-分页查询", description = "公告阅读量-分页查询")
+    @RequestMapping(value = {"pageView"}, method = {RequestMethod.POST})
+    public ResultContent<Page<NoticeInfoViewModel>> pageView(
+            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+            @Parameter(required = false) NoticeInfoViewSearch param) {
+        return noticeInfoService.pageView(param, pageable);
+    }
+}

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

@@ -0,0 +1,17 @@
+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.BookInfoDaoExtend;
+import com.zhongshu.card.server.core.dao.school.extend.NoticeInfoDaoExtend;
+import com.zhongshu.card.server.core.domain.school.BookInfo;
+import com.zhongshu.card.server.core.domain.school.NoticeInfo;
+
+/**
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface BookInfoDao extends MongoDao<BookInfo>, BookInfoDaoExtend {
+
+    BookInfo findTopById(String id);
+
+}

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

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

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

@@ -0,0 +1,117 @@
+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.NoticeInfoSearchParam;
+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.NoticeInfoDaoExtend;
+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.NoticeInfo;
+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 BookInfoDaoImpl extends BaseImpl implements BookInfoDaoExtend {
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    @Autowired
+    private DBHelper dbHelper;
+
+    @Override
+    public Page<BookInfo> page(Pageable pageable, BookInfoSearch param) {
+        Criteria criteria = new Criteria();
+
+        // 学校ID
+        if (ObjectUtils.isNotEmpty(param.getOid())) {
+            criteria.and("oid").is(param.getOid());
+        }
+
+        if (param.getUserType() != null) {
+            criteria.and("userType").is(param.getUserType());
+        }
+
+        if (StringUtils.isNotEmpty(param.getDepartmentId())) {
+            criteria.and("department").is(Department.build(param.getDepartmentId()));
+        }
+
+        if (param.getSex() != null) {
+            criteria.and("sex").is(param.getSex());
+        }
+
+        // 入学年份
+        if (CommonUtil.longIsEmpty(param.getInSchoolYear())) {
+            criteria.and("inSchoolYear").is(param.getInSchoolYear());
+        }
+
+        // 状态
+        if (param.getBookState() != null) {
+            criteria.and("bookState").is(param.getBookState());
+        }
+
+        if (!CommonUtil.longIsEmpty(param.getStartTime()) && !CommonUtil.longIsEmpty(param.getEndTime())) {
+            criteria.and("createTime").gte(param.getStartTime()).and("createTime").lte(param.getEndTime());
+        }
+
+        // 模糊搜索
+        List<Criteria> criterias = new ArrayList<>();
+        if (StringUtils.isNotEmpty(param.getName())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getName() + ".*$");
+            criterias.add(Criteria.where("name").is(pattern));
+        }
+        if (StringUtils.isNotEmpty(param.getPhone())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getPhone() + ".*$");
+            criterias.add(Criteria.where("phone").is(pattern));
+        }
+        if (StringUtils.isNotEmpty(param.getIdCard())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getIdCard() + ".*$");
+            criterias.add(Criteria.where("idCard").is(pattern));
+        }
+        if (StringUtils.isNotEmpty(param.getCode())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getCode() + ".*$");
+            criterias.add(Criteria.where("code").is(pattern));
+        }
+
+        if (StringUtils.isNotEmpty(param.getClassName())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getClassName() + ".*$");
+            criterias.add(Criteria.where("className").is(pattern));
+        }
+        if (!CollectionUtils.isEmpty(criterias)) {
+            criteria.andOperator(criterias.toArray(new Criteria[]{}));
+        }
+
+        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);
+        Query query = Query.query(criteria);
+        query.with(sort);
+        return dbHelper.pages(query, pageable, BookInfo.class);
+    }
+
+}

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

@@ -32,4 +32,9 @@ public class Department extends SuperMain {
     @Indexed
     private String parentId = ITree.ROOT_ID;
 
+    public static Department build(String id) {
+        Department entity = new Department();
+        entity.setId(id);
+        return entity;
+    }
 }

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

@@ -0,0 +1,81 @@
+package com.zhongshu.card.server.core.domain.school;
+
+import com.zhongshu.card.client.utils.type.BookState;
+import com.zhongshu.card.client.utils.type.OrganizationUserType;
+import com.zhongshu.card.client.utils.type.Sex;
+import com.zhongshu.card.server.core.domain.base.SuperMain;
+import com.zhongshu.card.server.core.domain.org.Department;
+import com.zhongshu.card.server.core.domain.org.Organization;
+import com.zhongshu.card.server.core.domain.org.OrganizationUser;
+import com.zhongshu.card.server.core.domain.org.UserAccount;
+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.DBRef;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * 学校  通讯录 学生、教师学校
+ *
+ * @author TRX
+ * @date 2024/6/7
+ */
+@Data
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+@NonLeaked
+public class BookInfo extends SuperMain {
+
+    @Schema(description = "类型  学生 、教师")
+    OrganizationUserType userType;
+
+    @Schema(description = "姓名")
+    private String name;
+
+    @Schema(description = "学号 学生使用")
+    private String code;
+
+    @Schema(description = "部门,教师使用")
+    @DBRef(lazy = true)
+    private Department department;
+
+    @Schema(description = "性别")
+    private Sex sex;
+
+    @Schema(description = "电话")
+    private String phone;
+
+    @Schema(description = "身份证号")
+    private String idCard;
+
+    @Schema(description = "教师 入校时间")
+    private Long inSchoolTime;
+
+    @Schema(description = "学生:班级")
+    private String className;
+
+    @Schema(description = "学生:入学年份")
+    private Long inSchoolYear;
+
+    @Schema(description = "状态")
+    private BookState bookState;
+
+    //------------------------关联平台 数据信息 start--------------------
+    @Schema(description = "所在学校")
+    @DBRef(lazy = true)
+    private Organization organization;
+
+    @Schema(description = "关联账号信息")
+    @DBRef(lazy = true)
+    private UserAccount userAccount;
+
+    @Schema(description = "用户UserId")
+    private String userId;
+
+    @Schema(description = "关联的结构用户信息")
+    @DBRef(lazy = true)
+    private OrganizationUser organizationUser;
+}

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

@@ -0,0 +1,44 @@
+package com.zhongshu.card.server.core.service.school;
+
+import com.zhongshu.card.client.model.school.BookInfoModel;
+import com.zhongshu.card.client.service.school.BookInfoService;
+import com.zhongshu.card.server.core.dao.org.DepartmentDao;
+import com.zhongshu.card.server.core.dao.org.OrganizationDao;
+import com.zhongshu.card.server.core.dao.org.UserCountDao;
+import com.zhongshu.card.server.core.dao.school.BookInfoDao;
+import com.zhongshu.card.server.core.domain.org.Department;
+import com.zhongshu.card.server.core.domain.org.Organization;
+import com.zhongshu.card.server.core.domain.school.BookInfo;
+import com.zhongshu.card.server.core.service.base.SuperService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author TRX
+ * @date 2024/6/7
+ */
+@Slf4j
+@Service
+public class BookInfoServiceImpl extends SuperService implements BookInfoService {
+
+    @Autowired
+    BookInfoDao bookInfoDao;
+
+    @Autowired
+    OrganizationDao organizationDao;
+
+    @Autowired
+    DepartmentDao departmentDao;
+
+    @Autowired
+    UserCountDao userCountDao;
+
+
+
+    public BookInfoModel toModel(BookInfo entity) {
+        BookInfoModel model = new BookInfoModel();
+
+        return model;
+    }
+}