From e5ac29afd5569196a54bd4f77457848afc7adf55 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期四, 24 十月 2024 11:47:25 +0800
Subject: [PATCH] 2024-10-24 朱宝民 添加反写接口,完善各相关查询接口,兼容反写信息

---
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java |  907 ++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 586 insertions(+), 321 deletions(-)

diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
index 5a55ad5..d849c3f 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
@@ -1,20 +1,18 @@
 package com.dy.pipIrrSell.cardOperate;
 
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.aop.SsoAop;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.common.webUtil.ResultCodeMsg;
-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.util.Constant;
-import com.dy.pipIrrGlobal.voSe.VoActiveCard;
-import com.dy.pipIrrGlobal.voSe.VoActiveCardNew;
-import com.dy.pipIrrGlobal.voSe.VoRecharge;
-import com.dy.pipIrrGlobal.voSe.VoReissueCard;
-import com.dy.pipIrrSell.cardOperate.converter.RechargeDtoMapper;
+import com.dy.pipIrrGlobal.voRm.VoExpend;
+import com.dy.pipIrrGlobal.voSe.*;
 import com.dy.pipIrrSell.cardOperate.dto.*;
 import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM;
 import com.dy.pipIrrSell.cardOperate.qo.*;
@@ -31,13 +29,13 @@
 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;
 import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
-import java.time.format.DateTimeFormatter;
 import java.util.*;
 
 /**
@@ -50,70 +48,79 @@
 @Slf4j
 @Tag(name = "姘村崱鎿嶄綔绠$悊", description = "姘村崱鍚勭鎿嶄綔")
 @RestController
-@RequestMapping(path="card")
+@RequestMapping(path = "card")
 @RequiredArgsConstructor
 public class CardOperateCtrl {
     private final CardOperateSv cardOperateSv;
     private final ClientCardSv clientCardSv;
 
+    @Value("${project.divisionCode}")
+    private String divisionCode;
+
+    @Value("${project.projectNo}")
+    private Integer projectNo;
+
     /**
      * 寮�鍗�
-     * @param po 寮�鍗′紶鍏ュ璞�
+     *
+     * @param po            寮�鍗′紶鍏ュ璞�
      * @param bindingResult
      * @return 姘村崱缂栧彿
      */
