package com.ydd.app.controller; import com.ydd.app.dto.OrderReq; import com.ydd.app.service.ApiOrderNewService; import com.ydd.app.service.ApiPayService; import com.ydd.common.annotation.AccessToken; import com.ydd.common.annotation.ControllerLog; import com.ydd.common.annotation.RepeatSubmit; import com.ydd.common.core.controller.BaseController; import com.ydd.common.core.domain.BaseResult; import com.ydd.module.dto.PayTradeQueryDto; import com.ydd.module.enums.ExceptionEnum; import com.ydd.module.enums.PaymentTypeEnum; import com.ydd.module.expection.CustomAppException; import com.ydd.module.service.impl.RedissonLockService; import com.ydd.third.common.utils.StringUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.redisson.api.RLock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.Objects; /** * Project:lb-server * Class:PayApi * Description:TODO * Time:2021/2/24 15:56 * * @author zoe */ @Api(value = "支付接口", tags = {"支付接口"}) @RestController @RequestMapping("/app/pay") @RequiredArgsConstructor(onConstructor_ = @Autowired) public class PayApi extends BaseController { private final ApiPayService apiPayService; private final ApiOrderNewService apiOrderNewService; private final RedissonLockService redissonLockService; /** * 支付 充值 */ @ApiOperation("支付") @ApiImplicitParams({ @ApiImplicitParam(required = false, paramType = "query", name = "id", value = "充值选项id"), @ApiImplicitParam(required = true, paramType = "query", name = "money", value = "充值金额"), @ApiImplicitParam(required = true, paramType = "query", name = "paymentType", value = "支付类型:1->支付宝支付 2->微信支付 "), @ApiImplicitParam(required = false, paramType = "query", name = "createType", value = "下单方式(APP:0/不传此字段 PC:1)"), }) @RequestMapping(value = "/order", method = RequestMethod.POST) @AccessToken @ControllerLog("余额充值") public BaseResult pay(@RequestParam(required = false, name = "id") Integer id, @RequestParam("money") BigDecimal money, @RequestParam("paymentType") Integer paymentType, @RequestParam(value = "createType", required = false) Integer createType) { if (paymentType.equals(PaymentTypeEnum.ZHI_FU_BAO.type)) { return BaseResult.success("OK", apiPayService.payZfb(getLoginId(), id, money, paymentType, createType)); } else if (paymentType.equals(PaymentTypeEnum.WEI_XIN.type)) { return BaseResult.success(apiPayService.payWx(getLoginId(), id, money, paymentType, createType)); } return BaseResult.success(); } @RequestMapping(value = "/createOrder", method = RequestMethod.POST) @AccessToken @RepeatSubmit @ControllerLog("下单支付") public BaseResult createOrder(@RequestBody OrderReq req, HttpServletRequest request) { Long memberId = getLoginId(); RLock rLock = redissonLockService.getLock("order_sn" + memberId); rLock.lock(); try { Object resp = apiOrderNewService.createOrder(getLoginId(),req,1); if ("amount_not_enough".equals(resp)) { return BaseResult.error(ExceptionEnum.AMOUNT_ERROR.CODE, ExceptionEnum.AMOUNT_ERROR.MSG); } else { return BaseResult.success(resp); } // return BaseResult.success(resp); } catch (CustomAppException e) { return BaseResult.error(e.getCode(), e.getMessage()); } finally { rLock.unlock(); } // rLock.unlock(); // return resp==null?BaseResult.error("下单失败"):BaseResult.success(resp); // return BaseResult.success(apiOrderNewService.createOrder(getLoginId(),req,1)); } @GetMapping(value = "/tradeQuery") @AccessToken @ControllerLog("二维码支付结果查询") public BaseResult tradeQuery(@RequestParam(value = "orderSn") String orderSn, @RequestParam(value = "payType") Integer payType) { if (StringUtils.isEmpty(orderSn) || Objects.isNull(payType)) { return BaseResult.error("orderSn以及payType参数必传!"); } PayTradeQueryDto result = apiPayService.tradeQuery(orderSn, payType); return BaseResult.success(result); } }