YJ
2021-05-18 5d2d3cca27b31a3c27ad9ec39a5def9de0ddb7b4
会员订单调整
5个文件已修改
3个文件已添加
791 ■■■■ 已修改文件
app/src/main/java/com/ks/app/controller/admin/vip/VipGradePotenceAdminController.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/resources/static/views/vip/gradePotence-add.html 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/resources/static/views/vip/gradePotence-list.html 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-vip/src/main/java/com/ks/vip/pojo/DTO/PayWayInfoDTO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-vip/src/main/java/com/ks/vip/service/VipOrederPayService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-vip/src/main/java/com/ks/vip/service/VipOrederService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderPayServiceImpl.java 261 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderServiceImpl.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/ks/app/controller/admin/vip/VipGradePotenceAdminController.java
New file
@@ -0,0 +1,99 @@
package com.ks.app.controller.admin.vip;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ks.app.pojo.VO.PageEntity;
import com.ks.app.pojo.VO.Result;
import com.ks.app.util.ResultUtils;
import com.ks.vip.pojo.DO.VipGrade;
import com.ks.vip.pojo.DO.VipGradePotence;
import com.ks.vip.service.VipGradePotenceService;
import com.ks.vip.service.VipGradeService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("admin/api/vip/vipGradePotence")
public class VipGradePotenceAdminController {
    @Reference(version = "1.0")
    private VipGradePotenceService vipGradePotenceService;
    @ResponseBody
    @RequestMapping(value = "listByPage")
    public Result listByPage(int page, int pageSize, VipGradePotence t, HttpServletRequest request) {
        try {
            List<VipGradePotence> list = vipGradePotenceService.listByPage(page, pageSize, t);
            long count = vipGradePotenceService.count(t);
            int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
            PageEntity pe = new PageEntity(page, pageSize, count, totalPage);
            Map<String, Object> map = new HashMap<>();
            map.put("pe", pe);
            map.put("list", list);
            return ResultUtils.loadTrue(map);
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtils.loadFalse("查询失败!");
        }
    }
    @ResponseBody
    @RequestMapping(value = "add")
    public Result add(VipGradePotence t, HttpServletRequest request) {
        try {
            vipGradePotenceService.insertSelective(t);
            return ResultUtils.loadTrue();
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtils.loadFalse("保存失败!");
        }
    }
    @ResponseBody
    @RequestMapping(value = "modify")
    public Result modify(VipGradePotence t, HttpServletRequest request) {
        try {
            vipGradePotenceService.updateByPrimaryKeySelective(t);
            return ResultUtils.loadTrue();
        } catch (Exception e) {
            e.printStackTrace();
           return ResultUtils.loadFalse("保存失败!");
        }
    }
    @ResponseBody
    @RequestMapping(value = "delete")
    public Result delete(String ids, HttpServletRequest request) {
        try {
            Gson gson = new Gson();
            List<Long> listId = gson.fromJson(ids, new TypeToken<ArrayList<Long>>() {}.getType());
            if (listId == null || listId.size() == 0) {
                return ResultUtils.loadFalse("请选择删除的数据!");
            }
            for (Long id: listId) {
                vipGradePotenceService.delete(id);
            }
            return ResultUtils.loadTrue();
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtils.loadFalse("删除失败!");
        }
    }
}
app/src/main/resources/static/views/vip/gradePotence-add.html
New file
@@ -0,0 +1,121 @@
<!DOCTYPE html>
<html class="x-admin-sm">
<head>
    <meta charset="UTF-8">
    <title>新增</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
    <link rel="stylesheet" href="../../css/font.css">
    <link rel="stylesheet" href="../../css/xadmin.css">
    <script type="text/javascript" src="../../lib/layui/layui.js" charset="utf-8"></script>
    <script type="text/javascript" src="../../js/xadmin.js"></script>
    <script type="text/javascript" src="../../js/http.js" charset="utf-8"></script>
    <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
    <!--[if lt IE 9]>
    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>
