TRX před 1 rokem
rodič
revize
182212a0a7
14 změnil soubory, kde provedl 446 přidání a 30 odebrání
  1. 9 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperModel.java
  2. 14 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoModel.java
  3. 52 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoSearch.java
  4. 16 4
      FullCardClient/src/main/java/com/zhongshu/card/client/service/school/CardInfoService.java
  5. 33 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/school/CardController.java
  6. 3 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/CardInfoDao.java
  7. 17 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/extend/CardInfoDaoExtend.java
  8. 106 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/impl/CardInfoDaoImpl.java
  9. 9 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/base/SuperMain.java
  10. 36 8
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/base/SuperService.java
  11. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/hxz/HxzService.java
  12. 8 6
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java
  13. 141 6
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/CardInfoServiceImpl.java
  14. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/SchoolUserServiceImpl.java

+ 9 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperModel.java

@@ -38,4 +38,13 @@ public class SuperModel implements Serializable {
 
     @Schema(description = "添加用户名称")
     private String createUserName;
+
+    @Schema(description = "创建用户ID")
+    private String updateUserId;
+
+    @Schema(description = "添加用户名称")
+    private String updateUserName;
+
+    @Schema(description = "添加用户电话", hidden = true)
+    private String updatePhone;
 }

+ 14 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoModel.java

@@ -2,6 +2,7 @@ package com.zhongshu.card.client.model.school;
 
 import com.zhongshu.card.client.model.base.SuperModel;
 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.school.CardState;
 import com.zhongshu.card.client.utils.type.school.CardType;
@@ -46,4 +47,17 @@ public class CardInfoModel extends SuperModel {
 
     @Schema(description = "项目oid")
     private String projectOid;
+
+    @Schema(description = "机构用户信息")
+    private OrganizationUserModel organizationUser;
+
+    @Schema(description = "是否作废")
+    private Boolean isCanceled = Boolean.FALSE;
+
+    @Schema(description = "作废时间")
+    private Long cancelTime;
+
+    @Schema(description = "作废时间")
+    private String cancelUserId;
+
 }

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

@@ -0,0 +1,52 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.model.base.SuperSearch;
+import com.zhongshu.card.client.utils.type.school.CardState;
+import com.zhongshu.card.client.utils.type.school.CardType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.internal.build.AllowPrintStacktrace;
+
+/**
+ * @author TRX
+ * @date 2024/7/30
+ */
+@Data
+@AllowPrintStacktrace
+@NoArgsConstructor
+public class CardInfoSearch extends SuperSearch {
+
+    @Schema(description = "学校oid")
+    private String schoolOid;
+
+    @Schema(description = "项目oid")
+    private String projectOid;
+
+    @Schema(description = "卡片名称")
+    private String name;
+
+    @Schema(description = "卡片类型")
+    private CardType cardType;
+
+    @Schema(description = "卡片号码,唯一标识, 卡号")
+    private String code;
+
+    @Schema(description = "卡片状态")
+    private CardState cardState;
+
+    @Schema(description = "是否作废")
+    private Boolean isCanceled = Boolean.FALSE;
+
+    @Schema(description = "所属用户UserId")
+    private String userId;
+
+    @Schema(description = "用户名称")
+    private String userName;
+
+    @Schema(description = "电话")
+    private String phone;
+
+    @Schema(description = "所属关键字")
+    private String keyWord;
+}

+ 16 - 4
FullCardClient/src/main/java/com/zhongshu/card/client/service/school/CardInfoService.java

@@ -1,10 +1,9 @@
 package com.zhongshu.card.client.service.school;
 
-import com.zhongshu.card.client.model.school.CardInfoModel;
-import com.zhongshu.card.client.model.school.CardInfoParam;
-import com.zhongshu.card.client.model.school.CardInfoSimpleModel;
-import com.zhongshu.card.client.model.school.CardLossParam;
+import com.zhongshu.card.client.model.school.*;
 import com.zhongshu.card.client.ret.ResultContent;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 
 import java.util.List;
 
