admin
2021-05-25 13cbf3a947c6a26f11cd74806d3faee2590c469e
Merge branch 'master' of ssh://193.112.35.168:29418/tejia
6个文件已修改
4个文件已添加
476 ■■■■■ 已修改文件
app/src/main/java/com/ks/app/controller/admin/vip/VipCenterAdminController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/resources/static/index.html 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/resources/static/views/vip/vipCenter-list.html 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-vip/src/main/java/com/ks/vip/exception/VipCenterException.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-vip/src/main/java/com/ks/vip/pojo/VO/VipCenterVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-vip/src/main/java/com/ks/vip/service/VipCenterService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/pom.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/VipCenterServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/ks/app/controller/admin/vip/VipCenterAdminController.java
New file
@@ -0,0 +1,96 @@
package com.ks.app.controller.admin.vip;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ks.app.pojo.DTO.OptionDTO;
import com.ks.app.pojo.VO.PageEntity;
import com.ks.app.pojo.VO.Result;
import com.ks.app.util.ResultUtils;
import com.ks.vip.exception.VipCenterException;
import com.ks.vip.pojo.DO.VipCenter;
import com.ks.vip.pojo.DO.VipGrade;
import com.ks.vip.pojo.Enums.VIPEnum;
import com.ks.vip.pojo.VO.VipCenterVO;
import com.ks.vip.service.VipCenterService;
import com.ks.vip.service.VipCenterService;
import com.ks.vip.service.VipGradeService;
import org.apache.commons.beanutils.BeanUtils;
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/vipCenter")
public class VipCenterAdminController {
    @Reference(version = "1.0")
    private VipCenterService vipCenterService;
    @Reference(version = "1.0")
    private VipGradeService vipGradeService;
    @ResponseBody
    @RequestMapping(value = "listByPage")
    public Result listByPage(int page, int pageSize, VipCenter t, HttpServletRequest request) {
        try {
            List<VipCenterVO> listVO = new ArrayList<>();
            List<VipCenter> list = vipCenterService.listByPage(page, pageSize, t);
            if (list != null && list.size() > 0) {
                for (VipCenter vipCenter: list) {
                    VipCenterVO vipCenterVO = new VipCenterVO();
                    BeanUtils.copyProperties(vipCenter, vipCenterVO);
                    VipGrade vipGrade = vipGradeService.selectByPrimaryKey(vipCenter.getGradeId());
                    if (vipGrade != null) {
                        vipCenterVO.setGradeName(vipGrade.getName());
                    }
                    // 用户明查询 TODO
                    listVO.add(vipCenterVO);
                }
            }
            long count = vipCenterService.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", listVO);
            return ResultUtils.loadTrue(map);
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtils.loadFalse("查询失败!");
        }
    }
    @ResponseBody
    @RequestMapping(value = "save")
    public Result save(VipCenter t, HttpServletRequest request) {
        try {
            vipCenterService.saveManageWeb(t);
            return ResultUtils.loadTrue();
        } catch (VipCenterException e) {
            return ResultUtils.loadFalse(e.getMsg());
        } catch (Exception e) {
            e.printStackTrace();
           return ResultUtils.loadFalse("保存失败!");
        }
    }
}
app/src/main/resources/static/index.html
@@ -110,11 +110,11 @@
                            <i class="iconfont">&#xe6a7;</i>
                            <cite>套餐管理</cite></a>
                    </li>
                    <!--<li>
                        <a onclick="xadmin.add_tab('订单管理','/views/vip/order-list.html')">
                    <li>
                        <a onclick="xadmin.add_tab('会员管理','/views/vip/vipCenter-list.html')">
                            <i class="iconfont">&#xe6a7;</i>
                            <cite>订单管理</cite></a>
                    </li>-->
                            <cite>会员管理</cite></a>
                    </li>
                </ul>
            </li>
        </ul>
app/src/main/resources/static/views/vip/vipCenter-list.html
New file
@@ -0,0 +1,258 @@
<!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.gradeId}})" >删除</a>
</script>
<script>
    function member_del(obj, index, id) {
        layer.confirm('确认要删除吗?', function (index) {
            app.delete(obj, index, id);  //发异步删除数据
        });
    }
</script>
<script type="text/html" id="gradeAction">
    <a class="layui-btn layui-btn-danger layui-btn-xs"  onclick="gradeAction({{d.uid}})" >删除</a>
