liurunyu
2024-10-12 708dce320caedf9973ff0282098fb70dafd6702e
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
@@ -59,8 +59,10 @@
    @Value("${project.projectNo}")
    private Integer projectNo;
    /**
     * 开卡
     *
     * @param po 开卡传入对象
     * @param bindingResult
     * @return 水卡编号
@@ -79,7 +81,6 @@
        }
        Long clientId = po.getClientId();
        // 获取5级行政区划串areaCode
        Long areaCodeL = cardOperateSv.getAreaCodeById(clientId);
        if(areaCodeL == null) {
@@ -135,19 +136,18 @@
        seClientCard.setCardnum(cardNum);
        seClientCard.setClientid(clientId);
        seClientCard.setMoney(amount);
        seClientCard.setState(CardStateENUM.NORMAL.getCode());
        // 开卡时卡片状态为无效
        seClientCard.setState(CardStateENUM.INVALID.getCode());
        if(originalCardId != null) {
            // 补卡
            seClientCard.setOriginalCardId(originalCardId);
        }
        seClientCard.setCreatedt(activeTime);
        //if(cardCost == 0) {
        //    // 换卡
        //    seClientCard.setLastoper(LastOperateENUM.CHANGE_CARD.getCode());
        //}else {
        //    // 开卡
        //    seClientCard.setLastoper(LastOperateENUM.ACTIVE.getCode());
        //}
            seClientCard.setLastoper(LastOperateENUM.REPLACE.getCode());
            seClientCard.setReplacedt(activeTime);
        } else {
            // 开新卡
        seClientCard.setLastoper(LastOperateENUM.ACTIVE.getCode());
            seClientCard.setCreatedt(activeTime);
        }
        Long cardId = Optional.ofNullable(clientCardSv.add(seClientCard)).orElse(0L) ;
        if(cardId == 0) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.ACTIVE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
@@ -165,18 +165,15 @@
        if(originalCardId != null) {
            // 补卡
            seCardOperate.setOperateType(OperateTypeENUM.REISSUE.getCode());
            seCardOperate.setNoTradeAmount(amount);
        }else {
            // 开新卡或换卡
            //if(cardCost > 0) {
            //    seCardOperate.setOperateType(OperateTypeENUM.ACTIVE.getCode());
            //}else {
            //    seCardOperate.setOperateType(OperateTypeENUM.CHANGE_CARD.getCode());
            //}
            // 开新卡
            seCardOperate.setOperateType(OperateTypeENUM.ACTIVE.getCode());
        }
        seCardOperate.setRemarks(remarks);
        seCardOperate.setOperator(operator);
        seCardOperate.setOperateDt(activeTime);
        seCardOperate.setOperateValid((byte) 1);
        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
        if(rec == 0) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.ACTIVE_FAIL_WRITE_ACTIVE_CARD_ERROR.getMessage());
@@ -203,7 +200,6 @@
        }
        Map map = new HashMap();
//        map.put("projectNo", String.format("%02x", Integer.parseInt(cardOperateSv.getProjectNo())));
        map.put("projectNo", String.format("%02x", projectNo));
        map.put("orderNumber", rec);
        map.put("cardNum", cardNum);
@@ -212,6 +208,7 @@
    /**
     * 补卡
     *
     * @param po
     * @param bindingResult
     * @return
@@ -276,13 +273,14 @@
        /**
         * 如果是补卡调用的开卡且转移了退还金额,需修改挂失卡余额为0
         */
         * 通知补卡成功时再处理
        if(reissueAmount != null) {
            SeClientCard seClientCard = new SeClientCard();
            seClientCard.setId(cardId);
            seClientCard.setMoney(0f);
            cardOperateSv.updateClientCard(seClientCard);
        }
         */
        /**
         * 添加开卡记录,退还金额冲到新卡中
@@ -318,6 +316,7 @@
    /**
     * 充值
     *
     * @param po 充值传输对象
     * @param bindingResult
     * @return
@@ -334,6 +333,7 @@
    /**
     * 销卡
     *
     * @param po
     * @param bindingResult
     * @return
@@ -360,7 +360,7 @@
        Long clientId = 0L;
        Long cardNum = po.getCardNum();
        Float refund = po.getRefund();
        Byte refundType = po.getRefundType();
        Long refundType = po.getRefundType();
        String remarks = po.getRemarks();
        Long operator = po.getOperator();
        Date cancelTime = new Date();
@@ -382,10 +382,10 @@
        clientId = Long.parseLong(map.get("clientId").toString());
        /**
         * 修改农户卡信息:
         * 修改农户卡信息,通知时再处理
         *      注销时间
         *      最后操作类型-4
         */
        SeClientCard seClientCard = new SeClientCard();
        seClientCard.setId(cardId);
        seClientCard.setCanceldt(cancelTime);