@@ -45,4 +44,17 @@ public interface CardInfoService {
     // 卡号查询卡片
     ResultContent<CardInfoSimpleModel> getCardDetailByCode(String code);
 
+    //----------------------------园区卡片操作 start ------------------------
+
+    ResultContent<Page<CardInfoPoolModel>> page(CardInfoSearch param, Pageable pageable);
+
+    // 通过数据ID挂失(园区操作)
+    ResultContent lossById(String id);
+
+    // 通过数据ID启用(园区操作)
+    ResultContent enableById(String id);
+
+    // 卡片作废
+    ResultContent cardCancel(String id);
+
 }

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

@@ -129,4 +129,37 @@ public class CardController {
         return cardInfoService.getCardDetailByCode(code);
     }
 
+    //----------------------------园区卡片操作 start ------------------------
+    @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) CardInfoSearch param) {
+        return cardInfoService.page(param, pageable);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "挂失卡片(园区操作)", description = "挂失卡片(园区操作)")
+    @RequestMapping(value = {"lossById"}, method = {RequestMethod.POST})
+    public ResultContent lossById(@RequestBody IDParam param) {
+        return cardInfoService.lossById(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "挂失启用(园区操作)", description = "挂失启用(园区操作)")
+    @RequestMapping(value = {"enableById"}, method = {RequestMethod.POST})
+    public ResultContent enableById(@RequestBody IDParam param) {
+        return cardInfoService.enableById(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "挂失作废(园区操作)", description = "挂失作废(园区操作)")
+    @RequestMapping(value = {"cardCancel"}, method = {RequestMethod.POST})
+    public ResultContent cardCancel(@RequestBody IDParam param) {
+        return cardInfoService.cardCancel(param.getId());
+    }
+
+    //----------------------------园区卡片操作 end --------------------------
+
 }

+ 3 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/CardInfoDao.java → FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/CardInfoDao.java

@@ -1,8 +1,7 @@
-package com.zhongshu.card.server.core.dao;
+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.UserAccount;
-import com.zhongshu.card.server.core.domain.school.Area;
+import com.zhongshu.card.server.core.dao.school.extend.CardInfoDaoExtend;
 import com.zhongshu.card.server.core.domain.school.CardInfo;
 
 import java.util.List;
@@ -13,7 +12,7 @@ import java.util.List;
  * @author TRX
  * @date 2024/3/21
  */
-public interface CardInfoDao extends MongoDao<CardInfo> {
+public interface CardInfoDao extends MongoDao<CardInfo>, CardInfoDaoExtend {
 
     CardInfo findTopById(String id);
 

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

@@ -0,0 +1,17 @@
+package com.zhongshu.card.server.core.dao.school.extend;
+
+import com.zhongshu.card.client.model.school.CardInfoPoolSearch;
+import com.zhongshu.card.client.model.school.CardInfoSearch;
+import com.zhongshu.card.server.core.domain.school.CardInfo;
+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 CardInfoDaoExtend {
+    Page<CardInfo> page(Pageable pageable, CardInfoSearch param);
+}

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

@@ -0,0 +1,106 @@
+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.CardInfoSearch;
+import com.zhongshu.card.server.core.dao.BaseImpl;
+import com.zhongshu.card.server.core.dao.school.extend.CardInfoDaoExtend;
+import com.zhongshu.card.server.core.domain.school.CardInfo;
+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.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/4/12
+ * @Version: 1.0
+ */
+public class CardInfoDaoImpl extends BaseImpl implements CardInfoDaoExtend {
+
+    @Autowired
+    private DBHelper dbHelper;
+
+    @Override
+    public Page<CardInfo> page(Pageable pageable, CardInfoSearch param) {
+        Criteria criteria = new Criteria();
+
+        if (ObjectUtils.isNotEmpty(param.getProjectOid())) {
+            criteria.and("projectOid").is(param.getProjectOid());
+        }
+
+        if (ObjectUtils.isNotEmpty(param.getSchoolOid())) {
+            criteria.and("schoolOid").is(param.getSchoolOid());
+        }
+
+        if (param.getCardType() != null) {
+            criteria.and("cardType").is(param.getCardType());
+        }
+
+        // 卡片是否挂失
+        if (param.getCardState() != null) {
+            criteria.and("cardState").is(param.getCardState());
+        }
+
+        // 是否作废
+        if (param.getIsCanceled() != null) {
+            criteria.and("isCanceled").is(param.getIsCanceled());
+        }
+
+        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.getUserId())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getUserId() + ".*$");
+            criterias.add(Criteria.where("userId").is(pattern));
+        }
+
+        if (StringUtils.isNotEmpty(param.getUserName())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getUserName() + ".*$");
+            criterias.add(Criteria.where("userName").is(pattern));
+        }
+
+        if (StringUtils.isNotEmpty(param.getPhone())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getPhone() + ".*$");
+            criterias.add(Criteria.where("phone").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("userId").regex(pattern),
+                    Criteria.where("userName").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, CardInfo.class);
+    }
+
+}

