admin
2021-04-13 5300c070d95f9f3d6222b149e8431e77e9337637
单片购买
16个文件已修改
1个文件已添加
390 ■■■■ 已修改文件
src/main/java/com/yeshi/buwan/controller/admin/api/VipAdminController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/api/VIPController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/api/VideoInfoController.java 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/api/VideoPlayController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/user/LoginUserDao.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/vip/OrderRecordDao.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/inter/order/OrderService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/manager/GoldCornManager.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/manager/SeataManagerTest.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/SpringContext.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/VersionUtil.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/vo/baidu/BaiDuCPUTypeVO.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/seata.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/spring.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/dubbo/SeataTest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/vip/VIPTest.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/admin/api/VipAdminController.java
@@ -116,8 +116,8 @@
            }
        }
        List<OrderRecord> list = orderService.listOrderRecord(uid, state, page, Constant.pageCount);
        long count = orderService.countOrderRecord(uid, state);
        List<OrderRecord> list = orderService.listOrderRecord(uid,null, state, page, Constant.pageCount);
        long count = orderService.countOrderRecord(uid,null, state);
        JSONObject data = new JSONObject();
        data.put("pageEntity", new PageEntity(page, Constant.pageCount, (int) count));
        data.put("list", getGson().toJson(list));
src/main/java/com/yeshi/buwan/controller/api/VIPController.java
@@ -125,12 +125,12 @@
        }).create();
        JSONObject root = new JSONObject();
        List<OrderRecord> list = orderService.listOrderRecord(loginUid, null, page, Constant.pageCount);
        List<OrderRecord> list = orderService.listOrderRecord(loginUid, OrderType.vip,null, page, Constant.pageCount);
        for (OrderRecord record : list) {
            record.setIpInfo(null);
            record.setUpdateTime(null);
        }
        long count = orderService.countOrderRecord(loginUid, null);
        long count = orderService.countOrderRecord(loginUid,  OrderType.vip,null);
        root.put("list", gson.toJson(list));
        root.put("count", count);
        return JsonUtilV2.loadTrueJson(root.toString());