<body>
<div class="layui-fluid">
    <div class="layui-row">
        <form class="layui-form">
            <div class="layui-form-item">
                <label for="state" class="layui-form-label">
                    状态</label>
                <div class="layui-input-inline">
                    <select id="state" name="state" class="layui-select">
                        <option value="1">启用</option>
                        <option value="0">停用</option>
                    </select>
                </div>
            </div>
            <div class="layui-form-item">
                <label for="name" class="layui-form-label">
                    <span class="x-red">*</span>等级名称</label>
                <div class="layui-input-inline">
                    <input type="text" id="name" name="name" required="" lay-verify="name" autocomplete="off"
                           class="layui-input"></div>
            </div>
            <div class="layui-form-item">
                <label for="icon" class="layui-form-label">
                    <span class="x-red">*</span>等级图标</label>
                <div class="layui-input-inline">
                    <input type="text" id="icon" name="icon" required="" lay-verify="icon"
                           autocomplete="off" class="layui-input"></div>
            </div>
            <div class="layui-form-item">
                <label for="sort" class="layui-form-label">
                    等级序号</label>
                <div class="layui-input-inline">
                    <input type="text" id="sort" name="sort" required="" lay-verify="sort"
                           autocomplete="off" class="layui-input"></div>
            </div>
            <div class="layui-form-item">
                <!--  <label for="L_remarks" class="layui-form-label"></label>-->
                <button class="layui-btn" lay-filter="add" lay-submit="">增加</button>
            </div>
        </form>
    </div>
</div>
<script>layui.use(['form', 'layer', 'jquery'],
    function () {
        $ = layui.jquery;
        var form = layui.form,
            layer = layui.layer;
        // //自定义验证规则
        // form.verify({
        //     username: function (value) {
        //         if (value.length < 3) {
        //             return '应用名称至少得3个字符啊';
        //         }
        //     },
        //     appcode: [/^([A-Za-z0-9]|\-|_)+$/, '应用标识只能包含 数字、英文字符、_ 、-'],
        //     desc: function (value) {
        //         if (value != null && value.length > 128) {
        //             return '简介最大为128个字符';
        //         }
        //     },
        //     remarks: function (value) {
        //         if (value != null && value.length > 128) {
        //             return '备注最大为128个字符';
        //         }
        //     },
        //
        // });
        //监听提交
        form.on('submit(add)',
            function (data) {
                console.log(data.field);
                //发异步,把数据提交给php
                ksapp.post('/admin/api/vip/vipGrade/add', data.field, function (res) {
                    if (res.code == 0) {
                        layer.alert("增加成功", {
                                icon: 6
                            },
                            function () {
                                //关闭当前frame
                                xadmin.close();
                                // 可以对父窗口进行刷新
                                xadmin.father_reload();
                            });
                    } else {
                        layer.msg(res.msg);
                    }
                }, function (res) {
                });
                return false;
            });
    });</script>
</body>
</html>
app/src/main/resources/static/views/vip/gradePotence-list.html
New file
@@ -0,0 +1,244 @@
<!DOCTYPE html>
<html class="x-admin-sm">
<head>
    <meta charset="UTF-8">
    <title>特价管理系统</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
    <link rel="stylesheet" href="../../css/font.css">
    <link rel="stylesheet" href="../../css/xadmin.css">
    <script src="../../lib/layui/layui.js" charset="utf-8"></script>
    <link rel="stylesheet" href="../../css/theme3049.min.css">
    <script type="text/javascript" src="../../js/vue.min.js" charset="utf-8"></script>
    <script type="text/javascript" src="../../js/xadmin.js"></script>
    <script type="text/javascript" src="../../js/http.js" charset="utf-8"></script>
    <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <!--[if lt IE 9]>
    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
    <style type="text/css">
        .layui-table-view .layui-table th{
            overflow:hidden;
        }
        .layui-table-view .layui-table {
           width: 100%;
        }
    </style>
</head>
<body>
<div class="x-nav">
            <span class="layui-breadcrumb">
                <a href="">会员管理</a>
                <a>
                    <cite>等级列表</cite></a>
            </span>
    <a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right"
       onclick="location.reload()" title="刷新">
        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
    </a>