-    @Operation(summary = "寮�鍗�", description = "鏂板紑鍐滄埛鍗�")
-    @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = Boolean.class))}
-            )
-    })
     @PostMapping(path = "active", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add_active(@RequestBody @Valid DtoActiveCard po, BindingResult bindingResult){
-        if(bindingResult != null && bindingResult.hasErrors()){
-            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+    public BaseResponse<Boolean> add_active(@RequestBody @Valid ActiveCard po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            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 = String.valueOf(cardOperateSv.getAreaCodeByNum(po.getClientNum()));
+        Long areaCodeL = cardOperateSv.getAreaCodeById(clientId);
+        if (areaCodeL == null) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.AREA_CODE_MISTAKE.getMessage());
+        }
+        String areaCode = String.valueOf(areaCodeL);
 
         /**
          * 鏍规嵁琛屾斂鍖哄垝涓诧紙areaCode锛夊湪姘村崱琛ㄤ腑閽堝姘村崱缂栧彿锛坈ardNum锛夎繘琛屾ā绯婃煡璇�
-         * 濡傛灉4浣嶉『搴忓彿宸茬粡杈惧埌鏈�澶у�硷紝鎻愮ず鐢ㄦ埛鑱旂郴绯荤粺绠$悊鍛�
-         * 濡傛灉4浣嶉『搴忓彿鏈揪鍒版渶澶у�硷紝鍒欏姞1
+         * 濡傛灉椤哄簭鍙峰凡缁忚揪鍒版渶澶у�硷紝鎻愮ず鐢ㄦ埛鑱旂郴绯荤粺绠$悊鍛�
+         * 濡傛灉椤哄簭鍙锋湭杈惧埌鏈�澶у�硷紝鍒欏姞1
          * cardNum涓烘柊鐨勫崱鍙�
          */
         String cardNum = Optional.ofNullable(cardOperateSv.getCardNumOfMax(areaCode)).orElse("");
-        if(cardNum != null && cardNum.trim().length() > 0) {
+        if (cardNum != null && cardNum.trim().length() > 0) {
             Integer number = Integer.parseInt(cardNum.substring(12));
             number = number + 1;
-            if(number > 9999) {
-                return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_OVERRUN.getMessage());
+            if (number > 65535) {
+                return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_OVERRUN.getMessage());
             }
-            cardNum = cardNum.substring(0, 12) + String.format("%04d", number);
+            cardNum = cardNum.substring(0, 12) + String.format("%05d", number);
         } else {
-            cardNum = areaCode + "0001";
+            cardNum = areaCode + "00001";
         }
 
         /**
          * cardAddr         姘村崱鍦板潃锛堜粎浠呭啓鍏ワ紝鏃犱笟鍔★級
-         * clientNum        鍐滄埛缂栧彿
          * cardCost         鍗$墖璐圭敤
-         * amount           鍏呭�奸噾棰�
+         * originalCardId   鍘熸按鍗D
+         * amount           鍏呭�奸噾棰濓紝鍏呭�兼帴鍙d负杈撳叆鍙傛暟锛岃ˉ鍗℃帴鍙d负鍘熷崱閫�杩橀噾棰�
          * reissueAmount    琛ュ崱閲戦锛岃ˉ鍗℃椂浣跨敤
          * paymentId        鏀粯鏂瑰紡缂栧彿
          * remarks          澶囨敞
          * 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();
         Long paymentId = po.getPaymentId();
         String remarks = po.getRemarks();
@@ -121,212 +128,222 @@
         Date activeTime = new Date();
 
         /**
-         * 鏍规嵁鍐滄埛缂栧彿鑾峰彇鍐滄埛ID
-         */
-        Long clientId = cardOperateSv.getClientIdByNum(clientNum);
-
-        /**
-         * 娣诲姞鍐滄埛鍗¤褰�
+         * 娣诲姞鍐滄埛鍗¤褰曪紝閫�杩橀噾棰濅綔涓哄綋鍓嶄綑棰�
          */
         SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setProtocol(protocol);
         seClientCard.setCardaddr(cardAddr);
         seClientCard.setCardnum(cardNum);
         seClientCard.setClientid(clientId);
-        seClientCard.setMoney(0f);
-        seClientCard.setState(CardStateENUM.NORMAL.getCode());
-        seClientCard.setCreatedt(activeTime);
-        seClientCard.setLastoper(LastOperateENUM.ACTIVE.getCode());
-
-        Long cardId = Optional.ofNullable(clientCardSv.add(seClientCard)).orElse(0L) ;
-        if(cardId == 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.ACTIVE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        seClientCard.setMoney(amount);
+        // 寮�鍗℃椂鍗$墖鐘舵�佷负鏃犳晥
+        seClientCard.setState(CardStateENUM.INVALID.getCode());
+        if (originalCardId != null) {
+            // 琛ュ崱
+            seClientCard.setOriginalCardId(originalCardId);
+            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());
         }
 
         /**
-         * 娣诲姞寮�鍗¤褰�
+         * 娣诲姞寮�鍗℃搷浣滆褰曪紝閫�杩橀噾棰濅綔涓哄厖鍊奸噾棰�
          */
         SeCardOperate seCardOperate = new SeCardOperate();
         seCardOperate.setCardId(cardId);
         seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(0f);
         seCardOperate.setCardCost(cardCost);
         seCardOperate.setPaymentId(paymentId);
-        seCardOperate.setOperateType(OperateTypeENUM.ACTIVE.getCode());
+        if (originalCardId != null) {
+            // 琛ュ崱
+            seCardOperate.setOperateType(OperateTypeENUM.REISSUE.getCode());
+            seCardOperate.setNoTradeAmount(amount);
+        } else {
+            // 寮�鏂板崱
+            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.buildFail(SellResultCode.ACTIVE_FAIL_WRITE_ACTIVE_CARD_ERROR.getMessage());
+        if (rec == 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.ACTIVE_FAIL_WRITE_ACTIVE_CARD_ERROR.getMessage());
         }
 
         /**
          * 濡傛灉鎿嶄綔浜哄憳寮�鍗℃椂杈撳叆浜嗗厖鍊奸噾棰濓紝鍒欏紑鍗″悗璋冪敤鍏呭�煎姛鑳�
+         * 琛ュ崱闄ゅ锛岃ˉ鍗$殑閫�杩橀噾棰濇槸浠庢寕澶卞崱涓浆绉昏繃鏉ョ殑锛屾病鏈夊疄闄呴噾閽变氦鏄�
          */
-        po.setCardNum(cardNum);
-        if(amount != null && amount > 0) {
-            po.setClientId(clientId);
-            DtoRecharge dtoRecharge = RechargeDtoMapper.INSTANCT.po2vo(po);
+        if (amount != null && amount > 0 && originalCardId == null) {
+            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);
             BaseResponse<Boolean> job = cardOperateSv.addRecharge(dtoRecharge);
-            if(!job.getCode().equals("0001")) {
-                return BaseResponseUtils.buildFail(SellResultCode.ACTIVE_FAIL_RECHARGE_EXCEPTION.getMessage());
+            if (!job.getCode().equals("0001")) {
+                return BaseResponseUtils.buildErrorMsg(SellResultCode.ACTIVE_FAIL_RECHARGE_EXCEPTION.getMessage());
             }
         }
 
         Map map = new HashMap();
-        map.put("projectCode", Constant.projectCode_ym);
+        map.put("projectNo", String.format("%02x", projectNo));
+        map.put("orderNumber", rec);
         map.put("cardNum", cardNum);
-        return BaseResponseUtils.buildSuccess(map) ;
+        return BaseResponseUtils.buildSuccess(map);
     }
 
     /**
      * 琛ュ崱
+     *
      * @param po
      * @param bindingResult
      * @return
      */
-    @Operation(summary = "琛ュ崱", description = "琛ュ崱")
-    @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = Boolean.class))}
-            )
-    })
     @PostMapping(path = "reissue", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @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());