src/main/java/com/yeshi/buwan/controller/api/VideoInfoController.java
New file
@@ -0,0 +1,213 @@
package com.yeshi.buwan.controller.api;
import com.google.gson.*;
import com.ks.goldcorn.service.remote.GoldCornBalanceService;
import com.yeshi.buwan.domain.VideoInfo;
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.pptv.PPTVUtil;
import com.yeshi.buwan.pptv.entity.PPTVSeries;
import com.yeshi.buwan.pptv.entity.VideoPPTVMap;
import com.yeshi.buwan.service.inter.LoginUserService;
import com.yeshi.buwan.service.inter.juhe.PPTVService;
import com.yeshi.buwan.service.inter.order.OrderService;
import com.yeshi.buwan.service.inter.system.SystemConfigService;
import com.yeshi.buwan.service.inter.vip.VIPPriceService;
import com.yeshi.buwan.service.inter.vip.VIPService;
import com.yeshi.buwan.service.manager.GoldCornManager;
import com.yeshi.buwan.util.*;
import com.yeshi.buwan.util.factory.VideoInfoFactory;
import com.yeshi.buwan.util.user.VipUtil;
import com.yeshi.buwan.util.vip.VIPOrderUtil;
import com.yeshi.buwan.vo.AcceptData;
import com.yeshi.buwan.vo.client.user.UserInfoVO;
import net.sf.json.JSONObject;
import org.apache.dubbo.config.annotation.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.yeshi.utils.StringUtil;
import org.yeshi.utils.annotation.RequestSerializableByKey;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@Controller
@RequestMapping("api/v2/videoinfo")
public class VideoInfoController {
    Logger logger = LoggerFactory.getLogger(VideoInfoController.class);
    @Resource
    private PPTVService pptvService;
    @Resource
    private LoginUserService loginUserService;
    @Resource
    private OrderService orderService;
    @Resource
    private VIPService vipService;
    @Resource
    private GoldCornManager goldCornManager;
    private String getDurationDesc(int duration) {
        int h = duration / (60 * 60);
        int m = (duration % (60 * 60)) / 60;
        int s = duration % 60;
        String st = "";
        if (h > 0)
            st += h + "时";
        if (st.length() > 0 || m > 0) {
            st += m + "分";
        }
        st += s + "秒";
        return st;
    }
    @RequestMapping("getPPVideoInfo")
    @ResponseBody
    public String getPPVideoInfo(AcceptData acceptData, String loginUid, String infoId) {
        //获取PPTV的视频详情
        PPTVSeries series = pptvService.getSeriesDetail(infoId);
        if (series == null) {
            return JsonUtilV2.loadFalseJson("当前影片不存在");
        }
        if (!"add".equalsIgnoreCase(series.getStatus()) && !"update".equalsIgnoreCase(series.getStatus())) {
            return JsonUtilV2.loadFalseJson("当前影片已下线");
        }
        if (series.getGoodsInfo() == null || StringUtil.isNullOrEmpty(series.getGoodsInfo().getGoodsNo())) {
            return JsonUtilV2.loadFalseJson("当前影片不能购买");
        }
        PPTVSimpleVideoInfo videoInfo = new PPTVSimpleVideoInfo();
        videoInfo.setInfoId(series.getInfoID());
        videoInfo.setName(series.getName());
        videoInfo.setPicture(series.getCover());
        videoInfo.setCategory(series.getProgramcategory().replace("-电视剧", "").replace("-电影", "").replace("-动漫", "").replace("-少儿", ""));
        videoInfo.setActors(series.getActor());
        videoInfo.setDirectors(series.getDirector());
        if (series.getSeries() != null && series.getSeries().size() > 0 && !StringUtil.isNullOrEmpty(series.getSeries().get(0).getDuration()))
            videoInfo.setDuration(getDurationDesc(Integer.parseInt(series.getSeries().get(0).getDuration())));
        videoInfo.setDesc(series.getDescription());
        Gson gson = new GsonBuilder().create();
        JSONObject data = new JSONObject();
        data.put("video", gson.toJson(videoInfo));
        //加载价格信息
        JSONObject priceInfo=new JSONObject();
        priceInfo.put("discount","6折");
        priceInfo.put("actualPrice","3.9");
        data.put("price", priceInfo);
        if (!StringUtil.isNullOrEmpty(loginUid)) {
            LoginUser user = loginUserService.getLoginUser(loginUid);
            if (user != null) {
                JSONObject userInfo = new JSONObject();
                userInfo.put("portrait", user.getPortrait());
                userInfo.put("nickName", user.getName());
                userInfo.put("id", user.getId());
                long count = orderService.countOrderRecord(loginUid, OrderType.video, OrderRecord.STATE_PAY);
                userInfo.put("vip", vipService.isVIP(loginUid));
                userInfo.put("videoCount", count);
                //影视豆
                userInfo.put("goldCorn", goldCornManager.getBalance(loginUid));
                data.put("user", userInfo);
            }
        }
        return JsonUtilV2.loadTrueJson(data.toString());
    }
    class PPTVSimpleVideoInfo {
        private String infoId;
        private String picture;
        private String name;
        private String category;
        private String actors;
        private String directors;
        private String duration;
        private String desc;
        public String getInfoId() {
            return infoId;
        }
        public void setInfoId(String infoId) {
            this.infoId = infoId;
        }
        public String getPicture() {
            return picture;
        }
        public void setPicture(String picture) {
            this.picture = picture;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getCategory() {
            return category;
        }
        public void setCategory(String category) {
            this.category = category;
        }
        public String getActors() {
            return actors;
        }
        public void setActors(String actors) {
            this.actors = actors;
        }
        public String getDirectors() {
            return directors;
        }
        public void setDirectors(String directors) {
            this.directors = directors;
        }
        public String getDuration() {
            return duration;
        }
        public void setDuration(String duration) {
            this.duration = duration;
        }
        public String getDesc() {
            return desc;
        }
        public void setDesc(String desc) {
            this.desc = desc;
        }
    }
}
src/main/java/com/yeshi/buwan/controller/api/VideoPlayController.java
@@ -1,6 +1,8 @@
package com.yeshi.buwan.controller.api;
import com.google.gson.Gson;
import com.yeshi.buwan.domain.jump.JumpDetail;
import com.yeshi.buwan.domain.jump.JumpTypeEnum;
import com.yeshi.buwan.domain.video.VideoWatchHistory;
import com.yeshi.buwan.pptv.PPTVApiUtil;
import com.yeshi.buwan.pptv.entity.PPTVProgram;
@@ -11,9 +13,11 @@
import com.yeshi.buwan.service.inter.push.PushDeviceTokenService;
import com.yeshi.buwan.service.inter.video.VideoWatchHistoryService;
import com.yeshi.buwan.util.JsonUtil;
import com.yeshi.buwan.util.VersionUtil;
import com.yeshi.buwan.vo.AcceptData;
import com.yeshi.buwan.vo.video.PPTVVideoActivityInfoVO;
import com.yeshi.buwan.vo.video.PPTVWatchVIPVideoActivityWay;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
@@ -114,6 +118,28 @@
        way.setTextColor("#885E24");
        way.setType("vip");
        wayList.add(way);
        //3.9.2后返回单片购买
        if (VersionUtil.isGraterThan392(acceptData.getPlatform(), acceptData.getVersion())) {
            way = new PPTVWatchVIPVideoActivityWay();
            way.setEndBgColor("#DCE8FF");
            way.setStartBgColor("#DCE8FF");
//            way.setEndPrice(new BigDecimal("77.8"));
            way.setIcon("http://img.ysdq.yeshitv.com/resource/icon_free_money.png");
            way.setStartPrice(new BigDecimal("0"));
            way.setSubTitle("畅享海量高清");
            way.setTitle("0元看单片");
            way.setTextColor("#0052F6");
            way.setType("video");
            JumpDetail jumpDetail = new JumpDetail();
            jumpDetail.setType(JumpTypeEnum.web);
            way.setJumpDetail(jumpDetail);
            JSONObject params = new JSONObject();
            params.put("url", "http://192.168.3.122:8848/BuWanWeb/buyVideo/index.html?infoId=23099");
            way.setParams(params.toString().replace("\"","\\" + "\""));
            wayList.add(way);
        }
        vo.setWayList(wayList);
        return JsonUtil.loadTrueJson(new Gson().toJson(vo));
    }
