Bladeren bron

fix: 卡务中心
1.简易读卡(餐卡、房卡)、回收卡片

luoyb 1 jaar geleden
bovenliggende
commit
a78a1631f1

+ 10 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/card/CardBusiness.java

@@ -213,6 +213,16 @@ public class CardBusiness {
         }
     }
 
+    public PtCardVo getUseCardByFactoryId(Long factoryId){
+        PtCardBo bo = new PtCardBo();
+        bo.setFactoryId(factoryId);
+        List<PtCardVo> cardVos = ptCardService.queryList(bo);
+        if (CollectionUtil.isEmpty(cardVos)) {
+            return null;
+        }
+        return cardVos.stream().filter(p -> ObjectUtil.equal(p.getStatus(), CardStatusEnum.NORMAL.code().toString())).findFirst().orElse(null);
+    }
+
     private R<ResultInfo> checkParam(PtCardBo cardBo, PtUserAccountVo userAccountVo, PtWorkstationVo workstationVo) {
         Long factoryId = cardBo.getFactoryId();
         Long userId = cardBo.getUserId();

+ 61 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/self/SelfBusiness.java

@@ -3,6 +3,7 @@ package org.dromara.backstage.business.self;
 import cn.hutool.core.codec.Base64;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.HexUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
@@ -10,16 +11,26 @@ import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.auth.v1alpha1.Ca;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.checkerframework.checker.guieffect.qual.SafeEffect;
+import org.dromara.backstage.basics.domain.vo.PtCardtypeVo;
+import org.dromara.backstage.business.card.CardBusiness;
 import org.dromara.backstage.business.payments.ThirdPayBusiness;
 import org.dromara.backstage.consumption.domain.bo.XfCreditAccountBackBo;
 import org.dromara.backstage.consumption.domain.vo.XfCreditAccountBackVo;
 import org.dromara.backstage.consumption.service.IXfCreditAccountBackService;
 import org.dromara.backstage.domain.bo.yc.YcTraineeBo;
 import org.dromara.backstage.domain.convert.YcVoConvert;
+import org.dromara.backstage.domain.vo.card.PtCardVo;
+import org.dromara.backstage.domain.vo.yc.YcSelfCardVo;
 import org.dromara.backstage.domain.vo.yc.YcTraineeVo;
 import org.dromara.backstage.payment.domain.bo.PayOrderBo;
 import org.dromara.backstage.payment.domain.vo.PayOrderVo;
+import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
 import org.dromara.backstage.payment.service.IPayOrderService;
+import org.dromara.backstage.payment.service.IPtUserAccountService;
 import org.dromara.backstage.task.AsyncTaskService;
 import org.dromara.common.core.api.ReturnResult;
 import org.dromara.common.core.domain.R;
@@ -28,6 +39,9 @@ import org.dromara.common.core.enums.CreditTypeEnum;
 import org.dromara.common.core.enums.ResultCodeEnum;
 import org.dromara.common.core.exception.ApiException;
 import org.dromara.common.redis.utils.RedisUtils;
+import org.dromara.hotel.api.domain.bo.RemoteCardDataBo;
+import org.dromara.hotel.api.domain.vo.RemoteCardDataVo;
+import org.dromara.hotel.api.service.RemoteCardDataService;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -69,7 +83,11 @@ public class SelfBusiness {
     private final IPayOrderService wxOrderService;
     private final IXfCreditAccountBackService creditAccountBackService;
     private final ThirdPayBusiness thirdPayBusiness;
+    private final CardBusiness cardBusiness;
+    private final IPtUserAccountService userAccountService;
 
+    @DubboReference
+    private final RemoteCardDataService remoteCardDataService;
     /**
      * 获取短信平台token
      */
@@ -183,6 +201,49 @@ public class SelfBusiness {
         return ReturnResult.success();
     }
 
+    /**
+     * 根据物理卡号查询人员信息(餐卡、房卡)
+     * @param userFixId 餐卡对应的物理卡号
+     * @param roomFixId 房卡对应的物理卡号
+     * @param roomData 房卡的发卡数据
+     * @return 查询到的人员信息
+     */
+    public ReturnResult getUserCardInfo(Long userFixId, String roomFixId, String roomData) {
+        YcSelfCardVo selfCardVo = new YcSelfCardVo();
+        PtCardVo cardVo = cardBusiness.getUseCardByFactoryId(userFixId);
+        if(ObjectUtil.isNotEmpty(cardVo)){
+            selfCardVo.setCardStatusId(Integer.parseInt(cardVo.getStatus()));
+            selfCardVo.setUserCardTypeId(Math.toIntExact(cardVo.getCardType()));
+            selfCardVo.setCardNo(cardVo.getCardNo());
+            selfCardVo.setFactoryFixId(cardVo.getFactoryId());
+            PtUserAccountVo accountVo = userAccountService.queryById(cardVo.getUserId());
+            if (ObjectUtil.isNotEmpty(accountVo)) {
+                selfCardVo.setUserXm(accountVo.getRealName());
+                selfCardVo.setMobilePhone(accountVo.getPhone());
+                selfCardVo.setDeptName(accountVo.getDeptName());
+            }
+        }
+        String emptyRoomData = "0000000000000000";
+        int roomCardLen = 16;
+        if(ObjectUtil.notEqual(roomData,emptyRoomData)){
+            roomFixId = HexUtil.toHex(userFixId);
+            if (roomFixId.length() < roomCardLen) {
+                roomFixId = StringUtils.rightPad(roomFixId, 16, "F");
+            }
+            RemoteCardDataBo bo = new RemoteCardDataBo();
+            bo.setCardStatus("1");
+            bo.setFactoryId(roomFixId);
+            RemoteCardDataVo userCardData = remoteCardDataService.getCardDataByBo(bo);
+            if (ObjectUtil.isNotEmpty(userCardData)) {
+                selfCardVo.setRoomCode(userCardData.getRoomCode());
+                selfCardVo.setCheckInDate(DateUtil.formatDateTime(userCardData.getStartTime()));
+                selfCardVo.setCheckInDate(DateUtil.formatDateTime(userCardData.getEndTime()));
+            }
+        }
+
+        return ReturnResult.success(selfCardVo);
+    }
+
     /**
      * 请求生成微信收款二维码
      *

+ 15 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/controller/self/SelfController.java

@@ -74,8 +74,23 @@ public class SelfController {
         }
         return ReturnResult.failure(ResultCodeEnum.SYSTEM_INNER_ERROR.code(),result.getMsg());
     }
+
     @RequestMapping(value = "api/v1/lock/card/{cardId}/{cardData}/{userId}", method = RequestMethod.GET)
     public boolean setLockCardDataId(@PathVariable("cardId") String cardId,@PathVariable("cardData") String cardData,@PathVariable("userId") String userId) {
         return traineeBusiness.updateCardIdToCardData(cardData, userId, cardId);
     }
+
+    /**
+     * 自助工具查询卡片信息(餐卡、房卡)
+     * @param mapInfo 查询条件
+     * @return 卡片信息
+     */
+    @RequestMapping(value = "api/v1/card/query", method = RequestMethod.POST)
+    public ReturnResult setLockCardDataId(@RequestBody Map<String, String> mapInfo) {
+        Long userFixId = Long.valueOf(mapInfo.get("userFixId"));
+        String roomFixId = mapInfo.get("roomFixId");
+        String roomData = mapInfo.get("roomData");
+
+        return selfBusiness.getUserCardInfo(userFixId, roomFixId, roomData);
+    }
 }

+ 87 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/domain/vo/yc/YcSelfCardVo.java

@@ -0,0 +1,87 @@
+package org.dromara.backstage.domain.vo.yc;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @ClassName YcSelfCardVo
+ * @Description 简易自助查询卡片信息(餐卡、房卡)
+ * @Author luoyibo
+ * @Date 2024-11-14 08:56
+ * @Version 1.0
+ * @since jdk17
+ */
+@Data
+@Accessors(chain = true)
+public class YcSelfCardVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -2859423845136255800L;
+    /**
+     * 人员姓名
+     */
+    private String userXm;
+    /**
+     * 手机号码
+     */
+    private String mobilePhone;
+    /**
+     * 部门名称
+     */
+    private String deptName;
+
+    /**
+     * 卡流水号
+     */
+    private long cardNo ;
+
+    /**
+     * 物理卡号
+     */
+    private Long factoryFixId ;
+
+    /**
+     * userCardTypeId
+     */
+    private int userCardTypeId;
+
+    /**
+     * 卡片状态
+     */
+    private int cardStatusId ;
+    /**
+     * 卡片有效期
+     */
+    private Date userExpiryDate;
+
+    /**
+     * 租户编号
+     */
+    private String tenantId;
+
+    //region 人员住宿信息
+    /**
+     * 房间编号
+     */
+    private String roomCode;
+    /**
+     * 入住时间
+     */
+    private String checkInDate;
+    /**
+     * 退房时间
+     */
+    private String checkOutDate;
+    /**
+     * 房卡信息
+     */
+    private String roomCardData;
+    //endregion
+}

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

