app/src/main/java/com/ks/app/controller/admin/vip/VipGradePotenceAdminController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/resources/static/views/vip/gradePotence-add.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/resources/static/views/vip/gradePotence-list.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
facade-vip/src/main/java/com/ks/vip/pojo/DTO/PayWayInfoDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
facade-vip/src/main/java/com/ks/vip/service/VipOrederPayService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
facade-vip/src/main/java/com/ks/vip/service/VipOrederService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderPayServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | 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"></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); try { 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; } 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; } /** * 支付成功更新处理 * @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(); } // 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() ); // 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 order; } 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 (){ // } // } // @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; // // } } 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