+    public BaseResponse<Boolean> add_reissue(@RequestBody @Valid DtoReissue po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         /**
          * cardAddr         鏂扮殑姘村崱鍦板潃锛堜粎浠呭啓鍏ワ紝鏃犱笟鍔★級
          * clientNum        鍐滄埛缂栧彿锛屽紑鏂板崱浣跨敤锛岄�氳繃鑰佸崱鍙疯幏鍙�
          * cardNum          姘村崱缂栧彿锛屼紶鍏ョ殑鏄�佸崱鍙凤紝杩斿洖鐨勬槸鏂板崱鍙�
+         * cardId           鍘熸按鍗★紙鎸傚け姘村崱锛塈D锛岃浆绉讳綑棰濆悗闇�瑕佹洿鏂板崱浣欓涓�0
          * moeny            浣欓锛屾寕澶辨椂浣跨敤
          * cardCost         鍗$墖璐圭敤
+         * reissueAmount    閫�杩橀噾棰�
          * paymentId        鏀粯鏂瑰紡缂栧彿
          * remarks          澶囨敞
          * operator         鎿嶄綔浜虹紪鍙�
          */
 
+        String protocol;
         String cardAddr = po.getCardAddr();
         String clientNum = "";
-        String cardNum = po.getCardNum();
-        Float money = po.getMoney();
-        Integer cardCost = po.getCardCost();
+        Long clientId = 0L;
+        Long cardNum = po.getCardNum();
+        Long cardId = 0L;
+        Integer cardCost = Optional.ofNullable(po.getCardCost()).orElse(0);
+        Float reissueAmount = po.getReissueAmount();
         Long paymentId = po.getPaymentId();
         String remarks = po.getRemarks();
         Long operator = po.getOperator();
 
-        // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
-        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
-        if(stateName.length() == 0 || !stateName.equals("姝e父")) {
-            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        // 鍒ゆ柇褰撳墠姘村崱鏄惁涓烘寕澶辩姸鎬佷笖鏈ˉ鍗★紝浠呭凡缁忔寕澶变笖鏈ˉ鍗$殑鍙互琛ュ崱
+        if (!cardOperateSv.isLostAndUnreplaced(cardNum)) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        }
+
+        // 濡傛灉浼犲叆浜嗛��杩橀噾棰濓紝闇�瑕佸垽鏂�佸崱锛堣鎸傚け鐨勬按鍗★級鎸傚け鏃舵槸鍚﹀凡缁忛��娆撅紝鏃犺閫�娆惧灏戦兘鎻愮ず鐢ㄦ埛鎸傚け鏃跺凡閫�娆�
+        if (reissueAmount != null && reissueAmount > 0) {
+            Double tradeAmount = cardOperateSv.getTradeAmountByCardNo(cardNum);
+            if (tradeAmount != null && tradeAmount > 0) {
+                return BaseResponseUtils.buildErrorMsg(SellResultCode.THE_FEE_CANNOT_BE_REFUNDED.getMessage());
+            }
         }
 
         /**
          * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
          */
         Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
-        if(map == null || map.size() <= 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        if (map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
         }
         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
+         * 閫氱煡琛ュ崱鎴愬姛鏃跺啀澶勭悊
+         if(reissueAmount != null) {
+         SeClientCard seClientCard = new SeClientCard();
+         seClientCard.setId(cardId);
+         seClientCard.setMoney(0f);
+         cardOperateSv.updateClientCard(seClientCard);
+         }
          */
-        DtoLoss dtoLoss = new DtoLoss();
-        dtoLoss.setCardNum(cardNum);
-        dtoLoss.setMoney(money);
-        dtoLoss.setRefund(0f);
-        dtoLoss.setRemarks(remarks);
-        dtoLoss.setOperator(operator);
-        BaseResponse<java.lang.Boolean> baseResponse_addLoss = this.add_loss(dtoLoss, null);
-
-        if(!baseResponse_addLoss.getCode().equals("0001")) {
-            return BaseResponseUtils.buildFail(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage());
-        }
 
         /**
-         * 娣诲姞寮�鍗¤褰�
+         * 娣诲姞寮�鍗¤褰曪紝閫�杩橀噾棰濆啿鍒版柊鍗′腑
          */
-        DtoActiveCard dtoActiveCard = new DtoActiveCard();
-        dtoActiveCard.setCardAddr(cardAddr);
-        dtoActiveCard.setClientNum(clientNum);
-        dtoActiveCard.setCardCost(cardCost);
-        dtoActiveCard.setAmount(0f);
-        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.buildFail(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage());
+        if (!baseResponse_addActive.getCode().equals("0001")) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage());
         }
 
-        String theContent = String.valueOf(baseResponse_addActive.getContent());
-        cardNum = theContent.substring(theContent.indexOf("=") + 1, theContent.indexOf(","));
+        JSONObject job_content = (JSONObject) JSON.toJSON(baseResponse_addActive.getContent());
+        cardNum = job_content.getLong("cardNum");
+        String orderNumber = job_content.getString("orderNumber");
+        String projectNo = job_content.getString("projectNo");
 
         Map map_response = new HashMap();
-        map_response.put("projectCode", Constant.projectCode_ym);
+        map_response.put("projectNo", projectNo);
+        map_response.put("orderNumber", orderNumber);
         map_response.put("cardNum", cardNum);
