TRX 1 year ago
parent
commit
6bfd2e8927

+ 48 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoPoolModel.java

@@ -0,0 +1,48 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.utils.type.school.CardType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/7/30
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CardInfoPoolModel extends SuperModel {
+    @Schema(description = "卡片名称")
+    private String name;
+
+    @Schema(description = "卡片类型")
+    private CardType cardType;
+
+    private String cardTypeStr;
+
+    public String getCardTypeStr() {
+        if (cardType == null) {
+            return cardType.getRemark();
+        }
+        return "";
+    }
+
+    @Schema(description = "卡片号码,唯一标识, 卡号")
+    private String code;
+
+    @Schema(description = "uid是什么")
+    private String uid;
+
+    @Schema(description = "是否已使用")
+    private Boolean isUsed = Boolean.FALSE;
+
+    @Schema(description = "使用绑定时间")
+    private Long useTime;
+
+    @Schema(description = "绑定用户userId")
+    private String useUserId;
+
+}

+ 29 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoPoolParam.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.type.school.CardType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/7/30
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CardInfoPoolParam extends SuperParam {
+    @Schema(description = "卡片名称")
+    private String name;
+
+    @Schema(description = "卡片类型")
+    private CardType cardType;
+
+    @Schema(description = "卡片号码,唯一标识, 卡号")
+    private String code;
+
+    @Schema(description = "uid是什么")
+    private String uid;
+}

+ 19 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoPoolRestoreParam.java

@@ -0,0 +1,19 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.utils.type.school.CardType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/7/30
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CardInfoPoolRestoreParam {
+    private String id;
+}

+ 35 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoPoolSearch.java

@@ -0,0 +1,35 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.model.base.SuperSearch;
+import com.zhongshu.card.client.utils.type.school.CardType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/7/30
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CardInfoPoolSearch extends SuperSearch {
+    @Schema(description = "卡片名称")
+    private String name;
+
+    @Schema(description = "卡片类型")
+    private CardType cardType;
+
+    @Schema(description = "卡片号码,唯一标识, 卡号")
+    private String code;
+
+    @Schema(description = "uid是什么")
+    private String uid;
+
+    @Schema(description = "是否已使用")
+    private Boolean isUsed;
+
+    @Schema(description = "关键字")
+    private String keyWord;
+}

+ 1 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/service/OrganizationFeignService.java

