From bdf9983a1e03986e5304d1b87f1c6f80a5d908ed Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 17 Dec 2021 11:46:18 +0800
Subject: [PATCH] Merge branch 'master' of http://120.27.238.55:7000/r/xc-video

---
 src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java |  121 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 121 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java
new file mode 100644
index 0000000..b87a934
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java
@@ -0,0 +1,121 @@
+package cc.mrbird.febs.pay.service.impl;
+
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.AppContants;
+import cc.mrbird.febs.common.utils.LoginUserUtil;
+import cc.mrbird.febs.common.utils.MallUtils;
+import cc.mrbird.febs.pay.model.AliPayPassbackModel;
+import cc.mrbird.febs.pay.properties.AliPayProperties;
+import cc.mrbird.febs.pay.service.IPayService;
+import cc.mrbird.febs.video.dto.VipBuyDto;
+import cc.mrbird.febs.video.entity.DataDictionaryCustom;
+import cc.mrbird.febs.video.entity.VideoMemberEntity;
+import cc.mrbird.febs.video.entity.VideoVipOrderInfoEntity;
+import cc.mrbird.febs.video.mapper.DataDictionaryCustomMapper;
+import cc.mrbird.febs.video.mapper.VideoMemberMapper;
+import cc.mrbird.febs.video.mapper.VideoVipOrderInfoMapper;
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.domain.AlipayTradeAppPayModel;
+import com.alipay.api.response.AlipayTradeAppPayResponse;
+import com.ijpay.alipay.AliPayApi;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+@Slf4j
+@Service
+public class PayServiceImpl implements IPayService {
+
+    @Resource
+    private AliPayProperties aliPayProperties;
+    @Resource
+    private DataDictionaryCustomMapper dataDictionaryCustomMapper;
+
+    @Resource
+    private VideoVipOrderInfoMapper videoVipOrderInfoMapper;
+
+    @Resource
+    private VideoMemberMapper videoMemberMapper;
+
+    @Value("${spring.profiles.active}")
+    private String active;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public String aliPay(VipBuyDto vipBuyDto) {
+        VideoMemberEntity loginUser = LoginUserUtil.getLoginUser();
+
+        DataDictionaryCustom data = dataDictionaryCustomMapper.selectDataByTypeAndCode(AppContants.DIC_VIP_COST, vipBuyDto.getType());
+        if (data == null) {
+            throw new FebsException("参数错误");
+        }
+
+        VideoVipOrderInfoEntity vipOrderInfo = new VideoVipOrderInfoEntity();
+        vipOrderInfo.setOrderNo(MallUtils.getOrderNum());
+        vipOrderInfo.setPayType(VideoVipOrderInfoEntity.PAY_TYPE_ALIPAY);
+        vipOrderInfo.setStatus(VideoVipOrderInfoEntity.PAY_STATUS_WAIT);
+        vipOrderInfo.setMemberId(loginUser.getId());
+        vipOrderInfo.setGoodsType(vipBuyDto.getType());
+        vipOrderInfo.setAmount(new BigDecimal(data.getValue()));
+        videoVipOrderInfoMapper.insert(vipOrderInfo);
+
+        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
+        model.setSubject("会员支付");
+        model.setBody(data.getDescription());
+        model.setOutTradeNo(vipOrderInfo.getOrderNo());
+        model.setTimeoutExpress("15m");
+
+        if ("dev".equals(active) || "test".equals(active)) {
+            model.setTotalAmount("0.01");
+        } else {
+            model.setTotalAmount(vipOrderInfo.getAmount().toString());
+        }
+
+        AliPayPassbackModel passbackModel = new AliPayPassbackModel();
+        passbackModel.setOrderId(vipOrderInfo.getId());
+        passbackModel.setMemberId(vipOrderInfo.getMemberId());
+        model.setPassbackParams(JSONObject.toJSONString(passbackModel));
+
+        model.setProductCode("QUICK_MSECURITY_PAY");
+        AlipayTradeAppPayResponse resp = null;
+        try {
+            resp = AliPayApi.appPayToResponse(model, aliPayProperties.getNoticeUrl());
+        } catch (AlipayApiException e) {
+            log.error("支付宝支付异常", e);
+            throw new FebsException("支付宝支付异常");
+        }
+        return resp.getBody();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void aliCallback(Map<String, String> params) {
+        String modelStr = params.get("passback_params");
+
+        AliPayPassbackModel passback = JSONObject.parseObject(modelStr, AliPayPassbackModel.class);
+
+        VideoVipOrderInfoEntity orderInfo = videoVipOrderInfoMapper.selectById(passback.getOrderId());
+        if (orderInfo.getPayType() != 1) {
+            return;
+        }
+
+        VideoMemberEntity member = videoMemberMapper.selectById(orderInfo.getMemberId());
+
+        orderInfo.setStatus(VideoVipOrderInfoEntity.PAY_STATUS_PAY);
+        orderInfo.setPayTime(new Date());
+        orderInfo.setPayTraderNo(params.get("trade_no"));
+        videoVipOrderInfoMapper.updateById(orderInfo);
+    }
+}

--
Gitblit v1.9.1