-        return BaseResponseUtils.buildSuccess(map_response) ;
+        map_response.put("protocol", protocol);
+        return BaseResponseUtils.buildSuccess(map_response);
     }
 
     /**
      * 鍏呭��
-     * @param po 鍏呭�间紶杈撳璞�
+     *
+     * @param po            鍏呭�间紶杈撳璞�
      * @param bindingResult
      * @return
      */
-    @Operation(summary = "鍏呭��", description = "鍏呭��")
-    @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = Boolean.class))}
-            )
-    })
     @PostMapping(path = "recharge", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @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());
+    public BaseResponse<Boolean> add_recharge(@RequestBody @Valid DtoRecharge po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
         return cardOperateSv.addRecharge(po);
     }
 
     /**
      * 閿�鍗�
+     *
      * @param po
      * @param bindingResult
      * @return
      */
-    @Operation(summary = "娣诲姞娉ㄩ攢璁板綍", description = "娣诲姞娉ㄩ攢璁板綍")
-    @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = Boolean.class))}
-            )
-    })
     @PostMapping(path = "cancel", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add_cancel(@RequestBody @Valid DtoCancel po, BindingResult bindingResult){
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        if(bindingResult != null && bindingResult.hasErrors()){
-            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+    public BaseResponse<Boolean> add_cancel(@RequestBody @Valid DtoCancel po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         /**
@@ -341,94 +358,92 @@
          */
         Long cardId = 0L;
         Long clientId = 0L;
-        String cardNum = po.getCardNum();
+        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();
 
         // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
-        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
-        if(stateName.length() == 0 || !stateName.equals("姝e父")) {
-            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse("");
+        if (stateName.length() == 0 || !stateName.equals("姝e父")) {
+            return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
         }
 
         /**
          * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
          */
         Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
-        if(map == null || map.size() <= 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        if (map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
         }
         cardId = Long.parseLong(map.get("cardId").toString());
         clientId = Long.parseLong(map.get("clientId").toString());
 
         /**
-         * 淇敼鍐滄埛鍗′俊鎭細
+         * 淇敼鍐滄埛鍗′俊鎭紝閫氱煡鏃跺啀澶勭悊
          *      娉ㄩ攢鏃堕棿
          *      鏈�鍚庢搷浣滅被鍨�-4
+
+         SeClientCard seClientCard = new SeClientCard();
+         seClientCard.setId(cardId);
+         seClientCard.setCanceldt(cancelTime);
+         seClientCard.setMoney(0f);
+         seClientCard.setState(CardStateENUM.CANCELLED.getCode());
+         seClientCard.setLastoper(LastOperateENUM.CANCEL.getCode());
+         Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
+         if(rec_updateClientCard == 0) {
+         return BaseResponseUtils.buildErrorMsg(SellResultCode.CANCEL_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+         }
          */
-        SeClientCard seClientCard = new SeClientCard();
-        seClientCard.setId(cardId);
-        seClientCard.setCanceldt(cancelTime);
-        seClientCard.setMoney(0f);
-        seClientCard.setState(CardStateENUM.CANCELLED.getCode());
-        seClientCard.setLastoper(LastOperateENUM.CANCEL.getCode());
-        Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
-        if(rec_updateClientCard == 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.CANCEL_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
-        }
 
         /**
-         * 娣诲姞娉ㄩ攢璁板綍
+         * 娣诲姞娉ㄩ攢鎿嶄綔璁板綍
          * 鏀粯鏂瑰紡涓虹幇閲�
          */
         SeCardOperate seCardOperate = new SeCardOperate();
         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) {
-            return BaseResponseUtils.buildFail(SellResultCode.CANCEL_FAIL_WRITE_CANCELL_ERROR.getMessage());
+        if (rec == 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.CANCEL_FAIL_WRITE_CANCELL_ERROR.getMessage());
         }
 
-        return BaseResponseUtils.buildSuccess(true) ;
+        Map map_response = new HashMap();
+        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
      */
-    @Operation(summary = "娣诲姞鎸傚け璁板綍", description = "娣诲姞鎸傚け璁板綍")
-    @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = Boolean.class))}
-            )
-    })
     @PostMapping(path = "loss", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @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());