@@ -37,7 +37,7 @@ public interface OrganizationFeignService {
     @RequestMapping(value = "getSchoolProjectDetail", method = RequestMethod.GET)
     ResultContent<OrganizationModel> getSchoolProjectDetail(@Parameter(name = "schoolOid", description = "oid", required = false) @RequestParam(name = "schoolOid") String schoolOid);
 
-    @Operation(summary = "得到用户在结构的信息", description = "得到用户在结构的信息")
+    @Operation(summary = "得到用户在机构的信息", description = "得到用户在机构的信息")
     @RequestMapping(value = "getOrgUserDetail", method = {RequestMethod.POST})
     public ResultContent<OrganizationUserModel> getOrgUserDetail(@RequestBody OrgUserDetailParam param);
 

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

@@ -0,0 +1,83 @@
+package com.zhongshu.card.server.core.controller.school;
+
+import com.github.microservice.auth.security.annotations.ResourceAuth;
+import com.github.microservice.auth.security.helper.AuthHelper;
+import com.github.microservice.auth.security.type.AuthType;
+import com.zhongshu.card.client.model.base.IDParam;
+import com.zhongshu.card.client.model.org.OrgUserDetailParam;
+import com.zhongshu.card.client.model.school.*;
+import com.zhongshu.card.client.ret.ResultContent;
+import com.zhongshu.card.client.service.school.CardInfoService;
+import com.zhongshu.card.client.service.school.SchoolUserService;
+import com.zhongshu.card.server.core.service.school.CardInfoPoolService;
+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.*;
+
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/6/5
+ */
+@RestController
+@RequestMapping("/school/cardPool")
+@Tag(name = "学校-卡片池管理")
+public class CardInfoPoolController {
+
+    @Autowired
+    SchoolUserService schoolUserService;
+
+    @Autowired
+    CardInfoService cardInfoService;
+
+    @Autowired
+    AuthHelper authHelper;
+
+    @Autowired
+    CardInfoPoolService cardInfoPoolService;
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "保存卡片信息", description = "保存卡片信息 新增加编辑")
+    @RequestMapping(value = {"saveCardInfoPool"}, method = {RequestMethod.POST})
+    public ResultContent<List<CardInfoModel>> saveCardInfoPool(@RequestBody CardInfoPoolParam param) {
+        return cardInfoPoolService.saveCardInfoPool(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "卡片列表-分页查询", description = "卡片列表-分页查询")
+    @RequestMapping(value = {"page"}, method = {RequestMethod.POST})
+    public ResultContent<Page<CardInfoPoolModel>> page(
+            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+            @Parameter(required = false) CardInfoPoolSearch param) {
+        return cardInfoPoolService.page(param, pageable);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "卡片详情", description = "卡片详情")
+    @RequestMapping(value = {"getCardInfoPoolDetail"}, method = {RequestMethod.POST})
+    public ResultContent<CardInfoPoolModel> getCardInfoPoolDetail(@RequestBody IDParam param) {
+        return cardInfoPoolService.getCardInfoPoolDetail(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "恢复卡片", description = "恢复卡片")
+    @RequestMapping(value = {"restoreCardInfoPool"}, method = {RequestMethod.POST})
+    public ResultContent<CardInfoPoolModel> restoreCardInfoPool(@RequestBody CardInfoPoolRestoreParam param) {
+        return cardInfoPoolService.restoreCardInfoPool(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "删除卡片", description = "删除卡片")
+    @RequestMapping(value = {"deleteCardInfoPool"}, method = {RequestMethod.POST})
+    public ResultContent<CardInfoPoolModel> deleteCardInfoPool(@RequestBody IDParam param) {
+        return cardInfoPoolService.deleteCardInfoPool(param.getId());
+    }
+
+
+}

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

@@ -0,0 +1,25 @@
+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.CardInfoPoolDaoExtend;
+import com.zhongshu.card.server.core.domain.school.Area;
+import com.zhongshu.card.server.core.domain.school.CardInfoPool;
+
+import java.util.List;
+
+/**
+ * 区域Dao
+ *
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface CardInfoPoolDao extends MongoDao<CardInfoPool>, CardInfoPoolDaoExtend {
+
+    CardInfoPool findTopById(String id);
+
+    CardInfoPool findTopByCode(String code);
+
+    CardInfoPool findTopByCodeAndOid(String code, String oid);
+
+    CardInfoPool findTopByCodeAndProjectOid(String code, String projectOid);
+}

+ 17 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/extend/CardInfoPoolDaoExtend.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.CardInfoPoolSearch;
+import com.zhongshu.card.server.core.domain.school.BookInfo;
+import com.zhongshu.card.server.core.domain.school.CardInfoPool;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/7/7
+ * @Version: 1.0
+ */
+public interface CardInfoPoolDaoExtend {
+    Page<CardInfoPool> page(Pageable pageable, CardInfoPoolSearch param);
+}

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

@@ -0,0 +1,92 @@
+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.CardInfoPoolSearch;
+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.CardInfoPoolDaoExtend;
+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.CardInfoPool;
+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 CardInfoPoolDaoImpl extends BaseImpl implements CardInfoPoolDaoExtend {
+
+    @Autowired
+    private DBHelper dbHelper;
+
+    @Override
+    public Page<CardInfoPool> page(Pageable pageable, CardInfoPoolSearch param) {
+        Criteria criteria = new Criteria();
+
+        // 学校ID
+        if (ObjectUtils.isNotEmpty(param.getOid())) {
+            criteria.and("oid").is(param.getOid());
+        }
+
+        if (param.getCardType() != null) {
+            criteria.and("cardType").is(param.getCardType());
+        }
+
+        if (param.getIsUsed() != null) {
+            criteria.and("isUsed").is(param.getIsUsed());
+        }
+
+        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.getCode())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getCode() + ".*$");
+            criterias.add(Criteria.where("code").is(pattern));
+        }
+        if (StringUtils.isNotEmpty(param.getUid())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getUid() + ".*$");
+            criterias.add(Criteria.where("uid").is(pattern));
+        }
+
+        if (StringUtils.isNotEmpty(param.getKeyWord())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getKeyWord() + ".*$");
+            criteria.orOperator(
+                    Criteria.where("name").regex(pattern),
+                    Criteria.where("code").regex(pattern),
+                    Criteria.where("uid").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, CardInfoPool.class);
+    }
+
+}

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