src/main/java/com/yeshi/buwan/dao/user/LoginUserDao.java
@@ -1,6 +1,9 @@
package com.yeshi.buwan.dao.user;
import com.yeshi.buwan.dao.base.BaseDao;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate4.HibernateCallback;
import org.springframework.stereotype.Repository;
import com.yeshi.buwan.domain.user.LoginUser;
@@ -14,6 +17,19 @@
public class LoginUserDao extends BaseDao<LoginUser> {
    public LoginUser selectByPrimaryKeyForUpdate(String id) {
        return (LoginUser) excute(new HibernateCallback<LoginUser>() {
            @Override
            public LoginUser doInHibernate(Session session) throws HibernateException {
                List<LoginUser> userList = session.createSQLQuery("select * from wk_loginuser lu where lu.id=? for update").addEntity(LoginUser.class).setParameter(0, id).list();
                if (userList != null && userList.size() > 0)
                    return userList.get(0);
                return null;
            }
        });
    }
    public void updateSelective(LoginUser loginUser) {
        String hql = "update LoginUser u set ";
src/main/java/com/yeshi/buwan/dao/vip/OrderRecordDao.java
@@ -24,7 +24,7 @@
        }
        if (daoQuery.orderType != null) {
            hql += " and r.orderType=" + daoQuery.orderType;
            hql += " and r.orderType='" + daoQuery.orderType+"'";
        }
        hql += " order by r.createTime desc";
src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java
@@ -336,22 +336,23 @@
    @Override
    public List<OrderRecord> listOrderRecord(String uid, Integer state, int page, int pageSize) {
    public List<OrderRecord> listOrderRecord(String uid, OrderType orderType, Integer state, int page, int pageSize) {
        OrderRecordDao.DaoQuery query = new OrderRecordDao.DaoQuery();
        query.start = (page - 1) * pageSize;
        query.count = pageSize;
        query.uid = uid;
        query.state = state;
        query.orderType = orderType;
        return vipOrderRecordDao.list(query);
    }
    @Override
    public long countOrderRecord(String uid, Integer state) {
    public long countOrderRecord(String uid, OrderType orderType, Integer state) {
        OrderRecordDao.DaoQuery query = new OrderRecordDao.DaoQuery();
        query.uid = uid;
        query.state = state;
        query.orderType = orderType;
        return vipOrderRecordDao.count(query);
    }
src/main/java/com/yeshi/buwan/service/inter/order/OrderService.java
@@ -1,6 +1,7 @@
package com.yeshi.buwan.service.inter.order;
import com.yeshi.buwan.domain.vip.OrderRecord;
import com.yeshi.buwan.domain.vip.OrderType;
import com.yeshi.buwan.dto.order.PayWayInfoDTO;
import com.yeshi.buwan.exception.PPTVException;
import com.yeshi.buwan.exception.goldcorn.GoldCornException;
@@ -32,7 +33,7 @@
     * @param state
     * @return
     */
    public List<OrderRecord> listOrderRecord(String uid, Integer state, int page, int pageSize);
    public List<OrderRecord> listOrderRecord(String uid, OrderType orderType, Integer state, int page, int pageSize);
    /**
@@ -40,7 +41,7 @@
     * @param state
     * @return
     */
    public long countOrderRecord(String uid, Integer state);
    public long countOrderRecord(String uid, OrderType orderType, Integer state);
    /**
src/main/java/com/yeshi/buwan/service/manager/GoldCornManager.java
@@ -3,6 +3,7 @@
import com.ks.goldcorn.exception.GoldAppException;
import com.ks.goldcorn.exception.GoldTradeException;
import com.ks.goldcorn.exception.GoldUserException;
import com.ks.goldcorn.service.remote.GoldCornBalanceService;
import com.ks.goldcorn.service.remote.GoldCornTradeService;
import com.yeshi.buwan.domain.vip.OrderType;
import com.yeshi.buwan.domain.vip.OrderRecord;
@@ -23,6 +24,9 @@
    @Reference(version = "1.0",check = false)
    private GoldCornTradeService goldCornTradeService;
    @Reference(version = "1.0", check = false)
    private GoldCornBalanceService goldCornBalanceService;
    /**
@@ -48,6 +52,16 @@
        return appCode;
    }
    public long getBalance(String uid) {
        try {
            Long count = goldCornBalanceService.getBalance(getAppCode(), getUid(uid));
            return count==null?0:count;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }
    /**
     * 金币消耗
src/main/java/com/yeshi/buwan/service/manager/SeataManagerTest.java
@@ -1,32 +1,42 @@
package com.yeshi.buwan.service.manager;
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 io.seata.core.context.RootContext;
import io.seata.spring.annotation.GlobalTransactional;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@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("手动报错");
//    }
    @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 {
//        loginUserDao.selectByPrimaryKeyForUpdate("50134");
        System.out.println("开始全局事务,XID = " + RootContext.getXID());
        LoginUser loginUser = new LoginUser();
        loginUser.setId("50134");
        loginUser.setName("test9");
        loginUserDao.updateSelective(loginUser);
        GoldCornGetSource get = new GoldCornGetSource();
        get.setAppId(15L);
        get.setSourceCode("test5");
        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;
@@ -18,9 +19,11 @@
import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager;
import com.yeshi.buwan.service.manager.SolrInternetSearchVideoDataManager;
import com.yeshi.buwan.util.mq.CMQManager;
import io.seata.rm.datasource.DataSourceProxy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
@@ -65,6 +68,11 @@
        }
    }
    @Bean
    public DataSourceProxy dataSourceProxy(DruidDataSource druidDataSource) {
        return new DataSourceProxy(druidDataSource);
    }
    private synchronized void onApplication(ContextRefreshedEvent context) {
        if (!isInited) {
src/main/java/com/yeshi/buwan/util/VersionUtil.java
@@ -33,4 +33,10 @@
            return true;
        return false;
    }
    public static boolean isGraterThan392(String platform, int version) {
        if ("android".equalsIgnoreCase(platform) && version >= 111)
            return true;
        return false;
    }
}
src/main/java/com/yeshi/buwan/vo/baidu/BaiDuCPUTypeVO.java
@@ -1,9 +1,11 @@
package com.yeshi.buwan.vo.baidu;
import java.io.Serializable;
/**
 * 百度内容联盟分类
 */
public class BaiDuCPUTypeVO {
public class BaiDuCPUTypeVO implements Serializable {
    private String name;
    private int id;
src/main/resources/seata.xml
@@ -8,9 +8,7 @@
    </bean>
    <bean id="dataSourceProxy" class=" io.seata.rm.datasource.DataSourceProxy">
        <constructor-arg name="targetDataSource" ref="dataSource"/>
    </bean>
</beans>
src/main/resources/spring.xml
@@ -212,6 +212,7 @@
        <constructor-arg name="database" value="${redis.database}"></constructor-arg>
    </bean>
    <!-- Solr搜索引擎数据管理 -->
    <import resource="solr.xml"></import>
    <import resource="xxl-job.xml"></import>
src/test/java/com/hxh/spring/test/dubbo/SeataTest.java
@@ -21,7 +21,7 @@
    @Test
    public void getApp() {
        try {
//            seataManagerTest.addGetResource();
            seataManagerTest.addGetResource();
        } catch (Exception e) {
            e.printStackTrace();
        }
src/test/java/com/hxh/spring/test/vip/VIPTest.java
@@ -119,19 +119,19 @@
    @Test
    public void listRecord() {
        List<OrderRecord> list = orderService.listOrderRecord(null, null, 1, 10);
        long count = orderService.countOrderRecord(null, null);
        List<OrderRecord> list = orderService.listOrderRecord(null, null,null, 1, 10);
        long count = orderService.countOrderRecord(null, null,null);
        list = orderService.listOrderRecord(766693 + "", null, 1, 10);
        count = orderService.countOrderRecord(766693 + "", null);
        list = orderService.listOrderRecord(766693 + "", null,null, 1, 10);
        count = orderService.countOrderRecord(766693 + "", null,null);
        list = orderService.listOrderRecord(766693 + "", OrderRecord.STATE_NOT_PAY, 1, 10);
        count = orderService.countOrderRecord(766693 + "", OrderRecord.STATE_NOT_PAY);
        list = orderService.listOrderRecord(766693 + "", null,OrderRecord.STATE_NOT_PAY, 1, 10);
        count = orderService.countOrderRecord(766693 + "", null,OrderRecord.STATE_NOT_PAY);
        list = orderService.listOrderRecord(766693 + "", OrderRecord.STATE_PAY, 1, 10);
        count = orderService.countOrderRecord(766693 + "", OrderRecord.STATE_PAY);
        list = orderService.listOrderRecord(766693 + "", null,OrderRecord.STATE_PAY, 1, 10);
        count = orderService.countOrderRecord(766693 + "",null, OrderRecord.STATE_PAY);
        System.out.println(list);
    }