+    public BaseResponse<Boolean> add_loss(@RequestBody @Valid DtoLoss po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         /**
          * cardId           姘村崱缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
          * clientId         鍐滄埛缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
-         * cardNum          姘村崱缂栧彿
+         * cardNum          瑕佹寕澶辩殑姘村崱缂栧彿
          * money            浣欓
          * refund           閫�娆鹃噾棰�
          * remarks          澶囨敞
@@ -437,34 +452,37 @@
          */
         Long cardId = 0L;
         Long clientId = 0L;
-        String cardNum = po.getCardNum();
-        Float money = po.getMoney();
-        Float refund = po.getRefund();
+        Long cardNum = po.getCardNum();
+        Float money = Optional.ofNullable(po.getMoney()).orElse(0f);
+        Float refund = Optional.ofNullable(po.getRefund()).orElse(0f);
         String remarks = po.getRemarks();
         Long operator = po.getOperator();
         Date lossTime = new Date();
 
         // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
-        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
-        if(stateName.length() == 0 || !stateName.equals("姝e父")) {
-            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse("");
+        if (stateName.length() == 0 || !stateName.equals("姝e父")) {
+            return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
         }
 
         /**
          * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
          */
         Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
-        if(map == null || map.size() <= 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        if (map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
         }
         cardId = Long.parseLong(map.get("cardId").toString());
         clientId = Long.parseLong(map.get("clientId").toString());
 
         /**
          * 淇敼鍐滄埛鍗′俊鎭細
-         *      鎸傚け鏃堕棿
-         *      鏈�鍚庢搷浣滅被鍨�-4
+         *  浣欓
+         *  鎸傚け鏃堕棿
+         *  鐘舵��
+         *  鏈�鍚庢搷浣滅被鍨�-6
          */
+
         SeClientCard seClientCard = new SeClientCard();
         seClientCard.setId(cardId);
         seClientCard.setMoney(money);
@@ -472,51 +490,51 @@
         seClientCard.setState(CardStateENUM.LOSS.getCode());
         seClientCard.setLastoper(LastOperateENUM.LOSS.getCode());
         Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
-        if(rec_updateClientCard == 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.LOSS_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        if (rec_updateClientCard == 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.LOSS_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
         }
+
 
         /**
          * 娣诲姞鎸傚け璁板綍
+         * 濡傛灉閫�娆鹃噾棰濅笉涓虹┖锛屽垯浼犲叆璐熷��
          */
         SeCardOperate seCardOperate = new SeCardOperate();
         seCardOperate.setCardId(cardId);
         seCardOperate.setClientId(clientId);
         seCardOperate.setMoney(money);
         seCardOperate.setTradeAmount(-refund);
+        seCardOperate.setPaymentId(1L);
         seCardOperate.setOperateType(OperateTypeENUM.LOSS.getCode());
         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.buildFail(SellResultCode.LOSS_FAIL_WRITE_LOSS_ERROR.getMessage());
+        if (rec == 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.LOSS_FAIL_WRITE_LOSS_ERROR.getMessage());
         }
 
-        return BaseResponseUtils.buildSuccess(true) ;
+        Map map_response = new HashMap();
+        map_response.put("projectNo", String.format("%02x", projectNo));
+        map_response.put("orderNumber", rec);
+        map_response.put("cardNum", cardNum);
+        return BaseResponseUtils.buildSuccess(map_response);
     }
 
     /**
-     * 鍐叉
+     * 鍐叉锛�2024-09-30 浣滃簾锛屽啿姝e姛鑳界敱鍏呭�煎姛鑳戒唬鏇�
+     *
      * @param po
      * @param bindingResult
      * @return
      */
-    @Operation(summary = "娣诲姞鍐叉璁板綍", description = "娣诲姞鍐叉璁板綍")
-    @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = Boolean.class))}
-            )
-    })
     @PostMapping(path = "reversal", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @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());
+    public BaseResponse<Boolean> add_reversal(@RequestBody @Valid DtoReversal po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         /**
@@ -531,7 +549,7 @@
          */
         Long cardId = 0L;
         Long clientId = 0L;
-        String cardNum = po.getCardNum();
+        Long cardNum = po.getCardNum();
         Float cardBalance = po.getCardBalance();
         Float systemBalance = po.getSystemBalance();
         String remarks = po.getRemarks();
@@ -539,25 +557,25 @@
         Date reversalTime = new Date();
 
         // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
-        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
-        if(stateName.length() == 0 || !stateName.equals("姝e父")) {
-            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse("");
+        if (stateName.length() == 0 || !stateName.equals("姝e父")) {
+            return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
         }
 
         /**
          * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
          */
         Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
-        if(map == null || map.size() <= 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        if (map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
         }
         cardId = Long.parseLong(map.get("cardId").toString());
         clientId = Long.parseLong(map.get("clientId").toString());
 
         /**
          * 淇敼鍐滄埛鍗′俊鎭細
-         *      鎸傚け鏃堕棿
-         *      鏈�鍚庢搷浣滅被鍨�-4
+         *      鍐叉鏃堕棿
+         *      鏈�鍚庢搷浣滅被鍨�-7
          */
         SeClientCard seClientCard = new SeClientCard();
         seClientCard.setId(cardId);
@@ -565,8 +583,8 @@
         seClientCard.setMoney(cardBalance);
         seClientCard.setLastoper(LastOperateENUM.REVERSAL.getCode());
         Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
-        if(rec_updateClientCard == 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        if (rec_updateClientCard == 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
         }
 
         /**
@@ -581,35 +599,32 @@
         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.buildFail(SellResultCode.REVERSAL_FAIL_WRITE_REVERSAL_ERROR.getMessage());
+        if (rec == 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.REVERSAL_FAIL_WRITE_REVERSAL_ERROR.getMessage());
         }
 
-        return BaseResponseUtils.buildSuccess(true) ;
+        Map map_response = new HashMap();
+        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
      */
-    @Operation(summary = "琛ユ墸", description = "琛ユ墸")
-    @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = Boolean.class))}
-            )
-    })
     @PostMapping(path = "refund", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @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());
