admin
2021-04-12 5129d2c63fbef70c6ee45ba5ec12654937e05231
seata集成
3 文件已重命名
16个文件已修改
9个文件已添加
809 ■■■■ 已修改文件
libs/facade-goldcorn-0.0.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
libs/lib-common.jar 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/AlipayController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/TestController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/admin/api/VipAdminController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/api/VIPController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/vip/OrderRecordDao.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/vip/UserVIPInfoDao.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/domain/vip/OrderRecord.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/pptv/PPTVVipManager.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/inter/order/OrderService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/inter/vip/VIPService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/manager/GoldCornManager.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/manager/SeataManagerTest.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/SpringContext.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/consumer.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/domain/vip/OrderRecord.hbm.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/env-dev/logback.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/file.conf 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/hibernate.cfg.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/registry.conf 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/seata.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/spring.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/dubbo/GoldCornTest.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/dubbo/SeataTest.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/vip/VIPTest.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libs/facade-goldcorn-0.0.1.jar
Binary files differ
libs/lib-common.jar
Binary files differ
pom.xml
@@ -17,6 +17,7 @@
        <dubbo.version>2.7.5</dubbo.version>
        <curator.version>4.0.1</curator.version>
        <zookeeper.version>3.4.6</zookeeper.version>
        <seata.version>1.4.1</seata.version>
    </properties>
    <dependencies>
@@ -44,6 +45,24 @@
            <scope>system</scope>
            <systemPath>${basedir}/libs/javax.servlet-api-3.1.0.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>com.ks</groupId>
            <artifactId>lib-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>system</scope>
            <systemPath>${basedir}/libs/lib-common.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>com.ks</groupId>
            <artifactId>facade-goldcorn</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>system</scope>
            <systemPath>${basedir}/libs/facade-goldcorn-0.0.1.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>showapi</groupId>
@@ -435,6 +454,7 @@
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>1.7.1.RELEASE</version>
        </dependency>
        <dependency>
