package com.nova.sankuai.controller.v2; import cn.hutool.json.JSONUtil; import com.nova.sankuai.domain.api.yangqianguan.MoneyPotResultJson; import com.nova.sankuai.domain.api.yangqianguan.YqgResultCode; import com.nova.sankuai.domain.api.yangqianguan.YqgUtil; import com.nova.sankuai.domain.api.yangqianguan.dto.*; import com.nova.sankuai.domain.api.yangqianguan.response.*; import com.nova.sankuai.domain.api.yangqianguan.vo.VerifySignVo; import com.nova.sankuai.infra.config.CommonException; import com.nova.sankuai.infra.utils.ConstantsUtil; import com.nova.sankuai.service.IMoneyPotService; import io.swagger.annotations.Api; import lombok.AllArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import java.io.IOException; /** * @Description 洋钱罐对接 * @Author CWR * @Date 2022/4/26 21:33 */ @Api(tags = "洋钱罐对接V2") @RestController @Valid @AllArgsConstructor public class MoneyPotV2Controller { private final IMoneyPotService moneyPotService; private static final Logger yqgLogger = LoggerFactory.getLogger("yqgLogger"); private final YqgUtil yqgUtil; /** * 用户准入 * * @return */ @PostMapping("/yqg/api/v1/user/check") public MoneyPotResultJson userQualificationCheck(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { UserCheckDto dto = JSONUtil.toBean(verifySignVo.getContent(), UserCheckDto.class); return moneyPotService.userQualificationCheck(dto); } catch (Exception e) { yqgLogger.error("洋钱罐用户准入异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 授信申请 * * @param request */ @PostMapping("/yqg/api/v2/credit/apply") public MoneyPotResultJson creditApply(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { CreditApplyDto dto = JSONUtil.toBean(verifySignVo.getContent(), CreditApplyDto.class); return moneyPotService.creditApply(dto); } catch (Exception e) { yqgLogger.error("洋钱罐授信申请异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 授信结果查询 * * @param request */ @PostMapping("/yqg/api/v2/credit/result") public MoneyPotResultJson creditResult(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { CreditDto dto = JSONUtil.toBean(verifySignVo.getContent(), CreditDto.class); return moneyPotService.creditResult(dto); } catch (Exception e) { yqgLogger.error("洋钱罐授信结果查询异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 授信额度查询 * * @param request */ @PostMapping("/yqg/api/v2/credit/limit") public MoneyPotResultJson creditLimit(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { CreditDto dto = JSONUtil.toBean(verifySignVo.getContent(), CreditDto.class); return moneyPotService.creditLimit(dto); } catch (Exception e) { yqgLogger.error("洋钱罐授信额度查询异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 借款试算 * * @param request */ @PostMapping("/yqg/api/v2/loan/trial") public MoneyPotResultJson loanTrial(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { LoanTrialDto dto = JSONUtil.toBean(verifySignVo.getContent(), LoanTrialDto.class); return moneyPotService.loanTrial(dto); } catch (Exception e) { yqgLogger.error("洋钱罐借款试算异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 借款确认 * * @param request */ @PostMapping("/yqg/api/v2/loan/confirm") public MoneyPotResultJson loanConfirm(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { LoanConfirmDto dto = JSONUtil.toBean(verifySignVo.getContent(), LoanConfirmDto.class); return moneyPotService.loanConfirm(dto); } catch (Exception e) { yqgLogger.error("洋钱罐借款确认异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 还款计划查询 * * @param request */ @PostMapping("/yqg/api/v1/repayment/getRepayPlan") public MoneyPotResultJson repayPlan(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { RepayPlanDto dto = JSONUtil.toBean(verifySignVo.getContent(), RepayPlanDto.class); return moneyPotService.getRepayPlan(dto); } catch (Exception e) { yqgLogger.error("洋钱罐还款计划查询异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 还款试算 * * @param request */ @PostMapping("/yqg/api/v1/repayment/getRepayDetail") public MoneyPotResultJson repayDetail(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { RepayDetailDto dto = JSONUtil.toBean(verifySignVo.getContent(), RepayDetailDto.class); return moneyPotService.getRepayDetail(dto); } catch (Exception e) { yqgLogger.error("洋钱罐还款试算异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 用户主动还款 * * @param request */ @PostMapping("/yqg/api/v2/repay") public MoneyPotResultJson userRepay(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { UserRepayDto dto = JSONUtil.toBean(verifySignVo.getContent(), UserRepayDto.class); return moneyPotService.userRepay(dto); } catch (CommonException e) { yqgLogger.error("洋钱罐用户主动还款异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, e.getMessage()); } catch (Exception e) { yqgLogger.error("洋钱罐用户主动还款异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 还款结果查询 * * @param request */ @PostMapping("/yqg/api/v2/repay/result") public MoneyPotResultJson repayResult(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { RepayResultDto dto = JSONUtil.toBean(verifySignVo.getContent(), RepayResultDto.class); return moneyPotService.queryRepayResult(dto); } catch (Exception e) { yqgLogger.error("洋钱罐还款结果查询异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 支持的银行列表查询 * * @param request */ @PostMapping("/yqg/api/v2/bank/support") public MoneyPotResultJson bankSupport(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { BankSupportDto dto = JSONUtil.toBean(verifySignVo.getContent(), BankSupportDto.class); return moneyPotService.bankSupport(dto); } catch (Exception e) { yqgLogger.error("洋钱罐支持的银行列表查询异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 绑定银行卡 * * @param request */ @PostMapping("/yqg/api/v2/bank/bind") public MoneyPotResultJson bankBind(HttpServletRequest request) throws IOException { VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { BankBindDto dto = JSONUtil.toBean(verifySignVo.getContent(), BankBindDto.class); return moneyPotService.bankBind(dto); } catch (Exception e) { yqgLogger.error("洋钱罐绑定银行卡异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 协议查询 * * @param request */ @PostMapping("/yqg/api/v2/contract") public MoneyPotResultJson contract(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { ContractDto dto = JSONUtil.toBean(verifySignVo.getContent(), ContractDto.class); return moneyPotService.getContractList(dto); } catch (Exception e) { yqgLogger.error("洋钱罐协议查询异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 订单状态查询 * * @param */ @PostMapping("/yqg/api/v1/order/getOrderStatus") public MoneyPotResultJson orderStatus(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { OrderStatusDto dto = JSONUtil.toBean(verifySignVo.getContent(), OrderStatusDto.class); return moneyPotService.getOrderStatus(dto); } catch (Exception e) { yqgLogger.error("洋钱罐订单状态查询异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 短信验证码校验 * * @param */ @PostMapping("/yqg/api/v2/code/verify") public MoneyPotResultJson codeVerify(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { CodeVerifyDto dto = JSONUtil.toBean(verifySignVo.getContent(), CodeVerifyDto.class); return moneyPotService.codeVerify(dto); } catch (Exception e) { yqgLogger.error("洋钱罐短信验证码校验异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 是否需要绑定银行卡查询 * * @param */ @PostMapping("/yqg/api/v2/bank/bind/require") public MoneyPotResultJson bindRequire(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { BankBindRequireDto dto = JSONUtil.toBean(verifySignVo.getContent(), BankBindRequireDto.class); return moneyPotService.queryBankCardBind(dto); } catch (Exception e) { yqgLogger.error("洋钱罐是否需要绑定银行卡查询异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 获取用户已绑银行卡列表 * * @param */ @PostMapping("/yqg/api/v2/bank/cardList") public MoneyPotResultJson bankCardList(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { BankCardListDto dto = JSONUtil.toBean(verifySignVo.getContent(), BankCardListDto.class); return moneyPotService.getUserBankCardList(dto); } catch (Exception e) { yqgLogger.error("洋钱罐获取用户已绑银行卡列表异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } /** * 获取用户的权益卡信息 * * @param */ @PostMapping("/yqg/api/v2/rights/card") public MoneyPotResultJson getRightsCard(HttpServletRequest request) throws IOException { // 验签 VerifySignVo verifySignVo = yqgUtil.verifyYqgSign(request); if (!verifySignVo.isVerify()) { return MoneyPotResultJson.error(YqgResultCode.SIGN_ERROR, "请求头或签名不正确"); } try { RightsCardDto dto = JSONUtil.toBean(verifySignVo.getContent(), RightsCardDto.class); String hostUrl = ConstantsUtil.getHostUrl(request); return moneyPotService.getRightsCard(dto, hostUrl); } catch (Exception e) { yqgLogger.error("洋钱罐获取用户的权益卡信息异常", e); return MoneyPotResultJson.error(YqgResultCode.SERVER_ERROR, "内部错误,接口调用失败"); } } }