+    public BaseResponse<Boolean> add_refund(@RequestBody @Valid DtoRefund po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         /**
@@ -617,100 +632,106 @@
          * clientId         鍐滄埛缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
          * cardNum          姘村崱缂栧彿
          * money            鍗$墖浣欓
-         * refund           琛ユ墸浣欓
+         * refund           琛ユ墸浣欓/鍙嶅啓閲戦
          * remarks          澶囨敞
          * operator         鎿嶄綔浜虹紪鍙�
          * refundTime       琛ユ墸鏃堕棿
+         * operateType      鎿嶄綔绫诲瀷锛�1-琛ユ墸锛�2-鍙嶅啓
          */
         Long cardId = 0L;
         Long clientId = 0L;
-        String cardNum = po.getCardNum();
+        Long cardNum = po.getCardNum();
         Float money = po.getMoney();
         Float refund = po.getRefund();
         String remarks = po.getRemarks();
         Long operator = po.getOperator();
-        Date refundTime = new Date();
+        Integer operateType = po.getOperateType();
 
         // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
-        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
-        if(stateName.length() == 0 || !stateName.equals("姝e父")) {
-            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse("");
+        if (stateName.length() == 0 || !stateName.equals("姝e父")) {
+            return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
         }
 
         /**
          * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
          */
         Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
-        if(map == null || map.size() <= 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        if (map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
         }
         cardId = Long.parseLong(map.get("cardId").toString());
         clientId = Long.parseLong(map.get("clientId").toString());
 
         /**
-         * 淇敼鍐滄埛鍗′俊鎭細
-         *      鎸傚け鏃堕棿
-         *      鏈�鍚庢搷浣滅被鍨�-4
+         * 淇敼鍐滄埛鍗′俊鎭紝閫氱煡鏃跺鐞�
+         *      琛ユ墸鏃堕棿
+         *      鏈�鍚庢搷浣滅被鍨�-5
+
+         SeClientCard seClientCard = new SeClientCard();
+         seClientCard.setId(cardId);
+         seClientCard.setRefunddt(refundTime);
+         seClientCard.setMoney(money + refund);
+         seClientCard.setLastoper(LastOperateENUM.REFUND.getCode());
+         Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
+         if(rec_updateClientCard == 0) {
+         return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+         }
          */
-        SeClientCard seClientCard = new SeClientCard();
-        seClientCard.setId(cardId);
-        seClientCard.setRefunddt(refundTime);
-        seClientCard.setMoney(money + refund);
-        seClientCard.setLastoper(LastOperateENUM.REFUND.getCode());
-        Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
-        if(rec_updateClientCard == 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
-        }
 
         /**
-         * 娣诲姞琛ユ墸璁板綍
+         * 娣诲姞琛ユ墸鎿嶄綔璁板綍
          */
         SeCardOperate seCardOperate = new SeCardOperate();
         seCardOperate.setCardId(cardId);
         seCardOperate.setClientId(clientId);
-        seCardOperate.setMoney(money);
-        //seCardOperate.setNoTradeAmount(refund);
+        if(operateType == 1) {
+            // 琛ユ墸
+            seCardOperate.setMoney(money);
+            seCardOperate.setOperateType(OperateTypeENUM.REFUND.getCode());
+        }else {
+            // 鍙嶅啓
+            seCardOperate.setMoney(refund);
+            seCardOperate.setOperateType(OperateTypeENUM.WRITE_BACK.getCode());
+        }
+        //seCardOperate.setMoney(money);
         seCardOperate.setRefundAmount(refund);
-        seCardOperate.setOperateType(OperateTypeENUM.REFUND.getCode());
+        //seCardOperate.setOperateType(OperateTypeENUM.REFUND.getCode());
         seCardOperate.setRemarks(remarks);
         seCardOperate.setOperator(operator);
-        seCardOperate.setOperateDt(refundTime);
+        seCardOperate.setOperateDt(new Date());
+        seCardOperate.setOperateValid((byte) 1);
         Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
-        if(rec == 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.REFUND_FAIL_WRITE_REFUND_ERROR.getMessage());
+        if (rec == 0) {
+            if(operateType == 1) {
+                return BaseResponseUtils.buildErrorMsg(SellResultCode.REFUND_FAIL_WRITE_REFUND_ERROR.getMessage());
+            }else {
+                return BaseResponseUtils.buildErrorMsg(SellResultCode.WRITE_BACK_FAIL_WRITE_BACK_ERROR.getMessage());
+            }
         }
 
-        return BaseResponseUtils.buildSuccess(true) ;
+        return BaseResponseUtils.buildSuccess(true);
     }
 
     /**
-     * 瑙i攣
+     * 瑙i攣锛屼笉闇�瑕佷簩娆¢�氱煡
+     *
      * @param po
      * @param bindingResult
      * @return
      */
-    @Operation(summary = "娣诲姞瑙i攣璁板綍", description = "娣诲姞瑙i攣璁板綍")
-    @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = Boolean.class))}
-            )
-    })
     @PostMapping(path = "unlock", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add_unlock(@RequestBody @Valid DtoUnlock po, BindingResult bindingResult){
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        if(bindingResult != null && bindingResult.hasErrors()){
-            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+    public BaseResponse<Boolean> add_unlock(@RequestBody @Valid DtoUnlock po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         /**
-         * cardId           姘村崱缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardAddr鍙嶆煡锛屼慨鏀瑰啘鎴峰崱浣跨敤锛�
+         * cardId           姘村崱涓婚敭锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛屼慨鏀瑰啘鎴峰崱浣跨敤锛�
          * clientId         鍐滄埛缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
-         * cardNum          姘村崱鍦板潃
+         * cardNum          姘村崱缂栧彿
          * money            浣欓
          * remarks          澶囨敞
          * operator         鎿嶄綔浜虹紪鍙�
@@ -718,24 +739,23 @@
          */
         Long cardId = 0L;
         Long clientId = 0L;
-        String cardNum = po.getCardNum();
+        Long cardNum = po.getCardNum();
         Float money = po.getMoney();
         String remarks = po.getRemarks();
         Long operator = po.getOperator();
         Date unlockTime = new Date();
 
-        // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
-        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
-        if(stateName.length() == 0 || !stateName.equals("宸叉寕澶�")) {
-            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        // 鍒ゆ柇褰撳墠姘村崱鏄惁涓烘寕澶辩姸鎬佷笖鏈ˉ鍗★紝浠呭凡缁忔寕澶卞叾鏈ˉ鍗$殑鍙互瑙i攣
+        if (!cardOperateSv.isLostAndUnreplaced(cardNum)) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
         }
 
         /**
          * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
          */
         Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
-        if(map == null || map.size() <= 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        if (map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
         }
         cardId = Long.parseLong(map.get("cardId").toString());
         clientId = Long.parseLong(map.get("clientId").toString());
@@ -752,8 +772,8 @@
         seClientCard.setState(CardStateENUM.NORMAL.getCode());
         seClientCard.setLastoper(LastOperateENUM.UNLOCK.getCode());
         Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
-        if(rec_updateClientCard == 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.UNLOCK_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        if (rec_updateClientCard == 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.UNLOCK_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
         }
 
         /**
@@ -767,16 +787,182 @@
         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.buildFail(SellResultCode.UNLOCK_FAIL_WRITE_UNLOCK_ERROR.getMessage());
+        if (rec == 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.UNLOCK_FAIL_WRITE_UNLOCK_ERROR.getMessage());
         }
 
-        return BaseResponseUtils.buildSuccess(true) ;
+        Map map_response = new HashMap();
+        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 = "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銆乤mount銆乬ift浠庡厖鍊煎巻鍙茶〃涓幏鍙栵級
+             */
+
+            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.淇敼姘村崱琛ㄧ殑鎿嶄綔淇℃伅鍙婁綑棰�-浠庢搷浣滆褰曚腑鍙杕oney銆乺efund
+             */
+            cardOperateSv.turnOperateValidByCardId(cardId, operateType);
+            cardOperateSv.updateRefund(operateType, cardId);
+        }
+        else if (operateType == 10) {
+            /**
+             * 鍙嶅啓鎿嶄綔鎵ц閫氱煡
+             *  1.鎿嶄綔璁板綍鏀逛负鏈夋晥
+             *  2.淇敼姘村崱琛ㄧ殑鎿嶄綔淇℃伅鍙婁綑棰�-浠庢搷浣滆褰曚腑鍙杕oney
+             *  璇存槑锛氳繑杩樻搷浣滆褰曚腑鐨刴oney灏辨槸鍙嶅啓閲戦
+             */
+            cardOperateSv.turnOperateValidByCardId(cardId, operateType);
+            cardOperateSv.updateWriteBack(operateType, cardId);
+        }
+
+        return BaseResponseUtils.buildSuccess();
+    }
+
+    /**
+     * 鍒涘缓绠$悊鍗�
+     *
+     * @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) ;
+    }
+
+
+    /**
      * 鑾峰彇鍏呭�艰褰�
+     *
      * @param vo
      * @return
      */
@@ -791,46 +977,90 @@
     })
     @GetMapping(path = "/getRecharges")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<VoRecharge>>> get(QoRecharge vo){
+    public BaseResponse<QueryResultVo<List<VoRecharge>>> get(QoRecharge vo) {
         try {
             QueryResultVo<List<VoRecharge>> res = cardOperateSv.getRecharges(vo);
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
             log.error("鑾峰彇鍏呭�艰褰曞紓甯�", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
         }
     }
 
-
     /**
-     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗鏄庣粏
+     * 鑾峰彇鍏呭�艰褰曪紝绠$悊骞冲彴鍏呭�煎垪琛ㄤ娇鐢紝APP鏈娇鐢�
+     *
      * @param vo
      * @return
      */
-    @Operation(summary = "鑾峰緱浜ゆ槗璁板綍鏄庣粏", description = "杩斿洖浜ゆ槗璁板綍鏄庣粏")
-    @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = BaClient.class))}
-            )
-    })
-    @GetMapping(path = "getTransactions")
+    @GetMapping(path = "/getRechargesNew")
     @SsoAop()
