forked from kidgrow-microservices-platform

1.运营中心增加用户反馈功能
2.common.js中取消对插件库的重复引用
3.运营中心配置中,增加租户业务排除用户反馈表
8 files modified
1 files added
291 ■■■■ changed files
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/SysFeedback.java 2 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/ISysFeedbackService.java 7 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/SysFeedbackServiceImpl.java 39 ●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/SysFeedbackMapper.xml 17 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/SysFeedbackController.java 43 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/SysLoggerController.java 24 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml 1 ●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/assets/js/common.js 2 ●●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/feedback.html 156 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/SysFeedback.java
@@ -1,5 +1,6 @@
package com.kidgrow.oprationcenter.model;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.kidgrow.common.model.SuperModel;
import lombok.AllArgsConstructor;
@@ -66,6 +67,7 @@
    /**
     * 是否删除,1删除,0未删除
     */
    @TableLogic
    private Boolean isDel;
    /**
     * 状态,1已查收,0未处理
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/ISysFeedbackService.java
@@ -1,5 +1,6 @@
package com.kidgrow.oprationcenter.service;
import com.kidgrow.common.model.ResultBody;
import com.kidgrow.oprationcenter.model.SysFeedback;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.service.ISuperService;
@@ -29,5 +30,11 @@
    * @return SysFeedback对象
    */
    SysFeedback findByObject(SysFeedback sysFeedback);
    /**
     * 状态变更
     * @param params
     * @return
     */
    ResultBody updateEnabled(Map<String, Object> params);
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/SysFeedbackServiceImpl.java
@@ -1,18 +1,19 @@
package com.kidgrow.oprationcenter.service.impl;
import org.springframework.stereotype.Service;
import com.kidgrow.common.model.PageResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.ResultBody;
import com.kidgrow.common.service.impl.SuperServiceImpl;
import com.kidgrow.oprationcenter.mapper.SysFeedbackMapper;
import com.kidgrow.oprationcenter.model.SysFeedback;
import com.kidgrow.oprationcenter.service.ISysFeedbackService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections4.MapUtils;
import lombok.extern.slf4j.Slf4j;
import com.kidgrow.oprationcenter.model.SysFeedback;
import com.kidgrow.oprationcenter.mapper.SysFeedbackMapper;
import com.kidgrow.oprationcenter.service.ISysFeedbackService;
/**
 * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
@@ -46,4 +47,26 @@
    public SysFeedback findByObject(SysFeedback sysFeedback){
        return baseMapper.findByObject(sysFeedback);
    }
    /**
     * 根据id和启用禁用值更新数据
     * @param params
     * @return ResultBody
     */
    @Override
    public ResultBody updateEnabled(Map<String, Object> params) {
        Long id = MapUtils.getLong(params, "id");
        Boolean enabled = MapUtils.getBoolean(params, "enabled");
        SysFeedback feedback = baseMapper.selectById(id);
        if (feedback == null) {
            return ResultBody.failed("该反馈数据不存在!");
        }
        feedback.setEnabled(enabled);
        feedback.setUpdateTime(new Date());
//        feedback.setUpdateUserId();
//        feedback.setUpdateUserName();
        int i = baseMapper.updateById(feedback);
        return i > 0 ? ResultBody.ok().data(feedback).msg("更新成功") : ResultBody.failed("更新失败");
    }
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/SysFeedbackMapper.xml
@@ -4,7 +4,13 @@
<mapper namespace="com.kidgrow.oprationcenter.mapper.SysFeedbackMapper">
    <!--定义查询列-->
    <sql id="Column_List">
       *
        id,
        doctor_name,
        doctor_tel,
        department_name,
        hospital_name,
        enabled,
        create_time
    </sql>
    <!--sql查询片段-->