@@ -24,6 +24,12 @@ import org.springframework.data.mongodb.core.mapping.Document;
 @NonLeaked
 public class CardInfo extends SuperMain {
 
+    @Schema(description = "学校oid")
+    private String schoolOid;
+
+    @Schema(description = "项目oid")
+    private String projectOid;
+
     @Schema(description = "卡片名称")
     private String name;
 
@@ -52,4 +58,5 @@ public class CardInfo extends SuperMain {
 
     @Schema(description = "校园名称")
     private String orgName;
+
 }

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

@@ -0,0 +1,47 @@
+package com.zhongshu.card.server.core.domain.school;
+
+import com.github.microservice.components.data.mongo.mongo.domain.SuperEntity;
+import com.zhongshu.card.client.utils.type.school.CardType;
+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/7/30
+ */
+@Data
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+@NonLeaked
+public class CardInfoPool extends SuperEntity {
+    @Schema(description = "卡片名称")
+    private String name;
+
+    @Schema(description = "卡片类型")
+    private CardType cardType;
+
+    @Schema(description = "卡片号码,唯一标识, 卡号")
+    private String code;
+
+    @Schema(description = "uid是什么")
+    private String uid;
+
+    @Schema(description = "是否已使用")
+    private Boolean isUsed = Boolean.FALSE;
+
+    @Schema(description = "使用绑定时间")
+    private Long useTime;
+
+    @Schema(description = "绑定用户userId")
+    private String useUserId;
+
+    @Schema(description = "项目Oid")
+    private String projectOid;
+}

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

@@ -0,0 +1,144 @@
+package com.zhongshu.card.server.core.service.school;
+
+import com.github.microservice.components.data.base.util.PageEntityUtil;
+import com.zhongshu.card.client.model.org.ProjectOrgModel;
+import com.zhongshu.card.client.model.school.*;
+import com.zhongshu.card.client.ret.ResultContent;
+import com.zhongshu.card.client.ret.ResultMessage;
+import com.zhongshu.card.server.core.dao.school.CardInfoPoolDao;
+import com.zhongshu.card.server.core.domain.school.CardInfoPool;
+import com.zhongshu.card.server.core.domain.school.DeviceBind;
+import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.service.org.OrganizationServiceImpl;
+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;
+
+/**
+ * @author TRX
+ * @date 2024/7/30
+ */
+@Slf4j
+@Service
+public class CardInfoPoolService extends SuperService {
+
+    @Autowired
+    CardInfoPoolDao cardInfoPoolDao;
+
+    @Autowired
+    OrganizationServiceImpl organizationService;
+
+    /**
+     * 保存卡片信息
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent saveCardInfoPool(CardInfoPoolParam param) {
+        initDefaultUserAndOid(param);
+        CardInfoPool entity = null;
+        // 这是学校的oid
+        String oid = param.getOid();
+        ResultContent<ProjectOrgModel> projectContent = organizationService.getSchoolProjectDetail(oid);
+        // 查询出项目的oid
+        String projectOid = "";
+        if (projectContent.isSuccess()) {
+            projectOid = projectContent.getContent().getOid();
+        }
+        // 学校唯一
+        CardInfoPool temp = cardInfoPoolDao.findTopByCodeAndOid(param.getCode(), oid);
+        if (StringUtils.isNotEmpty(param.getId())) {
+            entity = cardInfoPoolDao.findTopById(param.getId());
+            if (ObjectUtils.isEmpty(entity)) {
+                return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+            }
+            if (ObjectUtils.isNotEmpty(temp) && !temp.getId().equals(entity.getId())) {
+                return ResultContent.buildFail(String.format("卡号已存在:%s", param.getCode()));
+            }
+        } else {
+            entity = new CardInfoPool();
+            if (ObjectUtils.isNotEmpty(temp)) {
+                return ResultContent.buildFail(String.format("卡号已存在:%s", param.getCode()));
+            }
+        }
+        BeanUtils.copyProperties(param, entity);
+        entity.setProjectOid(projectOid);
+        if (entity.getIsUsed() == null) {
+            entity.setIsUsed(Boolean.FALSE);
+        }
+        cardInfoPoolDao.save(entity);
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 分页列表,给web端用
+     *
+     * @param param
+     * @param pageable
+     * @return
+     */
+    public ResultContent<Page<CardInfoPoolModel>> page(CardInfoPoolSearch param, Pageable pageable) {
+        initOidSearchParam(param);
+        Page<CardInfoPool> page = cardInfoPoolDao.page(pageable, param);
+        return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
+    }
+
+    /**
+     * 查询卡片详情
+     *
+     * @param id
+     * @return
+     */
+    public ResultContent<CardInfoPoolModel> getCardInfoPoolDetail(String id) {
+        CardInfoPool entity = cardInfoPoolDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        return ResultContent.buildSuccess(toModel(entity));
+    }
+
+    /**
+     * 恢复卡片
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent<CardInfoPoolModel> restoreCardInfoPool(CardInfoPoolRestoreParam param) {
+        CardInfoPool entity = cardInfoPoolDao.findTopById(param.getId());
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+        }
+        entity.setIsUsed(Boolean.FALSE);
+        cardInfoPoolDao.save(entity);
+        return ResultContent.buildSuccess(toModel(entity));
+    }
+
+    /**
+     * 删除卡片
+     *
+     * @param id
+     * @return
+     */
+    public ResultContent deleteCardInfoPool(String id) {
+        CardInfoPool entity = cardInfoPoolDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        cardInfoPoolDao.delete(entity);
+        return ResultContent.buildSuccess();
+    }
+
+    public CardInfoPoolModel toModel(CardInfoPool entity) {
+        CardInfoPoolModel model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new CardInfoPoolModel();
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+}