From d010e8d1dd18103683e92c44a295ea6272561ea5 Mon Sep 17 00:00:00 2001 From: Administrator <zhubaomin> Date: 星期二, 23 四月 2024 16:38:32 +0800 Subject: [PATCH] 2024-04-23 朱宝民 添加田间灌溉项目管理模块 --- pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 174 insertions(+), 5 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..a1c8156 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,52 @@ 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.dto.DtoRegist; 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.constraints.NotNull; +import jakarta.validation.Valid; 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.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +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 +63,14 @@ @Validated public class VirtualCardCtrl { private final VirtualCardSv virtualCardSv; + private final PayHelper payHelper; + /** + * 铏氭嫙鍗¤处鍙锋敞鍐� + * @param po + * @param bindingResult + * @return + */ @Operation(summary = "娉ㄥ唽铏氭嫙鍗�", description = "娉ㄥ唽铏氭嫙鍗�") @ApiResponses(value = { @ApiResponse( @@ -52,16 +82,27 @@ }) @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(@RequestParam("clientId") @NotNull(message = "鍐滄埛缂栧彿涓嶈兘涓虹┖") Long clientId){ + 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(); + String vcName = po.getVcName(); + + // 鍚嶇О楠岄噸 + Integer rc = virtualCardSv.getRecordCountByName(po); + if(rc != null && rc > 0) { + return BaseResponseUtils.buildFail(SellResultCode.CARD_NAME_ESIST.getMessage()); } SeVirtualCard seVirtualCard = new SeVirtualCard(); + seVirtualCard.setVcName(vcName); 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) { @@ -71,4 +112,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