Переглянути джерело

修改读客人卡、回收卡双向同步功能

baiyun 1 рік тому
батько
коміт
ea860ca2eb
16 змінених файлів з 142 додано та 14 видалено
  1. 23 1
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteBagService.java
  2. 5 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemoteCardBo.java
  3. 4 4
      ruoyi-common/ruoyi-common-dubbo/src/main/resources/common-dubbo.yml
  4. 2 1
      ruoyi-common/ruoyi-common-message/src/main/java/org/dromara/common/message/kafka/constant/MessageEventTypeConstants.java
  5. 1 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/cardCenter/controller/CardApiController.java
  6. 10 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/controller/PtUserAccountController.java
  7. 2 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/PtUserAccount4SelectVo.java
  8. 7 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/dubbo/RemoteBagServiceImpl.java
  9. 2 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/mapper/PtUserAccountMapper.java
  10. 2 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/IPtUserAccountService.java
  11. 19 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/impl/PtUserAccountServiceImpl.java
  12. 10 0
      ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/payment/PtUserAccountMapper.xml
  13. 9 0
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/controller/KfProvideCardHisController.java
  14. 22 8
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfProvideCardHisServiceImpl.java
  15. 23 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtCardCenterService.java
  16. 1 0
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtCardCenterEventStrategyImpl.java

+ 23 - 1
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteBagService.java

@@ -4,6 +4,8 @@ import org.dromara.backstage.api.domain.bo.RemoteCardBo;
 import org.dromara.backstage.api.domain.bo.RemoteConsumptionBo;
 import org.dromara.backstage.api.domain.bo.RemotePurseInOutBo;
 
+import java.util.Map;
+
 /**
  * name: RemoteBagService
  * package: org.dromara.backstage.api
@@ -22,15 +24,35 @@ public interface RemoteBagService {
      * @return 余额串,英文逗号分隔
      */
     String selectAccountBalanceByIds(String userIds);
-
+    /**
+     * 充值
+     */
     Boolean recharge(RemotePurseInOutBo bo);
+    /**
+     * 退款
+     */
     Boolean refund(RemotePurseInOutBo bo);
     Boolean createErrFillRecord(RemoteConsumptionBo bo);
     Boolean batchRecharge(RemotePurseInOutBo bo, Long[] userIds);
     Boolean batchRefund(RemotePurseInOutBo bo, Long[] userIds);
+    /**
+     * 批量设置余额
+     */
     Boolean batchSetBalance(RemotePurseInOutBo bo, Long[] userIds);
+
+    /**
+     * 挂失卡片
+     */
     Boolean lockCard(Long cardId);
     Boolean lockCardByBo(RemoteCardBo bo);
+
+    /**
+     * 回收卡片
+     */
+    Boolean recycleCard(RemoteCardBo bo);
+    /**
+     * 解挂卡片
+     */
     Boolean unlockCard(Long cardId);
 
     Boolean writeCardSuccess(RemoteCardBo bo);

+ 5 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemoteCardBo.java

@@ -146,4 +146,9 @@ public class RemoteCardBo implements Serializable {
      * 更新时间
      */
     private Date updateTime;
+
+    /**
+     * 操作员Id
+     */
+    private Long operatorId;
 }

+ 4 - 4
ruoyi-common/ruoyi-common-dubbo/src/main/resources/common-dubbo.yml

@@ -20,16 +20,16 @@ dubbo:
     parameters:
       namespace: ${spring.profiles.active}
   metadata-report:
-    #address: redis://${spring.data.redis.host}:${spring.data.redis.port}
+    address: redis://${spring.data.redis.host}:${spring.data.redis.port}
     group: DUBBO_GROUP
     username: dubbo
     password: ${spring.data.redis.password}
     # redis 集群模式
-    cluster: true
+    cluster: false
     parameters:
       namespace: ${spring.profiles.active}
-      #database: ${spring.data.redis.database}
-      backup: ${spring.data.redis.cluster.nodes}
+      database: ${spring.data.redis.database}
+#      backup: ${spring.data.redis.cluster.nodes}
   # 消费者相关配置
   consumer:
     # 结果缓存(LRU算法)

