Ver código fonte

机构类型

TRX 1 ano atrás
pai
commit
aa1554c02c

+ 2 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardLossParam.java

@@ -21,8 +21,10 @@ public class CardLossParam {
     @Schema(description = "卡片code")
     private String code;
 
+    @Schema(description = "姓名, 帮别人挂失、解挂要输入")
     private String userName;
 
+    @Schema(description = "手机号,帮别人挂失、解挂要输入")
     private String phone;
 
     @Schema(description = "密码")

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

@@ -87,9 +87,9 @@ public class CardController {
     }
 
     @ResourceAuth(value = "user", type = AuthType.User)
-    @Operation(summary = "挂失卡片(通过卡片iccid挂失别人的)", description = "挂失卡片(通过卡片iccid挂失别人的)")
-    @RequestMapping(value = {"cardLossByIccId"}, method = {RequestMethod.POST})
-    public ResultContent cardLossByIccId(@RequestBody CardLossParam param) {
+    @Operation(summary = "挂失卡片(通过卡片code挂失别人的)", description = "挂失卡片(通过卡片code挂失别人的)")
+    @RequestMapping(value = {"cardLossByCode"}, method = {RequestMethod.POST})
+    public ResultContent cardLossByCode(@RequestBody CardLossParam param) {
         return cardInfoService.cardLossByIccId(param);
     }
 
@@ -102,8 +102,8 @@ public class CardController {
 
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "卡片启用(帮别人启用)", description = "卡片启用")
-    @RequestMapping(value = {"cardEnableByIccId"}, method = {RequestMethod.POST})
-    public ResultContent cardEnableByIccId(@RequestBody CardLossParam param) {
+    @RequestMapping(value = {"cardEnableByCode"}, method = {RequestMethod.POST})
+    public ResultContent cardEnableByCode(@RequestBody CardLossParam param) {
         return cardInfoService.cardEnableByIccId(param);
     }
 

+ 0 - 5
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/CardInfoDao.java

@@ -19,11 +19,6 @@ public interface CardInfoDao extends MongoDao<CardInfo> {
 
     CardInfo findByCode(String code);
 
-    CardInfo findTopByIccid(String iccid);
-
-    // 查询用户code的卡片
-    CardInfo findTopByCodeAndOidAndUserAccount(String code, String oid, UserAccount userAccount);
-
     // 查询用户所有的卡片
     List<CardInfo> findByUserIdAndOid(String userId, String oid);
 

+ 20 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/user/CardInfoLossRecordDao.java

@@ -0,0 +1,20 @@
+package com.zhongshu.card.server.core.dao.user;
+
+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.CardInfo;
+import com.zhongshu.card.server.core.domain.school.CardInfoLossRecord;
+
+import java.util.List;
+
+/**
+ * 卡片挂失记录Dao
+ *
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface CardInfoLossRecordDao extends MongoDao<CardInfoLossRecord> {
+
+    CardInfoLossRecord findTopById(String id);
+
+}

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ExpenseFlow.java

@@ -73,7 +73,7 @@ public class ExpenseFlow extends SuperMain {
 
     @Schema(description = "关联信息")
     @Indexed
-    private Object goodsInfo;
+    private Object param;
 
     //------------------支付结果 start-------------------------
 

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

@@ -33,15 +33,6 @@ public class CardInfo extends SuperMain {
     @Schema(description = "卡片号码,唯一标识, 卡号")
     private String code;
 
-    @Schema(description = "卡片uid")
-    private String cardUid;
-
-    @Schema(description = "卡片Rfid")
-    private String cardRfid;
-
-    @Schema(description = "卡片的iccid")
-    private String iccid;
-
     @Schema(description = "卡片状态")
     private CardState cardState;
 

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

@@ -0,0 +1,48 @@
+package com.zhongshu.card.server.core.domain.school;
+
+import com.zhongshu.card.client.utils.type.CardOperationType;
+import com.zhongshu.card.server.core.domain.base.SuperMain;
+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/13
+ */
+@Data
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+@NonLeaked
+public class CardInfoLossRecord extends SuperMain {
+
+    @Schema(description = "卡片信息")
+    @DBRef(lazy = true)
+    private CardInfo cardInfo;
+
+    @Schema(description = "操作挂失、解挂的用户信息")
+    @DBRef(lazy = true)
+    private UserAccount operUserAccount;
+
+    @Schema(description = "操作挂失、解挂的用户userId")
+    private String operUserId;
+
+    @Schema(description = "卡片挂失、解挂的用户信息")
+    @DBRef(lazy = true)
+    private UserAccount cardUserAccount;
+
+    @Schema(description = "卡片挂失、解挂的用户userId")
+    private String cardUserId;
+
+    @Schema(description = "操作类型")
+    CardOperationType operationType;
+
+}

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

@@ -114,7 +114,7 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         expenseFlow.setPayAmount(amount);
         expenseFlow.setPaymentWay(param.getPaymentType().getRemark());
         // 关联参数
-        expenseFlow.setGoodsInfo(param.getIotParam());
+        expenseFlow.setParam(param.getIotParam());
         expenseFlow.setPaymentStatus("支付成功");
         expenseFlow.setIsPaySuccess(Boolean.TRUE);
         expenseFlow.setPayRemark("支付成功");

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

@@ -8,13 +8,16 @@ import com.zhongshu.card.client.model.school.CardLossParam;
 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.org.OrganizationDao;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
+import com.zhongshu.card.server.core.dao.user.CardInfoLossRecordDao;
 import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.org.UserAccount;
 import com.zhongshu.card.server.core.domain.school.CardInfo;
+import com.zhongshu.card.server.core.domain.school.CardInfoLossRecord;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.util.BeanUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -22,6 +25,7 @@ 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 org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 
 import java.util.ArrayList;
@@ -50,6 +54,9 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
     @Autowired
     UserService userService;
 
+    @Autowired
+    CardInfoLossRecordDao cardInfoLossRecordDao;
+
     /**
      * 添加或修改卡片信息
      *
@@ -59,23 +66,36 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
     @Override
     public ResultContent addCardInfo(CardInfoParam param) {
         initDefaultUserParam(param);
-        String oid = param.getOid();
+        if (StringUtils.isEmpty(param.getCode())) {
+            return ResultContent.buildFail("code不能为空");
+        }
 
-        CardInfo cardInfo = null;
+        String oid = param.getOid();
+        String code = param.getCode();
+        CardInfo cardInfo = new CardInfo();
+        CardInfo temp = cardInfoDao.findByCode(code);
         if (StringUtils.isNotEmpty(param.getId())) {
             cardInfo = cardInfoDao.findTopById(param.getId());
+            if (ObjectUtils.isEmpty(cardInfo)) {
+                return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+            }
+            if (ObjectUtils.isNotEmpty(temp) && !ObjectUtils.equals(temp.getId(), cardInfo.getId())) {
+                return ResultContent.buildFail(String.format("卡号已存在:%s", code));
+            }
+        } else {
+            if (ObjectUtils.isNotEmpty(temp)) {
+                return ResultContent.buildFail(String.format("卡号已存在:%s", code));
+            }
         }
-        if (ObjectUtils.isEmpty(cardInfo)) {
-            param.setId(null);
-            cardInfo = new CardInfo();
-        }
-        BeanUtils.copyProperties(param, cardInfo);
+        BeanUtils.copyProperties(param, cardInfo, "cardState");
         if (StringUtils.isNotEmpty(oid)) {
             Organization organization = organizationDao.findTopByOid(oid);
             cardInfo.setOrganization(organization);
         }
         UserAccount account = userCountDao.findTopByUserId(param.getUserId());
         cardInfo.setUserAccount(account);
+        cardInfo.setUserId(account.getUserId());
+        cardInfo.setUserName(account.getName());
         cardInfoDao.save(cardInfo);
         return ResultContent.buildSuccess();
     }
@@ -129,6 +149,7 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
      * @param param
      * @return
      */
+    @Transactional
     @Override
     public ResultContent cardLossById(CardLossParam param) {
         Assert.hasText(param.getPassWord(), "密码不能为空");
@@ -138,12 +159,23 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
         if (resultContent.getState() != ResultState.Success) {
             return ResultContent.buildFail("密码错误");
         }
+        UserAccount userAccount = userCountDao.findTopByUserId(userId);
         CardInfo cardInfo = cardInfoDao.findTopById(param.getId());
         if (ObjectUtils.isEmpty(cardInfo)) {
             return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
         }
         cardInfo.setCardState(CardState.Loss);
         cardInfoDao.save(cardInfo);
+
+        CardInfoLossRecord cardInfoLossRecord = new CardInfoLossRecord();
+        cardInfoLossRecord.setCardInfo(cardInfo);
+        cardInfoLossRecord.setOperUserAccount(userAccount);
+        cardInfoLossRecord.setOperUserId(userId);
+        cardInfoLossRecord.setCardUserId(userId);
+        cardInfoLossRecord.setCardUserAccount(userAccount);
+        cardInfoLossRecord.setOperationType(CardOperationType.Loss);
+        cardInfoLossRecordDao.save(cardInfoLossRecord);
+
         return ResultContent.buildSuccess();
     }
 
@@ -156,18 +188,46 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
     @Override
     public ResultContent cardLossByIccId(CardLossParam param) {
         Assert.hasText(param.getPassWord(), "密码不能为空");
-        Assert.hasText(param.getIccid(), "iccid不能为空");
+        Assert.hasText(param.getCode(), "code不能为空");
+        Assert.hasText(param.getPhone(), "phone不能为空");
+
         String userId = getCurrentUserId();
+        UserAccount userAccount = userCountDao.findTopByUserId(userId);
+
         com.github.microservice.auth.client.content.ResultContent<Void> resultContent = userService.checkLoginPassword(userId, param.getPassWord());
         if (resultContent.getState() != ResultState.Success) {
             return ResultContent.buildFail("密码错误");
         }
-        CardInfo cardInfo = cardInfoDao.findTopByIccid(param.getIccid());
+
+        CardInfo cardInfo = cardInfoDao.findByCode(param.getCode());
         if (ObjectUtils.isEmpty(cardInfo)) {
-            return ResultContent.buildFail(String.format("iccid不存在:%s", param.getIccid()));
+            return ResultContent.buildFail(String.format("卡片不存在:%s", param.getCode()));
+        }
+
+        // 判断卡片人的信息
+        String cardUserId = cardInfo.getUserId();
+        UserAccount cardUserAccount = userCountDao.findTopByUserId(cardUserId);
+        if (!cardUserAccount.getPhone().equals(param.getPhone())) {
+            return ResultContent.buildFail("持卡人信息和卡号不一致");
+        }
+
+        if (cardInfo.getCardState() == CardState.Loss) {
+            return ResultContent.buildFail(String.format("卡片已挂失:%s", param.getCode()));
         }
+
         cardInfo.setCardState(CardState.Loss);
         cardInfoDao.save(cardInfo);
+
+        CardInfoLossRecord cardInfoLossRecord = new CardInfoLossRecord();
+        cardInfoLossRecord.setCardInfo(cardInfo);
+        cardInfoLossRecord.setOperUserAccount(userAccount);
+        cardInfoLossRecord.setOperUserId(userId);
+
+        cardInfoLossRecord.setCardUserId(cardUserAccount.getUserId());
+        cardInfoLossRecord.setCardUserAccount(cardUserAccount);
+        cardInfoLossRecord.setOperationType(CardOperationType.Loss);
+        cardInfoLossRecordDao.save(cardInfoLossRecord);
+
         return ResultContent.buildSuccess();
     }
 
@@ -182,6 +242,7 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
         Assert.hasText(param.getPassWord(), "密码不能为空");
         Assert.hasText(param.getId(), "id不能为空");
         String userId = getCurrentUserId();
+        UserAccount userAccount = userCountDao.findTopByUserId(userId);
         com.github.microservice.auth.client.content.ResultContent<Void> resultContent = userService.checkLoginPassword(userId, param.getPassWord());
         if (resultContent.getState() != ResultState.Success) {
             return ResultContent.buildFail("密码错误");
@@ -192,6 +253,16 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
         }
         cardInfo.setCardState(CardState.Enable);
         cardInfoDao.save(cardInfo);
+
+        CardInfoLossRecord cardInfoLossRecord = new CardInfoLossRecord();
+        cardInfoLossRecord.setCardInfo(cardInfo);
+        cardInfoLossRecord.setOperUserAccount(userAccount);
+        cardInfoLossRecord.setOperUserId(userId);
+        cardInfoLossRecord.setCardUserId(userId);
+        cardInfoLossRecord.setCardUserAccount(userAccount);
+        cardInfoLossRecord.setOperationType(CardOperationType.Enable);
+        cardInfoLossRecordDao.save(cardInfoLossRecord);
+
         return ResultContent.buildSuccess();
     }
 
@@ -204,18 +275,45 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
     @Override
     public ResultContent cardEnableByIccId(CardLossParam param) {
         Assert.hasText(param.getPassWord(), "密码不能为空");
-        Assert.hasText(param.getIccid(), "iccid不能为空");
+        Assert.hasText(param.getCode(), "code不能为空");
+        Assert.hasText(param.getPhone(), "phone不能为空");
+
         String userId = getCurrentUserId();
+        UserAccount userAccount = userCountDao.findTopByUserId(userId);
+
         com.github.microservice.auth.client.content.ResultContent<Void> resultContent = userService.checkLoginPassword(userId, param.getPassWord());
         if (resultContent.getState() != ResultState.Success) {
             return ResultContent.buildFail("密码错误");
         }
-        CardInfo cardInfo = cardInfoDao.findTopByIccid(param.getIccid());
+        CardInfo cardInfo = cardInfoDao.findByCode(param.getCode());
         if (ObjectUtils.isEmpty(cardInfo)) {
-            return ResultContent.buildFail(String.format("iccid不存在:%s", param.getIccid()));
+            return ResultContent.buildFail(String.format("code不存在:%s", param.getCode()));
         }
+
+        // 判断卡片人的信息
+        String cardUserId = cardInfo.getUserId();
+        UserAccount cardUserAccount = userCountDao.findTopByUserId(cardUserId);
+        if (!cardUserAccount.getPhone().equals(param.getPhone())) {
+            return ResultContent.buildFail("持卡人信息和卡号不一致");
+        }
+
+        if (cardInfo.getCardState() == CardState.Enable) {
+            return ResultContent.buildFail(String.format("卡片已接挂:%s", param.getCode()));
+        }
+
         cardInfo.setCardState(CardState.Enable);
         cardInfoDao.save(cardInfo);
+
+        CardInfoLossRecord cardInfoLossRecord = new CardInfoLossRecord();
+        cardInfoLossRecord.setCardInfo(cardInfo);
+        cardInfoLossRecord.setOperUserAccount(userAccount);
+        cardInfoLossRecord.setOperUserId(userId);
+
+        cardInfoLossRecord.setCardUserId(cardUserAccount.getCreateUserId());
+        cardInfoLossRecord.setCardUserAccount(cardUserAccount);
+        cardInfoLossRecord.setOperationType(CardOperationType.Enable);
+        cardInfoLossRecordDao.save(cardInfoLossRecord);
+
         return ResultContent.buildSuccess();
     }
 

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

@@ -207,13 +207,13 @@ public class SchoolUserServiceImpl extends SuperService implements SchoolUserSer
             if (cardInfo.getCardType() == null) {
                 return ResultContent.buildFail("卡片类型不能为空");
             }
-            if (StringUtils.isEmpty(cardInfo.getIccid())) {
+            if (StringUtils.isEmpty(cardInfo.getCode())) {
                 return ResultContent.buildFail("iccid不能为空");
             }
-            if (map.containsKey(cardInfo.getIccid())) {
-                return ResultContent.buildFail(String.format("iccid已存在:%s", cardInfo.getIccid()));
+            if (map.containsKey(cardInfo.getCode())) {
+                return ResultContent.buildFail(String.format("code已存在:%s", cardInfo.getCode()));
             }
-            map.put(cardInfo.getIccid(), cardInfo.getIccid());
+            map.put(cardInfo.getCode(), cardInfo.getCode());
         }
         String cardNumber = param.getCardNumber();
         if (!ValidateUtils.isIDCard(cardNumber)) {
@@ -265,13 +265,13 @@ public class SchoolUserServiceImpl extends SuperService implements SchoolUserSer
             if (cardInfo.getCardType() == null) {
                 return ResultContent.buildFail("卡片类型不能为空");
             }
-            if (StringUtils.isEmpty(cardInfo.getIccid())) {
-                return ResultContent.buildFail("iccid不能为空");
+            if (StringUtils.isEmpty(cardInfo.getCode())) {
+                return ResultContent.buildFail("code不能为空");
             }
-            if (map.containsKey(cardInfo.getIccid())) {
-                return ResultContent.buildFail(String.format("iccid已存在:%s", cardInfo.getIccid()));
+            if (map.containsKey(cardInfo.getCode())) {
+                return ResultContent.buildFail(String.format("code已存在:%s", cardInfo.getCode()));
             }
-            map.put(cardInfo.getIccid(), cardInfo.getIccid());
+            map.put(cardInfo.getCode(), cardInfo.getCode());
         }
 
         UserAccount userAccount = userCountDao.findTopByLoginName(phone);