@@ -473,6 +493,12 @@
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
@@ -487,12 +513,25 @@
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>${spring.mongodb.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb-cross-store</artifactId>
            <version>${spring.mongodb.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
@@ -534,13 +573,34 @@
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-solr</artifactId>
            <version>2.1.3.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>io.netty</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.25.Final</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ch.ethz.ganymed/ganymed-ssh2 -->
        <dependency>
@@ -654,6 +714,18 @@
            <!--<artifactId>guava</artifactId>-->
            <!--</exclusion>-->
            <!--</exclusions>-->
            <exclusions>
                <exclusion>
                    <groupId>io.netty</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- zookeeper -->
        <dependency>
@@ -671,7 +743,7 @@
                </exclusion>
                <exclusion>
                    <groupId>io.netty</groupId>
                    <artifactId>netty</artifactId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
@@ -691,6 +763,42 @@
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-all</artifactId>
            <version>${seata.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.netty</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--<dependency>-->
        <!--<groupId>io.seata</groupId>-->
        <!--<artifactId>seata-spring-boot-starter</artifactId>-->
        <!--<version>${seata.version}</version>-->
        <!--</dependency>-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.1</version>
        </dependency>
@@ -732,6 +840,43 @@
                            <goal>install-file</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>install-lib-common</id>
                        <phase>clean</phase>
                        <configuration>
                            <file>${basedir}/libs/lib-common.jar</file>
                            <repositoryLayout>default</repositoryLayout>
                            <groupId>com.ks</groupId>
                            <artifactId>lib-common</artifactId>
                            <version>0.0.1-SNAPSHOT</version>
                            <packaging>jar</packaging>
                            <generatePom>true</generatePom>
                        </configuration>
                        <goals>
                            <goal>install-file</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>install-facade-goldcorn</id>
                        <phase>clean</phase>
                        <configuration>
                            <file>${basedir}/libs/facade-goldcorn-0.0.1.jar</file>
                            <repositoryLayout>default</repositoryLayout>
                            <groupId>com.ks</groupId>
                            <artifactId>facade-goldcorn</artifactId>
                            <version>0.0.1-SNAPSHOT</version>
                            <packaging>jar</packaging>
                            <generatePom>true</generatePom>
                        </configuration>
                        <goals>
                            <goal>install-file</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
src/main/java/com/yeshi/buwan/controller/AlipayController.java
@@ -2,11 +2,7 @@
import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.yeshi.buwan.domain.vip.VIPOrderRecord;
import com.yeshi.buwan.exception.vip.VIPException;
import com.yeshi.buwan.service.inter.order.OrderService;
import com.yeshi.buwan.service.inter.vip.VIPService;
import com.yeshi.buwan.util.RedisManager;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.log.LoggerUtil;
@@ -14,10 +10,8 @@
import com.yeshi.buwan.util.vip.VIPOrderUtil;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.alipay.AlipayH5PayUtil;
import org.yeshi.utils.entity.alipay.AlipayAppInfo;
import javax.annotation.Resource;
@@ -25,8 +19,6 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
src/main/java/com/yeshi/buwan/controller/TestController.java
@@ -1,7 +1,7 @@
package com.yeshi.buwan.controller;
import com.yeshi.buwan.domain.system.DetailSystem;
import com.yeshi.buwan.domain.vip.VIPOrderRecord;
import com.yeshi.buwan.domain.vip.OrderRecord;
import com.yeshi.buwan.exception.PPTVException;
import com.yeshi.buwan.exception.vip.VIPException;
import com.yeshi.buwan.funtv.FunTVUtil;
@@ -60,9 +60,9 @@
    @RequestMapping("vipPay")
    public void vipPay(String id) {
        VIPOrderRecord record = orderService.getOrderRecord(id);
        OrderRecord record = orderService.getOrderRecord(id);
        try {
            orderService.paySuccess(record.getId(), VIPOrderRecord.PAY_WAY_ALIPAY, record.getMoney(), new Date());
            orderService.paySuccess(record.getId(), OrderRecord.PAY_WAY_ALIPAY, record.getMoney(), new Date());
        } catch (VIPException e) {
            e.printStackTrace();
        } catch (PPTVException e) {
src/main/java/com/yeshi/buwan/controller/admin/api/VipAdminController.java
@@ -3,7 +3,7 @@
import com.google.gson.*;
import com.yeshi.buwan.domain.user.LoginUser;
import com.yeshi.buwan.domain.vip.UserVIPInfo;
import com.yeshi.buwan.domain.vip.VIPOrderRecord;
import com.yeshi.buwan.domain.vip.OrderRecord;
import com.yeshi.buwan.service.inter.LoginUserService;
import com.yeshi.buwan.service.inter.order.OrderService;
import com.yeshi.buwan.service.inter.vip.VIPService;
@@ -110,13 +110,13 @@
        Integer state = null;
        if (pay != null) {
            if (pay) {
                state = VIPOrderRecord.STATE_PAY;
                state = OrderRecord.STATE_PAY;
            } else {
                state = VIPOrderRecord.STATE_NOT_PAY;
                state = OrderRecord.STATE_NOT_PAY;
            }
        }
        List<VIPOrderRecord> list = orderService.listOrderRecord(uid, state, page, Constant.pageCount);
        List<OrderRecord> list = orderService.listOrderRecord(uid, state, page, Constant.pageCount);
        long count = orderService.countOrderRecord(uid, state);
        JSONObject data = new JSONObject();
        data.put("pageEntity", new PageEntity(page, Constant.pageCount, (int) count));
src/main/java/com/yeshi/buwan/controller/api/VIPController.java
@@ -1,13 +1,11 @@
package com.yeshi.buwan.controller.api;
import com.google.gson.*;
import com.yeshi.buwan.domain.system.SystemConfig;
import com.yeshi.buwan.domain.user.LoginUser;
import com.yeshi.buwan.domain.vip.*;
import com.yeshi.buwan.exception.goldcorn.GoldCornException;
import com.yeshi.buwan.exception.order.OrderException;
import com.yeshi.buwan.exception.order.PayException;
import com.yeshi.buwan.exception.vip.VIPException;
import com.yeshi.buwan.pptv.entity.VideoPPTVMap;
import com.yeshi.buwan.service.inter.LoginUserService;
import com.yeshi.buwan.service.inter.juhe.PPTVService;
@@ -127,8 +125,8 @@
        }).create();
        JSONObject root = new JSONObject();
        List<VIPOrderRecord> list = orderService.listOrderRecord(loginUid, null, page, Constant.pageCount);
        for (VIPOrderRecord record : list) {
        List<OrderRecord> list = orderService.listOrderRecord(loginUid, null, page, Constant.pageCount);
        for (OrderRecord record : list) {
            record.setIpInfo(null);
            record.setUpdateTime(null);
        }
@@ -189,7 +187,7 @@
            }
        }
        VIPOrderRecord record = new VIPOrderRecord();
        OrderRecord record = new OrderRecord();
        record.setUid(loginUid);
        if (vipPrice != null)
            record.setType(vipPrice.getType());
@@ -199,7 +197,7 @@
        record.setGoldCorn(goldCorn);
        record.setMoney(vipPrice.getActualPrice());
        record.setPayWay(payWay);
        record.setState(VIPOrderRecord.STATE_NOT_PAY);
        record.setState(OrderRecord.STATE_NOT_PAY);
        record.setIpInfo(IPUtil.getRemotIP(request) + ":" + IPUtil.getRemotePort(request));
        try {
            orderService.createOrder(record);
@@ -221,7 +219,7 @@
        String orderNo = VIPOrderUtil.getOutOrderNo(record.getOrderType(), record.getId());
        switch (payWay) {
            case VIPOrderRecord
            case OrderRecord
                    .PAY_WAY_ALIPAY: {
                //生成支付宝支付订单
                String form = VipUtil.getVipChargeAlipayForm(record.getId(), orderNo, record.getMoney());
@@ -235,7 +233,7 @@
            }
            case VIPOrderRecord
            case OrderRecord
                    .PAY_WAY_WX: {
                //生成微信支付订单
                try {
@@ -266,14 +264,14 @@
    @ResponseBody
    @RequestSerializableByKey(key = "'vip-checkPay-'+#id")
    public String checkPay(AcceptData acceptData, String loginUid, String id) {
        VIPOrderRecord record = orderService.getOrderRecord(id);
        OrderRecord record = orderService.getOrderRecord(id);
        if (record == null || !record.getUid().equalsIgnoreCase(loginUid)) {
            return JsonUtilV2.loadFalseJson("记录不存在/不是您的订单");
        }
        record = orderService.checkOrderPayState(id);
        //未支付
        if (record != null && record.getState() != VIPOrderRecord.STATE_PAY) {
        if (record != null && record.getState() != OrderRecord.STATE_PAY) {
            return JsonUtilV2.loadFalseJson(1, "支付未完成");
        }
src/main/java/com/yeshi/buwan/dao/vip/OrderRecordDao.java
File was renamed from src/main/java/com/yeshi/buwan/dao/vip/VIPOrderRecordDao.java
@@ -2,18 +2,18 @@
import com.yeshi.buwan.dao.base.BaseDao;
import com.yeshi.buwan.domain.vip.OrderType;
import com.yeshi.buwan.domain.vip.VIPOrderRecord;
import com.yeshi.buwan.domain.vip.OrderRecord;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class VIPOrderRecordDao extends BaseDao<VIPOrderRecord> {
public class OrderRecordDao extends BaseDao<OrderRecord> {
    private String getHql(DaoQuery daoQuery) {
        String hql = "from VIPOrderRecord r where 1=1";
        String hql = "from OrderRecord r where 1=1";
        if (daoQuery.state != null) {
            hql += " and r.state=" + daoQuery.state;
@@ -32,7 +32,7 @@
    }
    public List<VIPOrderRecord> list(DaoQuery daoQuery) {
    public List<OrderRecord> list(DaoQuery daoQuery) {
        return super.list(getHql(daoQuery), daoQuery.start, daoQuery.count, null);
    }
src/main/java/com/yeshi/buwan/dao/vip/UserVIPInfoDao.java
@@ -2,7 +2,6 @@
import com.yeshi.buwan.dao.base.BaseDao;
import com.yeshi.buwan.domain.vip.UserVIPInfo;
import com.yeshi.buwan.domain.vip.VIPOrderRecord;
import org.springframework.stereotype.Repository;
@Repository
src/main/java/com/yeshi/buwan/domain/vip/OrderRecord.java
File was renamed from src/main/java/com/yeshi/buwan/domain/vip/VIPOrderRecord.java
@@ -4,7 +4,7 @@
import java.util.Date;
//会员订单记录
public class VIPOrderRecord {
public class OrderRecord {
    //未支付
    public final static int STATE_NOT_PAY = 0;
src/main/java/com/yeshi/buwan/pptv/PPTVVipManager.java
@@ -2,7 +2,7 @@
import com.yeshi.buwan.domain.user.LoginUserExtra;
import com.yeshi.buwan.domain.vip.OrderType;
import com.yeshi.buwan.domain.vip.VIPOrderRecord;
import com.yeshi.buwan.domain.vip.OrderRecord;
import com.yeshi.buwan.domain.vip.VIPPrice;
import com.yeshi.buwan.exception.PPTVException;
import com.yeshi.buwan.exception.vip.VIPException;
@@ -39,8 +39,8 @@
     * @throws VIPException
     */
    @Transactional(rollbackFor = Exception.class)
    public void buyVIP(VIPOrderRecord record) throws PPTVException, VIPException {
        if (record.getState() != VIPOrderRecord.STATE_PAY) {
    public void buyVIP(OrderRecord record) throws PPTVException, VIPException {
        if (record.getState() != OrderRecord.STATE_PAY) {
            throw new VIPException(11, "尚未支付成功");
        }
@@ -80,8 +80,8 @@
     * @throws VIPException
     */
    @Transactional(rollbackFor = Exception.class)
    public void buyVideo(VIPOrderRecord record) throws PPTVException, VIPException {
        if (record.getState() != VIPOrderRecord.STATE_PAY) {
    public void buyVideo(OrderRecord record) throws PPTVException, VIPException {
        if (record.getState() != OrderRecord.STATE_PAY) {
            throw new VIPException(11, "尚未支付成功");
        }
src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java
@@ -2,10 +2,10 @@
import com.alipay.api.AlipayApiException;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.yeshi.buwan.dao.vip.VIPOrderRecordDao;
import com.yeshi.buwan.dao.vip.OrderRecordDao;
import com.yeshi.buwan.domain.vip.OrderType;
import com.yeshi.buwan.domain.vip.UserVIPInfo;
import com.yeshi.buwan.domain.vip.VIPOrderRecord;
import com.yeshi.buwan.domain.vip.OrderRecord;
import com.yeshi.buwan.domain.vip.VIPPriceType;
import com.yeshi.buwan.dto.order.PayWayInfoDTO;
import com.yeshi.buwan.exception.PPTVException;
@@ -15,11 +15,13 @@
import com.yeshi.buwan.exception.vip.VIPException;
import com.yeshi.buwan.pptv.PPTVVipManager;
import com.yeshi.buwan.service.inter.order.OrderService;
import com.yeshi.buwan.service.manager.GoldCornManager;
import com.yeshi.buwan.util.Constant;
import com.yeshi.buwan.util.RedisManager;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.user.VipUtil;
import com.yeshi.buwan.util.vip.VIPOrderUtil;
import io.seata.spring.annotation.GlobalTransactional;
import org.hibernate.Query;
import org.hibernate.Session;
import org.slf4j.Logger;
@@ -42,13 +44,12 @@
@Service
public class OrderServiceImpl implements OrderService {
    private static Logger logger = LoggerFactory.getLogger("OrderService");
    private static Logger orderLogger = LoggerFactory.getLogger("order");
    @Resource
    private VIPOrderRecordDao vipOrderRecordDao;
    private OrderRecordDao vipOrderRecordDao;
    @Resource
    private PPTVVipManager pptvVipManager;
@@ -56,15 +57,18 @@
    @Resource
    private RedisManager redisManager;
    @Resource
    private GoldCornManager goldCornManager;
    @Transactional(rollbackFor = Exception.class)
    @Override
    public VIPOrderRecord createOrder(VIPOrderRecord record) throws OrderException {
    public OrderRecord createOrder(OrderRecord record) throws OrderException {
        if (record.getMoney() == null || record.getType() == null || record.getOrderType() == null || record.getUid() == null) {
            throw new OrderException(1, "参数不完整");
        }
        if (record.getState() == null) {
            record.setState(VIPOrderRecord.STATE_NOT_PAY);
            record.setState(OrderRecord.STATE_NOT_PAY);
        }
        if (record.getCreateTime() == null) {
@@ -80,16 +84,23 @@
    }
    @Transactional(rollbackFor = Exception.class)
    @GlobalTransactional(timeoutMills = 30000, name = "buwan-order", rollbackFor = Exception.class)
    @Override
    public PayWayInfoDTO payOrder(VIPOrderRecord record) throws OrderException, GoldCornException, PayException {
    public PayWayInfoDTO payOrder(OrderRecord record) throws OrderException, GoldCornException, PayException {
        //TODO 影视豆支付
        String orderNo = VIPOrderUtil.getOutOrderNo(record.getOrderType(), record.getId());
        switch (record.getPayWay()) {
            case VIPOrderRecord
            case OrderRecord
                    .PAY_WAY_ALIPAY_GOLDCORN:
                //TODO 扣影视豆
                try {
                    goldCornManager.consumeGoldCorn(record, record.getGoldCorn());
                } catch (Exception e) {
                    throw new GoldCornException(1, "影视豆扣除出错");
                }
                orderLogger.info("订单影视豆支付成功:id-{}", record.getId());
            case VIPOrderRecord
            case OrderRecord
                    .PAY_WAY_ALIPAY: {
                //生成支付宝支付订单
                String form = VipUtil.getVipChargeAlipayForm(record.getId(), orderNo, record.getMoney());
@@ -98,14 +109,18 @@
                redisManager.cacheCommonString(id, form, 120);
                String payUrl = Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + id;
                orderLogger.info("订单创建支付宝支付链接成功:id-{} 链接-{}", record.getId(), payUrl);
                return new PayWayInfoDTO(VIPOrderRecord
                return new PayWayInfoDTO(OrderRecord
                        .PAY_WAY_ALIPAY, payUrl);
            }
            case VIPOrderRecord
            case OrderRecord
                    .PAY_WAY_WX_GOLDCORN:
                //TODO 扣影视豆
                try {
                    goldCornManager.consumeGoldCorn(record, record.getGoldCorn());
                } catch (Exception e) {
                    throw new GoldCornException(1, "影视豆扣除出错");
                }
                orderLogger.info("订单影视豆支付成功:id-{} 类型-{}", record.getId(), record.getOrderType().name());
            case VIPOrderRecord
            case OrderRecord
                    .PAY_WAY_WX: {
                //生成微信支付订单
                try {
@@ -117,15 +132,19 @@
                    }
                    String payUrl = VipUtil.createWXOrder(record.getId(), record.getIpInfo(), orderNo, record.getMoney(), title);
                    orderLogger.info("订单创建微信支付链接成功:id-{} 链接-{}", record.getId(), payUrl);
                    return new PayWayInfoDTO(VIPOrderRecord.PAY_WAY_WX, payUrl);
                    return new PayWayInfoDTO(OrderRecord.PAY_WAY_WX, payUrl);
                } catch (Exception e) {
                    logger.error("生成微信支付订单出错", e);
                    throw new PayException(2, e.getMessage());
                }
            }
            case VIPOrderRecord.PAY_WAY_GOLDCORN: {
                //TODO 扣影视豆
            case OrderRecord.PAY_WAY_GOLDCORN: {
                try {
                    goldCornManager.consumeGoldCorn(record, record.getGoldCorn());
                } catch (Exception e) {
                    throw new GoldCornException(1, "影视豆扣除出错");
                }
                orderLogger.info("订单影视豆支付成功:id-{}", record.getId());
            }
            break;
@@ -133,49 +152,49 @@
        throw new OrderException(1, "支付方式不存在");
    }
    private int getPayState(VIPOrderRecord record) {
    private int getPayState(OrderRecord record) {
        switch (record.getPayWay()) {
            case VIPOrderRecord.PAY_WAY_ALIPAY:
            case VIPOrderRecord.PAY_WAY_WX:
            case OrderRecord.PAY_WAY_ALIPAY:
            case OrderRecord.PAY_WAY_WX:
                if (record.getMoneyPay() != null && record.getMoneyPay())
                    return VIPOrderRecord.STATE_PAY;
                    return OrderRecord.STATE_PAY;
                else
                    return VIPOrderRecord.STATE_NOT_PAY;
            case VIPOrderRecord.PAY_WAY_ALIPAY_GOLDCORN:
            case VIPOrderRecord.PAY_WAY_WX_GOLDCORN:
                    return OrderRecord.STATE_NOT_PAY;
            case OrderRecord.PAY_WAY_ALIPAY_GOLDCORN:
            case OrderRecord.PAY_WAY_WX_GOLDCORN:
                if (record.getMoneyPay() != null && record.getMoneyPay() && record.getGoldCornPay() != null && record.getGoldCornPay())
                    return VIPOrderRecord.STATE_PAY;
                    return OrderRecord.STATE_PAY;
                else
                    return VIPOrderRecord.STATE_NOT_PAY;
            case VIPOrderRecord.PAY_WAY_GOLDCORN:
                    return OrderRecord.STATE_NOT_PAY;
            case OrderRecord.PAY_WAY_GOLDCORN:
                if (record.getGoldCornPay() != null && record.getGoldCornPay())
                    return VIPOrderRecord.STATE_PAY;
                    return OrderRecord.STATE_PAY;
                else
                    return VIPOrderRecord.STATE_NOT_PAY;
                    return OrderRecord.STATE_NOT_PAY;
        }
        return VIPOrderRecord.STATE_NOT_PAY;
        return OrderRecord.STATE_NOT_PAY;
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public VIPOrderRecord paySuccess(String id, int payWay, BigDecimal payMoney, Date payTime) throws
    public OrderRecord paySuccess(String id, int payWay, BigDecimal payMoney, Date payTime) throws
            VIPException, PPTVException {
        orderLogger.info("订单支付成功目的执行:id-{},支付方式-{},支付金额-{},支付时间-{}", id, payWay, payMoney, payTime.getTime());
        Session session = vipOrderRecordDao.getSession();
        //修改记录
        Query query = session.createSQLQuery("select * from wk_vip_order_record r where r.id=? for update").addEntity(VIPOrderRecord.class).setCacheable(false).setParameter(0, id);
        List<VIPOrderRecord> list = query.list();
        Query query = session.createSQLQuery("select * from wk_vip_order_record r where r.id=? for update").addEntity(OrderRecord.class).setCacheable(false).setParameter(0, id);
        List<OrderRecord> list = query.list();
        if (list != null && list.size() > 0) {
            VIPOrderRecord record = list.get(0);
            if (record.getState() != VIPOrderRecord.STATE_NOT_PAY)
            OrderRecord record = list.get(0);
            if (record.getState() != OrderRecord.STATE_NOT_PAY)
                throw new VIPException(1, "订单未处于待支付状态");
            if (record.getPayWay() != VIPOrderRecord.PAY_WAY_GOLDCORN) {
            if (record.getPayWay() != OrderRecord.PAY_WAY_GOLDCORN) {
                record.setPayMoney(payMoney);
                record.setMoneyPay(true);
            } else {
@@ -187,7 +206,7 @@
            record.setState(getPayState(record));
            //已经支付成功
            if (record.getState() == VIPOrderRecord.STATE_PAY) {
            if (record.getState() == OrderRecord.STATE_PAY) {
                session.createSQLQuery("insert into wk_vip_order_pay_success(id,create_time) value(?,now())").setParameter(0, id).executeUpdate();
            }
@@ -202,7 +221,7 @@
                session.update(record);
                if (record.getState() == VIPOrderRecord.STATE_PAY) {
                if (record.getState() == OrderRecord.STATE_PAY) {
                    orderLogger.info("订单全部支付成功:id-{}", id);
                    //购买VIP
                    pptvVipManager.buyVIP(record);
@@ -217,7 +236,7 @@
                record.setVipEndTime(new Date(payTime.getTime() + 1000 * 60 * 60L * 24 * 7));
                session.update(record);
                //单片购买成功(7天有效期)
                if (record.getState() == VIPOrderRecord.STATE_PAY) {
                if (record.getState() == OrderRecord.STATE_PAY) {
                    orderLogger.info("订单全部支付成功:id-{}", id);
                    //购买单片
                    pptvVipManager.buyVideo(record);
@@ -236,32 +255,34 @@
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void cancelOrder(String id, String reason) throws OrderException {
    public void cancelOrder(String id, String reason) throws OrderException, GoldCornException {
        Session session = vipOrderRecordDao.getSession();
        Query query = session.createSQLQuery("select * from wk_vip_order_record r where r.id=? for update").addEntity(VIPOrderRecord.class).setCacheable(false).setParameter(0, id);
        List<VIPOrderRecord> list = query.list();
        Query query = session.createSQLQuery("select * from wk_vip_order_record r where r.id=? for update").addEntity(OrderRecord.class).setCacheable(false).setParameter(0, id);
        List<OrderRecord> list = query.list();
        //订单不存在
        if (list == null || list.size() == 0)
            throw new OrderException(1, "订单不存在");
        VIPOrderRecord record = list.get(0);
        if (record.getState() == VIPOrderRecord.STATE_PAY) {
        OrderRecord record = list.get(0);
        if (record.getState() == OrderRecord.STATE_PAY) {
            throw new OrderException(1, "已支付成功的订单不能取消");
        }
        if (record.getPayWay() != VIPOrderRecord.PAY_WAY_GOLDCORN && record.getMoneyPay() != null && record.getMoneyPay()) {
        if (record.getPayWay() != OrderRecord.PAY_WAY_GOLDCORN && record.getMoneyPay() != null && record.getMoneyPay()) {
            throw new OrderException(2, "资金支付成功的订单不能取消");
        }
        //返回豆
        if (record.getGoldCornPay() != null && record.getGoldCornPay() && record.getGoldCorn() != null && record.getGoldCorn() > 0) {
            //TODO 退回影视豆
            try {
                goldCornManager.drawbackGoldCorn(record);
            } catch (Exception e) {
                throw new GoldCornException(1, "影视豆退款成功");
            }
        }
        //设置订单状态
        record.setState(VIPOrderRecord.STATE_CANCEL);
        record.setState(OrderRecord.STATE_CANCEL);
        record.setUpdateTime(new Date());
        record.setRemarks(reason);
        vipOrderRecordDao.update(record);
@@ -271,13 +292,13 @@
    @Transactional(rollbackFor = Exception.class)
    @Override
    public VIPOrderRecord checkOrderPayState(String id) {
        VIPOrderRecord record = vipOrderRecordDao.find(VIPOrderRecord.class, id);
        if (record.getState() == VIPOrderRecord.STATE_PAY)
    public OrderRecord checkOrderPayState(String id) {
        OrderRecord record = vipOrderRecordDao.find(OrderRecord.class, id);
        if (record.getState() == OrderRecord.STATE_PAY)
            return record;
        switch (record.getPayWay()) {
            case VIPOrderRecord.PAY_WAY_ALIPAY: {
            case OrderRecord.PAY_WAY_ALIPAY: {
                //支付宝
                AlipayTradeQueryResponse res = null;
                try {
@@ -285,7 +306,7 @@
                    //支付成功
                    if (res.isSuccess() && "TRADE_SUCCESS".equalsIgnoreCase(res.getTradeStatus())) {
                        try {
                            return paySuccess(id, VIPOrderRecord.PAY_WAY_ALIPAY, new BigDecimal(res.getTotalAmount()), new Date());
                            return paySuccess(id, OrderRecord.PAY_WAY_ALIPAY, new BigDecimal(res.getTotalAmount()), new Date());
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
@@ -296,7 +317,7 @@
            }
            break;
            case VIPOrderRecord.PAY_WAY_WX: {
            case OrderRecord.PAY_WAY_WX: {
                //微信
                try {
                    WXPayOrderInfoV3 info = WXPayV3Util.getPayOrderInfo(VIPOrderUtil.getOutOrderNo(record.getOrderType(), id), VipUtil.getWXAPP());
@@ -316,9 +337,9 @@
    @Override
    public List<VIPOrderRecord> listOrderRecord(String uid, Integer state, int page, int pageSize) {
    public List<OrderRecord> listOrderRecord(String uid, Integer state, int page, int pageSize) {
        VIPOrderRecordDao.DaoQuery query = new VIPOrderRecordDao.DaoQuery();
        OrderRecordDao.DaoQuery query = new OrderRecordDao.DaoQuery();
        query.start = (page - 1) * pageSize;
        query.count = pageSize;
        query.uid = uid;
@@ -329,15 +350,15 @@
    @Override
    public long countOrderRecord(String uid, Integer state) {
        VIPOrderRecordDao.DaoQuery query = new VIPOrderRecordDao.DaoQuery();
        OrderRecordDao.DaoQuery query = new OrderRecordDao.DaoQuery();
        query.uid = uid;
        query.state = state;
        return vipOrderRecordDao.count(query);
    }
    @Override
    public VIPOrderRecord getOrderRecord(String id) {
        return vipOrderRecordDao.find(VIPOrderRecord.class, id);
    public OrderRecord getOrderRecord(String id) {
        return vipOrderRecordDao.find(OrderRecord.class, id);
    }
src/main/java/com/yeshi/buwan/service/inter/order/OrderService.java
@@ -1,6 +1,6 @@
package com.yeshi.buwan.service.inter.order;
import com.yeshi.buwan.domain.vip.VIPOrderRecord;
import com.yeshi.buwan.domain.vip.OrderRecord;
import com.yeshi.buwan.dto.order.PayWayInfoDTO;
import com.yeshi.buwan.exception.PPTVException;
import com.yeshi.buwan.exception.goldcorn.GoldCornException;
@@ -22,7 +22,7 @@
     * @return
     * @throws OrderException
     */
    public VIPOrderRecord createOrder(VIPOrderRecord orderRecord) throws OrderException;
    public OrderRecord createOrder(OrderRecord orderRecord) throws OrderException;
    /**
@@ -32,7 +32,7 @@
     * @param state
     * @return
     */
    public List<VIPOrderRecord> listOrderRecord(String uid, Integer state, int page, int pageSize);
    public List<OrderRecord> listOrderRecord(String uid, Integer state, int page, int pageSize);
    /**
@@ -48,10 +48,10 @@
     *
     * @param id
     */
    public VIPOrderRecord checkOrderPayState(String id);
    public OrderRecord checkOrderPayState(String id);
    public VIPOrderRecord getOrderRecord(String id);
    public OrderRecord getOrderRecord(String id);
    /**
@@ -59,7 +59,7 @@
     *
     * @param record
     */
    public PayWayInfoDTO payOrder(VIPOrderRecord record) throws OrderException, GoldCornException, PayException;
    public PayWayInfoDTO payOrder(OrderRecord record) throws OrderException, GoldCornException, PayException;
    /**
@@ -73,7 +73,7 @@
     * @throws VIPException
     * @throws PPTVException
     */
    public VIPOrderRecord paySuccess(final String id, int payWay, BigDecimal payMoney, Date payTime) throws VIPException, PPTVException;
    public OrderRecord paySuccess(final String id, int payWay, BigDecimal payMoney, Date payTime) throws VIPException, PPTVException;
    /**
@@ -81,7 +81,7 @@
     *
     * @param id
     */
    public void cancelOrder(String id, String reason) throws OrderException;
    public void cancelOrder(String id, String reason) throws OrderException, GoldCornException;
}
src/main/java/com/yeshi/buwan/service/inter/vip/VIPService.java
@@ -1,11 +1,7 @@
package com.yeshi.buwan.service.inter.vip;
import com.yeshi.buwan.domain.vip.UserVIPInfo;
import com.yeshi.buwan.domain.vip.VIPOrderRecord;
import com.yeshi.buwan.exception.PPTVException;
import com.yeshi.buwan.exception.vip.VIPException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
src/main/java/com/yeshi/buwan/service/manager/GoldCornManager.java
New file
@@ -0,0 +1,109 @@
package com.yeshi.buwan.service.manager;
import com.ks.goldcorn.exception.GoldAppException;
import com.ks.goldcorn.exception.GoldTradeException;
import com.ks.goldcorn.exception.GoldUserException;
import com.ks.goldcorn.service.remote.GoldCornTradeService;
import com.yeshi.buwan.domain.vip.OrderType;
import com.yeshi.buwan.domain.vip.OrderRecord;
import com.yeshi.buwan.exception.goldcorn.GoldCornException;
import com.yeshi.buwan.service.inter.system.SystemConfigService;
import com.yeshi.buwan.util.StringUtil;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class GoldCornManager {
    @Resource
    private SystemConfigService systemConfigService;
    @Reference(version = "1.0")
    private GoldCornTradeService goldCornTradeService;
    /**
     * 获取金币系统的用户ID
     *
     * @param uid
     * @return
     * @throws Exception
     */
    public String getUid(String uid) throws Exception {
        String prefix = systemConfigService.getConfigValueByKeyCache("thirdUidPrefix");
        if (StringUtil.isNullOrEmpty(prefix)) {
            throw new Exception("用户ID前缀获取出错");
        }
        return prefix + uid;
    }
    public String getAppCode() throws GoldAppException {
        String appCode = systemConfigService.getConfigValueByKeyCache("goldCornAppCode");
        if (StringUtil.isNullOrEmpty(appCode)) {
            throw new GoldAppException(GoldAppException.CODE_NOT_EXIST, "应用不存在");
        }
        return appCode;
    }
    /**
     * 金币消耗
     *
     * @param record
     * @param goldCornCount 金币数量
     * @throws GoldCornException
     * @throws Exception
     */
    public void consumeGoldCorn(OrderRecord record, int goldCornCount) throws GoldCornException, Exception {
        String tuid = getUid(record.getUid());
        String appCode = getAppCode();
        String sourceCode = "";
        String title = "";
        String desc = "";
        if (record.getOrderType() == OrderType.vip) {
            sourceCode = "buyVIP";
            title = "购买VIP";
        } else if (record.getOrderType() == OrderType.video) {
            sourceCode = "buyVideo";
            title = "购买单片";
        }
        consumeGoldCorn(appCode, tuid, sourceCode, goldCornCount, title, desc);
    }
    /**
     * 返回影视豆
     *
     * @param record
     * @throws GoldCornException
     * @throws Exception
     */
    public void drawbackGoldCorn(OrderRecord record) throws GoldCornException, Exception {
        String tuid = getUid(record.getUid());
        String appCode = getAppCode();
        String sourceCode = "";
        String title = "";
        String desc = "";
        if (record.getOrderType() == OrderType.vip) {
            sourceCode = "buyVIP";
            title = "购买VIP退款";
        } else if (record.getOrderType() == OrderType.video) {
            sourceCode = "buyVideo";
            title = "购买单片退款";
        }
        addGoldCorn(appCode, tuid, sourceCode, record.getGoldCorn(), title, desc);
    }
    private void addGoldCorn(String appCode, String uid, String sourceCode, Integer goldCornCount, String title, String desc) throws GoldUserException, GoldAppException, GoldTradeException {
        goldCornTradeService.addGoldCorn(appCode, uid, sourceCode, goldCornCount, title, desc);
    }
    private void consumeGoldCorn(String appCode, String uid, String sourceCode, Integer goldCornCount, String title, String desc) throws GoldUserException, GoldAppException, GoldTradeException {
        goldCornTradeService.consumeGoldCorn(appCode, uid, sourceCode, goldCornCount, title, desc);
    }
}
src/main/java/com/yeshi/buwan/service/manager/SeataManagerTest.java
New file
@@ -0,0 +1,47 @@
package com.yeshi.buwan.service.manager;
import com.ks.goldcorn.exception.GoldSourceException;
import com.ks.goldcorn.pojo.DO.GoldCornGetSource;
import com.ks.goldcorn.service.remote.GoldCornGetSourceService;
import com.yeshi.buwan.dao.user.LoginUserDao;
import com.yeshi.buwan.domain.user.LoginUser;
import com.yeshi.buwan.service.inter.LoginUserService;
import io.seata.core.context.RootContext;
import io.seata.spring.annotation.GlobalTransactional;
import org.apache.dubbo.config.annotation.Reference;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate4.HibernateCallback;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
@Component
public class SeataManagerTest {
    @Resource
    private LoginUserDao loginUserDao;
    @Reference(version = "1.0")
    private GoldCornGetSourceService goldCornGetSourceService;
    @GlobalTransactional(timeoutMills = 30000, name = "buwan-order", rollbackFor = Exception.class)
    public void addGetResource() throws Exception {
        System.out.println("开始全局事务,XID = " + RootContext.getXID());
        LoginUser loginUser = new LoginUser();
        loginUser.setId("50134");
        loginUser.setName("test3");
        loginUserDao.updateSelective(loginUser);
        GoldCornGetSource get = new GoldCornGetSource();
        get.setAppId(15L);
        get.setSourceCode("test1");
        get.setSourceName("测试");
        get.setGoldCorn(1);
        goldCornGetSourceService.addSource(get);
        throw new Exception("手动报错");
    }
}
src/main/java/com/yeshi/buwan/util/SpringContext.java
@@ -1,5 +1,6 @@
package com.yeshi.buwan.util;
import com.alibaba.druid.pool.DruidDataSource;
import com.yeshi.buwan.domain.ResourceVideo;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.VideoResource;
@@ -11,19 +12,25 @@
import com.yeshi.buwan.service.imp.JobThreadExecutorServiceImpl;
import com.yeshi.buwan.service.imp.ResourceVideoService;
import com.yeshi.buwan.service.imp.VideoInfoService;
import com.yeshi.buwan.service.inter.juhe.*;
import com.yeshi.buwan.service.inter.juhe.FunTV2Service;
import com.yeshi.buwan.service.inter.juhe.InternetSearchVideoService;
import com.yeshi.buwan.service.inter.juhe.Iqiyi2Service;
import com.yeshi.buwan.service.inter.juhe.PPTVService;
import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager;
import com.yeshi.buwan.service.manager.SolrInternetSearchVideoDataManager;
import com.yeshi.buwan.util.factory.InternetSearchVideoFactory;
import com.yeshi.buwan.util.mq.CMQManager;
import com.yeshi.buwan.youku.entity.YouKuShowDetail;
import io.seata.rm.datasource.DataSourceProxy;
import io.seata.spring.annotation.GlobalTransactionScanner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List;
@@ -64,6 +71,7 @@
        }
    }
    private synchronized void onApplication(ContextRefreshedEvent context) {
        if (!isInited) {
            isInited = true;
src/main/resources/consumer.xml
@@ -11,5 +11,6 @@
    <dubbo:registry address="zookeeper://134.175.68.214:2181"/>
    <!-- url=dubbo://192.168.3.122:20882/com.yeshi.goods.facade.service.TaoBaoCouponCacheService -->
    <dubbo:annotation  package="com"/>
</beans>
src/main/resources/domain/vip/OrderRecord.hbm.xml
File was renamed from src/main/resources/domain/vip/VIPOrderRecord.hbm.xml
@@ -4,7 +4,7 @@
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.yeshi.buwan.domain.vip">
    <class name="VIPOrderRecord" table="wk_vip_order_record">
    <class name="com.yeshi.buwan.domain.vip.OrderRecord" table="wk_vip_order_record">
        <id name="id" column="id">
            <generator class="native"></generator>
        </id>
@@ -40,7 +40,6 @@
        <property name="goldCorn" column="gold_corn" type="integer"></property>
        <property name="videoInfoId" column="video_info_id" type="string"></property>
        <property name="payWay" column="pay_way" type="integer"></property>
        <property name="moneyPay" column="money_pay" type="boolean"></property>
        <property name="goldCornPay" column="gold_corn_pay" type="boolean"></property>
src/main/resources/env-dev/logback.xml
@@ -182,7 +182,7 @@
    <logger name="org.springframework.transaction" level="INFO" />
    <logger name="org.springframework.data.solr" level="DEBUG" />
    <logger name="io.seata" level="DEBUG"></logger>
    <!-- 一切logger都会继承自root,root默认的层级level为debug -->
src/main/resources/file.conf
New file
@@ -0,0 +1,66 @@
transport {
  # tcp udt unix-domain-socket
  type = "TCP"
  #NIO NATIVE
  server = "NIO"
  #enable heartbeat
  heartbeat = true
  # the client batch send request enable
  enableClientBatchSendRequest = true
  #thread factory for netty
  threadFactory {
    bossThreadPrefix = "NettyBoss"
    workerThreadPrefix = "NettyServerNIOWorker"
    serverExecutorThread-prefix = "NettyServerBizHandler"
    shareBossWorker = false
    clientSelectorThreadPrefix = "NettyClientSelector"
    clientSelectorThreadSize = 1
    clientWorkerThreadPrefix = "NettyClientWorkerThread"
    # netty boss thread size,will not be used for UDT
    bossThreadSize = 1
    #auto default pin or 8
    workerThreadSize = "default"
  }
  shutdown {
    # when destroy server, wait seconds
    wait = 3
  }
  serialization = "seata"
  compressor = "none"
}
service {
  #transaction service group mapping
  vgroupMapping.buwan-seata-service-group = "default"
  #only support when registry.type=file, please don't set multiple addresses
  default.grouplist = "134.175.68.214:8191"
  #degrade, current not support
  enableDegrade = false
  #disable seata
  disableGlobalTransaction = false
}
client {
  rm {
    asyncCommitBufferLimit = 10000
    lock {
      retryInterval = 10
      retryTimes = 30
      retryPolicyBranchRollbackOnConflict = true
    }
    reportRetryCount = 5
    tableMetaCheckEnable = false
    reportSuccessEnable = false
  }
  tm {
    commitRetryCount = 5
    rollbackRetryCount = 5
  }
  undo {
    dataValidation = true
    logSerialization = "jackson"
    logTable = "undo_log"
  }
  log {
    exceptionRate = 100
  }
}
src/main/resources/hibernate.cfg.xml
@@ -180,7 +180,7 @@
        <!-- VIP -->
        <mapping resource="domain/vip/UserVIPInfo.hbm.xml"/>
        <mapping resource="domain/vip/VIPOrderRecord.hbm.xml"/>
        <mapping resource="domain/vip/OrderRecord.hbm.xml"/>
        <mapping class="com.yeshi.buwan.domain.AcFunTemporary"/>
        <mapping class="com.yeshi.buwan.acFun.AcFunVideo"/>
src/main/resources/registry.conf
New file
@@ -0,0 +1,79 @@
registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "file"
  nacos {
    application = "seata-server"
    serverAddr = "localhost"
    namespace = ""
    username = ""
    password = ""
  }
  eureka {
    serviceUrl = "http://localhost:8761/eureka"
    weight = "1"
  }
  redis {
    serverAddr = "localhost:6379"
    db = "0"
    password = ""
    timeout = "0"
  }
  zk {
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  consul {
    serverAddr = "127.0.0.1:8500"
  }
  etcd3 {
    serverAddr = "http://localhost:2379"
  }
  sofa {
    serverAddr = "127.0.0.1:9603"
    region = "DEFAULT_ZONE"
    datacenter = "DefaultDataCenter"
    group = "SEATA_GROUP"
    addressWaitTime = "3000"
  }
  file {
    name = "file.conf"
  }
}
config {
  # file、nacos 、apollo、zk、consul、etcd3、springCloudConfig
  type = "file"
  nacos {
    serverAddr = "localhost"
    namespace = ""
    group = "SEATA_GROUP"
    username = ""
    password = ""
  }
  consul {
    serverAddr = "127.0.0.1:8500"
  }
  apollo {
    appId = "seata-server"
    apolloMeta = "http://192.168.1.204:8801"
    namespace = "application"
  }
  zk {
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  etcd3 {
    serverAddr = "http://localhost:2379"
  }
  file {
    name = "file.conf"
  }
}
src/main/resources/seata.xml
New file
@@ -0,0 +1,16 @@
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="globalTransactionScanner" class="io.seata.spring.annotation.GlobalTransactionScanner">
        <constructor-arg name="applicationId" value="buwan"/>
        <constructor-arg name="txServiceGroup" value="buwan-seata-service-group"/>
    </bean>
    <bean id="dataSourceProxy" class=" io.seata.rm.datasource.DataSourceProxy">
        <constructor-arg name="targetDataSource" ref="dataSource"/>
    </bean>
</beans>
src/main/resources/spring.xml
@@ -216,4 +216,5 @@
    <import resource="solr.xml"></import>
    <import resource="xxl-job.xml"></import>
    <import resource="consumer.xml"></import>
    <import resource="seata.xml"></import>
</beans>
src/test/java/com/hxh/spring/test/dubbo/GoldCornTest.java
New file
@@ -0,0 +1,28 @@
package com.hxh.spring.test.dubbo;
import com.ks.goldcorn.pojo.DO.GoldCornAppInfo;
import com.ks.goldcorn.service.remote.GoldCornAppService;
import org.apache.dubbo.config.annotation.Reference;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试
@ContextConfiguration(locations = {"classpath:spring.xml"})
@WebAppConfiguration
public class GoldCornTest {
    @Reference(version = "1.0")
    private GoldCornAppService goldCornAppService;
    @Test
    public void getApp() {
        GoldCornAppInfo app = goldCornAppService.selectByCode("buwan");
        System.out.println(app);
    }
}
src/test/java/com/hxh/spring/test/dubbo/SeataTest.java
New file
@@ -0,0 +1,37 @@
package com.hxh.spring.test.dubbo;
import com.yeshi.buwan.service.manager.SeataManagerTest;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import javax.annotation.Resource;
@RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试
@ContextConfiguration(locations = {"classpath:spring.xml"})
@WebAppConfiguration
public class SeataTest {
    @Resource
    private SeataManagerTest seataManagerTest;
    @Test
    public void getApp() {
        try {
            seataManagerTest.addGetResource();
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
src/test/java/com/hxh/spring/test/vip/VIPTest.java
@@ -1,7 +1,7 @@
package com.hxh.spring.test.vip;
import com.yeshi.buwan.domain.vip.UserVIPInfo;
import com.yeshi.buwan.domain.vip.VIPOrderRecord;
import com.yeshi.buwan.domain.vip.OrderRecord;
import com.yeshi.buwan.domain.vip.VIPPrice;
import com.yeshi.buwan.domain.vip.VIPPriceType;
import com.yeshi.buwan.exception.order.OrderException;
@@ -12,29 +12,14 @@
import com.yeshi.buwan.service.inter.vip.VIPService;
import com.yeshi.buwan.util.Constant;
import com.yeshi.buwan.util.HttpUtil;
import com.yeshi.buwan.util.log.LoggerUtil;
import com.yeshi.buwan.util.user.VipUtil;
import com.yeshi.buwan.util.vip.VIPOrderUtil;
import net.sf.json.JSONObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.yeshi.utils.entity.wx.WXAPPInfo;
import javax.annotation.Resource;
import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.math.BigDecimal;
import java.security.GeneralSecurityException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.Date;
import java.util.List;
@@ -120,7 +105,7 @@
    @Test
    public void addOrderRecord() {
        VIPPrice price = vipPriceService.selectByPrimaryKey("172a8327fcd3685ab3c0f740d031da09");
        VIPOrderRecord record = new VIPOrderRecord();
        OrderRecord record = new OrderRecord();
        record.setMoney(price.getActualPrice());
        record.setType(price.getType());
        record.setUid(766693 + "");
@@ -134,7 +119,7 @@
    @Test
    public void listRecord() {
        List<VIPOrderRecord> list = orderService.listOrderRecord(null, null, 1, 10);
        List<OrderRecord> list = orderService.listOrderRecord(null, null, 1, 10);
        long count = orderService.countOrderRecord(null, null);
@@ -142,11 +127,11 @@
        count = orderService.countOrderRecord(766693 + "", null);
        list = orderService.listOrderRecord(766693 + "", VIPOrderRecord.STATE_NOT_PAY, 1, 10);
        count = orderService.countOrderRecord(766693 + "", VIPOrderRecord.STATE_NOT_PAY);
        list = orderService.listOrderRecord(766693 + "", OrderRecord.STATE_NOT_PAY, 1, 10);
        count = orderService.countOrderRecord(766693 + "", OrderRecord.STATE_NOT_PAY);
        list = orderService.listOrderRecord(766693 + "", VIPOrderRecord.STATE_PAY, 1, 10);
        count = orderService.countOrderRecord(766693 + "", VIPOrderRecord.STATE_PAY);
        list = orderService.listOrderRecord(766693 + "", OrderRecord.STATE_PAY, 1, 10);
        count = orderService.countOrderRecord(766693 + "", OrderRecord.STATE_PAY);
        System.out.println(list);
    }
@@ -154,7 +139,7 @@
    @Test
    public void paySuccess() {
//        try {
//            vipService.paySuccess("",VIPOrderRecord.PAY_WAY_WX,new BigDecimal("14.8"),)
//            vipService.paySuccess("",OrderRecord.PAY_WAY_WX,new BigDecimal("14.8"),)
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
@@ -196,7 +181,7 @@
    @Test
    public void test3() throws Exception {
        VIPOrderRecord record = orderService.getOrderRecord("82");
        OrderRecord record = orderService.getOrderRecord("82");
        pptvVipManager.buyVIP(record);
    }