From 436ac360430bad4c0563dab24337a43a980a8bff Mon Sep 17 00:00:00 2001
From: wuzeyu <1223318623@qq.com>
Date: 星期四, 11 七月 2024 20:15:03 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java |  245 ++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 220 insertions(+), 25 deletions(-)

diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java
index 8593e8d..c695e7c 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java
@@ -3,27 +3,27 @@
 import com.dy.common.aop.SsoAop;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
-import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
+import com.dy.pipIrrGlobal.voSe.VoVcRecharge;
+import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
 import com.dy.pipIrrSell.result.SellResultCode;
+import com.dy.pipIrrSell.util.PayHelper;
+import com.dy.pipIrrSell.virtualCard.dto.DtoRegist;
+import com.dy.pipIrrSell.virtualCard.dto.DtoVcRecharge;
 import com.dy.pipIrrSell.virtualCard.enums.LastOperateENUM;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.media.Content;
-import io.swagger.v3.oas.annotations.media.Schema;
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.responses.ApiResponses;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.validation.constraints.NotNull;
+import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
 
 /**
  * @author ZhuBaoMin
@@ -40,35 +40,230 @@
 @Validated
 public class VirtualCardCtrl {
     private final VirtualCardSv virtualCardSv;
+    private final PayHelper payHelper;
 
-    @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))}
-            )
-    })
+    /**
+     * 鑾峰彇鍐滄埛鍏ㄩ儴铏氭嫙鍗�
+     * @return
+     */
+    @GetMapping(path = "/get")
+    @SsoAop()
+    public BaseResponse<List<VoVirtualCard>> getVCs(Long clientId){
+        try {
+            List<VoVirtualCard> res = virtualCardSv.getVCs(clientId);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇鏀粯鏂瑰紡璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁铏氭嫙鍗D鑾峰彇铏氭嫙鍗″璞�
+     * @param vcId
+     * @return
+     */
+    @GetMapping(path = "/getVcById")
+    @SsoAop()
+    public BaseResponse<VoVirtualCard> getVcById(@RequestParam Long vcId){
+        try {
+            return BaseResponseUtils.buildSuccess(virtualCardSv.getVcById(vcId));
+        } catch (Exception e) {
+            log.error("鑾峰彇鏀粯鏂瑰紡璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 铏氭嫙鍗¤处鍙锋敞鍐�
+     * @param po
+     * @param bindingResult
+     * @return
+     */
     @PostMapping(path = "add_vc")
     @SsoAop()
-    public BaseResponse<Boolean> addWallet(@RequestParam("clientId") @NotNull(message = "鍐滄埛缂栧彿涓嶈兘涓虹┖") Long clientId){
-        if(clientId == null || clientId < 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.CLIENT_ID_CANNOT_BE_NULL.getMessage());
+    public BaseResponse<Boolean> addVC(@RequestBody @Valid DtoRegist po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+        Long clientId = po.getClientId();
+
+        // 鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode
+        String areaCode = String.valueOf(virtualCardSv.getAreaCodeById(clientId));
+        /**
+         * 鏍规嵁琛屾斂鍖哄垝涓诧紙areaCode锛夊湪铏氭嫙鍗¤〃涓拡瀵硅櫄鎷熷崱缂栧彿锛坴cNum锛夎繘琛屾ā绯婃煡璇�
+         * 濡傛灉5浣嶉『搴忓彿宸茬粡杈惧埌鏈�澶у�硷紝鎻愮ず鐢ㄦ埛鑱旂郴绯荤粺绠$悊鍛�
+         * 濡傛灉5浣嶉『搴忓彿鏈揪鍒版渶澶у�硷紝鍒欏姞1
+         * cardNum涓烘柊鐨勫崱鍙�
+         */
+        String vcNum = Optional.ofNullable(virtualCardSv.getVcCardNumOfMax(areaCode)).orElse("");
+        if(vcNum != null && vcNum.trim().length() > 0) {
+            Integer number = Integer.parseInt(vcNum.substring(12));
+            number = number + 1;
+            if(number > 65535) {
+                return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_OVERRUN.getMessage());
+            }
+            vcNum = vcNum.substring(0, 12) + String.format("%05d", number);
+        } else {
+            vcNum = areaCode + "00001";
         }
 
         SeVirtualCard seVirtualCard = new SeVirtualCard();
+        seVirtualCard.setVcNum(Long.parseLong(vcNum));
         seVirtualCard.setClientId(clientId);
         seVirtualCard.setMoney(0d);
         seVirtualCard.setLastOperate(LastOperateENUM.OPEN_ACCOUNT.getCode());
         seVirtualCard.setLastOperateTime(new Date());
+        seVirtualCard.setInUse((byte) 0);
         seVirtualCard.setCreateTime(new Date());
         Long rec = virtualCardSv.insertVirtualCard(seVirtualCard);
         if(rec == null) {
-            return BaseResponseUtils.buildFail(SellResultCode.WALLET_OPEN_ACCOUNT_FAIL.getMessage());
+            return BaseResponseUtils.buildFail(SellResultCode.VC_OPEN_ACCOUNT_FAIL.getMessage());
         }
         return BaseResponseUtils.buildSuccess(true) ;
     }
 
+    /**
+     * 鐢ㄦ埛鐢宠閫�娆�
+     * @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 = "add_refund", consumes = MediaType.APPLICATION_JSON_VALUE)
+    //@Transactional(rollbackFor = Exception.class)
+    //@SsoAop()
+    //public BaseResponse<Boolean> addRefund(@RequestBody @Valid DtoRefund po, BindingResult bindingResult){
+    //    if(bindingResult != null && bindingResult.hasErrors()){
+    //        return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+    //    }
+    //
+    //    Long virtualId = po.getVirtualId();
+    //    Integer refundAmount = po.getRefundAmount();
+    //
+    //    // 鏍规嵁铏氭嫙鍗D鑾峰彇铏氭嫙鍗″璞�
+    //    SeVirtualCard seVirtualCard = virtualCardSv.selectVirtuCardById(virtualId);
+    //    if(seVirtualCard == null) {
+    //        return BaseResponseUtils.buildFail(SellResultCode.VIRTUAL_CARD_NOT_EXIST.getMessage());
+    //    }
+    //    Long clientId = seVirtualCard.getClientId();
+    //    Double money = seVirtualCard.getMoney();
+    //
+    //    // 楠岃瘉閫�娆鹃噾棰濇槸鍚﹀ぇ浜庝綑棰�
+    //    if(refundAmount > money) {
+    //        return BaseResponseUtils.buildFail(SellResultCode.REFUND_AMOUNT_CANNOT_GREATER_THAN_MONEY.getMessage());
+    //    }
+    //
+    //    // 璁$畻娑堣垂鍚庝綑棰�
+    //    Double afterRefund = money - refundAmount;
+    //
+    //    SeVcRefund seVcRefund = new SeVcRefund();
+    //    seVcRefund.setVcId(virtualId);
+    //    seVcRefund.setClientId(clientId);
+    //    seVcRefund.setMoney(money);
+    //    seVcRefund.setRefundAmount(refundAmount);
+    //    seVcRefund.setAfterRefund(afterRefund);
+    //    seVcRefund.setApplicationTime(new Date());
+    //    seVcRefund.setRefundStatus(RefundStateENUM.TO_AUDIT.getCode());
+    //
+    //    Long rec = virtualCardSv.addRefund(seVcRefund);
+    //    if(rec == 0) {
+    //        return BaseResponseUtils.buildFail(SellResultCode.APPLICATION_REFUND_FAIL.getMessage());
+    //    }
+    //    return BaseResponseUtils.buildSuccess(true) ;
+    //}
 
+    /**
+     * 瀹℃牳閫�娆剧敵璇�
+     * @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 = "audit_refund", consumes = MediaType.APPLICATION_JSON_VALUE)
+    //@Transactional(rollbackFor = Exception.class)
+    //@SsoAop()
+    //public BaseResponse<Boolean> auditRefund(@RequestBody @Valid DtoAudit po, BindingResult bindingResult) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeySpecException, IOException, SignatureException, InvalidKeyException {
+    //    if(bindingResult != null && bindingResult.hasErrors()){
+    //        return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+    //    }
+    //
+    //    // 鏍规嵁閫�娆綢D鑾峰彇閫�娆惧璞★紝骞舵洿鏂板鏍镐汉銆佸鏍告椂闂淬�佸鏍稿娉ㄣ�侀��娆剧姸鎬佸瓧娈�
+    //    SeVcRefund seVcRefund = virtualCardSv.selectRefundByRefundId(po.getRefundId());
+    //    Long virtualId = seVcRefund.getVcId();
+    //    Integer refundAmount = seVcRefund.getRefundAmount();
+    //    seVcRefund.setAuditor(po.getAuditor());
+    //    seVcRefund.setAuditTime(new Date());
+    //    seVcRefund.setRemarks(po.getRemarks());
+    //    seVcRefund.setRefundStatus(RefundStateENUM.TO_REFUND.getCode());
+    //    Integer rec = virtualCardSv.updateRefund(seVcRefund);
+    //    if(rec == 0) {
+    //        return BaseResponseUtils.buildFail(SellResultCode.AUDIT_REFUND_FAIL.getMessage());
+    //    }
+    //
+    //    // 瀹屾垚瀹℃牳鍚庤幏鍙栧緟閫�娆捐鍗曞垪琛�
+    //    List<ToRefund> list_ToRefund = payHelper.getToRefunds(virtualId, refundAmount);
+    //    if(list_ToRefund == null || list_ToRefund.size() <=0)
+    //        return BaseResponseUtils.buildFail(SellResultCode.NOT_SUFFICIENT_FUNDS.getMessage());
+    //
+    //    //閬嶅巻寰呴��娆惧垪琛�
+    //    JSONArray array_ToRefund = (JSONArray) JSON.toJSON(list_ToRefund);
+    //    for(int i = 0; i < array_ToRefund.size(); i++) {
+    //        JSONObject job_ToRefund = array_ToRefund.getJSONObject(i);
+    //        String orderNumber_ToRefund = job_ToRefund.getString("orderNumber");
+    //        Integer refundAmount_ToRefund = job_ToRefund.getInteger("refundAmount");
+    //
+    //        // 鐢熸垚閫�娆惧垎椤硅褰�
+    //        SeVcRefundItem seVcRefundItem = new SeVcRefundItem();
+    //        seVcRefundItem.setRefundId(po.getRefundId());
+    //        seVcRefundItem.setOrderNumber(orderNumber_ToRefund);
+    //        String refundNumber = virtualCardSv.generateRefundNumber(orderNumber_ToRefund);
+    //        seVcRefundItem.setRefundNumber(refundNumber);
+    //        seVcRefundItem.setRefundAmount(refundAmount_ToRefund);
+    //        seVcRefundItem.setCreateTime(new Date());
+    //        seVcRefundItem.setRefundStatus(RefundItemStateENUM.NO_REFUND.getCode());
+    //        Long refundItemId = virtualCardSv.addRefundItem(seVcRefundItem);
+    //
+    //        // 璋冪敤寰俊閫�娆剧敵璇锋帴鍙�
+    //        Refund refund = new Refund();
+    //        refund.setTradeNo(orderNumber_ToRefund);
+    //        refund.setRefundNo(refundNumber);
+    //        refund.setRefund(refundAmount_ToRefund);
+    //        BaseResponse rep = payHelper.refunds(refund);
+    //    }
+    //
+    //    return BaseResponseUtils.buildSuccess(true) ;
+    //}
+
+    /**
+     * 鑾峰彇铏氭嫙鍗″厖鍊艰褰�
+     * @return
+     */
+    @GetMapping(path = "/getVcRechargeRecords")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoVcRecharge>>> getVcRechargeRecords(DtoVcRecharge dtoVcRecharge){
+        try {
+            QueryResultVo<List<VoVcRecharge>> res = virtualCardSv.getVcRechargeRecords(dtoVcRecharge);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇铏氭嫙鍗″厖鍊艰褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
 }

--
Gitblit v1.8.0