+ 2 - 1
ruoyi-common/ruoyi-common-message/src/main/java/org/dromara/common/message/kafka/constant/MessageEventTypeConstants.java

@@ -139,7 +139,8 @@ public class MessageEventTypeConstants {
     public static final String CARD_OPERATION = "YKT_109_CARD_WRITE";
     /** 卡务中心 挂失*/
     public static final String	CARD_LOCK = "YKT_109_CARD_LOCK";
-
+    /** 房态页面 回收卡片 */
+    public static final String	CARD_RECOVERY = "YKT_109_CARD_RECOVERY";
     /** 补助设置新增 */
     public static final String	SUBSIDY_ADD = "YKT_102_ADD";
 

+ 1 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/cardCenter/controller/CardApiController.java

@@ -137,6 +137,7 @@ public class CardApiController extends BaseController {
      * @return 回收结果
      */
     @PostMapping("/api/v1/recycle")
+    @SyncDataToLocal(eventType = CARD_RECOVERY, sender = CARD_CENTER_SENDER)
     public ReturnResult recycleCard(@RequestBody Map<String, String> mapParams){
         String defaultTenantId = defaultConfig.getTenantId();
         Long cardNo = Long.parseLong(mapParams.get("cardNo"));

+ 10 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/controller/PtUserAccountController.java

@@ -348,4 +348,14 @@ public class PtUserAccountController extends BaseController {
             return R.fail("账户余额不为0,销户失败");
         }
     }
+
+    /**
+     * 根据物理卡号查询用户卡片信息
+     */
+    @SaCheckPermission("basics:kfCardData:query")
+    @GetMapping("/getCardInfoByFactoryId")
+    public R<PtUserAccount4SelectVo> getCardInfoByFactoryId(String factoryId) {
+        return R.ok(ptUserAccountService.getCardInfoByFactoryId(factoryId));
+    }
+
 }

+ 2 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/PtUserAccount4SelectVo.java

@@ -240,4 +240,6 @@ public class PtUserAccount4SelectVo implements Serializable {
      */
 //    @Translation(type = TransConstant.USER_ID_TO_CARD_INFO, mapper = "userId")
     private String accountCard;
+
+    private String cardStatus;
 }

+ 7 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/dubbo/RemoteBagServiceImpl.java

@@ -22,6 +22,8 @@ import org.dromara.common.core.domain.R;
 import org.dromara.common.core.enums.SystemUseTypeEnum;
 import org.springframework.stereotype.Service;
 
+import java.util.Map;
+
 /**
  * name: RemoteBagServiceImpl
  * package: org.dromara.backstage.dubbo
@@ -133,6 +135,11 @@ public class RemoteBagServiceImpl implements RemoteBagService {
         return true;
     }
 
+    @Override
+    public Boolean recycleCard(RemoteCardBo bo) {
+        R<Void> res = cardBusiness.recycleCard(BeanUtil.copyProperties(bo, PtCardBo.class));
+        return R.isSuccess(res);
+    }
     @Override
     public Boolean unlockCard(Long cardId) {
         return ptCardService.unlockCard(cardId);

+ 2 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/mapper/PtUserAccountMapper.java

@@ -44,4 +44,6 @@ public interface PtUserAccountMapper extends BaseMapperPlus<PtUserAccount, PtUse
     }
 
     YcTraineeVo selectTraineeByBo(@Param("bo") PtUserAccountBo bo, @Param("doingDate") Date doingDate);
+
+    List<PtUserAccount4SelectVo> getCardInfoByFactoryId (@Param("factoryId") String factoryId);
 }

+ 2 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/IPtUserAccountService.java

@@ -199,4 +199,6 @@ public interface IPtUserAccountService {
      * @return 操作成功与否
      */
     int delByUserAndDeptId(Long userId,Long deptId, Long operatorId);
+
+    PtUserAccount4SelectVo getCardInfoByFactoryId(String factoryId);
 }

+ 19 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/impl/PtUserAccountServiceImpl.java

