Ver código fonte

fix: 自助服务
1.自助报到与取卡时没有写发卡记录修复

luoyb 1 ano atrás
pai
commit
54ef84c7ea

+ 8 - 0
ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/domain/bo/RemoteCardDataBo.java

@@ -83,5 +83,13 @@ public class RemoteCardDataBo implements Serializable {
      */
     private String remark;
 
+    /**
+     * 团客名称
+     */
+    private String teamName;
 
+    /**
+     * 电话号码
+     */
+    private String phone;
 }

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

@@ -2,6 +2,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.ObjectUtil;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
@@ -13,7 +14,9 @@ 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.yc.YcTraineeVo;
 import org.dromara.backstage.payment.domain.bo.PayOrderBo;
 import org.dromara.backstage.payment.domain.vo.PayOrderVo;
 import org.dromara.backstage.payment.service.IPayOrderService;
@@ -209,4 +212,17 @@ public class SelfBusiness {
             throw new ApiException("生成微信收款码错误", ResultCodeEnum.INTERFACE_OUTER_INVOKE_ERROR.code());
         }
     }
+
+    public boolean updateCardIdToCardData(String cardData, String userId, String cardId) {
+        //YcTraineeBo bo = new YcTraineeBo().setUserId(userId).setCategory("2");
+        //R<YcTraineeVo> result = traineeBusiness.getTraineeRegisterInfo(bo, DateUtil.parseDate
+        //Map<String, Object> queryMap = new HashMap<>();
+        //queryMap.put("cardData", cardData);
+        //queryMap.put("userId", userId);
+        //PtGuesterCardData guesterCardData = cardDataService.getPtGuesterCardData(queryMap);
+        //guesterCardData.setCardId(cardId);
+        //return cardDataService.updateById(guesterCardData);
+
+        return true;
+    }
 }

+ 74 - 40
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/self/TraineeBusiness.java

@@ -34,7 +34,6 @@ import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.constant.HotelBusinessConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.domain.model.ErrorInfo;
-import org.dromara.common.core.enums.CardStatusEnum;
 import org.dromara.common.core.enums.ResultCodeEnum;
 import org.dromara.common.core.enums.RoomCardTypeEnum;
 import org.dromara.common.message.kafka.constant.EventSenderConstants;