</div>
<div class="layui-fluid">
    <div class="layui-row layui-col-space15">
        <div class="layui-col-md12">
            <div class="layui-card">
                <div class="layui-card-body ">
                    <form class="layui-form layui-col-space5" id="searchForm">
                        <div class="layui-inline layui-show-xs-block">
                            <input class="layui-input" autocomplete="off" placeholder="开始日" name="start" id="start"
                                   :value="start">
                        </div>
                        <div class="layui-inline layui-show-xs-block">
                            <input class="layui-input" autocomplete="off" placeholder="截止日" name="end" id="end"
                                   :value="end"></div>
                        <div class="layui-inline layui-show-xs-block">
                            <input type="text" name="appname" placeholder="请输入应用名称" :value="key" autocomplete="off"
                                   class="layui-input"></div>
                        <div class="layui-inline layui-show-xs-block">
                            <button class="layui-btn" lay-submit="" lay-filter="sreach">
                                <i class="layui-icon">&#xe615;</i></button>
                        </div>
                    </form>
                </div>
                <div class="layui-card-body ">
                    <table class="layui-table" id="table_list" lay-filter="app">
                    </table>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
        <button class="layui-btn" onclick="xadmin.open('添加等级','grade-add.html',500,480)"><i class="layui-icon"></i>添加
        </button>
    </div>
</script>
<script type="text/html" id="barAction">
    <a class="layui-btn layui-btn-danger layui-btn-xs"  onclick="member_del(this,{{d.LAY_INDEX }},{{d.id}})" >删除</a>
</script>
<script>
    function member_del(obj, index, id) {
        layer.confirm('确认要删除吗?', function (index) {
            app.delete(obj, index, id);  //发异步删除数据
        });
    }
</script>
<script type="text/html" id="dateFomat">
    <div>{{layui.util.toDateString(d.updateTime, 'yyyy-MM-dd HH:mm:ss')}}</div>
</script>
<script type="text/html" id="switchTpl">
    <input type="checkbox" name="sex" value="{{d.id}}" lay-skin="switch" lay-text="启用|停用" lay-filter="stateBox" {{ d.state== 1 ? 'checked': ''}} >
</script>
<script>
    layui.use('laydate',
    function () {
        var laydate = layui.laydate;
        //执行一个laydate实例
        laydate.render({
            elem: '#start' //指定元素
        });
        //执行一个laydate实例
        laydate.render({
            elem: '#end' //指定元素
        });
    });
</script>
<script>
    var app = null;
    layui.use('table', function () {
        //搜索表单的vue赋值
        app = new Vue({
            el: "#searchForm",
            data: {
                key: '',
                start: '',
                end: ''
            },
            methods: {
                delete: function (obj, index, id) {
                    var ids = new Array();
                    ids.push(id);
                    app.deleteList(ids, function () {
                        $(obj).parents("tr").remove();
                        layer.msg('已删除!', {icon: 1, time: 1000});
                    });
                },
                deleteList: function (ids, success) {
                    ksapp.post("/admin/api/vip/vipGrade/delete", {ids: JSON.stringify(ids)}, function (e) {
                        if (e.code == 0) {
                            success();
                        } else {
                            layer.msg(e.msg);
                        }
                    }, function (e) {
                    });
                },
                update: function (id, params) {
                    params.id = id;
                    ksapp.post("/admin/api/vip/vipGrade/modify", params, function (e) {
                        if (e.code == 0) {
                            layer.msg("修改成功");
                        } else
                            layer.msg(e.msg);
                    }, function (e) {
                    });
                }
            }
        });
        app.key = ksapp.getQueryParam("appname") != null ? ksapp.getQueryParam("appname") : '';
        app.start = ksapp.getQueryParam("start");
        app.end = ksapp.getQueryParam("end");
        var table = layui.table;
        var url = "/admin/api/vip/vipGrade/listByPage?page=1&pageSize=20&key=" + encodeURIComponent(app.key) + "&startDate=" + app.start + "&endDate=" + app.end;
        table.render({
            elem: '#table_list',
            url: url,
            toolbar: "#toolbar",
            totalRow: true,
            cols: [
                [{type: 'checkbox', title: "ID"},
                    {field: 'id', width: 80, sort: true, title: "ID"},
                    {field: 'state', width: 80, title: "状态", templet: "#switchTpl"},
                    {field: 'gradeId', edit: 'text', width: 150, title: "等级名称"},
                    {field: 'name',edit: 'text', width: 120, sort: true, title: "等级图标"},
                    {field: 'icon', edit: 'text', width: 150, title: "等级序号"},
                    {field: 'updateTime', sort: true, width: 150, title: "修改时间", templet:"#dateFomat"},
                    {fixed: 'right', width: 250, title: "操作", toolbar: '#barAction'},
                ]
            ],
            page: true,
            parseData: function (res) { //res 即为原始返回的数据
                return {
                    "code": res.code, //解析接口状态
                    "msg": res.msg, //解析提示文本
                    "count": res.data.pe.totalCount, //解析数据长度
                    "data": res.data.list //解析数据列表
                };
            }
            //,…… //其他参数
        });
        //监听单元格编辑
        table.on('edit(app)',
            function (obj) {
                var value = obj.value, //得到修改后的值
                    data = obj.data, //得到所在行所有键值
                    field = obj.field; //得到字段
                //修改接口
                var params = {id: data.id};
                params[field] = value;
                app.update(data.id, params);
            });
        //头工具栏事件
        table.on('toolbar(app)',
            function (obj) {
                var checkStatus = table.checkStatus(obj.config.id);
                switch (obj.event) {
                    case 'delete':
                        var data = checkStatus.data;
                        if (data == null || data.length == 0) {
                            layer.msg("未选择选项");
                            return;
                        }
                        app.deleteList();
                        break;
                };
            });
        //监听状态操作
        layui.form.on('switch(stateBox)', function(obj){
            var state = 0;
            if (obj.elem.checked) {
                state = 1;
            }
            var params = {id: this.value, state: state};
            app.update(this.value, params);
        });
    });</script>