@@ -31,6 +31,7 @@ import org.dromara.backstage.payment.service.IPtUserAccountService;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.domain.R;
+import org.dromara.common.core.service.DictService;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.SpringUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -74,6 +75,7 @@ public class PtUserAccountServiceImpl implements IPtUserAccountService {
     private final IPtBagService bagService;
     private final IPtCardtypeService cardTypeService;
     private final PushKafkaData kafkaNormalProducer;
+    private final DictService dictService;
 
     @DubboReference
     private final RemoteDeptService remoteDeptService;
@@ -710,4 +712,21 @@ public class PtUserAccountServiceImpl implements IPtUserAccountService {
         System.err.println("11111");
     }
 
+    @Override
+    public PtUserAccount4SelectVo getCardInfoByFactoryId(String factoryId) {
+        if (StringUtils.isBlank(factoryId)){
+            return null;
+        }
+        List<PtUserAccount4SelectVo> list = baseMapper.getCardInfoByFactoryId(factoryId);
+        if (list.isEmpty()){
+            return null;
+        }
+        PtUserAccount4SelectVo res = list.get(0);
+        if(StringUtils.isNotBlank(res.getCardStatus())){
+            String cardStatusName = dictService.getDictLabel("KZT",  res.getCardStatus());
+            res.setCardStatus(cardStatusName);
+        }
+        return res;
+
+    }
 }

+ 10 - 0
ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/payment/PtUserAccountMapper.xml

@@ -115,4 +115,14 @@
         </where>
 
     </select>
+
+    <select id="getCardInfoByFactoryId" resultType="org.dromara.backstage.payment.domain.PtUserAccount4SelectVo">
+        SELECT a.real_name as realName, a.phone, b.dept_name as deptName, a.lifespan,c.create_time as createTime, c.status as cardStatus
+        FROM t_pt_userAccount a
+            LEFT JOIN t_sys_dept b ON a.dept_id=b.dept_id
+            LEFT JOIN t_pt_card c ON a.user_id=c.user_id
+        WHERE a.del_flag='0' AND b.del_flag='0' AND c.del_flag='0'
+        AND c.factory_id=#{factoryId}
+        ORDER BY c.create_time DESC
+    </select>
 </mapper>

+ 9 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/controller/KfProvideCardHisController.java

@@ -69,6 +69,15 @@ public class KfProvideCardHisController extends BaseController {
         return R.ok(kfProvideCardHisService.queryById(id));
     }
 
+    /**
+     * 查看发卡记录详情
+     */
+    @SaCheckPermission("basics:kfCardData:query")
+    @GetMapping("/getInfoByBo")
+    public R<KfProvideCardHisVo> getInfoByBo(KfProvideCardHisBo bo) {
+        return R.ok(kfProvideCardHisService.queryByBo(bo));
+    }
+
     /**
      * 新增发卡记录
      */

+ 22 - 8
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfProvideCardHisServiceImpl.java

@@ -1,9 +1,11 @@
 package org.dromara.hotel.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.HexUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import org.dromara.common.core.constant.HotelBusinessConstants;
+import org.dromara.common.core.service.DictService;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -20,10 +22,7 @@ import org.dromara.hotel.domain.KfProvideCardHis;
 import org.dromara.hotel.mapper.KfProvideCardHisMapper;
 import org.dromara.hotel.service.IKfProvideCardHisService;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