+ 9 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/base/SuperMain.java

@@ -31,4 +31,13 @@ public class SuperMain extends SuperEntity {
 
     @Schema(description = "添加用户电话", hidden = true)
     private String createPhone;
+
+    @Schema(description = "创建用户ID")
+    private String updateUserId;
+
+    @Schema(description = "添加用户名称")
+    private String updateUserName;
+
+    @Schema(description = "添加用户电话", hidden = true)
+    private String updatePhone;
 }

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

@@ -77,10 +77,32 @@ public abstract class SuperService {
             }
             Assert.hasText(entity.getOid(), "oid不能为空");
 
-            if (authHelper != null && authHelper.getCurrentUser() != null) {
-                entity.setCreateUserId(authHelper.getCurrentUser().getUserId());
-                entity.setCreateUserName(authHelper.getCurrentUser().getUserName());
-                entity.setCreatePhone(authHelper.getCurrentUser().getPhone());
+            UserAccount account = getCurrentUserAccount();
+            if (account != null) {
+                if (StringUtils.isEmpty(entity.getCreateUserId())) {
+                    entity.setCreateUserId(account.getUserId());
+                    entity.setCreateUserName(account.getName());
+                    entity.setCreatePhone(account.getPhone());
+                }
+                entity.setUpdateUserId(account.getUserId());
+                entity.setUpdateUserName(account.getName());
+                entity.setUpdatePhone(account.getPhone());
+            }
+        }
+    }
+
+    /**
+     * 编辑 entity 记录修改人的信息
+     *
+     * @param entity
+     */
+    public void initUpdateEntity(SuperMain entity) {
+        if (entity != null) {
+            UserAccount account = getCurrentUserAccount();
+            if (account != null) {
+                entity.setUpdateUserId(account.getUserId());
+                entity.setUpdateUserName(account.getName());
+                entity.setUpdatePhone(account.getPhone());
             }
         }
     }
@@ -91,10 +113,16 @@ public abstract class SuperService {
             if (StringUtils.isEmpty(oid)) {
                 entity.setOid(getCurrentOid());
             }
-            if (authHelper != null && authHelper.getCurrentUser() != null) {
-                entity.setCreateUserId(authHelper.getCurrentUser().getUserId());
-                entity.setCreateUserName(authHelper.getCurrentUser().getUserName());
-                entity.setCreatePhone(authHelper.getCurrentUser().getPhone());
+            UserAccount account = getCurrentUserAccount();
+            if (account != null) {
+                if (StringUtils.isEmpty(entity.getCreateUserId())) {
+                    entity.setCreateUserId(account.getUserId());
+                    entity.setCreateUserName(account.getName());
+                    entity.setCreatePhone(account.getPhone());
+                }
+                entity.setUpdateUserId(account.getUserId());
+                entity.setUpdateUserName(account.getName());
+                entity.setUpdatePhone(account.getPhone());
             }
         }
     }

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/hxz/HxzService.java

