liurunyu
2024-09-02 e021502051079ac2b2c2adcea60b9ec01556b7fe
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
@@ -10,12 +10,12 @@
import com.dy.pipIrrGlobal.pojoBa.BaClient;
import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
import com.dy.pipIrrGlobal.pojoSe.SeManagerCard;
import com.dy.pipIrrGlobal.util.AmountToChinese;
import com.dy.pipIrrGlobal.voSe.VoActiveCard;
import com.dy.pipIrrGlobal.voSe.VoOperate;
import com.dy.pipIrrGlobal.voSe.VoRecharge;
import com.dy.pipIrrGlobal.voSe.VoReissueCard;
import com.dy.pipIrrSell.cardOperate.converter.RechargeDtoMapper;
import com.dy.pipIrrSell.cardOperate.dto.*;
import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM;
import com.dy.pipIrrSell.cardOperate.qo.*;
@@ -32,6 +32,7 @@
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
@@ -56,6 +57,11 @@
    private final CardOperateSv cardOperateSv;
    private final ClientCardSv clientCardSv;
    @Value("${project.divisionCode}")
    private String divisionCode;
    @Value("${project.projectNo}")
    private Integer projectNo;
    /**
     * 开卡
     * @param po 开卡传入对象
@@ -65,21 +71,24 @@
    @PostMapping(path = "active", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> add_active(@RequestBody @Valid DtoActiveCard po, BindingResult bindingResult){
    public BaseResponse<Boolean> add_active(@RequestBody @Valid ActiveCard po, BindingResult bindingResult){
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        // 依据水卡地址判断该卡是否可以开卡,未开过卡或不是正常状态、挂失状态的可开卡
        if(!cardOperateSv.canActiveCard(po.getCardAddr())) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.ACTIVE_FAIL_CARD_ESIST.getMessage());
        }
        Long clientId = po.getClientId();
        // 获取5级行政区划串areaCode
        String areaCode = cardOperateSv.getAreaCodeByNum(po.getClientNum());
        if(areaCode.trim().length() == 0) {
        Long areaCodeL = cardOperateSv.getAreaCodeById(clientId);
        if(areaCodeL == null) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.AREA_CODE_MISTAKE.getMessage());
        }
        // p206V1_0_1协议,取行政区划的后6位
        if(po.getProtocol() != null && po.getProtocol().trim().equals("p206V1_0_1")) {
            areaCode = areaCode.substring(6);
        }
        String areaCode = String.valueOf(areaCodeL);
        /**
         * 根据行政区划串(areaCode)在水卡表中针对水卡编号(cardNum)进行模糊查询
@@ -88,34 +97,21 @@
         * cardNum为新的卡号
         */
        String cardNum = Optional.ofNullable(cardOperateSv.getCardNumOfMax(areaCode)).orElse("");
        if(po.getProtocol().trim().equals("p206V1_0_1")) {
            if(cardNum != null && cardNum.trim().length() > 0) {
                Integer number = Integer.parseInt(cardNum.substring(6));
                number = number + 1;
                if(number > 9999) {
                    return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_OVERRUN.getMessage());
                }
                cardNum = cardNum.substring(0, 6) + String.format("%04d", number);
            } else {
                cardNum = areaCode + "0001";
        if(cardNum != null && cardNum.trim().length() > 0) {
            Integer number = Integer.parseInt(cardNum.substring(12));
            number = number + 1;
            if(number > 65535) {
                return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_OVERRUN.getMessage());
            }
        }else {
            if(cardNum != null && cardNum.trim().length() > 0) {
                Integer number = Integer.parseInt(cardNum.substring(12));
                number = number + 1;
                if(number > 65535) {
                    return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_OVERRUN.getMessage());
                }
                cardNum = cardNum.substring(0, 12) + String.format("%05d", number);
            } else {
                cardNum = areaCode + "00001";
            }
            cardNum = cardNum.substring(0, 12) + String.format("%05d", number);
        } else {
            cardNum = areaCode + "00001";
        }
        /**
         * cardAddr         水卡地址(仅仅写入,无业务)
         * clientNum        农户编号
         * cardCost         卡片费用
         * originalCardId   原水卡ID
         * amount           充值金额,充值接口为输入参数,补卡接口为原卡退还金额
         * reissueAmount    补卡金额,补卡时使用
         * paymentId        支付方式编号
@@ -123,8 +119,8 @@
         * operator         操作人编号
         * activeTime       开卡时间
         */
        String protocol = po.getProtocol();
        String cardAddr = po.getCardAddr();
        String clientNum = po.getClientNum();
        Integer cardCost = po.getCardCost();
        Long originalCardId = po.getOriginalCardId();
        Float amount = po.getAmount();