+import java.util.*;
 
 /**
  * 发卡记录Service业务层处理
@@ -36,6 +35,7 @@ import java.util.Collection;
 public class KfProvideCardHisServiceImpl implements IKfProvideCardHisService {
 
     private final KfProvideCardHisMapper baseMapper;
+    private final DictService dictService;
 
     /**
      * 查询发卡记录
@@ -78,7 +78,11 @@ public class KfProvideCardHisServiceImpl implements IKfProvideCardHisService {
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<KfProvideCardHis> lqw = Wrappers.lambdaQuery();
         lqw.eq(bo.getCardId() != null, KfProvideCardHis::getCardId, bo.getCardId());
-        lqw.eq(StringUtils.isNotBlank(bo.getFactoryId()), KfProvideCardHis::getFactoryId, bo.getFactoryId());
+        String roomFixId = HexUtil.toHex(Long.parseLong(bo.getFactoryId()));
+        if (roomFixId.length() < 16) {
+            roomFixId = StringUtils.rightPad(roomFixId, 16, "F");
+        }
+        lqw.eq(StringUtils.isNotBlank(bo.getFactoryId()), KfProvideCardHis::getFactoryId, roomFixId);
         lqw.eq(StringUtils.isNotBlank(bo.getCardType()), KfProvideCardHis::getCardType, bo.getCardType());
         lqw.eq(StringUtils.isNotBlank(bo.getRoomCode()), KfProvideCardHis::getRoomCode, bo.getRoomCode());
         lqw.eq(bo.getMasterId() != null, KfProvideCardHis::getMasterId, bo.getMasterId());
@@ -177,10 +181,20 @@ public class KfProvideCardHisServiceImpl implements IKfProvideCardHisService {
     @Override
     public KfProvideCardHisVo queryByBo(KfProvideCardHisBo bo) {
         List<KfProvideCardHisVo> list = this.queryList(bo);
-        if (CollectionUtil.isNotEmpty(list)) {
-            return this.queryList(bo).get(0);
+        if(list.isEmpty()){
+            return null;
+        }else {
+            KfProvideCardHisVo res = list.get(0);
+            if(StringUtils.isNotBlank(res.getCardType())){
+               String cardTypeName = dictService.getDictLabel("room_card_type",  res.getCardType());
+               res.setCardType(cardTypeName);
+            }
+            if(StringUtils.isNotBlank(res.getCardStatus())){
+                String cardStatusName = dictService.getDictLabel("room_card_status",  res.getCardStatus());
+                res.setCardStatus(cardStatusName);
+            }
+            return res;
         }
-        return null;
     }
 
     @Override

+ 23 - 0
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtCardCenterService.java

@@ -154,6 +154,29 @@ public class SyncRemotePtCardCenterService {
             throw new ServiceException("卡片挂失失败");
         }
     }
+
+    /**
+     * 回收卡片
+     */
+    public void recycleCard(Object msg) throws ServiceException{
+        //json转map
+        Map<String, String> initParam = JSONUtil.parseObj(msg).toBean(Map.class);
+        String defaultTenantId = defaultConfig.getTenantId();
+        Long cardNo = Long.parseLong(initParam.get("cardNo"));
+        Long FactorId = Long.parseLong(initParam.get("factoryFixId"));
+        Long operatorId = Long.parseLong((initParam.get("operatorId")));
+        String tenantId = ObjectUtil.isEmpty(initParam.get("tenantId")) ? defaultTenantId : initParam.get("tenantId");
+        RemoteCardBo bo = new RemoteCardBo();
+        bo.setCardNo(cardNo);
+        bo.setFactoryId(FactorId);
+        bo.setOperatorId(operatorId);
+        bo.setTenantId(tenantId);
+        boolean flag = bagService.recycleCard(bo);
+        if (!flag){
+            throw new ServiceException("卡片回收失败");
+        }
+    }
+
     private RemoteCardBo getInitInfo(Map<String, Object> initParam) {
         RemoteCardBo bo = new RemoteCardBo();
         bo.setCardId(ObjUtil.isNotEmpty(initParam.get("cardId")) ? Long.parseLong(initParam.get("cardId").toString()) : null);

+ 1 - 0
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtCardCenterEventStrategyImpl.java

@@ -32,6 +32,7 @@ public class PtCardCenterEventStrategyImpl implements IYktEventStrategy {
             case MessageEventTypeConstants.ptCard_CARD_UNLOCK -> cardCenterService.unlockCard(msg);
             case MessageEventTypeConstants.CARD_OPERATION -> cardCenterService.cardWrite(msg);
             case MessageEventTypeConstants.CARD_LOCK -> cardCenterService.cardLock(msg);
+            case MessageEventTypeConstants.CARD_RECOVERY -> cardCenterService.recycleCard(msg);
             default -> log.info("未知事件");
         }
     }