package com.nova.sankuai.controller.v1.platform; import com.baomidou.mybatisplus.core.metadata.IPage; import com.nova.sankuai.domain.dto.*; import com.nova.sankuai.domain.entity.AlipayRefundRecord; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.nova.sankuai.domain.entity.AlipayOrderInfo; import com.nova.sankuai.domain.vo.AlipayOrderInfoVO; import com.nova.sankuai.infra.config.CommonException; import com.nova.sankuai.infra.utils.Jsr303Validator; import com.nova.sankuai.infra.utils.ResultJson; import com.nova.sankuai.security.UserDetail; import com.nova.sankuai.service.IAlipayPlatformService;import com.nova.sankuai.service.IVipCardOrderService; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.Map; @Slf4j @RestController public class AlipayPlatformController { private final IAlipayPlatformService alipayPlatformService; private final Jsr303Validator validator; @Resource private IVipCardOrderService vipCardOrderService; public AlipayPlatformController(IAlipayPlatformService alipayPlatformService, Jsr303Validator validator) { this.alipayPlatformService = alipayPlatformService; this.validator = validator; } @PostMapping(value = "/api/v2/alipay-platform/order-create") ResultJson orderCreateV2(@RequestBody String encodedString) { AlipayOrderCreateDTO createDTO = alipayPlatformService.decode(encodedString, AlipayOrderCreateDTO.class); if (validator.isLegal(createDTO)) { String form = alipayPlatformService.orderCreate(createDTO); return ResultJson.ok(form); } throw new CommonException(validator.getValidationMsg(createDTO)); } @PostMapping(value = "/api/v1/alipay-platform/order-create") ResultJson> orderCreate(@RequestBody String encodedString) { AlipayOrderCreateDTO createDTO = alipayPlatformService.decode(encodedString, AlipayOrderCreateDTO.class); if (validator.isLegal(createDTO)) { String form = alipayPlatformService.orderCreate(createDTO); return ResultJson.ok(alipayPlatformService.sign(form)); } throw new CommonException(validator.getValidationMsg(createDTO)); } @PostMapping("/api/v1/alipay-platform/order-query") ResultJson> orderQuery(@RequestBody String encodedString) { AlipayOrderQueryDTO queryDTO = alipayPlatformService.decode(encodedString, AlipayOrderQueryDTO.class); if (validator.isLegal(queryDTO)) { AlipayOrderInfoVO res = alipayPlatformService.orderQuery(queryDTO); return ResultJson.ok(alipayPlatformService.sign(alipayPlatformService.toJsonString(res))); } throw new CommonException(validator.getValidationMsg(queryDTO)); } @PostMapping("/api/v1/alipay-platform/notify") String alipayNotify(HttpServletRequest request) { Map paramMap = request.getParameterMap(); alipayPlatformService.handleNotify(paramMap); return "success"; } @ApiOperation("退款申请提交") @PostMapping("/api/v2/alipay-platform/refund-submit") ResultJson refundSubmit(@RequestBody AlipayRefundDTO refundDTO) { alipayPlatformService.refund(refundDTO); return ResultJson.ok("退款申请提交成功"); } @ApiOperation("退款金额确定") @PostMapping("/api/v2/alipay-platform/refund-amount") ResultJson refundAmount(@AuthenticationPrincipal UserDetail user) { return ResultJson.ok(alipayPlatformService.refundAmountCalculate(user)); } @ApiOperation("退款申请分页查询") @PostMapping("/api/v2/alipay-platform/refund-list") ResultJson> refundList(@RequestBody AlipayRefundQueryDTO queryDTO) { IPage page = alipayPlatformService.refundList(queryDTO); return ResultJson.ok(page); } @ApiOperation("退款申请状态修改") @PostMapping("/api/v2/alipay-platform/refund-finish") ResultJson refundFinish(@RequestBody AlipayRefundFinishDTO finishDTO) { alipayPlatformService.refundFinish(finishDTO); return ResultJson.ok("退款处理完成"); } @PostMapping("/api/v1/alipay-platform/notifyInnerVipOrder") @ApiOperation(value = "回调更新内部会员服务订单信息") public String notifyInnerVipOrder(@RequestBody String params) { try { log.info("回调更新内部会员服务订单信息开始,原始参数:" + params); JSONObject json = JSONUtil.parseObj(params); String encodedString = json.getStr("value"); AlipayOrderInfo alipayOrderInfo = alipayPlatformService.decodeByPublicKey(encodedString, AlipayOrderInfo.class); vipCardOrderService.notifyInnerVipOrder(alipayOrderInfo); return "ok"; } catch (Exception e) { return "fail"; } } }