Administrator
2024-05-27 f5a7f6c30bc5fb13eb538b5856a663b1ba0667b6
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java
@@ -3,27 +3,15 @@
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.SeVirtualCard;
import com.dy.pipIrrSell.result.SellResultCode;
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 com.dy.pipIrrGlobal.voSe.VoVirtualCard;
import com.dy.pipIrrSell.util.PayHelper;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
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;
/**
 * @author ZhuBaoMin
@@ -40,35 +28,211 @@
@Validated
public class VirtualCardCtrl {
    private final VirtualCardSv virtualCardSv;
    private final PayHelper payHelper;
    @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_vc")
    /**
     * 获取全部虚拟卡
     * @return
     */
    @GetMapping(path = "/get")
    @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<List<VoVirtualCard>> getVCs(){
        try {
            List<VoVirtualCard> res = virtualCardSv.getVCs();
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取支付方式记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
        SeVirtualCard seVirtualCard = new SeVirtualCard();
        seVirtualCard.setClientId(clientId);
        seVirtualCard.setMoney(0d);
        seVirtualCard.setLastOperate(LastOperateENUM.OPEN_ACCOUNT.getCode());
        seVirtualCard.setLastOperateTime(new Date());
        seVirtualCard.setCreateTime(new Date());
        Long rec = virtualCardSv.insertVirtualCard(seVirtualCard);
        if(rec == null) {
            return BaseResponseUtils.buildFail(SellResultCode.WALLET_OPEN_ACCOUNT_FAIL.getMessage());
        }
        return BaseResponseUtils.buildSuccess(true) ;
    }
    /**
     * 根据虚拟卡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
     */
    //@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_vc")
    //@SsoAop()
    //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) {
    //        return BaseResponseUtils.buildFail(SellResultCode.WALLET_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 = "操作结果: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 po
     * @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)
    //@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) ;
    //}
}