@@ -396,6 +396,7 @@
        if(rec_updateClientCard == 0) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.CANCEL_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
        }
         */
        /**
         * 添加注销操作记录
@@ -405,11 +406,12 @@
        seCardOperate.setCardId(cardId);
        seCardOperate.setClientId(clientId);
        seCardOperate.setTradeAmount(-refund);
        seCardOperate.setPaymentId(1L);
        seCardOperate.setPaymentId(refundType);
        seCardOperate.setOperateType(OperateTypeENUM.CANCEL.getCode());
        seCardOperate.setRemarks(remarks);
        seCardOperate.setOperator(operator);
        seCardOperate.setOperateDt(cancelTime);
        seCardOperate.setOperateValid((byte) 1);
        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
        if(rec == 0) {
@@ -424,7 +426,8 @@
    }
    /**
     * 挂失
     * 挂失,不需要二次通知
     *
     * @param po
     * @param bindingResult
     * @return
@@ -479,6 +482,7 @@
         *  状态
         *  最后操作类型-6
         */
        SeClientCard seClientCard = new SeClientCard();
        seClientCard.setId(cardId);
        seClientCard.setMoney(money);
@@ -489,6 +493,7 @@
        if(rec_updateClientCard == 0) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.LOSS_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
        }
        /**
         * 添加挂失记录
@@ -504,6 +509,7 @@
        seCardOperate.setRemarks(remarks);
        seCardOperate.setOperator(operator);
        seCardOperate.setOperateDt(lossTime);
        seCardOperate.setOperateValid((byte) 2);
        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
        if(rec == 0) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.LOSS_FAIL_WRITE_LOSS_ERROR.getMessage());
@@ -517,7 +523,8 @@
    }
    /**
     * 冲正
     * 冲正,2024-09-30 作废,冲正功能由充值功能代替
     *
     * @param po
     * @param bindingResult
     * @return
@@ -567,8 +574,8 @@
        /**
         * 修改农户卡信息:
         *      挂失时间
         *      最后操作类型-4
         *      冲正时间
         *      最后操作类型-7
         */
        SeClientCard seClientCard = new SeClientCard();
        seClientCard.setId(cardId);
@@ -592,6 +599,7 @@
        seCardOperate.setRemarks(remarks);
        seCardOperate.setOperator(operator);
        seCardOperate.setOperateDt(reversalTime);
        seCardOperate.setOperateValid((byte) 2);
        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
        if(rec == 0) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.REVERSAL_FAIL_WRITE_REVERSAL_ERROR.getMessage());
@@ -607,6 +615,7 @@
    /**
     * 补扣
     *
     * @param po
     * @param bindingResult
     * @return
@@ -655,10 +664,10 @@
        clientId = Long.parseLong(map.get("clientId").toString());
        /**
         * 修改农户卡信息:
         *      挂失时间
         *      最后操作类型-4
         */
         * 修改农户卡信息,通知时处理
         *      补扣时间
         *      最后操作类型-5
        SeClientCard seClientCard = new SeClientCard();
        seClientCard.setId(cardId);
        seClientCard.setRefunddt(refundTime);