@@ -4,7 +4,7 @@ import cn.hutool.json.JSONUtil;
 import com.github.microservice.models.hxz.*;
 import com.github.microservice.models.type.PaymentType;
 import com.zhongshu.card.client.ret.ResultContent;
-import com.zhongshu.card.server.core.dao.CardInfoDao;
+import com.zhongshu.card.server.core.dao.school.CardInfoDao;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
 import com.zhongshu.card.server.core.dao.payment.ExpenseFlowDao;
 import com.zhongshu.card.server.core.dao.school.DeviceInfoDao;

+ 8 - 6
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java

@@ -18,7 +18,7 @@ import com.zhongshu.card.client.utils.type.OrderType;
 import com.zhongshu.card.client.utils.type.RechargeType;
 import com.zhongshu.card.client.utils.type.UserState;
 import com.zhongshu.card.client.utils.type.school.CardState;
-import com.zhongshu.card.server.core.dao.CardInfoDao;
+import com.zhongshu.card.server.core.dao.school.CardInfoDao;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
 import com.zhongshu.card.server.core.dao.payment.ExpenseFlowDao;
 import com.zhongshu.card.server.core.dao.payment.WalletDao;
@@ -104,9 +104,7 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
      * @param iotParam
      * @return
      */
-    public ResultContent<ExpenseFlow> createExpenseFlowByHxz(
-            ConsumTransactionsModel iotParam,
-            ExpenseFlow expenseFlow) {
+    public ResultContent<ExpenseFlow> createExpenseFlowByHxz(ConsumTransactionsModel iotParam, ExpenseFlow expenseFlow) {
         expenseFlow.setMqttDataId(iotParam.getMqttDataId());
 
         expenseFlow.setYear(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyy));
@@ -323,6 +321,11 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
                 return;
             }
 