@@ -19,7 +25,7 @@
                and doctor_id = #{p.doctorId}
            </if>
            <if test="p.doctorName != null and p.doctorName !=''">
                and doctor_name = #{p.doctorName}
                and doctor_name  like concat('%', #{p.doctorName}, '%')
            </if>
            <if test="p.doctorTel != null and p.doctorTel !=''">
                and doctor_tel = #{p.doctorTel}
@@ -57,11 +63,8 @@
            <if test="p.updateUserName != null and p.updateUserName !=''">
                and update_user_name = #{p.updateUserName}
            </if>
            <if test="p.createTime != null and p.createTime !=''">
                and create_time = #{p.createTime}
            </if>
            <if test="p.updateTime != null and p.updateTime !=''">
                and update_time = #{p.updateTime}
            <if test="p.createTime != null and p.createTime !='' and p.updateTime != null and p.updateTime !=''">
                and (create_time between #{p.createTime} and #{p.updateTime})
            </if>
        </where>
    </sql>
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/SysFeedbackController.java
@@ -1,28 +1,24 @@
package com.kidgrow.oprationcenter.controller;
import java.util.Map;
import com.kidgrow.common.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.*;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.ResultBody;
import com.kidgrow.oprationcenter.model.SysFeedback;
import com.kidgrow.oprationcenter.service.ISysFeedbackService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import com.kidgrow.oprationcenter.model.SysFeedback;
import com.kidgrow.oprationcenter.service.ISysFeedbackService;
import com.kidgrow.common.model.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
@@ -50,12 +46,12 @@
            @ApiImplicitParam(name = "limit", value = "分页结束位置", required = true, dataType = "Integer")
    })
    @GetMapping
    public ResultBody<PageResult> list(@RequestParam Map<String, Object> params) {
    public PageResult list(@RequestParam Map<String, Object> params) {
        if(params.size()==0){
            params.put("page",1);
            params.put("limit",10);
        }
        return ResultBody.ok().data(sysFeedbackService.findList(params));
        return sysFeedbackService.findList(params);
    }
    /**
@@ -115,4 +111,23 @@
            return ResultBody.failed().msg("删除失败");
        }
    }
    /**
     * 修改状态
     *
     * @param params
     * @return
     */
    @ApiOperation(value = "修改反馈数据状态")
    @GetMapping("/updateEnabled")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Integer"),
            @ApiImplicitParam(name = "enabled", value = "是否启用", required = true, dataType = "Boolean")
    })
    public ResultBody updateEnabled(@RequestParam Map<String, Object> params) {
        if (params.size()==0)
        {
            return ResultBody.failed().msg("参数异常!");
        }
        return sysFeedbackService.updateEnabled(params);
    }
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/SysLoggerController.java
@@ -1,28 +1,24 @@
package com.kidgrow.oprationcenter.controller;
import java.util.Map;
import com.kidgrow.common.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.*;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.ResultBody;
import com.kidgrow.oprationcenter.model.SysLogger;
import com.kidgrow.oprationcenter.service.ISysLoggerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import com.kidgrow.oprationcenter.model.SysLogger;
import com.kidgrow.oprationcenter.service.ISysLoggerService;
import com.kidgrow.common.model.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
@@ -93,10 +89,10 @@
        }  else {
            boolean v= sysLoggerService.saveOrUpdate(sysLogger);
            if(v) {
                return ResultBody.ok().data(sysLogger).msg("保存成功");
                return ResultBody.ok().data(sysLogger).msg("反馈提交成功");
            }
            else {
                return ResultBody.failed().msg("保存失败");
                return ResultBody.failed().msg("信息提交失败");
            }
        }
    }
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml
@@ -61,6 +61,7 @@
      - sys_logger
      - data_need
      - business_records
      - sys_feedback
    ignoreSqls:
      - com.kidgrow.usercenter.mapper.SysRoleMapper.findAll
