From f8cb69b9e1b0e8443942e13bbd3f46b9d4203269 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期日, 28 四月 2024 08:54:08 +0800
Subject: [PATCH] 靳总离职前,应元谋二期项目要求(慧图),做了通信协议修改,在他离职后,从韩月处得到最新协议,并做了部分协议软件实现修改,发现新协议中有一些协议定义有重复,也有错误的,所以这版本协议未全部实现,但实现的部分可以用来测试测控一体阀(与段志强一起测试过)。目前情况下,这版本协议实现不能应用于实际项目中,如果必须实现,还需要结合硬件协议具体实现内容再实现通信中间件的协议解析与构造部分,还需要实现上行数据处理任务树部分。
---
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 158 insertions(+), 4 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..5a30b15 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
@@ -1,29 +1,49 @@
package com.dy.pipIrrSell.virtualCard;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+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.ResultCodeMsg;
+import com.dy.pipIrrGlobal.pojoSe.SeVcRefund;
+import com.dy.pipIrrGlobal.pojoSe.SeVcRefundItem;
import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
import com.dy.pipIrrSell.result.SellResultCode;
+import com.dy.pipIrrSell.util.PayHelper;
+import com.dy.pipIrrSell.virtualCard.dto.DtoAudit;
+import com.dy.pipIrrSell.virtualCard.dto.DtoRefund;
import com.dy.pipIrrSell.virtualCard.enums.LastOperateENUM;
+import com.dy.pipIrrSell.virtualCard.enums.RefundItemStateENUM;
+import com.dy.pipIrrSell.virtualCard.enums.RefundStateENUM;
+import com.dy.pipIrrSell.wechatpay.dto.Refund;
+import com.dy.pipIrrSell.wechatpay.dto.ToRefund;
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.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
+import org.springframework.transaction.annotation.Transactional;
+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 javax.crypto.NoSuchPaddingException;
+import java.io.IOException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SignatureException;
+import java.security.spec.InvalidKeySpecException;
import java.util.Date;
+import java.util.List;
+import java.util.Objects;
/**
* @author ZhuBaoMin
@@ -40,7 +60,13 @@
@Validated
public class VirtualCardCtrl {
private final VirtualCardSv virtualCardSv;
+ private final PayHelper payHelper;
+ /**
+ * 铏氭嫙鍗¤处鍙锋敞鍐�
+ * @param clientId
+ * @return
+ */
@Operation(summary = "娉ㄥ唽铏氭嫙鍗�", description = "娉ㄥ唽铏氭嫙鍗�")
@ApiResponses(value = {
@ApiResponse(
@@ -71,4 +97,132 @@
}
+ /**
+ * 鐢ㄦ埛鐢宠閫�娆�
+ * @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) ;
+ }
+
}
--
Gitblit v1.8.0