+            if (cardInfo.getIsCanceled() != null && cardInfo.getIsCanceled()) {
+                entity.setVerifyError(String.format("卡片已作废"));
+                return;
+            }
+
             ConsumTransactionsModel iotParam = (ConsumTransactionsModel) entity.getParam();
             if (iotParam.getMode() != 0 && iotParam.getPayType() != 0) {
                 entity.setVerifyError("消费模式不支持");
@@ -450,8 +453,7 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
             if (isPaySuccess != null && isPaySuccess) {
                 result.setSuccess();
 //                result.setText(expenseFlow.getPayRemark());
-                if (expenseFlow.getPaymentType() == PaymentType.WxQrCode
-                        || expenseFlow.getPaymentType() == PaymentType.ZfbQrCode) {
+                if (expenseFlow.getPaymentType() == PaymentType.WxQrCode || expenseFlow.getPaymentType() == PaymentType.ZfbQrCode) {
                     result.setName("陈琰春");
                 } else {
                     result.setName(expenseFlow.getUserName());

+ 141 - 6
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/CardInfoServiceImpl.java

@@ -2,16 +2,16 @@ package com.zhongshu.card.server.core.service.school;
 
 import com.github.microservice.auth.client.content.ResultState;
 import com.github.microservice.auth.client.service.UserService;
-import com.zhongshu.card.client.model.school.CardInfoModel;
-import com.zhongshu.card.client.model.school.CardInfoParam;
-import com.zhongshu.card.client.model.school.CardInfoSimpleModel;
-import com.zhongshu.card.client.model.school.CardLossParam;
+import com.github.microservice.components.data.base.util.PageEntityUtil;
+import com.zhongshu.card.client.model.org.OidAboutInfo;
+import com.zhongshu.card.client.model.org.OrganizationUserModel;
+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.client.service.school.CardInfoService;
 import com.zhongshu.card.client.utils.type.CardOperationType;
 import com.zhongshu.card.client.utils.type.school.CardState;
-import com.zhongshu.card.server.core.dao.CardInfoDao;
+import com.zhongshu.card.server.core.dao.school.CardInfoDao;
 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.CardInfoPoolDao;
@@ -22,11 +22,15 @@ import com.zhongshu.card.server.core.domain.school.CardInfo;
 import com.zhongshu.card.server.core.domain.school.CardInfoLossRecord;
 import com.zhongshu.card.server.core.domain.school.CardInfoPool;
 import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.service.org.OrganizationServiceImpl;
+import com.zhongshu.card.server.core.service.org.UserAccountServiceImpl;
 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.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
@@ -63,6 +67,12 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
     @Autowired
     CardInfoPoolDao cardInfoPoolDao;
 
+    @Autowired
+    OrganizationServiceImpl organizationService;
+
+    @Autowired
+    UserAccountServiceImpl userAccountService;
+
     /**
      * 添加或修改卡片信息
      *
@@ -131,6 +141,7 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
         }
         cardInfo = new CardInfo();
         initEntity(cardInfo);
+
         String userId = getCurrentUserId();
         UserAccount account = userCountDao.findTopByUserId(userId);
         cardInfo.setName(cardInfoPool.getName());
@@ -393,7 +404,7 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
         if (ObjectUtils.isEmpty(cardInfo)) {
             return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
         }
-        CardInfoModel model = toModel(cardInfo);
+        CardInfoModel model = toOrgModel(cardInfo);
         return ResultContent.buildSuccess(model);
     }
 
@@ -408,6 +419,117 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
         return ResultContent.buildSuccess(model);
     }
 
+    //----------------------------园区卡片操作 start ------------------------
+
+    public ResultContent<Page<CardInfoPoolModel>> page(CardInfoSearch param, Pageable pageable) {
+        initOidSearchParam(param);
+        String oid = param.getOid();
+        OidAboutInfo aboutInfo = organizationService.getOidAboutOrgInfo(oid);
+        param.setProjectOid(aboutInfo.getProjectOid());
+        param.setSchoolOid(aboutInfo.getSchoolOid());
+        Page<CardInfo> page = cardInfoDao.page(pageable, param);
+        return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toOrgModel));
+    }
+
+    /**
+     * 卡片ID挂失 (园区管理员操作)
+     *
+     * @param id
+     * @return
+     */
+    public ResultContent lossById(String id) {
+        Assert.hasText(id, "id不能为空");
+        String userId = getCurrentUserId();
+        UserAccount userAccount = userCountDao.findTopByUserId(userId);
+
+        CardInfo cardInfo = cardInfoDao.findTopById(id);
+        if (ObjectUtils.isEmpty(cardInfo)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        if (cardInfo.getCardState() == CardState.Loss) {
+            return ResultContent.buildFail(String.format("卡片已是锁定状态:%s", cardInfo.getCode()));
+        }
+        cardInfo.setCardState(CardState.Loss);
+        initUpdateEntity(cardInfo);
+        cardInfoDao.save(cardInfo);
+
+        CardInfoLossRecord cardInfoLossRecord = new CardInfoLossRecord();
+        cardInfoLossRecord.setCardInfo(cardInfo);
+        // 挂失操作人
+        cardInfoLossRecord.setOperUserAccount(userAccount);
+        cardInfoLossRecord.setOperUserId(userId);
+        // 卡片所属人
+        cardInfoLossRecord.setCardUserId(cardInfo.getUserId());
+        cardInfoLossRecord.setCardUserAccount(cardInfo.getUserAccount());
+        cardInfoLossRecord.setOperationType(CardOperationType.Loss);
+        cardInfoLossRecordDao.save(cardInfoLossRecord);
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 卡片启用 园区操作
+     *
+     * @param id
+     * @return
+     */
+    public ResultContent enableById(String id) {
+        Assert.hasText(id, "id不能为空");
+        String userId = getCurrentUserId();
+        UserAccount userAccount = userCountDao.findTopByUserId(userId);
+
+        CardInfo cardInfo = cardInfoDao.findTopById(id);
+        if (ObjectUtils.isEmpty(cardInfo)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        if (cardInfo.getCardState() == CardState.Enable) {
+            return ResultContent.buildFail(String.format("卡片已是启用状态:%s", cardInfo.getCode()));
+        }
+        cardInfo.setCardState(CardState.Enable);
+        initUpdateEntity(cardInfo);
+        cardInfoDao.save(cardInfo);
+
+        CardInfoLossRecord cardInfoLossRecord = new CardInfoLossRecord();
+        cardInfoLossRecord.setCardInfo(cardInfo);
+
+        cardInfoLossRecord.setOperUserAccount(userAccount);
+        cardInfoLossRecord.setOperUserId(userId);
+
+        cardInfoLossRecord.setCardUserId(cardInfo.getUserId());
+        cardInfoLossRecord.setCardUserAccount(cardInfo.getUserAccount());
+        cardInfoLossRecord.setOperationType(CardOperationType.Enable);
+        cardInfoLossRecordDao.save(cardInfoLossRecord);
+
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 作废卡片(园区操作)
+     *
+     * @param id
+     * @return
+     */
+    public ResultContent cardCancel(String id) {
+        Assert.hasText(id, "id不能为空");
+        String userId = getCurrentUserId();
+        UserAccount userAccount = userCountDao.findTopByUserId(userId);
+        CardInfo cardInfo = cardInfoDao.findTopById(id);
+        if (ObjectUtils.isEmpty(cardInfo)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        if (cardInfo.getIsCanceled() != null && cardInfo.getIsCanceled()) {
+            return ResultContent.buildFail(String.format("卡片已是作废状态:%s", cardInfo.getCode()));
+        }
+        initUpdateEntity(cardInfo);
+        cardInfo.setIsCanceled(Boolean.TRUE);
+        cardInfo.setCancelUserId(userId);
+        cardInfo.setCancelTime(System.currentTimeMillis());
+        cardInfoDao.save(cardInfo);
+        return ResultContent.buildSuccess();
+    }
+
+    //----------------------------园区卡片操作 end --------------------------
+
+
     public CardInfoModel toModel(CardInfo entity) {
         CardInfoModel model = null;
         if (ObjectUtils.isNotEmpty(entity)) {
@@ -417,6 +539,19 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
         return model;
     }
 
+    public CardInfoModel toOrgModel(CardInfo entity) {
+        CardInfoModel model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new CardInfoModel();
+            BeanUtils.copyProperties(entity, model);
+
+            // 机构用户信息
+            OrganizationUserModel organizationUser = userAccountService.getOrgUserDetail(entity.getSchoolOid(), entity.getUserId());
+            model.setOrganizationUser(organizationUser);
+        }
+        return model;
+    }
+
     public CardInfoSimpleModel toSimpleModel(CardInfo entity) {
         CardInfoSimpleModel model = null;
         if (ObjectUtils.isNotEmpty(entity)) {

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

@@ -10,7 +10,7 @@ import com.zhongshu.card.client.ret.ResultMessage;
 import com.zhongshu.card.client.service.org.UserAccountService;
 import com.zhongshu.card.client.service.school.SchoolUserService;
 import com.zhongshu.card.client.utils.type.UserType;
-import com.zhongshu.card.server.core.dao.CardInfoDao;
+import com.zhongshu.card.server.core.dao.school.CardInfoDao;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
 import com.zhongshu.card.server.core.dao.org.OrganizationUserDao;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;