@@ -86,7 +86,7 @@ public class PtUserAccountServiceImpl implements IPtUserAccountService {
     @Override
     public PtUserAccountVo queryById(Long userId) {
         PtUserAccountVo vo = TenantHelper.ignore(()->baseMapper.selectVoById(userId));
-        if (vo != null) {
+        if (vo != null && ObjectUtil.isNotEmpty(vo.getDeptId())) {
             RemoteDeptVo remoteDeptVo = remoteDeptService.selectDeptById(vo.getDeptId());
             vo.setDeptName(remoteDeptVo.getDeptName());
             vo.setOtherDeptId(remoteDeptVo.getOtherId());

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/task/ScheduledTasks.java

@@ -41,7 +41,7 @@ public class ScheduledTasks {
         lockBusiness.syncLockPower();
     }
 
-    @Scheduled(cron = "0 0 10,14,23 * * *")
+    @Scheduled(cron = "0 0 23 * * *")
     public void syncDoorOpenRecord(){
         int iCount = lockBusiness.queryOpenDoorRecord(1);
         String message = MessageFormat.format("开门记录同步完成,本次同步了 {0} 条记录", iCount);

+ 8 - 3
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/dubbo/RemoteCardDataServiceImpl.java

@@ -1,6 +1,7 @@
 package org.dromara.hotel.dubbo;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboService;
@@ -53,8 +54,12 @@ public class RemoteCardDataServiceImpl implements RemoteCardDataService {
     public RemoteCardDataVo getCardDataByBo(RemoteCardDataBo remoteBo) {
         KfProvideCardHisBo bo = MapstructUtils.convert(remoteBo, KfProvideCardHisBo.class);
         KfProvideCardHisVo vo = cardHisService.queryByBo(bo);
-        RemoteCardDataVo remoteVo = new RemoteCardDataVo();
-        BeanUtil.copyProperties(vo, remoteVo);
-        return remoteVo;
+        if(ObjectUtil.isNotEmpty(vo)) {
+            RemoteCardDataVo remoteVo = new RemoteCardDataVo();
+            BeanUtil.copyProperties(vo, remoteVo);
+            return remoteVo;
+        } else {
+            return null;
+        }
     }
 }

+ 7 - 1
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfProvideCardHisServiceImpl.java

@@ -1,5 +1,7 @@
 package org.dromara.hotel.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
+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.utils.MapstructUtils;
@@ -173,6 +175,10 @@ public class KfProvideCardHisServiceImpl implements IKfProvideCardHisService {
 
     @Override
     public KfProvideCardHisVo queryByBo(KfProvideCardHisBo bo) {
-        return this.queryList(bo).get(0);
+        List<KfProvideCardHisVo> list = this.queryList(bo);
+        if (CollectionUtil.isNotEmpty(list)) {
+            return this.queryList(bo).get(0);
+        }
+        return null;
     }
 }