</html>
facade-vip/src/main/java/com/ks/vip/pojo/DTO/PayWayInfoDTO.java
@@ -3,6 +3,7 @@
public class PayWayInfoDTO {
    private int payWay;
    private String payUrl;
    public PayWayInfoDTO(int payWay, String payUrl) {
facade-vip/src/main/java/com/ks/vip/service/VipOrederPayService.java
@@ -1,13 +1,23 @@
package com.ks.vip.service;
import com.ks.vip.exception.VipOrderException;
import com.ks.vip.pojo.DO.VipOrder;
import com.ks.vip.pojo.DTO.PayWayInfoDTO;
import com.ks.vip.pojo.DTO.VipOrderDTO;
public interface VipOrederPayService {
    /**
     * 创建支付订单-并返回支付链接
     * @param t
     * @throws VipOrderException
     */
    public PayWayInfoDTO addOrderByBuy(VipOrderDTO t) throws VipOrderException;
    /**
     * 订单支付
     * @param order
     * @return
facade-vip/src/main/java/com/ks/vip/service/VipOrederService.java
@@ -19,9 +19,6 @@
   public void delete(Long id);
   public void addOrderByBuy(VipOrderDTO t) throws VipOrderException;
   public void addOrderByWatchVideo(String uid, Long gradeId, Integer validDays) throws VipOrderException;
}
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderPayServiceImpl.java
@@ -1,5 +1,7 @@
package com.ks.vip.service.remote;
import com.alipay.api.AlipayApiException;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.ks.vip.exception.VipOrderException;
import com.ks.vip.mapper.VipOrderMapper;
import com.ks.vip.pojo.DO.VipCombo;
@@ -48,25 +50,76 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public PayWayInfoDTO addOrderByBuy(VipOrderDTO t) throws VipOrderException {
        if(t.getComboId() == null || t.getComboId() <= 0){
            throw new VipOrderException(1, "套餐ID不能为空");
        }
        if(StringUtil.isNullOrEmpty(t.getUid())){
            throw new VipOrderException(1, "用户ID不能为空");
        }
        if(t.getPayWay() == null){
            throw new VipOrderException(1, "付款方式不能为空");
        }
        if(StringUtil.isNullOrEmpty(t.getThreeOrderId())){
            throw new VipOrderException(1, "付款订单号不能为空");
        }
        // 检查是否已记录
        VipOrder order = vipOrderMapper.getByThreeOrderId(t.getThreeOrderId());
        if (order != null) {
            throw new VipOrderException(1, "该付款订单号已存在");
        }
        // 判断订单类型: 首单、续费
        String orderType = OrderTypeEnum.buyNewly.name();
        long count = vipOrderMapper.countByTypeAndUid(t.getUid(), orderType);
        if(count > 0) {
            orderType = OrderTypeEnum.buyRenew.name();
        }
        // 插入订单信息
        VipOrder newOrder = new VipOrder();
        newOrder.setComboId(t.getComboId());
        newOrder.setUid(t.getUid());
        newOrder.setThreeOrderId(t.getThreeOrderId());
        newOrder.setPayWay(t.getPayWay().name());
        newOrder.setType(orderType);
        newOrder.setCreateTime(new Date());
        vipOrderMapper.insertSelective(newOrder);
        // 支付方式
        return payOrder(newOrder);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public PayWayInfoDTO payOrder(VipOrder order) {
        String title = Constant.ORDER_PAY_TITLE;
        String goodsTitle = Constant.ORDER_PAY_TITLE;
        String orderId = order.getId() + "";
        switch (order.getPayWay()) {
            case "alipay":
                String formAlipay = PayUtil.getVipChargeAlipayForm(orderId, title, orderId, order.getPayMoney());
            case "alipay":  //生成支付宝支付订单
                if (order.getState() == VipOrder.STATE_PAY) {
                    return new PayWayInfoDTO(PayWayEnum.alipay.getWay(), PayUtil.getPaySuccessUrl(orderId));
                }
                String form = PayUtil.getVipChargeAlipayForm(orderId, goodsTitle, orderId, order.getPayMoney());
                //暂存2分钟
                String id = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis());
                redisManager.cacheCommonString(id, formAlipay, 120);
                redisManager.cacheCommonString(id, form, 120);
                String payUrl = Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + id;
                return new PayWayInfoDTO(PayWayEnum.alipay.getWay(), payUrl);
            case "weChat":
                try{
                    String formWX = PayUtil.createWXOrder(orderId, null, orderId,order.getPayMoney() ,title);
                    if (order.getState() == VipOrder.STATE_PAY) {
                        return new PayWayInfoDTO(PayWayEnum.weChat.getWay(), PayUtil.getPaySuccessUrl(orderId));
                    }
                    String formWX = PayUtil.createWXOrder(orderId, null, orderId, order.getPayMoney() ,goodsTitle);
                    //暂存2分钟
                    String idwx = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis());
                    redisManager.cacheCommonString(idwx, formWX, 120);
                    String payUrlwx = Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + idwx;
                    return new PayWayInfoDTO(PayWayEnum.weChat.getWay(), payUrlwx);
                    String idWX = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis());
                    redisManager.cacheCommonString(formWX, formWX, 120);
                    String payUrlWX = Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + idWX;
                    return new PayWayInfoDTO(PayWayEnum.weChat.getWay(), payUrlWX);
                } catch (Exception e) {
                }
@@ -74,143 +127,77 @@
        return null;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public VipOrder checkOrderPayState(Long id) {
        VipOrder vipOrder = vipOrderMapper.selectByPrimaryKey(id);
        if (vipOrder == null || vipOrder.getState() == VipOrder.STATE_PAY) {
            return vipOrder;
        VipOrder order = vipOrderMapper.selectByPrimaryKey(id);
        if (order == null || order.getState() == VipOrder.STATE_PAY) {
            return order;
        }
//        OrderRecord record = vipOrderRecordDao.find(OrderRecord.class, id);
//            if (record.getState() == OrderRecord.STATE_PAY)
//                return record;
//
//            switch (record.getPayWay()) {
//                case OrderRecord.PAY_WAY_ALIPAY_GOLDCORN:
//                case OrderRecord.PAY_WAY_ALIPAY: {
//                    //支付宝
//                    AlipayTradeQueryResponse res = null;
//                    try {
//                        res = AlipayH5PayUtil.queryOrder(VipUtil.getAlipayApp(), VIPOrderUtil.getOutOrderNo(record.getOrderType(), id), null);
//                        //支付成功
//                        if (res.isSuccess() && "TRADE_SUCCESS".equalsIgnoreCase(res.getTradeStatus())) {
//                            try {
//                                return paySuccess(id, OrderRecord.PAY_WAY_ALIPAY, new BigDecimal(res.getTotalAmount()), new Date());
//                            } catch (Exception e) {
//                                e.printStackTrace();
//                            }
//                        }
//                    } catch (AlipayApiException e) {
//                        e.printStackTrace();
//                    }
//                }
//
//                break;
//                case OrderRecord.PAY_WAY_WX_GOLDCORN:
//                case OrderRecord.PAY_WAY_WX: {
//                    //微信
//                    try {
//                        WXPayOrderInfoV3 info = WXPayV3Util.getPayOrderInfo(VIPOrderUtil.getOutOrderNo(record.getOrderType(), id), VipUtil.getWXAPP());
//                        if (info != null && info.getTrade_state().equalsIgnoreCase("SUCCESS")) {
//                            paySuccess(id, record.getPayWay(), new BigDecimal(info.getAmount().getPayer_total()).divide(new BigDecimal(100), 2, RoundingMode.FLOOR), new Date());
//                            return record;
//                        }
//                    } catch (Exception e) {
//                        e.printStackTrace();
//                    }
//                }
//                break;
//            }
        switch (order.getPayWay()) {
            case "alipay":  //支付宝
                AlipayTradeQueryResponse res = null;
                try {
                    res = AlipayH5PayUtil.queryOrder(PayUtil.getAlipayApp(), id+"" , null);
                    //支付成功
                    if (res.isSuccess() && "TRADE_SUCCESS".equalsIgnoreCase(res.getTradeStatus())) {
                        try {
                            return paySuccess(order);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                } catch (AlipayApiException e) {
                    e.printStackTrace();
                }
            case "weChat": //微信
                try {
                    WXPayOrderInfoV3 info = WXPayV3Util.getPayOrderInfo(id+"" , PayUtil.getWXAPP());
                    if (info != null && info.getTrade_state().equalsIgnoreCase("SUCCESS")) {
                        paySuccess(order);
                        return order;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
        }
        return null;
    }
//    @Transactional(rollbackFor = Exception.class)
//    @Override
//    public PayWayInfoDTO payOrder(OrderRecord record) throws OrderException, GoldCornException, PayException, VIPException, PPTVException, VideoBuyRecordException {
//        String orderNo = VIPOrderUtil.getOutOrderNo(record.getOrderType(), record.getId());
//        switch (record.getPayWay()) {
//            case OrderRecord.PAY_WAY_ALIPAY_GOLDCORN:
//                try {
//                    goldCornManager.consumeGoldCorn(record, record.getGoldCorn());
//                } catch (Exception e) {
//                    throw new GoldCornException(1, "影视豆扣除出错");
//                }
//                paySuccess(record.getId(), OrderRecord.PAY_WAY_GOLDCORN, null, new Date());
//
//            case OrderRecord.PAY_WAY_ALIPAY: {
//                if (record.getMoney() != null && record.getMoney().compareTo(new BigDecimal(0)) == 0) {
//                    return new PayWayInfoDTO(0, VipUtil.getPaySuccessUrl(record.getId()));
//                }
//                //生成支付宝支付订单
//                String form = VipUtil.getVipChargeAlipayForm(record.getId(), record.getOrderType(), orderNo, record.getMoney());
//                //暂存2分钟
//                String id = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis());
//                redisManager.cacheCommonString(id, form, 120);
//                String payUrl = Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + id;
//                orderLogger.info("订单创建支付宝支付链接成功:id-{} 链接-{}", record.getId(), payUrl);
//                return new PayWayInfoDTO(OrderRecord
//                        .PAY_WAY_ALIPAY, payUrl);
//            }
//            case OrderRecord.PAY_WAY_WX_GOLDCORN:
//                try {
//                    goldCornManager.consumeGoldCorn(record, record.getGoldCorn());
//                } catch (){
//                }
//        }
    /**
     * 支付成功更新处理
     * @param order
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public VipOrder paySuccess(VipOrder order) throws VipOrderException {
        VipCombo vipCombo = vipComboService.selectByPrimaryKey(order.getComboId());
        if (vipCombo == null) {
            throw new VipOrderException(1, "该套餐不存在");
        }
        // 有效天数
        Integer validDays = vipCombo.getValidDays();
        // 判断订单类型
        String orderType = OrderTypeEnum.buyNewly.name();
        long count = vipOrderMapper.countByTypeAndUid(order.getUid(), orderType);
        if(count > 0) {
            orderType = OrderTypeEnum.buyRenew.name();
        }
//        @Transactional(rollbackFor = Exception.class)
//        @Override
//        public OrderRecord checkOrderPayState(String id) {
//            OrderRecord record = vipOrderRecordDao.find(OrderRecord.class, id);
//            if (record.getState() == OrderRecord.STATE_PAY)
//                return record;
//
//            switch (record.getPayWay()) {
//                case OrderRecord.PAY_WAY_ALIPAY_GOLDCORN:
//                case OrderRecord.PAY_WAY_ALIPAY: {
//                    //支付宝
//                    AlipayTradeQueryResponse res = null;
//                    try {
//                        res = AlipayH5PayUtil.queryOrder(VipUtil.getAlipayApp(), VIPOrderUtil.getOutOrderNo(record.getOrderType(), id), null);
//                        //支付成功
//                        if (res.isSuccess() && "TRADE_SUCCESS".equalsIgnoreCase(res.getTradeStatus())) {
//                            try {
//                                return paySuccess(id, OrderRecord.PAY_WAY_ALIPAY, new BigDecimal(res.getTotalAmount()), new Date());
//                            } catch (Exception e) {
//                                e.printStackTrace();
//                            }
//                        }
//                    } catch (AlipayApiException e) {
//                        e.printStackTrace();
//                    }
//                }
//
//                break;
//                case OrderRecord.PAY_WAY_WX_GOLDCORN:
//                case OrderRecord.PAY_WAY_WX: {
//                    //微信
//                    try {
//                        WXPayOrderInfoV3 info = WXPayV3Util.getPayOrderInfo(VIPOrderUtil.getOutOrderNo(record.getOrderType(), id), VipUtil.getWXAPP());
//                        if (info != null && info.getTrade_state().equalsIgnoreCase("SUCCESS")) {
//                            paySuccess(id, record.getPayWay(), new BigDecimal(info.getAmount().getPayer_total()).divide(new BigDecimal(100), 2, RoundingMode.FLOOR), new Date());
//                            return record;
//                        }
//                    } catch (Exception e) {
//                        e.printStackTrace();
//                    }
//                }
//                break;
//            }
//            return record;
//
//        }
        // order.setThreeOrderId(); TODO
         order.setState(VipOrder.STATE_PAY);
         order.setPayTime(new Date());
         order.setUpdateTime(new Date());
         vipOrderMapper.updateByPrimaryKeySelective(order);
         // 更新等级
         vipCenterService.saveVipCenter(order.getUid(), vipCombo.getGradeId(), validDays, order.getId() );
         return order;
     }
}
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderServiceImpl.java
@@ -72,58 +72,6 @@
        return vipOrderMapper.listByPage(query);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addOrderByBuy(VipOrderDTO t) throws VipOrderException {
        if(t.getComboId() == null || t.getComboId() <= 0){
            throw new VipOrderException(1, "套餐ID不能为空");
        }
        if(StringUtil.isNullOrEmpty(t.getUid())){
            throw new VipOrderException(1, "用户ID不能为空");
        }
        if(t.getPayWay() == null){
            throw new VipOrderException(1, "付款方式不能为空");
        }
        if(StringUtil.isNullOrEmpty(t.getThreeOrderId())){
            throw new VipOrderException(1, "付款订单号不能为空");
        }
        // 检查是否已记录
        VipOrder order = vipOrderMapper.getByThreeOrderId(t.getThreeOrderId());
        if (order != null) {
            throw new VipOrderException(1, "该付款订单号已存在");
        }
        VipCombo vipCombo = vipComboService.selectByPrimaryKey(t.getComboId());
        if (vipCombo == null) {
            throw new VipOrderException(1, "该套餐不存在");
        }
        // 有效天数
        Integer validDays = vipCombo.getValidDays();
        // 判断订单类型
        String orderType = OrderTypeEnum.buyNewly.name();
        long count = vipOrderMapper.countByTypeAndUid(t.getUid(), orderType);
        if(count > 0) {
            orderType = OrderTypeEnum.buyRenew.name();
        }
        // 插入订单信息
        VipOrder newOrder = new VipOrder();
        newOrder.setComboId(t.getComboId());
        newOrder.setUid(t.getUid());
        newOrder.setThreeOrderId(t.getThreeOrderId());
        newOrder.setPayWay(t.getPayWay().name());
        newOrder.setPayAccount(t.getPayAccount());
        newOrder.setPayMoney(t.getPayMoney());
        newOrder.setPayTime(t.getPayTime());
        newOrder.setType(orderType);
        newOrder.setCreateTime(new Date());
        vipOrderMapper.insertSelective(newOrder);
        // 更新等级
        vipCenterService.saveVipCenter(t.getUid(), vipCombo.getGradeId(), validDays, newOrder.getId() );
    }
    @Override