Quellcode durchsuchen

feature: 酒店系统
1.回收房卡

luoyb vor 1 Jahr
Ursprung
Commit
a87396a144

+ 43 - 21
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/card/CardBusiness.java

@@ -4,15 +4,16 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.backstage.basics.domain.vo.PtWorkstationVo;
 import org.dromara.backstage.basics.service.IPtParameterService;
 import org.dromara.backstage.basics.service.IPtWorkstationService;
 import org.dromara.backstage.cardCenter.domain.bo.PtCardBo;
+import org.dromara.backstage.cardCenter.service.IPtCardService;
 import org.dromara.backstage.domain.vo.card.InitCardVo;
 import org.dromara.backstage.domain.vo.card.PtCardVo;
-import org.dromara.backstage.cardCenter.service.IPtCardService;
 import org.dromara.backstage.payment.domain.bo.PtBagBo;
 import org.dromara.backstage.payment.domain.vo.PtBagVo;
 import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
@@ -69,13 +70,13 @@ public class CardBusiness {
             PtCardBo addBo = BeanUtil.copyProperties(cardBo, PtCardBo.class);
             addBo.setMainCard("Y");
             addBo.setStatus(CardStatusEnum.NORMAL.code().toString());
-            if(addBo.getCardNo()==null){
+            if (addBo.getCardNo() == null) {
                 addBo.setCardNo(cardNoBusiness.getCardNo());
             }
             addBo.setFactoryId(0L);
             addBo.setChangeTime(DateUtil.date());
 
-            if(ptCardService.insertByBo(addBo)){
+            if (ptCardService.insertByBo(addBo)) {
                 //--------- 设置 流水号和主键id set 到 cardBo
                 cardBo.setCardId(addBo.getCardId());
                 cardBo.setCardNo(addBo.getCardNo());
@@ -137,7 +138,7 @@ public class CardBusiness {
             case REISSUE -> checkUserReIssueCard(uesrCardList, cardBo);
             default -> R.ok(new ResultInfo(ResultCodeEnum.SUCCESS));
         };
-        if(R.isError(result)){
+        if (R.isError(result)) {
             return R.fail(result.getData());
         }
         // 所有逻辑校验通过,入库
@@ -163,18 +164,30 @@ public class CardBusiness {
 
     public R<PtCardVo> writeCardSuccess(PtCardBo cardBo) throws InterruptedException {
         PtCardBo queryBo = new PtCardBo();
-        if(cardBo.getCardNo()>0) {queryBo.setCardNo(cardBo.getCardNo());}
-        if(cardBo.getFactoryId()>0) {queryBo.setFactoryId(cardBo.getFactoryId());}
-        if(cardBo.getCardId()>0) {queryBo.setCardId(cardBo.getCardId());}
+        if (cardBo.getCardNo() > 0) {
+            queryBo.setCardNo(cardBo.getCardNo());
+        }
+        if (cardBo.getFactoryId() > 0) {
+            queryBo.setFactoryId(cardBo.getFactoryId());
+        }
+        if (cardBo.getCardId() > 0) {
+            queryBo.setCardId(cardBo.getCardId());
+        }
 
         // 补卡和换卡时需要注销旧卡
         if (ObjectUtil.equals(cardBo.getOperateType(), CardOperateEnum.REISSUE)
-            || ObjectUtil.equals(cardBo.getOperateType(),CardOperateEnum.CHANGE)) {
+            || ObjectUtil.equals(cardBo.getOperateType(), CardOperateEnum.CHANGE)) {
             // 注销旧卡
             PtCardBo queryOldBo = new PtCardBo();
-            if(cardBo.getOldCardNo()>0) {queryOldBo.setCardNo(cardBo.getOldCardNo());}
-            if(cardBo.getOldFactoryId()>0) {queryOldBo.setFactoryId(cardBo.getOldFactoryId());}
-            if(cardBo.getOldCardId()>0) {queryOldBo.setCardId(cardBo.getOldCardId());}
+            if (cardBo.getOldCardNo() > 0) {
+                queryOldBo.setCardNo(cardBo.getOldCardNo());
+            }
+            if (cardBo.getOldFactoryId() > 0) {
+                queryOldBo.setFactoryId(cardBo.getOldFactoryId());
+            }
+            if (cardBo.getOldCardId() > 0) {
+                queryOldBo.setCardId(cardBo.getOldCardId());
+            }
             queryOldBo.setStatus(CardStatusEnum.CLOSE.code().toString());
             queryOldBo.setChangeTime(DateUtil.date());
 
@@ -187,6 +200,15 @@ public class CardBusiness {
         return R.ok(cardVo);
     }
 
+    public R<Void> recycleCard(PtCardBo cardBo) {
+        PtCardVo vo = ptCardService.selectOneByBo(cardBo);
+        if (ObjectUtil.isNotEmpty(vo)) {
+            return ptCardService.recycleCardByBo(cardBo) ? R.ok() : R.fail();
+        } else {
+            return R.fail(MessageFormat.format("[卡片回收]-[没有对应的卡片]-[{0}]", JSONUtil.toJsonStr(cardBo)));
+        }
+    }
+
     private R<ResultInfo> checkParam(PtCardBo cardBo, PtUserAccountVo userAccountVo, PtWorkstationVo workstationVo) {
         Long factoryId = cardBo.getFactoryId();
         Long userId = cardBo.getUserId();
@@ -272,15 +294,15 @@ public class CardBusiness {
         if (CollectionUtil.isNotEmpty(userCardList)) {
             // 如人员已有正常的主卡,不能再发主卡
             if (userCardList.stream().anyMatch(p -> ObjectUtil.equals(p.getMainCard(), "Y")
-                                                        && ObjectUtil.equals(p.getStatus(), CardStatusEnum.NORMAL.code().toString())
-                                                        && p.getFactoryId() > 0 && cardBo.getMainCard().equals("Y"))) {
+                && ObjectUtil.equals(p.getStatus(), CardStatusEnum.NORMAL.code().toString())
+                && p.getFactoryId() > 0 && cardBo.getMainCard().equals("Y"))) {
                 return R.fail(new ResultInfo(ResultCodeEnum.DATA_ALREADY_EXISTED, MessageFormat.format("Id为[{0}]的人员已有正常主卡,无法再发新卡",
-                                                                                                       cardBo.getUserId())));
+                    cardBo.getUserId())));
             }
             // 如果人员已发虚拟卡,此时将虚拟卡转为实体卡
             userCardList.stream().filter(p -> ObjectUtil.equals(p.getMainCard(), "Y")
-                                                  && ObjectUtil.equals(p.getStatus(), CardStatusEnum.NORMAL.code().toString())
-                                                  && p.getFactoryId() == 0L).findFirst().ifPresent(k -> {
+                && ObjectUtil.equals(p.getStatus(), CardStatusEnum.NORMAL.code().toString())
+                && p.getFactoryId() == 0L).findFirst().ifPresent(k -> {
                 cardBo.setCardNo(k.getCardNo());
                 cardBo.setCardId(k.getCardId());
                 cardBo.setStatus(k.getStatus());
@@ -309,7 +331,7 @@ public class CardBusiness {
         if (ObjectUtil.notEqual(oldCardVo.getStatus(), CardStatusEnum.NORMAL.code().toString())) {
             return R.fail(
                 new ResultInfo(ResultCodeEnum.DATA_NOT_FOUND,
-                               MessageFormat.format("物理卡号[{0}]和卡流水号[{1}]对应旧卡是正常卡片", oldFactoryId, oldCardNo)));
+                    MessageFormat.format("物理卡号[{0}]和卡流水号[{1}]对应旧卡是正常卡片", oldFactoryId, oldCardNo)));
         }
         // 将原卡的信息复制到新卡 卡类、有效期和是否主卡
         userCardList.stream().filter(
@@ -339,15 +361,15 @@ public class CardBusiness {
         if (ObjectUtil.notEqual(oldCardVo.getStatus(), CardStatusEnum.LOCK.code().toString())) {
             return R.fail(
                 new ResultInfo(ResultCodeEnum.DATA_NOT_FOUND,
-                               MessageFormat.format("没有物理卡号[{0}]和卡流水号[{1}]对应的挂失卡片", oldFactoryId, oldCardNo)));
+                    MessageFormat.format("没有物理卡号[{0}]和卡流水号[{1}]对应的挂失卡片", oldFactoryId, oldCardNo)));
         }
         // 如果待补的旧卡是主卡,检查人员是否有正常主卡
         if (ObjectUtil.equals(oldCardVo.getMainCard(), "Y")) {
             if (userCardList.stream().anyMatch(
                 p -> ObjectUtil.equals(p.getStatus(), CardStatusEnum.NORMAL.code().toString()) && ObjectUtil.equals(p.getMainCard(), "Y"))) {
                 return R.fail(new ResultInfo(ResultCodeEnum.DATA_ALREADY_EXISTED,
-                                             MessageFormat.format("物理卡号[{0}]和卡流水号[{1}]的挂失卡片为主卡,但人员已有正常的主卡", oldFactoryId,
-                                                                  oldCardNo)));
+                    MessageFormat.format("物理卡号[{0}]和卡流水号[{1}]的挂失卡片为主卡,但人员已有正常的主卡", oldFactoryId,
+                        oldCardNo)));
             }
         }
         return R.ok(new ResultInfo(ResultCodeEnum.SUCCESS));
@@ -360,7 +382,7 @@ public class CardBusiness {
         //if (ObjectUtil.isEmpty(oldFactoryId) || oldFactoryId == 0) {
         //    return R.fail(new ResultInfo(ResultCodeEnum.PARAM_IS_INVALID, "旧卡的物理卡号必须大于0"));
         //}
-        if(oldCardId>0) {
+        if (oldCardId > 0) {
             if (userCardList.stream().noneMatch(p -> ObjectUtil.equals(p.getCardId(), oldCardId))) {
                 return R.fail(
                     new ResultInfo(ResultCodeEnum.DATA_NOT_FOUND,

+ 6 - 2
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/self/TraineeBusiness.java

@@ -430,9 +430,13 @@ public class TraineeBusiness {
 
         //如果是房卡,获取房卡信息
         if (isRoomCard.equals(roomCard)) {
+            String cardId = HexUtil.toHex(Long.parseLong(cardNo));
+            if (cardId.length() < roomCardLen) {
+                cardId = StringUtils.rightPad(cardId, 16, "F");
+            }
             RemoteCardDataBo bo = new RemoteCardDataBo();
             bo.setCardStatus("1");
-            bo.setFactoryId(cardNo);
+            bo.setFactoryId(cardId);
             RemoteCardDataVo userCardData = remoteCardDataService.getCardDataByBo(bo);
             if (userCardData != null) {
                 lockCardInfo.setUserXm(userCardData.getMasterName());
@@ -442,7 +446,7 @@ public class TraineeBusiness {
                 lockCardInfo.setDataRemark(userCardData.getRemark());
                 // lockCardInfo.setManageCard(userCardData);
             } else{
-                log.error("没有对应的住宿信息-[数据:{},卡号:{}]", cardData, cardNo);
+                log.error("没有对应的住宿信息-[数据:{},卡号:{}]", cardData, cardId);
 
             }
         }

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

@@ -108,6 +108,27 @@ public class CardApiController extends BaseController {
         return ReturnResult.failure(ResultCodeEnum.DATA_NOT_FOUND.code(), message);
     }
 
+    /**
+     * 回收卡片
+     * @param mapParams 参数
+     * @return 回收结果
+     */
+    @PostMapping("/api/v1/recycle")
+    public ReturnResult recycleCard(@RequestBody Map<String, String> mapParams){
+        Long cardNo = Long.parseLong(mapParams.get("cardNo"));
+        Long FactorId = Long.parseLong(mapParams.get("factoryFixId"));
+        Long operatorId = Long.parseLong((mapParams.get("operatorId")));
+        PtCardBo bo = new PtCardBo();
+        bo.setCardNo(cardNo);
+        bo.setFactoryId(FactorId);
+        bo.setOperatorId(operatorId);
+        R<Void> result = cardBusiness.recycleCard(bo);
+        if(R.isSuccess(result)){
+            return ReturnResult.success();
+        } else {
+            return ReturnResult.failure(ResultCodeEnum.DATA_IS_WRONG, result.getMsg());
+        }
+    }
     private PtCardBo getInitInfo(Map<String, Object> initParam) {
         PtCardBo bo = new PtCardBo();
         bo.setCardId(ObjUtil.isNotEmpty(initParam.get("cardId")) ? Long.parseLong(initParam.get("cardId").toString()) : null);

+ 5 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/cardCenter/domain/bo/PtCardBo.java

@@ -126,5 +126,10 @@ public class PtCardBo extends BaseEntity {
      * 原cardId
      */
     private Long oldCardId;
+
+    /**
+     * 操作员Id
+     */
+    private Long operatorId;
     // endregion
 }

+ 7 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/cardCenter/service/IPtCardService.java

@@ -166,4 +166,11 @@ public interface IPtCardService {
      * @return 挂失后的卡片信息
      */
     PtCardVo lockCardByBo(PtCardBo bo);
+
+    /**
+     * 回收卡片
+     * @param bo 卡片业务对象
+     * @return 回收结果
+     */
+    Boolean recycleCardByBo(PtCardBo bo);
 }

+ 26 - 3
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/cardCenter/service/impl/PtCardServiceImpl.java

@@ -22,6 +22,7 @@ import org.dromara.backstage.payment.domain.bo.PtBagBo;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.constant.Constants;
 import org.dromara.common.core.enums.CardOpenEnum;
+import org.dromara.common.core.enums.CardStatusEnum;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
@@ -371,8 +372,8 @@ public class PtCardServiceImpl implements IPtCardService {
         List<PtCardVo> list = this.queryList(bo);
         if (ObjUtil.isNotNull(list) && !list.isEmpty()) {
             PtCardVo vo = list.get(0);
-            PtCardtypeVo cardTypeVo = cardTypeService.queryByCode(vo.getCardType());
-            vo.setCardTypeName(cardTypeVo.getTypeName());
+            //PtCardtypeVo cardTypeVo = cardTypeService.queryByCode(vo.getCardType());
+            //vo.setCardTypeName(cardTypeVo.getTypeName());
             RedisUtils.addCacheList(CacheNames.PT_USER_CARD, vo);
             return vo;
         }
@@ -412,8 +413,11 @@ public class PtCardServiceImpl implements IPtCardService {
     @Override
     public PtCardVo lockCardByBo(PtCardBo bo) {
         LambdaUpdateWrapper<PtCard> lpw = new LambdaUpdateWrapper<>();
-        lpw.set(PtCard::getStatus, '2');
+        lpw.set(PtCard::getStatus,CardStatusEnum.LOCK.code());
         lpw.set(PtCard::getChangeTime, DateUtil.date());
+        lpw.set(PtCard::getUpdateBy, bo.getOperatorId());
+        lpw.set(PtCard::getUpdateTime, DateUtil.date());
+
         lpw.eq(PtCard::getStatus, '1');
         lpw.eq(bo.getCardId() != null, PtCard::getCardId, bo.getCardId());
         lpw.eq(bo.getFactoryId() != null, PtCard::getFactoryId, bo.getFactoryId());
@@ -426,4 +430,23 @@ public class PtCardServiceImpl implements IPtCardService {
         }
         return null;
     }
+    /**
+     * 回收卡片
+     * @param bo 卡片业务对象
+     * @return 回收结果
+     */
+    @Override
+    public Boolean recycleCardByBo(PtCardBo bo) {
+        LambdaUpdateWrapper<PtCard> lpw = new LambdaUpdateWrapper<>();
+        lpw.set(PtCard::getStatus, CardStatusEnum.CLOSE.code());
+        lpw.set(PtCard::getChangeTime, DateUtil.date());
+        lpw.set(PtCard::getUpdateBy, bo.getOperatorId());
+        lpw.set(PtCard::getUpdateTime, DateUtil.date());
+
+        lpw.eq(bo.getCardId() != null, PtCard::getCardId, bo.getCardId());
+        lpw.eq(bo.getFactoryId() != null, PtCard::getFactoryId, bo.getFactoryId());
+        lpw.eq(bo.getCardNo() != null, PtCard::getCardNo, bo.getCardNo());
+
+        return baseMapper.update(null,lpw)>0;
+    }
 }

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

@@ -11,6 +11,7 @@ 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.dromara.hotel.domain.bo.KfProvideCardHisBo;
+import org.dromara.hotel.domain.vo.KfProvideCardHisVo;
 import org.dromara.hotel.service.IKfProvideCardHisService;
 import org.springframework.stereotype.Service;
 
@@ -50,6 +51,7 @@ public class RemoteCardDataServiceImpl implements RemoteCardDataService {
     @Override
     public RemoteCardDataVo getCardDataByBo(RemoteCardDataBo remoteBo) {
         KfProvideCardHisBo bo = MapstructUtils.convert(remoteBo, KfProvideCardHisBo.class);
-        return null;
+        KfProvideCardHisVo vo = cardHisService.queryByBo(bo);
+        return MapstructUtils.convert(vo, RemoteCardDataVo.class);
     }
 }