</script>
<script>
    function gradeAction(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/vipCenter/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/vipCenter/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/vipCenter/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: 'uid', width: 80, sort: true, title: "用户ID"},
                    {field: 'userName', edit: 'text', width: 150, title: "用户名称"},
                    {field: 'gradeName', edit: 'text', width: 150, title: "对应等级", templet:"#gradeAction"},
                    {field: 'startTime',edit: 'text', width: 120, sort: true, title: "开始时间"},
                    {field: 'endTime', 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/exception/VipCenterException.java
New file
@@ -0,0 +1,19 @@
package com.ks.vip.exception;
import com.ks.lib.common.exception.BaseException;
public class VipCenterException extends BaseException {
    public VipCenterException(int code, String msg) {
        super(code, msg);
    }
    public VipCenterException() {
        super();
    }
    @Override
    public synchronized Throwable fillInStackTrace() {
        return this;
    }
}
facade-vip/src/main/java/com/ks/vip/pojo/VO/VipCenterVO.java
New file
@@ -0,0 +1,39 @@
package com.ks.vip.pojo.VO;
import com.ks.vip.pojo.DO.VipCenter;
public class VipCenterVO extends VipCenter {
    // 用户名
    private  String userName;
    // 等级名称
    private  String gradeName;
    // 等级状态
    private  String statedesc;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getGradeName() {
        return gradeName;
    }
    public void setGradeName(String gradeName) {
        this.gradeName = gradeName;
    }
    public String getStatedesc() {
        return statedesc;
    }
    public void setStatedesc(String statedesc) {
        this.statedesc = statedesc;
    }
}
facade-vip/src/main/java/com/ks/vip/service/VipCenterService.java
@@ -1,6 +1,7 @@
package com.ks.vip.service;
import com.ks.vip.exception.VipCenterException;
import com.ks.vip.pojo.DO.VipCenter;
import com.ks.vip.pojo.DO.VipCombo;
import com.ks.vip.pojo.DO.VipGrade;
@@ -71,5 +72,10 @@
     */
    public VIPEnum getVIPEnumByUid(String uid, Date date);
    /**
     * 后台保存会员信息
     * @param t
     * @throws VipCenterException
     */
    public void  saveManageWeb(VipCenter t) throws VipCenterException;
}
pom.xml
@@ -9,12 +9,14 @@
        <module>service-vip</module>
        <module>app</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ks</groupId>
    <artifactId>tejia</artifactId>
    <version>0.0.1-SNAPSHOT</version>
service-lijin/pom.xml
@@ -170,6 +170,8 @@
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.4.1</version>
            </plugin>
            <!-- MyBatis插件 -->
            <!--<plugin>-->
service-vip/pom.xml
@@ -177,7 +177,6 @@
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
service-vip/src/main/java/com/ks/vip/service/remote/VipCenterServiceImpl.java
@@ -1,6 +1,7 @@
package com.ks.vip.service.remote;
import com.ks.vip.exception.VipCenterException;
import com.ks.vip.mapper.VipCenterMapper;
import com.ks.vip.mapper.VipCenterRecordMapper;
import com.ks.vip.mapper.VipComboMapper;
@@ -12,6 +13,7 @@
import org.apache.dubbo.config.annotation.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.StringUtil;
import javax.annotation.Resource;
import java.util.Date;
@@ -186,4 +188,45 @@
        }
        return vipGradeService.selectByPrimaryKey(list.get(0).getGradeId()).getIdentity();
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void  saveManageWeb(VipCenter t) throws VipCenterException {
        if (t== null || StringUtil.isNullOrEmpty(t.getUid())) {
            throw new VipCenterException(1, "用户ID不存在");
        }
        if (t.getGradeId() == null) {
            throw new VipCenterException(1, "请选择用户等级");
        }
        if (t.getStartTime() == null) {
            throw new VipCenterException(1, "请选择开始时间");
        }
        if (t.getEndTime() == null) {
            throw new VipCenterException(1, "请选择结束时间");
        }
        VipCenter vipCenter = vipCenterMapper.selectForUpdate(t.getUid());
        if (vipCenter == null) {
            t.setCreateTime(new Date());
            vipCenterMapper.insertSelective(t);
        } else {
            t.setUpdateTime(new Date());
            vipCenterMapper.updateByPrimaryKeySelective(t);
        }
        // 保存记录
        VipCenterRecord record = new VipCenterRecord();
        record.setStartTime(t.getStartTime());
        record.setEndTime(t.getEndTime());
        record.setUid(t.getUid());
        record.setGradeId(t.getGradeId());
        record.setCreateTime(new Date());
        vipCenterRecordService.insertSelective(record);
    }
}