New file |
| | |
| | | package com.taoke.autopay.controller.admin; |
| | | |
| | | import com.taoke.autopay.entity.SystemConfigKeyEnum; |
| | | import com.taoke.autopay.service.SystemConfigService; |
| | | import net.sf.json.JSONObject; |
| | | import org.springframework.stereotype.Controller; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.ResponseBody; |
| | | import org.yeshi.utils.JsonUtil; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | @Controller |
| | | @RequestMapping("/admin/api/settings") |
| | | public class AdminSettingsController { |
| | | |
| | | @Resource |
| | | private SystemConfigService systemConfigService; |
| | | |
| | | |
| | | @ResponseBody |
| | | @RequestMapping("getDefaultOrderCount") |
| | | public String getDefaultOrderCount() { |
| | | // 获取默认的 |
| | | SystemConfigKeyEnum[] keys = new SystemConfigKeyEnum[]{ |
| | | SystemConfigKeyEnum.DY_ORDER_MAX_PAY_COUNT_DEFAULT, |
| | | SystemConfigKeyEnum.KS_ORDER_MAX_PAY_COUNT_DEFAULT, |
| | | SystemConfigKeyEnum.ORDER_MAX_SUBMIT_COUNT_DEFAULT |
| | | }; |
| | | JSONObject data = new JSONObject(); |
| | | for (SystemConfigKeyEnum key : keys) { |
| | | String val = systemConfigService.getValue(key); |
| | | data.put(key.getKey(), val); |
| | | } |
| | | return JsonUtil.loadTrueResult(data); |
| | | } |
| | | |
| | | |
| | | @ResponseBody |
| | | @RequestMapping("setDefaultOrderCount") |
| | | public String setDefaultOrderCount(HttpServletRequest request) { |
| | | |
| | | SystemConfigKeyEnum[] keys = new SystemConfigKeyEnum[]{ |
| | | SystemConfigKeyEnum.DY_ORDER_MAX_PAY_COUNT_DEFAULT, |
| | | SystemConfigKeyEnum.KS_ORDER_MAX_PAY_COUNT_DEFAULT, |
| | | SystemConfigKeyEnum.ORDER_MAX_SUBMIT_COUNT_DEFAULT |
| | | }; |
| | | for (SystemConfigKeyEnum key : keys) { |
| | | String val = request.getParameter(key.getKey()); |
| | | if (val != null) { |
| | | systemConfigService.setValue(key, val); |
| | | } |
| | | } |
| | | systemConfigService.clearCache(); |
| | | return JsonUtil.loadTrueResult(""); |
| | | } |
| | | |
| | | } |
| | |
| | | orderUpdate.setStateDesc("支付失败"); |
| | | keyOrderService.update(orderUpdate); |
| | | } else { |
| | | KeyOrder orderUpdate = new KeyOrder(); |
| | | orderUpdate.setId(id); |
| | | orderUpdate.setState(KeyOrder.STATE_PAY); |
| | | if (order.getPayTime() == null) { |
| | | orderUpdate.setPayTime(new Date()); |
| | | } |
| | | orderUpdate.setStateDesc("支付成功"); |
| | | try { |
| | | keyOrderService.paySuccess(id, "支付成功", TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMdd")); |
| | | } catch (WxOrderCountException e) { |
| | |
| | | DY_ORDER_MAX_PAY_COUNT_DEFAULT("dy_order_pay_count_default","抖音订单最大默认付款次数"), |
| | | KS_ORDER_MAX_PAY_COUNT_DEFAULT("ks_order_pay_count_default","快手订单最大默认付款次数"), |
| | | ORDER_MAX_SUBMIT_COUNT_DEFAULT("order_submit_count_default","订单最大默认提交次数"), |
| | | |
| | | |
| | | ; |
| | | |
| | | |
| | |
| | | |
| | | public SystemConfig getCache(SystemConfigKeyEnum key); |
| | | |
| | | public String getValue(SystemConfigKeyEnum key); |
| | | |
| | | public String getValueCache(SystemConfigKeyEnum key); |
| | | |
| | | public void clearCache(); |
| | | |
| | | public void setValue(SystemConfigKeyEnum key, String val); |
| | | |
| | | |
| | | } |
| | |
| | | orderUpdate.setId(id); |
| | | orderUpdate.setState(KeyOrder.STATE_PAY); |
| | | orderUpdate.setStateDesc(stateDesc); |
| | | if(old.getPayTime()==null){ |
| | | orderUpdate.setPayTime(new Date()); |
| | | } |
| | | update(orderUpdate); |
| | | } |
| | | |
| | |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | return get(key); |
| | | } |
| | | |
| | | @Override |
| | | public String getValue(SystemConfigKeyEnum key) { |
| | | SystemConfig config = get(key); |
| | | if (config != null) { |
| | | return config.getValue(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Cacheable(value = "configCache", key = "'getValueCache-'+#key") |
| | | @Override |
| | | public String getValueCache(SystemConfigKeyEnum key) { |
| | |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void setValue(SystemConfigKeyEnum key, String val) { |
| | | SystemConfig config = get(key); |
| | | if (config != null) { |
| | | SystemConfig update = new SystemConfig(); |
| | | update.setId(config.getId()); |
| | | update.setValue(val); |
| | | update.setUpdateTime(new Date()); |
| | | systemConfigMapper.updateByPrimaryKeySelective(update); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | spring: |
| | | profiles: |
| | | active: pro |
| | | active: dev |
| | |
| | | <if test="excutePayTime !=null">excute_pay_time =#{excutePayTime,jdbcType=TIMESTAMP},</if> |
| | | <if test="excutePayTime !=null">pay_time =#{payTime,jdbcType=TIMESTAMP},</if> |
| | | </set> where id = #{id,jdbcType=VARCHAR} |
| | | </update> |
| | | </update> |
| | | <select id="listDistributeUids" resultMap="DistributeResultMap" parameterType="java.util.Date">SELECT u.`id` as uid, IF( a.count IS NULL,0,a.count) AS `count` FROM `table_user` u LEFT JOIN (SELECT o.`distribute_client_uid` AS uid,COUNT(*) AS `count` FROM `table_order` o WHERE o.`state` = 0 GROUP BY o.`distribute_client_uid`) a ON a.uid = u.`id` WHERE rule=0 |
| | | <if test="minActiveTime!=null">and active_time >=#{minActiveTime}</if> |
| | | </select> |
| | | </select> |
| | | <select id="listNotDistributed" resultMap="BaseResultMap">select |
| | | <include refid="Base_Column_List"/> from table_order where distribute_client_uid is null and state=0 limit #{start},#{count} |
| | | </select> |
| | | </select> |
| | | <delete id="deleteAll" parameterType="java.util.Date">delete from table_order where #{maxCreateTime} >= create_time</delete> |
| | | </mapper> |
| | |
| | | <link rel="stylesheet" type="text/css" href="layui/css/layui.css"/> |
| | | <link rel="stylesheet" type="text/css" href="css/admin.css"/> |
| | | <script src="layui/layui.js" type="text/javascript" charset="utf-8"></script> |
| | | <style> |
| | | .rightNav a { |
| | | color: #000 !important; |
| | | } |
| | | .rightNav a:hover{ |
| | | color: rgba(0, 0, 0, .5) !important; |
| | | } |
| | | </style> |
| | | </head> |
| | | <body> |
| | | <div class="main-layout" id='main-layout'> |
| | |
| | | <li class="layui-nav-item"> |
| | | <a href="javascript:;"><i class="iconfont"></i>系统设置</a> |
| | | <dl class="layui-nav-child"> |
| | | <dd><a href="javascript:;" data-url="article-list.html" data-id='4' data-text="默认参数设置"><span class="l-line"></span>默认参数设置</a></dd> |
| | | <dd><a href="javascript:;" data-url="settings_edit.html" data-id='4' data-text="默认参数设置"><span class="l-line"></span>默认参数设置</a></dd> |
| | | </dl> |
| | | </li> |
| | | </ul> |
| | |
| | | <span class="iconfont"></span> |
| | | </a> |
| | | </div> |
| | | <ul class="layui-nav" lay-filter="rightNav"> |
| | | <ul class="layui-nav rightNav" lay-filter="rightNav"> |
| | | <li class="layui-nav-item"> |
| | | <a href="javascript:;" data-id='5' data-text="个人信息">超级管理员</a> |
| | | </li> |
| | |
| | | } |
| | | mainLayout.removeClass('hide-side'); |
| | | }); |
| | | |
| | | // 监听跨域切换 |
| | | // window.addEventListener('message', function(event) { |
| | | // // 处理接收到的消息 |
| | | // console.log('Received message from layui:', event.data); |
| | | // }); |
| | | window.addEventListener('message', function(event) { |
| | | // 验证消息来源 |
| | | |
| | | // 处理接收到的消息 |
| | | console.log('Received message from iframe child:', event.data); |
| | | }); |
| | | |
| | | //菜单隐藏显示 |
| | | hideBtn.on('click', function() { |
| | | if(!mainLayout.hasClass('hide-side')) { |
| | |
| | | } |
| | | |
| | | layui.use(['form', 'jquery', 'layer', 'table'], function() { |
| | | |
| | | var table = layui.table; |
| | | var form = layui.form; |
| | | var $ = layui.jquery; |
| | | |
| | | //第一个实例 |
| | | let tableIns = table.render({ |
| | | |
| | | let table_option = { |
| | | elem: '#table', |
| | | url: '/admin/api/order/list', //数据接口 |
| | | where: { |
| | |
| | | |
| | | ] |
| | | ] |
| | | }); |
| | | }; |
| | | |
| | | |
| | | |
| | | var key = http_util.getQueryString("key"); |
| | | if (key != null && key != undefined) { |
| | | form.val("search", { |
| | | "key": key |
| | | }); |
| | | table_option.data=[]; |
| | | setTimeout(function() { |
| | | $("#search").click(); |
| | | }, 100); |
| | | } |
| | | |
| | | //第一个实例 |
| | | let tableIns = table.render(table_option); |
| | | |
| | | //监听提交 |
| | | form.on('submit(search)', function(data) { |
New file |
| | |
| | | <!DOCTYPE html> |
| | | <html> |
| | | |
| | | <head> |
| | | <meta charset="UTF-8"> |
| | | <meta name="viewport" |
| | | content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> |
| | | <title>系统配置参数修改</title> |
| | | <link rel="stylesheet" type="text/css" href="layui/css/layui.css" /> |
| | | <style> |
| | | body { |
| | | padding: 10px; |
| | | } |
| | | |
| | | input { |
| | | width: 200px !important; |
| | | } |
| | | </style> |
| | | </head> |
| | | |
| | | <body> |
| | | |
| | | <form class="layui-form" lay-filter="edit"> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">抖音频次限制默认值</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="dy_order_pay_count_default" required lay-verify="required|num" |
| | | placeholder="抖音频次限制" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">快手频次限制默认值</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="ks_order_pay_count_default" required lay-verify="required|num" |
| | | placeholder="快手频次限制" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">总频次限制默认值</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="order_submit_count_default" required lay-verify="required|num" |
| | | placeholder="总频次限制" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-input-block"> |
| | | <button class="layui-btn layui-btn-normal" lay-submit lay-filter="sure" id="sure">确定</button> |
| | | </div> |
| | | </form> |
| | | <script src="layui/layui.js" type="text/javascript" charset="utf-8"></script> |
| | | <script src="js/jquery.min.js" type="text/javascript" charset="utf-8"></script> |
| | | <script src="js/http_api.js"></script> |
| | | <script> |
| | | layui.use(['form', 'layedit', 'laydate'], function() { |
| | | var form = layui.form, |
| | | layer = layui.layer; |
| | | |
| | | // 在 iframe 内部的子页面中 |
| | | // 示例:向父页面发送消息 |
| | | window.parent.postMessage('Hello from iframe child!', window.location.href); |
| | | |
| | | |
| | | //自定义验证规则 |
| | | form.verify({ |
| | | num: [/^\d+$/, "必须为正整数"] |
| | | }); |
| | | |
| | | let index = layer.load(1); |
| | | |
| | | $.post("/admin/api/settings/getDefaultOrderCount", {}, |
| | | function(response) { |
| | | layer.close(index); |
| | | if (response.code == 0) { |
| | | form.val("edit", response.data); |
| | | } else { |
| | | layer.msg(response.msg); |
| | | } |
| | | }, 'json').fail(function(jqXHR, textStatus, errorThrown) { |
| | | layer.msg("网络请求失败"); |
| | | layer.close(index); |
| | | }); |
| | | |
| | | |
| | | //监听提交 |
| | | form.on('submit(sure)', function(data) { |
| | | $.post("/admin/api/settings/setDefaultOrderCount", data.field, |
| | | function(response) { |
| | | if (response.code == 0) { |
| | | layer.msg("修改成功"); |
| | | } else { |
| | | layer.msg(response.msg); |
| | | } |
| | | }, 'json').fail(function(jqXHR, textStatus, errorThrown) { |
| | | layer.msg("网络请求失败"); |
| | | }); |
| | | return false; |
| | | }); |
| | | |
| | | }); |
| | | </script> |
| | | </body> |
| | | |
| | | </html> |
| | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">抖音频次限制</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="dyPayCount" required lay-verify="required" placeholder="抖音频次限制" |
| | | <input type="text" name="dyPayCount" required lay-verify="required|num" placeholder="抖音频次限制" |
| | | autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">快手频次限制</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="ksPayCount" required lay-verify="required" placeholder="抖音频次限制" |
| | | <input type="text" name="ksPayCount" required lay-verify="required|num" placeholder="抖音频次限制" |
| | | autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">总频次限制</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="totalSubmitCount" required lay-verify="required" placeholder="总频次限制" |
| | | <input type="text" name="totalSubmitCount" required lay-verify="required|num" placeholder="总频次限制" |
| | | autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | |
| | | //自定义验证规则 |
| | | |
| | | form.verify({ |
| | | dyPayCount: [/\d+/, "必须为正整数"], |
| | | ksPayCount: [/\d+/, "必须为正整数"], |
| | | totalSubmitCount: [/\d+/, "必须为正整数"] |
| | | num: [/^\d+$/, "必须为正整数"] |
| | | }); |
| | | |
| | | |
| | |
| | | <script src="js/http_api.js"></script> |
| | | <!-- <script src="js/common.js" type="text/javascript" charset="utf-8"></script> --> |
| | | <script> |
| | | |
| | | function editUserClick(uid){ |
| | | function editUserClick(uid) { |
| | | var layerIndex = layer.open({ |
| | | title:"修改订单频次", |
| | | type: 2, |
| | | area: ['400px', '350px'], |
| | | shade: 0.3, |
| | | shadeClose: false,//默认开启遮罩关闭 |
| | | resize: false,//默认重设大小是否 |
| | | |
| | | //如果不让iframe出现滚动条, |
| | | //可以content: ['http://sentsin.com', 'no'] |
| | | content: 'user-edit.html?id='+uid, |
| | | btn: ['确定','取消'], |
| | | yes: function (index) { |
| | | //submit方法为弹框内容中的方法 |
| | | window["layui-layer-iframe" + index].submit(function (res) { |
| | | try { |
| | | var index = layer.load(1); |
| | | $.post("/admin/api/wxuser/updateOrderSettings", res, function(response) { |
| | | layer.close(index); |
| | | if (response.code == 0) { |
| | | title: "修改订单频次", |
| | | type: 2, |
| | | area: ['400px', '350px'], |
| | | shade: 0.3, |
| | | shadeClose: false, //默认开启遮罩关闭 |
| | | resize: false, //默认重设大小是否 |
| | | |
| | | //如果不让iframe出现滚动条, |
| | | //可以content: ['http://sentsin.com', 'no'] |
| | | content: 'user-edit.html?id=' + uid, |
| | | btn: ['确定', '取消'], |
| | | yes: function(index) { |
| | | //submit方法为弹框内容中的方法 |
| | | window["layui-layer-iframe" + index].submit(function(res) { |
| | | try { |
| | | var index = layer.load(1); |
| | | $.post("/admin/api/wxuser/updateOrderSettings", res, function(response) { |
| | | layer.close(index); |
| | | if (response.code == 0) { |
| | | layer.close(layerIndex); |
| | | layer.msg("更改成功"); |
| | | } else { |
| | | layer.msg(response.msg); |
| | | } |
| | | }, 'json').fail(function(jqXHR, textStatus, errorThrown) { |
| | | layer.close(index); |
| | | layer.msg("网络请求失败"); |
| | | }); |
| | | |
| | | } catch (e) { |
| | | console.log(e); |
| | | } |
| | | }); |
| | | }, |
| | | cancel: function () { |
| | | |
| | | } |
| | | }); |
| | | |
| | | |
| | | layer.msg("更改成功"); |
| | | } else { |
| | | layer.msg(response.msg); |
| | | } |
| | | }, 'json').fail(function(jqXHR, textStatus, errorThrown) { |
| | | layer.close(index); |
| | | layer.msg("网络请求失败"); |
| | | }); |
| | | |
| | | } catch (e) { |
| | | console.log(e); |
| | | } |
| | | }); |
| | | }, |
| | | cancel: function() { |
| | | |
| | | } |
| | | }); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | layui.use(['form', 'jquery', 'layer', 'table'], function() { |
| | | |
| | | var table = layui.table; |
| | | var form = layui.form; |
| | | var $ = layui.jquery; |
| | | |
| | | //第一个实例 |
| | | let tableIns = table.render({ |
| | | let table_option = { |
| | | elem: '#table', |
| | | height: 600, |
| | | url: '/admin/api/wxuser/list', //数据接口 |
| | |
| | | |
| | | ] |
| | | ] |
| | | }); |
| | | |
| | | }; |
| | | |
| | | var uid = http_util.getQueryString("uid"); |
| | | if(uid!=null&&uid!=undefined){ |
| | | form.val("search",{"uid":uid}); |
| | | setTimeout(function(){ |
| | | if (uid != null && uid != undefined) { |
| | | form.val("search", { |
| | | "uid": uid |
| | | }); |
| | | table_option.data = []; |
| | | setTimeout(function() { |
| | | $("#search").click(); |
| | | },100); |
| | | }, 100); |
| | | } |
| | | |
| | | //第一个实例 |
| | | let tableIns = table.render(table_option); |
| | | |
| | | //监听提交 |
| | | form.on('submit(search)', function(data) { |
| | | tableIns.reload({ |
| | |
| | | private KeyOrderMapper keyOrderMapper; |
| | | |
| | | @Test |
| | | void addClientInfo(){ |
| | | for(int i=4;i<50;i++) { |
| | | ClientInfo info=new ClientInfo(); |
| | | void addClientInfo() { |
| | | for (int i = 4; i < 50; i++) { |
| | | ClientInfo info = new ClientInfo(); |
| | | info.setRule(0); |
| | | info.setAccount("c"+i); |
| | | info.setAccount("c" + i); |
| | | info.setPwd("e10adc3949ba59abbe56e057f20f883e"); |
| | | info.setCreateTime(new Date()); |
| | | info.setName("客户端"+i); |
| | | info.setName("客户端" + i); |
| | | mapper.insertSelective(info); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | @Test |
| | | void test4(){ |
| | | void test4() { |
| | | clientInfoService.logout(3L); |
| | | } |
| | | |
| | | @Test |
| | | void test3() throws Exception { |
| | | keyOrderService.deleteAll(new Date(System.currentTimeMillis() - 1000*60*60*24L *5)); |
| | | for (int i = 0; i < 100; i++) { |
| | | Long uid = keyOrderService.getCanDistributeUid(); |
| | | System.out.println(uid); |
| | | } |
| | | } |
| | | |
| | | @Test |
| | | void contextLoads() { |
| | | ClientInfo info=new ClientInfo(); |
| | | ClientInfo info = new ClientInfo(); |
| | | info.setName("超级管理员"); |
| | | info.setAccount("admin"); |
| | | info.setPwd(StringUtil.Md5("123456")); |
| | |
| | | info.setRule(ClientInfo.RULE_ADMIN); |
| | | mapper.insertSelective(info); |
| | | |
| | | ClientInfoMapper.DaoQuery query=new ClientInfoMapper.DaoQuery(); |
| | | query.count=10; |
| | | ClientInfoMapper.DaoQuery query = new ClientInfoMapper.DaoQuery(); |
| | | query.count = 10; |
| | | query.start = 0; |
| | | List<ClientInfo> list = mapper.list(query); |
| | | System.out.println(list.size()); |
| | | List<ClientInfo> list = mapper.list(query); |
| | | System.out.println(list.size()); |
| | | |
| | | } |
| | | |