-    public BaseResponse<Map> getOperates(QoTransaction vo){
+    public BaseResponse<QueryResultVo<List<VoRechargeNew>>> getRechargesNew(QoRecharge vo) {
         try {
-            Map res = cardOperateSv.getTransactions(vo);
+            QueryResultVo<List<VoRechargeNew>> res = cardOperateSv.getRechargesNew(vo);
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
-            log.error("鏌ヨ浜ゆ槗璁板綍寮傚父", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            log.error("鑾峰彇鍏呭�艰褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage());
         }
     }
 
+    /**
+     * 鑾峰彇杩旇繕璁板綍锛岀鐞嗗钩鍙板厖鍊煎垪琛ㄤ娇鐢�
+     *
+     * @param vo
+     * @return
+     */
+    @GetMapping(path = "/refunds")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoRefund>>> getRefunds(QoRecharge vo) {
+        try {
+            QueryResultVo<List<VoRefund>> res = cardOperateSv.getRefunds(vo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇杩旇繕璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+    /**
+     * 鑾峰彇姘村崱娑堣垂璁板綍锛岀鐞嗗钩鍙颁娇鐢�
+     *
+     * @param vo
+     * @return
+     */
+    @GetMapping(path = "/expends")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoExpend>>> getExpends(QoRecharge vo) {
+        try {
+            QueryResultVo<List<VoExpend>> res = cardOperateSv.getExpends(vo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇娑堣垂璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗鏄庣粏
+     *
+     * @param vo
+     * @return
+     */
+    @GetMapping(path = "getTransactions")
+    @SsoAop()
+    public BaseResponse<Map> getOperates(QoTransaction vo) {
+        try {
+            return BaseResponseUtils.buildSuccess(cardOperateSv.getTransactions(vo));
+        } catch (Exception e) {
+            log.error("鏌ヨ浜ゆ槗璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇寮�鍗¤褰�
+     *
      * @param vo
      * @return
      */
@@ -845,23 +1075,22 @@
     })
     @GetMapping(path = "/getActiveCards")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<VoActiveCardNew>>> getActiveCards(QoActiveCard vo){
+    public BaseResponse<QueryResultVo<List<VoActiveCard>>> getActiveCards(QoActiveCard vo) {
         try {
-            QueryResultVo<List<VoActiveCardNew>> res = cardOperateSv.getActiveCards(vo);
-            if(res.itemTotal == 0) {
-                return BaseResponseUtils.buildFail(SellResultCode.No_ActiveCards.getMessage());
-            }
+            QueryResultVo<List<VoActiveCard>> res = cardOperateSv.getActiveCards(vo);
+//            if(res.itemTotal == 0) {
+//                return BaseResponseUtils.buildErrorMsg(SellResultCode.No_ActiveCards.getMessage());
+//            }
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
             log.error("鑾峰彇寮�鍗¤褰曞紓甯�", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
         }
     }
 
-
-
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇琛ュ崱璁板綍
+     *
      * @param vo
      * @return
      */
@@ -876,21 +1105,60 @@
     })
     @GetMapping(path = "/getReissueCards")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<VoReissueCard>>> getReissueCards(QoReissueCard vo){
+    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);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇閫氱敤鎿嶄綔璁板綍
+     * 娉ㄩ攢銆佹寕澶便�佸啿姝c�佽В閿侀�氱敤
+     * 娉ㄩ攢-3锛屾寕澶�-6锛屽啿姝�-7锛岃В閿�-8
+     *
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰彇閫氱敤鎿嶄綔璁板綍", description = "杩斿洖閫氱敤鎿嶄綔璁板綍")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛紑鍗℃暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "/getOptions")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoOperate>>> getCommonOperations(QoCommonOperate vo) {
+        // 楠岃瘉鎿嶄綔绫诲瀷鏄惁姝g‘
+        Integer operateType = Optional.ofNullable(vo.getOperateType()).orElse(0);
+        if (operateType != 3 && operateType != 6 && operateType != 7 && operateType != 8) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.PARAMS_ERROR.getMessage());
+        }
+
+        try {
+            QueryResultVo<List<VoOperate>> res = cardOperateSv.getCommonOperations(vo);
+//            if(res.itemTotal == 0) {
+//                return BaseResponseUtils.buildErrorMsg(SellResultCode.No_CANCELS.getMessage());
+//            }
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇寮�鍗¤褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage());
         }
     }
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃
+     *
      * @param vo
      * @return
      */
@@ -905,21 +1173,18 @@
     })
     @GetMapping(path = "/get_receipts")
     @SsoAop()
-    public BaseResponse<Map> getReceipts(QoReceipt vo){
+    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);
+            return BaseResponseUtils.buildSuccess(cardOperateSv.getReceipts(vo));
         } catch (Exception e) {
             log.error("鑾峰彇鐢靛瓙閽卞寘璐︽埛璁板綍", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
         }
     }
 
     /**
      * 閲戦杞ぇ鍐�
+     *
      * @param amount
      * @return
      */
@@ -929,9 +1194,9 @@
         try {
             AmountToChinese amountToChinese = new AmountToChinese();
             String chinese = amountToChinese.toChinese(amount);
-            return BaseResponseUtils.buildSuccess(chinese) ;
+            return BaseResponseUtils.buildSuccess(chinese);
         } catch (Exception e) {
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
         }
 
     }

--
Gitblit v1.8.0