@@ -134,17 +130,10 @@
        Date activeTime = new Date();
        /**
         * 根据农户编号获取农户ID
         */
        Long clientId = cardOperateSv.getClientIdByNum(clientNum);
        if(clientId == null) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.CLIENT_NUM_ERROR.getMessage());
        }
        /**
         * 添加农户卡记录,退还金额作为当前余额
         */
        SeClientCard seClientCard = new SeClientCard();
        seClientCard.setProtocol(protocol);
        seClientCard.setCardaddr(cardAddr);
        seClientCard.setCardnum(cardNum);
        seClientCard.setClientid(clientId);
@@ -166,10 +155,16 @@
        SeCardOperate seCardOperate = new SeCardOperate();
        seCardOperate.setCardId(cardId);
        seCardOperate.setClientId(clientId);
        seCardOperate.setMoney(amount);
        seCardOperate.setMoney(0f);
        seCardOperate.setCardCost(cardCost);
        seCardOperate.setPaymentId(paymentId);
        seCardOperate.setOperateType(OperateTypeENUM.ACTIVE.getCode());
        if(originalCardId != null) {
            // 补卡
            seCardOperate.setOperateType(OperateTypeENUM.REISSUE.getCode());
        }else {
            // 开新卡
            seCardOperate.setOperateType(OperateTypeENUM.ACTIVE.getCode());
        }
        seCardOperate.setRemarks(remarks);
        seCardOperate.setOperator(operator);
        seCardOperate.setOperateDt(activeTime);
@@ -182,10 +177,13 @@
         * 如果操作人员开卡时输入了充值金额,则开卡后调用充值功能
         * 补卡除外,补卡的退还金额是从挂失卡中转移过来的,没有实际金钱交易
         */
        po.setCardNum(Long.parseLong(cardNum));
        if(amount != null && amount > 0 && originalCardId == null) {
            po.setClientId(clientId);
            DtoRecharge dtoRecharge = RechargeDtoMapper.INSTANCT.po2vo(po);
            DtoRecharge dtoRecharge = new DtoRecharge();
            dtoRecharge.setCardNum(Long.parseLong(cardNum));
            dtoRecharge.setAmount(amount);
            dtoRecharge.setPaymentId(paymentId);
            dtoRecharge.setRemarks(remarks);
            dtoRecharge.setOperator(operator);
            dtoRecharge.setMoney(0f);
            dtoRecharge.setGift(0f);
            dtoRecharge.setPrice(0f);
@@ -196,7 +194,8 @@
        }
        Map map = new HashMap();
        map.put("projectNo", String.format("%02x", Integer.parseInt(cardOperateSv.getProjectNo())));
//        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);
        return BaseResponseUtils.buildSuccess(map) ;