@@ -94,19 +93,28 @@ public class TraineeBusiness {
 
     /**
      * 获取报到学员信息
-     * @param bo 学员业务对象
+     *
+     * @param bo        学员业务对象
      * @param doingDate 报到日期
      * @return 学员信息
      */
     public R<YcTraineeVo> getTraineeRegisterInfo(YcTraineeBo bo, Date doingDate) {
-        PtUserAccountBo accountBo = new PtUserAccountBo().setPhone(bo.getMobilePhone())
-                                        .setCategory(bo.getCategory())
-                                        .setIdNumber(bo.getIdNumber());
+        PtUserAccountBo accountBo = new PtUserAccountBo().setCategory(bo.getCategory());
+        if (ObjectUtil.isNotEmpty(bo.getMobilePhone())) {
+            accountBo.setPhone(bo.getMobilePhone());
+        }
+        if (ObjectUtil.isNotEmpty(bo.getIdNumber())) {
+            accountBo.setIdNumber(bo.getIdNumber());
+        }
+        if (ObjectUtil.isNotEmpty(bo.getUserId())) {
+            accountBo.setUserId(Long.valueOf(bo.getUserId()));
+        }
+
         YcTraineeVo traineeVo = userAccountService.selectTraineeByBo(accountBo, doingDate);
         if (ObjectUtil.isEmpty(traineeVo)) {
             return R.fail("没有您的培训信息");
         }
-        if(ObjectUtil.isEmpty(traineeVo.getCheckinState())){
+        if (ObjectUtil.isEmpty(traineeVo.getCheckinState())) {
             traineeVo.setCheckinState(0);
         }
         // 卡片信息
@@ -122,14 +130,14 @@ public class TraineeBusiness {
         RemoteDeptVo remoteDeptVo = remoteDeptService.selectDeptById(Long.valueOf(traineeVo.getDeptId()));
         traineeVo.setUserClass(YcVoConvert.ycClassVoConvert(remoteDeptVo));
         // 入住信息
-        RemoteOrderVo kfOrderVo = kfOrderService.selectGuestOrderByOtherId(traineeVo.getOtherId(),traineeVo.getTenantId());
+        RemoteOrderVo kfOrderVo = kfOrderService.selectGuestOrderByOtherId(traineeVo.getOtherId(), traineeVo.getTenantId());
         if (ObjectUtil.isNotEmpty(kfOrderVo)) {
             traineeVo.setGuesterId(kfOrderVo.getGuestId().toString());
             traineeVo.setRoomCode(kfOrderVo.getRoomCode());
             traineeVo.setRoomId(kfOrderVo.getRoomId());
             traineeVo.setGuestRoomId(kfOrderVo.getRoomId());
             traineeVo.setOrderIndex(ObjectUtil.isNotEmpty(kfOrderVo.getOrderIndex()) ? kfOrderVo.getOrderIndex() : 0);
-            if(ObjectUtil.isNotEmpty(kfOrderVo.getRoomCode())){
+            if (ObjectUtil.isNotEmpty(kfOrderVo.getRoomCode())) {
                 // 获取房卡信息
                 String cardData = getRoomCardData(kfOrderVo);
                 traineeVo.setRoomCardData(cardData);
@@ -140,7 +148,8 @@ public class TraineeBusiness {
 
     /**
      * 学员报到
-     * @param bo 学员业务对象
+     *
+     * @param bo        学员业务对象
      * @param traineeVo 报到后信息
      * @return 报到结果
      */
@@ -148,11 +157,11 @@ public class TraineeBusiness {
         // 学员基本信息
         PtUserAccountBo accountBo = new PtUserAccountBo().setUserId(Long.valueOf(bo.getUserId()));
         YcTraineeVo ycTraineeVo = userAccountService.selectTraineeByBo(accountBo, null);
-        if(ycTraineeVo.getMobilePhone().length()>11){
+        if (ycTraineeVo.getMobilePhone().length() > 11) {
             ycTraineeVo.setMobilePhone(Base64.decodeStr(ycTraineeVo.getMobilePhone()));
         }
-        if(ycTraineeVo.getCheckinState()==1){
-            return R.fail(new ErrorInfo(ResultCodeEnum.RESOURCE_EXISTED.code(),"","您已经报到过了,请勿重复报到"));
+        if (ycTraineeVo.getCheckinState() == 1) {
+            return R.fail(new ErrorInfo(ResultCodeEnum.RESOURCE_EXISTED.code(), "", "您已经报到过了,请勿重复报到"));
         }
         bo.setTenantId(ycTraineeVo.getTenantId());
         bo.setUserXm(ycTraineeVo.getUserXm());
@@ -164,7 +173,7 @@ public class TraineeBusiness {
         // 获取学员作为入住客人的信息
         bo.setOtherUserId(ycTraineeVo.getOtherId());
         bo.setOtherDeptId(remoteDeptVo.getOtherId());
-        getGuestInfo(bo, ycTraineeVo.getOtherId(), remoteDeptVo.getOtherId(),ycTraineeVo.getTenantId());
+        getGuestInfo(bo, ycTraineeVo.getOtherId(), remoteDeptVo.getOtherId(), ycTraineeVo.getTenantId());
         // 1.如果当前人员没有住房,则安排房间
         String roomCode = bo.getRoomCode();
         if (ObjectUtil.isEmpty(roomCode)) {
@@ -185,10 +194,10 @@ public class TraineeBusiness {
             String cardData = getRoomCardData(kfOrderVo);
             ycTraineeVo.setRoomCardData(cardData);
             // 发送报到短信(有房间)
-            selfBusiness.sendSmsHasRoom(ycTraineeVo.getMobilePhone(),ycTraineeVo.getUserXm(), remoteDeptVo.getDeptName(), roomCode);
+            selfBusiness.sendSmsHasRoom(ycTraineeVo.getMobilePhone(), ycTraineeVo.getUserXm(), remoteDeptVo.getDeptName(), roomCode);
         } else {
             // 发送短信,暂无房间
-            selfBusiness.sendSmsNoRoom(ycTraineeVo.getMobilePhone(),ycTraineeVo.getUserXm(),remoteDeptVo.getDeptName());
+            selfBusiness.sendSmsNoRoom(ycTraineeVo.getMobilePhone(), ycTraineeVo.getUserXm(), remoteDeptVo.getDeptName());
         }
         setCheckInfoStatus(bo, ycTraineeVo);
         // 培训班级信息
@@ -201,7 +210,7 @@ public class TraineeBusiness {
         // 发送报到的kafka消息
         sendCheckInMessageToKafka(bo);
         //写发卡记录表
-        insertCardData(ycTraineeVo);
+        //insertCardData(ycTraineeVo);
         return R.ok();
     }
 
@@ -217,6 +226,7 @@ public class TraineeBusiness {
 
     /**
      * 获取指定日期正在进行的团客
+     *
      * @param doingDate 指定日期
      * @return List<RemoteDeptVo> 团客列表
      */
@@ -267,7 +277,8 @@ public class TraineeBusiness {
 
     /**
      * 获取学员对应的客人与团客信息
-     * @param bo 学员业务对象
+     *
+     * @param bo          学员业务对象
      * @param userOtherId 学员唯一标识
      * @param deptOtherId 班级唯一标识
      */
@@ -283,13 +294,13 @@ public class TraineeBusiness {
     /**
      * 获取学员对应的客人与团客信息
      *
-     * @param bo 学员业务对象
+     * @param bo          学员业务对象
      * @param userOtherId 学员唯一标识
      * @param deptOtherId 班级唯一标识
-     * @param tenantId 租户编号
+     * @param tenantId    租户编号
      */
-    private void getGuestInfo(YcTraineeBo bo, String userOtherId, String deptOtherId,String tenantId) {
-        R<RemoteGuestVo> getGuestVo = kfGuestService.selectGuestByOtherId(userOtherId,tenantId);
+    private void getGuestInfo(YcTraineeBo bo, String userOtherId, String deptOtherId, String tenantId) {
+        R<RemoteGuestVo> getGuestVo = kfGuestService.selectGuestByOtherId(userOtherId, tenantId);
         bo.setGuestId(getGuestVo.getData().getId());
 
         RemoteTeamBo teamBo = new RemoteTeamBo().setOtherId(deptOtherId).setTenantId(tenantId);
@@ -299,6 +310,7 @@ public class TraineeBusiness {
 
     /**
      * 设置学员的卡片信息
+     *
      * @param traineeVo 学员数据视图
      */
     private void setTraineeCardInfo(YcTraineeVo traineeVo) {
@@ -328,7 +340,7 @@ public class TraineeBusiness {
                 RedisUtils.deleteObject(key);
             }
         } else {
-            log.info("[redis获取锁房缓存失败]-[key:{}]",key);
+            log.info("[redis获取锁房缓存失败]-[key:{}]", key);
         }
     }
 
@@ -346,7 +358,7 @@ public class TraineeBusiness {
         remoteBo.setTeamName(bo.getTeamName());
         remoteBo.setRoomCode(bo.getRoomCode());
         remoteBo.setStartTime(DateUtil.date());
-        String temp = DateUtil.format(bo.getCheckoutDate(),"yyyy-MM-dd") + " 20:00:00";
+        String temp = DateUtil.format(bo.getCheckoutDate(), "yyyy-MM-dd") + " 20:00:00";
         remoteBo.setEndTime(DateUtil.parseDateTime(temp));
         remoteBo.setOrderStatus(HotelBusinessConstants.ORDER_STATUS_RZ);
         remoteBo.setUpdatedBy(Long.valueOf(bo.getUserId()));
@@ -356,36 +368,38 @@ public class TraineeBusiness {
 
     /**
      * 获取房卡的写卡信息
+     *
      * @param orderVo 订单视图
      * @return 写卡数据
      */
     private String getRoomCardData(RemoteOrderVo orderVo) {
         RoomCardBo roomCardBo = new RoomCardBo();
         roomCardBo.setStartTime(DateUtil.toLocalDateTime(new DateTime()));
-        String temp = DateUtil.format(orderVo.getCheckoutDate(),"yyyy-MM-dd") + " 20:00:00";
+        String temp = DateUtil.format(orderVo.getCheckoutDate(), "yyyy-MM-dd") + " 20:00:00";
         roomCardBo.setEndTime(DateUtil.toLocalDateTime(DateUtil.parseDateTime(temp)));
         roomCardBo.setCardType(RoomCardTypeEnum.GUEST.code());
         roomCardBo.setRealName(orderVo.getName());
         roomCardBo.setPhone(orderVo.getPhone());
         roomCardBo.setRoomCode(orderVo.getRoomCode());
         roomCardBo.setLockId(orderVo.getLockId());
-        R<String> result= lockBusiness.getWriteCardData(roomCardBo);
-        if(R.isSuccess(result)){
+        R<String> result = lockBusiness.getWriteCardData(roomCardBo);
+        if (R.isSuccess(result)) {
             return result.getData();
-        } else{
+        } else {
             return "";
         }
     }
 
     /**
      * 设置学员报到状态
-     * @param bo 学员报到业务对象
+     *
+     * @param bo          学员报到业务对象
      * @param ycTraineeVo 学员信息
      */
-    private void setCheckInfoStatus(YcTraineeBo bo, YcTraineeVo ycTraineeVo){
+    private void setCheckInfoStatus(YcTraineeBo bo, YcTraineeVo ycTraineeVo) {
         //更新报到状态
-        Boolean result = remoteDeptService.updateCheckInStatus(Long.valueOf(ycTraineeVo.getDeptId()),Long.valueOf(bo.getUserId()));
-        if(result){
+        Boolean result = remoteDeptService.updateCheckInStatus(Long.valueOf(ycTraineeVo.getDeptId()), Long.valueOf(bo.getUserId()));
+        if (result) {
             ycTraineeVo.setCheckinState(1);
             ycTraineeVo.setCheckinDate(DateUtil.date());
         }
@@ -396,15 +410,15 @@ public class TraineeBusiness {
 
     /**
      * 写入发房卡历史记录
+     *
      * @param traineeVo 客信息
+     * @param factoryId
      */
-    private void insertCardData(YcTraineeVo traineeVo){
-        if(ObjectUtil.isNotEmpty(traineeVo.getRoomCardData())) {
-            YcCardVo cardVo = traineeVo.getUserCards().stream().filter(p -> ObjectUtil.equals(p.getCardStatusId(), CardStatusEnum.NORMAL.code())).findFirst().orElse(null);
+    private void insertCardData(YcTraineeVo traineeVo, String factoryId) {
+        if (ObjectUtil.isNotEmpty(traineeVo.getRoomCardData())) {
             RemoteCardDataBo remoteCardDataBo = new RemoteCardDataBo();
-            if (cardVo != null) {
-                remoteCardDataBo.setFactoryId(cardVo.getFactoryFixId().toString());
-            }
+            remoteCardDataBo.setMasterId(Long.valueOf(traineeVo.getGuesterId()));
+            remoteCardDataBo.setFactoryId(factoryId);
             remoteCardDataBo.setCardType("1");
             remoteCardDataBo.setRoomCode(traineeVo.getRoomCode());
             remoteCardDataBo.setMasterName(traineeVo.getUserXm());
@@ -412,16 +426,19 @@ public class TraineeBusiness {
             remoteCardDataBo.setEndTime(traineeVo.getCheckoutDate());
             remoteCardDataBo.setCardStatus("1");
             remoteCardDataBo.setRemark("客人卡");
+            remoteCardDataBo.setTeamName(traineeVo.getDeptName());
+            remoteCardDataBo.setPhone(traineeVo.getMobilePhone());
 
             remoteCardDataService.insertCardDataByBo(remoteCardDataBo);
         }
     }
+
     /**
      * 发送报到信息到kafka
      *
      * @param bo 学员报到业务对象
      */
-    public void sendCheckInMessageToKafka(YcTraineeBo bo){
+    public void sendCheckInMessageToKafka(YcTraineeBo bo) {
 
         TraineeCheckIn traineeCheckIn = new TraineeCheckIn();
         traineeCheckIn.setOtherSysId(bo.getOtherUserId());
@@ -434,7 +451,7 @@ public class TraineeBusiness {
         kafkaProducer.sendKafkaMessage(KafkaTopicConstants.OLD_SYNC_TOPIC, EventTypeConstants.REGISTER_STATUS, EventSenderConstants.YKT, traineeCheckIn);
     }
 
-    public YcLockCardVo queryLockCardInfo(Map<String, Object> mapQuery){
+    public YcLockCardVo queryLockCardInfo(Map<String, Object> mapQuery) {
         String cardNo = mapQuery.get("cardNo").toString();
         String userCard = mapQuery.get("userCard").toString();
         String cardData = mapQuery.get("cardData").toString();
@@ -471,7 +488,7 @@ public class TraineeBusiness {
                 lockCardInfo.setDataRemark(userCardData.getRemark());
                 lockCardInfo.setClassName(userCardData.getTeamName());
                 // lockCardInfo.setManageCard(userCardData);
-            } else{
+            } else {
                 log.error("没有对应的住宿信息-[数据:{},卡号:{}]", cardData, cardId);
 
             }
@@ -486,4 +503,21 @@ public class TraineeBusiness {
         //}
         return lockCardInfo;
     }
+
+    /**
+     * 写入房卡的发卡信息
+     *
+     * @param cardData 发卡数据
+     * @param userId   人员Id
+     * @param cardId   卡号
+     * @return 写入结果
+     */
+    public boolean updateCardIdToCardData(String cardData, String userId, String cardId) {
+        YcTraineeBo bo = new YcTraineeBo().setUserId(userId).setCategory("2");
+        R<YcTraineeVo> result = getTraineeRegisterInfo(bo, DateUtil.date());
+        if (R.isSuccess(result)) {
+            this.insertCardData(result.getData(), cardId);
+        }
+        return true;
+    }
 }

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

@@ -4,6 +4,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.backstage.business.payments.ThirdPayBusiness;
 import org.dromara.backstage.business.self.SelfBusiness;
+import org.dromara.backstage.business.self.TraineeBusiness;
 import org.dromara.common.core.api.ResponseResult;
 import org.dromara.common.core.api.ReturnResult;
 import org.dromara.common.core.domain.R;
@@ -28,6 +29,7 @@ import java.util.Map;
 public class SelfController {
     private final SelfBusiness selfBusiness;
     private final ThirdPayBusiness thirdPayBusiness;
+    private final TraineeBusiness traineeBusiness;
     /**
      * 发送手机短信
      *
@@ -72,4 +74,8 @@ 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);
+    }
 }

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

@@ -72,7 +72,7 @@ public class KfProvideCardHisController extends BaseController {
     /**
      * 新增发卡记录
      */
-    @SaCheckPermission("basics:kfCardData:add")
+    //@SaCheckPermission("basics:kfCardData:add")
     @Log(title = "发卡记录", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()