kidgrow-web/kidgrow-web-manager/src/main/resources/static/assets/js/common.js
@@ -2,8 +2,6 @@
layui.config({
    base: '/module/'
}).extend({
    formSelects: 'formSelects/formSelects-v4',
    treetable: 'treetable-lay/treetable',
    step: 'step-lay/step'
}).use(['layer'], function () {
    var $ = layui.jquery;
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/feedback.html
New file
@@ -0,0 +1,156 @@
<div class="layui-card">
    <div class="layui-card-header">
        <h2 class="header-title">用户反馈</h2>
        <span class="layui-breadcrumb pull-right">
          <a href="#!console">首页</a>
          <a><cite>用户反馈</cite></a>
        </span>
    </div>
    <div class="layui-card-body">
        <div class="layui-form toolbar">&emsp;
            <input id="user-search-value" class="layui-input search-input" type="text" placeholder="输入医生姓名"/>&emsp;
            <input type="text" name="date" id="datebegin" lay-verify="date" placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input search-input">
            至
            <input type="text" name="date" id="dateend" lay-verify="date" placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input search-input"> &emsp;
            <button id="user-btn-search" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i>搜索</button>
        </div>
        <table class="layui-table" id="feedback-table" lay-filter="feedback-table"></table>
    </div>
</div>
<!-- 表格操作列 -->
<script type="text/html" id="feeedback-table-bar">
    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看详情</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
<!-- 表格状态列 -->
<script type="text/html" id="user-tpl-state">
    <input type="checkbox" lay-filter="feedback-tpl-state" value="{{d.id}}" lay-skin="switch" lay-text="未处理|已处理"
           {{d.enabled==true?'checked':''}}/>
</script>
<!-- 弹窗内容 -->
<script type="text/html" id="feedback-detail">
    <div class="layui-card-body" id="feedback-detail-note">
    </div>
</script>
<script>
    layui.use(['form', 'table', 'util', 'config', 'admin', 'laydate'],function () {
        let table = layui.table;
        let config = layui.config;
        let layer = layui.layer;
        let util = layui.util;
        let admin = layui.admin;
        let form = layui.form;
        let laydate = layui.laydate;
          //日期
        laydate.render({
            elem: '#datebegin'
        });
        laydate.render({
            elem: '#dateend'
        });
        // 渲染表格
        table.render({
            elem: '#feedback-table',
            url: config.base_server + 'api-opration/sysfeedback',
            method: 'GET',
            headers:{'Authorization': 'Bearer ' + config.getToken().access_token},
            //where: {tenantId: config.clientId},
            page: true,
            cols: [[
                {field: 'doctorName',width:150, title: '医生姓名'},
                {field: 'doctorTel',width:200, title: '联系电话'},
                {field: 'hospitalName',width:300,  title: '医院'},
                {field: 'departmentName',width:180, title: '科室'},
                {field: 'enabled', width: 150,templet: '#user-tpl-state',sort: true, title: '状态'},
                {field: 'createTime', width: 200,sort: true,title: '创建时间'},
                {align: 'center',width:200, toolbar: '#feeedback-table-bar', title: '操作'}
            ]]
        });
        // 修改menu状态
        form.on('switch(feedback-tpl-state)', function (obj) {
        layer.load(2);
        admin.req('api-opration/sysfeedback/updateEnabled', {
            id: obj.elem.value,
            enabled: obj.elem.checked ? true : false
        }, function (data) {
            layer.closeAll('loading');
            if (data.code == 0) {
                layer.msg(data.msg, {icon: 1, time: 500});
            } else {
                layer.msg(data.msg, {icon: 2, time: 500});
                $(obj.elem).prop('checked', !obj.elem.checked);
                form.render('checkbox');
            }
        }, 'GET');
        });
        // 工具条点击事件
        table.on('tool(feedback-table)', function (obj) {
            if (obj.event === 'del') { // 删除
                layer.confirm('确定要删除吗?', function (i) {
                layer.close(i);
                layer.load(2);
                admin.req('api-opration/sysfeedback/'+obj.data.id, {}, function (data) {
                    layer.closeAll('loading');
                    layer.msg('成功', {icon: 1, time: 500});
                    obj.del();
                }, 'DELETE');
            });
            }
            else if(obj.event=='detail')
            {
                $.ajax({
                    type: "GET",
                    url: config.base_server +"api-opration/sysfeedback/"+obj.data.id,
                    success: function(data) {
                    if(data!=null)
                    {
                        layer.open({
                        type: 1,
                        title: '详情',
                        area: ['500px','300px'],
                        offset: 'auto',
                        content:  $("#feedback-detail").html(),
                        success:function(obj)
                        {
                            $("#feedback-detail-note").html(data.data.feedbackNote);
                        }
                        });
                    }
                    else
                    {
                        layer.msg('未找到相关数据', {icon: 1, time: 500});
                    }
                    },
                    beforeSend: function(xhr) {
                        xhr.setRequestHeader("Authorization", "Bearer "+config.getToken().access_token);
                        xhr.setRequestHeader("Content-Type", "application/json")
                }
    });
            }
        });
        // 搜索按钮点击事件
        $('#user-btn-search').click(function () {
            var doctorName = $('#user-search-value').val();
            var datebegin=$('#datebegin').val();
            var dateend=$('#dateend').val();
            if(strUtil.isEmpty(datebegin)&&!strUtil.isEmpty(dateend))
            {
                datebegin=dateUtil.getNowDate();
                $('#datebegin').val(datebegin);
            }
            if(!strUtil.isEmpty(datebegin)&&strUtil.isEmpty(dateend))
            {
                dateend=dateUtil.getNowDate();
                $('#dateend').val(dateend);
            }
            table.reload('feedback-table', {where: {doctorName: doctorName,createTime:datebegin,updateTime:dateend}});
        });
    });
</script>