|  |  |  | 
|---|
|  |  |  | 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.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.DtoAudit; | 
|---|
|  |  |  | import com.dy.pipIrrSell.virtualCard.dto.DtoRefund; | 
|---|
|  |  |  | import com.dy.pipIrrSell.virtualCard.dto.DtoRegist; | 
|---|
|  |  |  | import com.dy.pipIrrSell.virtualCard.dto.DtoVcRecharge; | 
|---|
|  |  |  | 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.*; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | import java.util.Optional; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @author ZhuBaoMin | 
|---|
|  |  |  | 
|---|
|  |  |  | private final PayHelper payHelper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 虚拟卡账号注册 | 
|---|
|  |  |  | * @param clientId | 
|---|
|  |  |  | * 获取农户全部虚拟卡 | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Operation(summary = "注册虚拟卡", description = "注册虚拟卡") | 
|---|
|  |  |  | @ApiResponses(value = { | 
|---|
|  |  |  | @ApiResponse( | 
|---|
|  |  |  | responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, | 
|---|
|  |  |  | description = "操作结果:true:成功,false:失败(BaseResponse.content)", | 
|---|
|  |  |  | content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, | 
|---|
|  |  |  | schema = @Schema(implementation = Boolean.class))} | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | @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()) ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 根据虚拟卡ID获取虚拟卡对象 | 
|---|
|  |  |  | * @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)在虚拟卡表中针对虚拟卡编号(vcNum)进行模糊查询 | 
|---|
|  |  |  | * 如果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 bindingResult | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Operation(summary = "虚拟卡申请退款", description = "虚拟卡申请退款") | 
|---|
|  |  |  | @ApiResponses(value = { | 
|---|
|  |  |  | @ApiResponse( | 
|---|
|  |  |  | responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, | 
|---|
|  |  |  | description = "操作结果:true:成功,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(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 根据虚拟卡ID获取虚拟卡对象 | 
|---|
|  |  |  | 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) ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //@Operation(summary = "虚拟卡申请退款", description = "虚拟卡申请退款") | 
|---|
|  |  |  | //@ApiResponses(value = { | 
|---|
|  |  |  | //        @ApiResponse( | 
|---|
|  |  |  | //                responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, | 
|---|
|  |  |  | //                description = "操作结果:true:成功,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(); | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //    // 根据虚拟卡ID获取虚拟卡对象 | 
|---|
|  |  |  | //    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 bindingResult | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Operation(summary = "审核退款申请", description = "审核退款申请") | 
|---|
|  |  |  | @ApiResponses(value = { | 
|---|
|  |  |  | @ApiResponse( | 
|---|
|  |  |  | responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, | 
|---|
|  |  |  | description = "操作结果:true:成功,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) | 
|---|
|  |  |  | //@Operation(summary = "审核退款申请", description = "审核退款申请") | 
|---|
|  |  |  | //@ApiResponses(value = { | 
|---|
|  |  |  | //        @ApiResponse( | 
|---|
|  |  |  | //                responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, | 
|---|
|  |  |  | //                description = "操作结果:true:成功,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()); | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //    // 根据退款ID获取退款对象,并更新审核人、审核时间、审核备注、退款状态字段 | 
|---|
|  |  |  | //    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<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()); | 
|---|
|  |  |  | 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()) ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 根据退款ID获取退款对象,并更新审核人、审核时间、审核备注、退款状态字段 | 
|---|
|  |  |  | 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) ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|