@@ -668,6 +677,7 @@
        if(rec_updateClientCard == 0) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
        }
         */
        /**
         * 添加补扣操作记录
@@ -681,6 +691,7 @@
        seCardOperate.setRemarks(remarks);
        seCardOperate.setOperator(operator);
        seCardOperate.setOperateDt(refundTime);
        seCardOperate.setOperateValid((byte) 1);
        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
        if(rec == 0) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.REFUND_FAIL_WRITE_REFUND_ERROR.getMessage());
@@ -690,7 +701,8 @@
    }
    /**
     * 解锁
     * 解锁,不需要二次通知
     *
     * @param po
     * @param bindingResult
     * @return
@@ -762,6 +774,7 @@
        seCardOperate.setRemarks(remarks);
        seCardOperate.setOperator(operator);
        seCardOperate.setOperateDt(unlockTime);
        seCardOperate.setOperateValid((byte) 2);
        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
        if(rec == 0) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.UNLOCK_FAIL_WRITE_UNLOCK_ERROR.getMessage());
@@ -772,11 +785,109 @@
        map_response.put("orderNumber", rec);
        map_response.put("cardNum", cardNum);
        return BaseResponseUtils.buildSuccess(map_response) ;
    }
    /**
     * 操作执行回调
     *
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "call_back", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> callBack(@RequestBody @Valid CallBack po, BindingResult bindingResult) {
        if (bindingResult != null && bindingResult.hasErrors()) {
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        String cardAddr = po.getCardAddr();
        Integer operateType = po.getOperateType();
        // 此时无需判断卡片状态
        Long cardId = cardOperateSv.getCardIdByAddr(cardAddr);
        if (cardId == null || cardId.equals(0)) {
            return BaseResponseUtils.buildErrorMsg("您指定的水卡不存在");
        }
        if (operateType == 1) {
            /**
             * 开卡操作执行通知
             *  1.依据水卡地址将最后一条无效状态的指定操作记录改为有效
             *  2.依据水卡ID将最后一条无效状态的水卡记录改为有效
             *  3.如果开卡同步充值
             *      修改充值操作记录为有效
             *      修改充值历史记录为有效
             *      修改水卡表的操作信息
             */
            Integer rec_card = Optional.ofNullable(cardOperateSv.turnCardValidByAddr(cardAddr, operateType)).orElse(0);
            Integer rec_ope = Optional.ofNullable(cardOperateSv.turnOperateValidByCardId(cardId, operateType)).orElse(0);
            if (rec_card == 0 || rec_ope == 0) {
                return BaseResponseUtils.buildErrorMsg("不存在未生效的水卡");
            }
            Boolean isMergeRecharge = cardOperateSv.isMergeRecharge(cardId);
            if (isMergeRecharge) {
                cardOperateSv.turnOperateValidByCardId(cardId, 2);
                cardOperateSv.turnRechargeHistoryValidByCardId(cardId);
                cardOperateSv.updateCard(cardId);
            }
        } else if (operateType == 2) {
            /**
             * 充值操作执行通知
             *  1.操作记录改为有效-cardId
             *  2.充值历史记录改为有效-cardId
             *  3.休水卡表的操作信息及余额-cardId、(mondy、amount、gift从充值历史表中获取)
             */
            Integer rec_ope = Optional.ofNullable(cardOperateSv.turnOperateValidByCardId(cardId, operateType)).orElse(0);
            Integer rec_recharge = cardOperateSv.turnRechargeHistoryValidByCardId(cardId);
            if (rec_recharge == 0 || rec_ope == 0) {
                return BaseResponseUtils.buildErrorMsg("不存在未生效的水卡");
            }
            cardOperateSv.updateCard(cardId);
        } else if (operateType == 3) {
            /**
             * 销卡操作执行通知
             *  1.操作记录改为有效-cardId
             *  2.修改水卡表的记录及余额(0)
             */
            cardOperateSv.turnOperateValidByCardId(cardId, operateType);
            cardOperateSv.updateCancels(operateType, cardId);
        } else if (operateType == 4) {
            /**
             * 补卡操作执行通知
             *  1.新水卡记录改为有效-cardId
             *  2.开卡操作记录改为有效-cardId
             *  3.如果存在退还金额
             *      清空原卡余额
             */
            Integer rec_card = Optional.ofNullable(cardOperateSv.turnCardValidByAddr(cardAddr, operateType)).orElse(0);
            Integer rec_ope = Optional.ofNullable(cardOperateSv.turnOperateValidByCardId(cardId, operateType)).orElse(0);
            if (rec_card == 0 || rec_ope == 0) {
                return BaseResponseUtils.buildErrorMsg("不存在未生效的水卡");
            }
            cardOperateSv.emptyCardBalance(operateType, cardId);
        } else if (operateType == 5) {
            /**
             * 补扣操作执行通知
             *  1.操作记录改为有效
             *  2.修改水卡表的操作信息及余额-从操作记录中取money、refund
             */
            cardOperateSv.turnOperateValidByCardId(cardId, operateType);
            cardOperateSv.updateRefund(operateType, cardId);
        }
        return BaseResponseUtils.buildSuccess();
    }
    /**
     * 创建管理卡
     *
     * @param po
     * @param bindingResult
     * @return
@@ -828,6 +939,7 @@
    /**
     * 获取充值记录
     *
     * @param vo
     * @return
     */
@@ -854,6 +966,7 @@
    /**
     * 获取充值记录,管理平台充值列表使用,APP未使用
     *
     * @param vo
     * @return
     */
@@ -871,6 +984,7 @@
    /**
     * 获取返还记录,管理平台充值列表使用
     *
     * @param vo
     * @return
     */
@@ -888,6 +1002,7 @@
    /**
     * 获取水卡消费记录,管理平台使用
     *
     * @param vo
     * @return
     */
@@ -905,6 +1020,7 @@
    /**
     * 根据指定条件获取交易明细
     *
     * @param vo
     * @return
     */
@@ -921,6 +1037,7 @@
    /**
     * 根据指定条件获取开卡记录
     *
     * @param vo
     * @return
     */
@@ -950,6 +1067,7 @@
    /**
     * 根据指定条件获取补卡记录
     *
     * @param vo
     * @return
     */
@@ -981,6 +1099,7 @@
     * 根据指定条件获取通用操作记录
     * 注销、挂失、冲正、解锁通用
     * 注销-3,挂失-6,冲正-7,解锁-8
     *
     * @param vo
     * @return
     */
@@ -1016,6 +1135,7 @@
    /**
     * 根据指定条件获取收据列表
     *
     * @param vo
     * @return
     */
@@ -1032,10 +1152,6 @@
    @SsoAop()
    public BaseResponse<Map> getReceipts(QoReceipt vo){
        try {
        //    Map res = Optional.ofNullable(cardOperateSv.getReceipts(vo)).orElse(new HashMap());
        //    if(res.size() == 0) {
        //        return BaseResponseUtils.buildErrorMsg(SellResultCode.No_RECEIPTS.getMessage());
        //    }
            return BaseResponseUtils.buildSuccess(cardOperateSv.getReceipts(vo));
        } catch (Exception e) {
            log.error("获取电子钱包账户记录", e);
@@ -1045,6 +1161,7 @@
    /**
     * 金额转大写
     *
     * @param amount
     * @return
     */