@@ -213,7 +212,7 @@
    @SsoAop()
    public BaseResponse<Boolean> add_reissue(@RequestBody @Valid DtoReissue po, BindingResult bindingResult){
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        /**
@@ -229,8 +228,10 @@
         * operator         操作人编号
         */
        String protocol;
        String cardAddr = po.getCardAddr();
        String clientNum = "";
        Long clientId = 0L;
        Long cardNum = po.getCardNum();
        Long cardId = 0L;
        Integer cardCost = Optional.ofNullable(po.getCardCost()).orElse(0);
@@ -238,7 +239,6 @@
        Long paymentId = po.getPaymentId();
        String remarks = po.getRemarks();
        Long operator = po.getOperator();
        String protocol = null;
        // 判断当前水卡是否为挂失状态且未补卡,仅已经挂失且未补卡的可以补卡
        if(!cardOperateSv.isLostAndUnreplaced(cardNum)) {
@@ -248,7 +248,7 @@
        // 如果传入了退还金额,需要判断老卡(被挂失的水卡)挂失时是否已经退款,无论退款多少都提示用户挂失时已退款
        if(reissueAmount != null && reissueAmount > 0) {
            Double tradeAmount = cardOperateSv.getTradeAmountByCardNo(cardNum);
            if(tradeAmount != null) {
            if(tradeAmount != null && tradeAmount > 0) {
                return BaseResponseUtils.buildErrorMsg(SellResultCode.THE_FEE_CANNOT_BE_REFUNDED.getMessage());
            }
        }
@@ -262,6 +262,8 @@
        }
        clientNum = map.get("clientNum").toString();
        cardId = Long.parseLong(map.get("cardId").toString());
        clientId = Long.parseLong(map.get("clientId").toString());
        protocol = map.get("protocol").toString();
        /**
         * 如果是补卡调用的开卡且转移了退还金额,需修改挂失卡余额为0
@@ -276,20 +278,17 @@
        /**
         * 添加开卡记录,退还金额冲到新卡中
         */
        if(String.valueOf(cardNum).trim().length() == 10) {
            protocol = "p206V1_0_1";
        }
        DtoActiveCard dtoActiveCard = new DtoActiveCard();
        dtoActiveCard.setProtocol(protocol);
        dtoActiveCard.setCardAddr(cardAddr);
        dtoActiveCard.setClientNum(clientNum);
        dtoActiveCard.setOriginalCardId(cardId);
        dtoActiveCard.setCardCost(cardCost);
        dtoActiveCard.setAmount(reissueAmount);
        dtoActiveCard.setPaymentId(paymentId);
        dtoActiveCard.setRemarks(remarks);
        dtoActiveCard.setOperator(operator);
        BaseResponse<java.lang.Boolean> baseResponse_addActive = add_active(dtoActiveCard, null);
        ActiveCard activeCard = new ActiveCard();
        activeCard.setProtocol(protocol);
        activeCard.setCardAddr(cardAddr);
        activeCard.setClientId(clientId);
        activeCard.setOriginalCardId(cardId);
        activeCard.setCardCost(cardCost);
        activeCard.setAmount(reissueAmount);
        activeCard.setPaymentId(paymentId);
        activeCard.setRemarks(remarks);
        activeCard.setOperator(operator);
        BaseResponse<java.lang.Boolean> baseResponse_addActive = add_active(activeCard, null);
        if(!baseResponse_addActive.getCode().equals("0001")) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage());
@@ -304,6 +303,7 @@
        map_response.put("projectNo", projectNo);
        map_response.put("orderNumber", orderNumber);
        map_response.put("cardNum", cardNum);
        map_response.put("protocol", protocol);
        return BaseResponseUtils.buildSuccess(map_response) ;
    }
@@ -318,7 +318,7 @@
    @SsoAop()
    public BaseResponse<Boolean> add_recharge(@RequestBody @Valid DtoRecharge po, BindingResult bindingResult){
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        return cardOperateSv.addRecharge(po);
    }
@@ -334,7 +334,7 @@
    @SsoAop()
    public BaseResponse<Boolean> add_cancel(@RequestBody @Valid DtoCancel po, BindingResult bindingResult){
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        /**
@@ -408,7 +408,7 @@
        }
        Map map_response = new HashMap();
        map_response.put("projectNo", String.format("%02x", Integer.parseInt(cardOperateSv.getProjectNo())));
        map_response.put("projectNo", String.format("%02x", projectNo));
        map_response.put("orderNumber", rec);
        map_response.put("cardNum", cardNum);
        return BaseResponseUtils.buildSuccess(map_response) ;
@@ -425,7 +425,7 @@
    @SsoAop()
    public BaseResponse<Boolean> add_loss(@RequestBody @Valid DtoLoss po, BindingResult bindingResult){
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        /**
@@ -501,7 +501,7 @@
        }
        Map map_response = new HashMap();
        map_response.put("projectNo", String.format("%02x", Integer.parseInt(cardOperateSv.getProjectNo())));
        map_response.put("projectNo", String.format("%02x", projectNo));
        map_response.put("orderNumber", rec);
        map_response.put("cardNum", cardNum);
        return BaseResponseUtils.buildSuccess(map_response) ;
@@ -518,7 +518,7 @@
    @SsoAop()
    public BaseResponse<Boolean> add_reversal(@RequestBody @Valid DtoReversal po, BindingResult bindingResult){
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        /**
@@ -589,7 +589,7 @@
        }
        Map map_response = new HashMap();
        map_response.put("projectNo", String.format("%02x", Integer.parseInt(cardOperateSv.getProjectNo())));
        map_response.put("projectNo", String.format("%02x", projectNo));
        map_response.put("orderNumber", rec);
        map_response.put("cardNum", cardNum);
        return BaseResponseUtils.buildSuccess(map_response) ;
@@ -607,7 +607,7 @@
    @SsoAop()
    public BaseResponse<Boolean> add_refund(@RequestBody @Valid DtoRefund po, BindingResult bindingResult){
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        /**
@@ -691,7 +691,7 @@
    @SsoAop()
    public BaseResponse<Boolean> add_unlock(@RequestBody @Valid DtoUnlock po, BindingResult bindingResult){
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        /**
@@ -759,12 +759,63 @@
        }
        Map map_response = new HashMap();
        map_response.put("projectNo", String.format("%02x", Integer.parseInt(cardOperateSv.getProjectNo())));
        map_response.put("projectNo", String.format("%02x", projectNo));
        map_response.put("orderNumber", rec);
        map_response.put("cardNum", cardNum);
        return BaseResponseUtils.buildSuccess(map_response) ;
    }
    /**
     * 创建管理卡
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "create_manager_card", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> createManagerCard(@RequestBody @Valid ManagerCard po, BindingResult bindingResult){
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        /**
         * 根据行政区划串(divisionCode)在管理卡表中针对卡片编号(cardNum)进行模糊查询
         * 如果顺序号已经达到最大值,提示用户联系系统管理员
         * 如果顺序号未达到最大值,则加1
         * cardNum为新的卡号
         */
        String cardNum = Optional.ofNullable(cardOperateSv.getManagerCardNumOfMax(divisionCode)).orElse("");
        if(cardNum != null && cardNum.trim().length() > 0) {
            Integer number = Integer.parseInt(cardNum.substring(12));
            number = number + 1;
            if(number > 65535) {
                return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_OVERRUN.getMessage());
            }
            cardNum = cardNum.substring(0, 12) + String.format("%05d", number);
        } else {
            cardNum = divisionCode + "00001";
        }
        SeManagerCard seManagerCard = new SeManagerCard();
        seManagerCard.setCardAddr(po.getCardAddr());
        seManagerCard.setCardNum(cardNum);
        seManagerCard.setCardType(po.getCardType());
        seManagerCard.setCreateTime(new Date());
        seManagerCard.setRemarks(po.getRemarks());
        Long managerCardId = cardOperateSv.addManagerCard(seManagerCard);
        if(managerCardId == 0) {
            return BaseResponseUtils.buildErrorMsg(SellResultCode.CREATE_MANAGER_CARD_ERROR.getMessage());
        }
        return BaseResponseUtils.buildSuccess(cardNum);
        //Map map = new HashMap();
        //map.put("cardNum", cardNum);
        //return BaseResponseUtils.buildSuccess(map) ;
    }
    /**
     * 获取充值记录
@@ -837,9 +888,9 @@
    public BaseResponse<QueryResultVo<List<VoActiveCard>>> getActiveCards(QoActiveCard vo){
        try {
            QueryResultVo<List<VoActiveCard>> res = cardOperateSv.getActiveCards(vo);
            if(res.itemTotal == 0) {
                return BaseResponseUtils.buildFail(SellResultCode.No_ActiveCards.getMessage());
            }
//            if(res.itemTotal == 0) {
//                return BaseResponseUtils.buildErrorMsg(SellResultCode.No_ActiveCards.getMessage());
//            }
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取开卡记录异常", e);
@@ -866,9 +917,9 @@
    public BaseResponse<QueryResultVo<List<VoReissueCard>>> getReissueCards(QoReissueCard vo){
        try {
            QueryResultVo<List<VoReissueCard>> res = cardOperateSv.getReissueCards(vo);
            if(res.itemTotal == 0) {
                return BaseResponseUtils.buildFail(SellResultCode.No_ReissueCards.getMessage());
            }
//            if(res.itemTotal == 0) {
//                return BaseResponseUtils.buildErrorMsg(SellResultCode.No_ReissueCards.getMessage());
//            }
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取补卡记录异常", e);
@@ -898,14 +949,14 @@
        // 验证操作类型是否正确
        Integer operateType = Optional.ofNullable(vo.getOperateType()).orElse(0);
        if(operateType != 3 && operateType != 6 && operateType != 7 && operateType != 8) {
            return BaseResponseUtils.buildFail(SellResultCode.PARAMS_ERROR.getMessage());
            return BaseResponseUtils.buildErrorMsg(SellResultCode.PARAMS_ERROR.getMessage());
        }
        try {
            QueryResultVo<List<VoOperate>> res = cardOperateSv.getCommonOperations(vo);
            if(res.itemTotal == 0) {
                return BaseResponseUtils.buildFail(SellResultCode.No_CANCELS.getMessage());
            }
//            if(res.itemTotal == 0) {
//                return BaseResponseUtils.buildErrorMsg(SellResultCode.No_CANCELS.getMessage());
//            }
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取开卡记录异常", e);
@@ -931,11 +982,11 @@
    @SsoAop()
    public BaseResponse<Map> getReceipts(QoReceipt vo){
        try {
            Map res = Optional.ofNullable(cardOperateSv.getReceipts(vo)).orElse(new HashMap());
            if(res.size() == 0) {
                return BaseResponseUtils.buildFail(SellResultCode.No_RECEIPTS.getMessage());
            }
            return BaseResponseUtils.buildSuccess(res);
        //    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);
            return BaseResponseUtils.buildException(e.getMessage()) ;