开发时遇到的问题

前言

该问题用来记录平时在开发时所遇见过的卡点问题,以方便以后再遇到相似问题时能更快解决,同时也能记录问题。
记录问题主要分类为两大块:前端所遇卡点问题与后端所遇卡点问题

前端所遇卡点问题

1、Layui laydate 时间设置开始时间不能小于结束时间

laydate.render({
    elem: '#applyStratTime',
    format: 'yyyy-MM-dd HH:mm',
    type:'datetime',
    done: function (value, date, endDate) {
      console.log("开始时间");
      var startDate = new Date(value).getTime();
      var endTime = new Date($('#applyEndTime').val()).getTime();
      if (endTime < startDate) {
        layer.msg('结束时间不能小于开始时间');
        $('#applyStratTime').val(null);
      }
    }
  });

  //报名结束时间
  laydate.render({ //结束时间
    elem: '#applyEndTime',
    format: 'yyyy-MM-dd HH:mm',
    type:'datetime',
    done: function (value, date, endDate) {
      console.log("结束时间");
      var startDate = new Date($('#applyStratTime').val()).getTime();
      var endTime = new Date(value).getTime();
      if (endTime < startDate) {
        layer.msg('结束时间不能小于开始时间');
        $('#applyEndTime').val(null);
      }
    }
  });


  //会议开始时间
  laydate.render({
    elem: '#conferenceStratTime',
    format: 'yyyy-MM-dd HH:mm',
    type:'datetime',
    done: function (value, date, endDate) {
      console.log("开始时间");
      var startDate = new Date(value).getTime();
      var endTime = new Date($('#conferenceEndTime').val()).getTime();
      if (endTime < startDate) {
        layer.msg('结束时间不能小于开始时间');
        $('#conferenceStratTime').val(null);
      }
    }
  });

  //会议结束时间
  laydate.render({ //结束时间
    elem: '#conferenceEndTime',
    format: 'yyyy-MM-dd HH:mm',
    type:'datetime',
    done: function (value, date, endDate) {
      console.log("结束时间");
      var startDate = new Date($('#conferenceStratTime').val()).getTime();
      var endTime = new Date(value).getTime();
      if (endTime < startDate) {
        layer.msg('结束时间不能小于开始时间');
        $('#conferenceEndTime').val(null);
      }
    }
  });

2、LayUI 进入页面调用单选按钮事件第一次有用,第二次点击失败问题

从表格页面跳转到表单页面时,第一次渲染redio事件是有用的,但关闭页面后再次进入页面即失效,因为是前几个月发生的问题,我就没截图当时报错的效果,最后发现是逻辑问题,

<title>重点运动员动态</title>

<div class="layui-card" style="margin-bottom: 0px;">
    <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">

        <div class="layui-form layui-row layui-col-space15" lay-filter="layadmin-event-formlist">
            <div class="layui-form-item" style="margin-bottom: 0px;margin-left:15px;">
                <div class="layui-inline" style="float: left;">
                    <button class="layui-btn layuiadmin-btn-admin" data-type="addReportKeyActive" id="addReportKeyActive">
                        新增
                    </button>
                </div>
                <div class="layui-inline" style="float: left;">
                    <button class="layui-btn layuiadmin-btn-admin"   id="inportReportKeyActive">
                        导入上一篇
                    </button>
                </div>
            </div>


        </div>
        <div class="layui-card-body" style="padding-top: 0px;">
            <table id="ReportKeyActiveadmin" lay-filter="ReportKeyActiveadmin"></table>
            <script type="text/html" id="ReportGradeDemo">
                {{# if(layui.admin.hasPerm('ReportActiveRights:edit')) { }}
                <a class="layui-btn layui-btn-normal  layui-btn-xs" lay-event="edit"><i class="layui-icon"></i>编辑</a>
                {{# } }}
                {{# if(layui.admin.hasPerm('ReportActiveRights:del')) { }}
                <a class="layui-btn layui-btn-danger  layui-btn-xs" lay-event="del"><i class="layui-icon"></i>删除</a>
                {{# } }}
            </script>
        </div>
    </div>
</div>

<script>
    var itemStatuss;
    var checkStatus;
    layui.use(['admin', 'table','element', 'view', 'jquery', 'form', 'upload', 'config', 'util', 'admins', 'index'], function () {
        var $ = layui.$
            , admin = layui.admin
            , view = layui.view
            , table = layui.table
            ,laydate=layui.laydate
            ,layer=layui.layer
            , form = layui.form
            , admins = layui.admins
            ,element = layui.element
            , config = layui.config
            , util = layui.util
            , index = layui.index
            , upload = layui.upload;

        form.render(null, 'layadmin-event-formlist');

        if (!admin.hasPerm('ReportActiveRights:add')) {
            $("#addReportKeyActive").hide();
        }
        var pointTableToolbarWidth=220;
        if(!admin.hasPerm('ReportActiveRights:edit')) {
            pointTableToolbarWidth = pointTableToolbarWidth - 40;
        }
        if(!admin.hasPerm('ReportActiveRights:del')) {
            pointTableToolbarWidth = pointTableToolbarWidth - 40;
        }


        table.render({
            elem: '#ReportKeyActiveadmin'
            , height: 'full-260'
            , url:layui.config.base_server+'api-training/training/findReportKeyActive?reportId='+reportId//数据接口
            ,where: {
                access_token: config.getToken().access_token
            }
            , title: '重点运动员动态信息表'
            , page: true //开启分页
            , totalRow: true //开启合计行
            , cellMinWidth: 160
            , cols:[
                [ //表头
                    {type: 'checkbox', fixed: 'left'}
                    ,{type: 'numbers',title: '序号', templet:function (res){
                        return res.LAY_INDEX
                    },width:100}
                    , {field: 'itemName', title: '项目名称',width: 150,align:'center'}
                    , {field: 'athleteName', title: '运动员',width: 200,align:'center'}
                    , {field: 'keyTitle', title: '运动员和项目',width: 200,align:'center'}
                    , {field: 'keyActive', title: '动态',width: 200,align:'center'}
                    , {fixed: 'right',title: '操作', width: pointTableToolbarWidth, align: 'center', toolbar: '#ReportGradeDemo'}
                ]
            ]
        });

        form.on('submit(LAY-base-back-search)', function(data){
            console.log(data);
            var field = data.field;

            //执行重载
            table.reload('ReportKeyActiveadmin', {
                url:layui.config.base_server+'api-training/training/findReportKeyActive?access_token='+config.getToken().access_token+"&reportId="+reportId
                ,where:
                field
            });
        });

        table.on('tool(ReportKeyActiveadmin)',function (obj) {
            var data = obj.data;
            if (obj.event == 'edit') {
                itemStatuss=data.itemStatus;
                checkStatus = data.athleteStatus;
                admins.popup({
                    title: '编辑重点运动员动态信息',
                    area:['900px', '600px'],
                    id:"LAY-popup-cultivate-update"
                    ,shadeClose:false
                    ,success: function(layero, index){
                        view(this.id).render('training/training_report_key_active/training_report_key_active_form',obj.data).done(function(){
                            form.render(null, 'training-reportkeyActive-forms');
                            form.val('training-reportkeyActive-forms',{
                                'id':data.id,
                                'athleteId':data.athleteId,
                                'athleteStatus':data.athleteStatus,

                            });
                            //监听提交
                            form.on('submit(training-reportkeyActive-form-submit)', function(data){
                                var field = $(data.form).serialize(); //获取提交的字段

                                admins.req({
                                    url:layui.config.base_server+'api-training/training/insertOrEditReportKeyActive?'+field+"&reportId="+reportId,
                                    where: {
                                        access_token: config.getToken().access_token
                                    },
                                    data:{
                                        'id':field.id
                                    } ,
                                    type: "POST",
                                    success: function (res) {
                                        if (res.code == 0) {
                                            layer.msg('修改成功,正在跳转......');
                                            layui.table.reload('ReportKeyActiveadmin');

                                            layer.close(index);
                                        }else if (res.code==1){
                                            layer.msg('修改失败');

                                        }
                                        else {
                                            layer.msg(res.msg);
                                        }
                                    },
                                    error: function (error) {
                                        layer.msg('系统异常!请联系管理员');
                                    }
                                });
                                return false;

                            });
                        });
                    }

                })
            }else if (obj.event == 'del') {
                layer.confirm('真的注销吗',function (index) {
                    admins.req({
                        type:'POST',
                        url:layui.config.base_server+'api-training/training/delReportKeyActive?access_token='+config.getToken().access_token+ '&id=' + data.id,
                        dataType: 'json',
                        contentType: 'application/json',
                        data: {},
                        success:function (res) {
                            if (res.code == "0") {
                                layer.msg('注销成功');
                                layui.table.reload('ReportKeyActiveadmin');


                                layer.close(index);
                            }else if (res.code == 1){
                                layer.msg('注销失败,请重试!');
                            }
                            else {
                                layer.msg(res.msg);
                            }
                        }
                    })
                })
            }
        });


       
       
</script>

第一个页面主要是跳转到from页面,并定义全局属性checkStatus,好让跳转页面时带checkStatus属性过去。
定义全局属性的方法也就是

<style>
    .layui-form.toolbar .layui-form-select input {
        height: 35px;
        line-height: 35px;
        width: 190px;
        overflow: hidden;
    }
</style>
<form class="layui-form toolbar" lay-filter="training-reportkeyActive-forms" id="training-reportkeyActive-forms"
      style="padding: 20px 30px 0 0;">

    <div class="layui-form-item layui-col-md12">

        <label class="layui-form-label ">输入方式:</label>
        <div class="layui-input-block">
            <script type="text/html" template>

                <input type="radio" name="athleteStatus"  lay-filter="radio-type" value="1" title="输入" checked >
            <input type="radio" name="athleteStatus" lay-filter="radio-type" value="2" title="选择">

            </script>
        </div>
    </div>


    <div id="radioType1">
        <div class="layui-col-md12">
            <label class="layui-form-label">运动员:</label>
            <div class="layui-input-block">
                <input type="text" name="athleteName"  autocomplete="off" placeholder="输入运动员姓名" style="width: 60%;"
                       class="layui-input"/>
            </div>

            <div class="layui-input-block">
                <input name="athleteId2"
                       style="display: none"/>
            </div>
        </div>
    </div>

    <div id="radioType2">
        <div class="layui-col-md12">
            <label class="layui-form-label">运动员:</label>
            <div class="layui-input-block">
                <input type="text" name="athleteName" id="athleteNameEvents" autocomplete="off" placeholder="点击选择运动员"
                       class="layui-input"/>
            </div>

            <div class="layui-input-block">
                <input name="athleteId" id="athleteId"
                       style="display: none"/>
            </div>
        </div>
    </div>




<!--    <div class="layui-form-item layui-col-md12" id="select_athlete">-->
<!--        <div class="layui-col-md12">-->
<!--            <label class="layui-form-label">运动员:</label>-->
<!--            <div class="layui-input-block">-->
<!--                <input type="text" name="athleteName" id="athleteNameEvents" autocomplete="off" placeholder="点击选择运动员"-->
<!--                       class="layui-input"/>-->
<!--            </div>-->

<!--            <div class="layui-input-block">-->
<!--                <input name="athleteId" id="athleteId"-->
<!--                       style="display: none"/>-->
<!--            </div>-->
<!--        </div>-->

<!--    </div>-->

    <div class="layui-form-item layui-col-md12" id="key_title_selecy" style="display: none">
        <div class="layui-col-md6">
            <label class="layui-form-label">运动员和项目</label>
            <div class="layui-input-block">
                <script type="text/html" template>
                    <input type="text" name="keyTitle" id="keyTitle" value="{{d.params.keyTitle||''}}"
                           autocomplete="off" class="layui-input"/>
                </script>
            </div>
        </div>
    </div>
    <div class="layui-form-item layui-col-md12">
        <div class="layui-col-md6">
            <label class="layui-form-label">项目类型</label>
            <div class="layui-input-block">
                <script type="text/html" template>
                    <select name="itemStatus" id="itemStatus" lay-verify="required" lay-filter="itemStatus"
                            class="select">
                        <option value="">请选择类型</option>
                        <option value="1" {{# if(d.params.itemStatus !=null && d.params.itemStatus=='1' ){ }}
                                selected="selected" {{#
                                } }}>夏季项目
                        </option>
                        <option value="2" {{# if(d.params.itemStatus !=null && d.params.itemStatus=='2' ){ }}
                                selected="selected" {{#
                                } }}>冬季项目
                        </option>
                    </select>
                </script>
            </div>
        </div>
        <div class="layui-col-md6">
            <label class="layui-form-label">运动员动态</label>
            <div class="layui-input-block">
                <script type="text/html" template>
                    <input type="text" name="keyActive" value="{{d.params.keyActive||''}}"
                           autocomplete="off" lay-verify="required" class="layui-input layui-input-required"/>
                </script>
            </div>
        </div>
    </div>

    <div class="layui-form-item layui-col-md12" id="item_select">
        <div class="layui-col-md6">
            <label class="layui-form-label">测试大项</label>
<!--            <div class="layui-input-block">-->
<!--                <script type="text/html" template-->
<!--                        lay-url="{{layui.config.base_server}}api-training/dictionary/data/getTrainDictionaryDataList?&access_token={{layui.config.getToken().access_token}}"-->
<!--                        lay-done="layui.data.pointReportEventDone(d)">-->
<!--                    <select name="itemId" lay-filter="itemId" id="itemId" class="layui-input-required layui-select"-->
<!--                            lay-search>-->
<!--                        <option value="">请选择项目</option>-->
<!--                        {{# layui.each(d.data,function(index,item){ }}-->
<!--                        <option value="{{ item.id || '' }}" {{# if(d.params.itemId !=null && d.params.itemId== item.id-->
<!--                                ){ }}-->
<!--                                selected="selected" {{# } }}>{{ item.dataName || '' }}-->
<!--                        </option>-->
<!--                        {{# }); }}-->
<!--                    </select>-->
<!--                </script>-->
<!--            </div>-->
            <div class="layui-input-block">
                <input type="text" name="itemName"  autocomplete="off" placeholder="输入测试大项名称" style="width: 60%;"
                       class="layui-input"/>
            </div>
        </div>
        <div class="layui-col-md6">
            <label class="layui-form-label">序号</label>
            <div class="layui-input-block">
                <script type="text/html" template>
                    <input type="text" name="sort" value="{{d.params.sort||''}}"
                           autocomplete="off" lay-verify="required" class="layui-input layui-input-required"/>
                </script>
            </div>
        </div>


    </div>

    <script type="text/html" template>
        <input type="hidden" id="id" name="id" value="{{ d.params.id || '' }}">
    </script>

    <div class="layui-form-item">
        <label class="layui-form-label"></label>
        <div class="layui-input-inline">
            <input type="button" lay-submit id="training-reportkeyActive-form-submit" style="margin-left: 20px"
                   lay-filter="training-reportkeyActive-form-submit" value="提交" class="layui-btn">
        </div>
    </div>
</form>
<script>
    var admins;
    var view;
    var form;
    var table;
    var config;
    var personType;
    var support_inputs = ""
        , supportPersonnelNames = [];
    layui.use(['admin', 'form', 'layer', 'config', 'table', 'upload', 'laydate', 'element', 'view'], function () {
        var $ = layui.$
            , laydate = layui.laydate
            , upload = layui.upload
            , layer = layui.layer;
        form = layui.form;
        admins = layui.admins;
        view = layui.view;
        table = layui.table;
        config = layui.config;
        laydate.render({
            elem: '#eventStartTime'
        });
        laydate.render({
            elem: '#eventEndTime'
        });
        console.log(checkStatus)
        if (checkStatus == "1") {
            $("#radioType1").show();
            $("#radioType1").prop("checked",true);
            $("#radioType2").hide();
        } else if(checkStatus == "2") {
            $("#radioType1").hide();
            $("#radioType2").show();
            $("#radioType2").prop("checked",true);

        }
        //点击redio,显示对应的表单内容
        form.on('radio(radio-type)', function runRadio (data) {  //radio-type为lay-filter的属性值
            if (data.value == "1") {
                $("#radioType1").show();
                $("#radioType2").hide();
            } else if(data.value == "2") {
                $("#radioType1").hide();
                $("#radioType2").show();
            }
        });

        //一进页面就执行redio事件
        var elem = layui.$(':radio[lay-filter="radio-type"]:checked');
        var option = {
            elem:elem,
            value: elem.val(),
            othis: elem.next('layui-form-radio')
        }
        //触发模块事件
        layui.event('form', 'radio(radio-type)', option);


        form.render();
        if (itemStatuss==1) {
            $('#select_athlete').css("display", "block");
            $('#key_title_selecy').css("display", "none");
            $('#item_select').css("display", "block");

            $('#select_athlete').removeAttr("disabled");
            $('#key_title_selecy').attr("disabled", "disabled");
            $('#item_select').removeAttr("disabled");
            form.render()
        }else if (itemStatuss==2){
            $("#athleteNameEvents").val("");
            $("#athleteId").val("");


            $('#select_athlete').css("display", "none");
            $('#key_title_selecy').css("display", "block");
            $('#item_select').css("display", "none");

            $('#select_athlete').attr("disabled","disabled");
            $('#key_title_selecy').removeAttr("disabled");
            $('#item_select').attr("disabled","disabled");
            form.render()
        }
        form.on('select(itemStatus)', function (data) {
            var itemStatus = data.value;
            if (itemStatus==1) {
                $('#select_athlete').css("display", "block");
                $('#key_title_selecy').css("display", "none");
                $('#item_select').css("display", "block");

                $('#select_athlete').removeAttr("disabled");
                $('#key_title_selecy').attr("disabled", "disabled");
                $('#item_select').removeAttr("disabled");
                form.render()
            }else if (itemStatus==2){
                $("#athleteNameEvents").val("");
                $("#athleteId").val("");
                $('#select_athlete').css("display", "none");
                $('#key_title_selecy').css("display", "block");
                $('#item_select').css("display", "none");

                $('#select_athlete').attr("disabled","disabled");
                $('#key_title_selecy').removeAttr("disabled");
                $('#item_select').attr("disabled","disabled");
                form.render()
            }
        });

    });
    //监听添加保障人员 start
    console.log($('#training-reportkeyActive-forms'));
    console.log($('#athleteNameEvents'));
    $('#training-reportkeyActive-forms').on('click', '#athleteNameEvents', function () {
        var data = new Object();
        data.id = 'athleteId';
        data.name = 'athleteNameEvents';
        data.value = $('#athleteId').val();
        layui.admin.putTempData('t_provincial_choose', data);
        layui.admin.popupCenter({
            title: '请选择运动员',
            path: 'pages/training/training_event_report/athlete_select_all.html',
            area: '960px',
            offset: '70px',
            finish: function () {
                //table.reload('dept-table', {});
            }
        });
    });

    //监听添加保障人员 end
    layui.data.pointReportEventDone = function (d) {
        layui.use(['form'], function () {
            var form = layui.form;
            form.render();
        });
    }
</script>

第二个页面主要是预执行redio函数和点击redio,显示对应的表单内容。因为时间有限,所以就潦草记录下,之后所遇问题会当天详细记录。

3、LayUI 实体类集合字段里的属性在table中显示

1、在table.render中cols里集合属性里的字段用 templet就可以了。

, {field: 'publish.publish', align: 'center',width: 150, title: '发布人',templet: function (fileIng) {
              return fileIng.publish.publish;
          }}

后端所遇卡点问题

1、返回特定格式

/*团部人员官方资料*/
@RequestMapping("/findMailListInfo")
@ResponseBody
public JSONObject findMailListInfo(Integer page, Integer limit, TrainingMailList trainingMailList) {
    JSONObject jsonObject = new JSONObject();
    String search = rigPermissClient.getReadRightSqlCondition("", mailListCode + "search");
    Integer pages = page != null && limit != null ? (page - 1) * limit : null;
    int count = trainingMailListService.getCount(trainingMailList, search);
    List<JSONObject> jsonObjects = new ArrayList<>();
    trainingMailList.setConnectType(4);

    //分组
    List<TrainingMailList> listGroup = trainingMailListService.findMailListByGroup(pages, limit, trainingMailList, search);
    //根据分组进行遍历
    for (TrainingMailList mailList : listGroup) {
        JSONObject object = new JSONObject();
        //put  mailLevel
        object.put("mailLevel", mailList.getConnectLevel());

        String connectLevel = mailList.getConnectLevel();

        TrainingMailList trainingMailList1 = new TrainingMailList();
        trainingMailList1.setConnectLevel(connectLevel);
        trainingMailList1.setStatus(1);
        trainingMailList1.setConnectType(4);
        List<TrainingMailList> list = trainingMailListService.findMailList(pages, limit, trainingMailList1, search);
        object.put("result", list);
        jsonObjects.add(object);
    }
    jsonObject.put("code", 0);
    jsonObject.put("msg", "查询成功!");
    jsonObject.put("count", count);
    jsonObject.put("data", jsonObjects);
    return jsonObject;
}

当时组长让我返回一个特定格式的数据,就是集合里包含另一个集合,当时一直没有相同怎么弄。也忘记需求是什么了,现在看来就是集合里面包含一个集合

2、使用OSS保存附件 2021\8\4

一共分两步,前端和后端
1、前端LayUI代码

        <div class="layui-form-item">
            <div class="layui-input-block" style="margin-left:100px;">
                <button type="button" class="layui-btn" id="trainingInvetoryUploadBtn">文件上传</button>
                <span style="font-size:8px;">支持扩展名:doc .docx .pdf .jpg.rar .zip</span>
                <div class="layui-upload">
                    <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;width: 488px;">
                        文件:
                        <div class="layui-upload-list"></div>
                        <table class="layui-table" style="width: 500px">
                            <tbody>
                            <tr>
                                <td>文件名</td>
                                <td>大小</td>
                                <td>操作</td>
                            </tr>
                            </tbody>
                            <tbody id="table-analeptic">
                            <script type="text/html" template="">
                                {{# layui.each(d.params.fileInfoList,function(index,item){ }}
                                <tr>
                                    <td>{{item.name}}</td>
                                    <td>{{item.size}}</td>
                                    <td>
                                        <a href="{{layui.config.base_server}}api-file/files-anon/download?access_token={{layui.config.getToken().access_token}}&fileID={{item.id}}"
                                           download="{{item.name}}"
                                           class="layui-btn layui-btn-normal layui-btn-xs">下载</a>
                                        <a class="layui-btn layui-btn-danger layui-btn-xs"
                                           onclick="$(this).parent().parent().remove();">删除</a>
                                    </td>
                                </tr>
                                <input type="hidden" name="InventoryFileId" autocomplete="off" value="{{item.id}}"
                                       class="layui-input" id="InventoryFileId">
                                {{# }); }}
                            </script>
                            </tbody>
                        </table>
                    </blockquote>
                </div>
            </div>
        </div>
//多图片上传
        upload.render({
            elem: '#trainingInvetoryUploadBtn'
            , url: config.base_server + 'api-file/files-anon?access_token=' + config.getToken().access_token
            , multiple: true
            , accept: 'file|image'
            , exts: 'doc|docx|pdf|jpg|rar|zip'
            // ,acceptMime: 'image/*'
            , before: function (obj) {
            }
            , done: function (res) {
                if (res.resp_code == 0) {

                    $('#table-analeptic').append('<tr>' +
                        '<td>' + res.datas.name + '</td>' +
                        '<td>' + res.datas.size + '</td>' +
                        '<td><a href="' + config.base_server + 'api-file/files-anon/download?access_token=' + config.getToken().access_token + '&fileID=' + res.datas.id + '" download="' + res.datas.name + '" class="layui-btn layui-btn-normal layui-btn-xs">下载</a>' +
                        '<a class="layui-btn layui-btn-danger layui-btn-xs" οnclick="$(this).parent().parent().remove();">注销</a>' +
                        '<input type="hidden" name="InventoryFileId" value="' + res.datas.id + '" /></tr>')
                } else {
                    layer.msg(res.resp_msg);
                }
            }
        });

2、后台代码(里面的工具类之前就有了,现在拿来用即可,等有空再研究)

package com.sport.training.action;

import com.sport.common.auth.details.LoginAppUser;
import com.sport.common.model.oss.FileInfo;
import com.sport.common.model.system.SysUnit;
import com.sport.common.util.StringUtils;
import com.sport.common.util.SysUserUtil;
import com.sport.common.web.Result;
import com.sport.feign.file.FileClient;
import com.sport.feign.user.RigPermissClient;
import com.sport.feign.user.UserClient;
import com.sport.training.pojo.AmateurInventoryInfo;
import com.sport.training.pojo.TrainingUnitBean;
import com.sport.training.service.AmateurInventoryInfoService;
import com.sport.training.service.TrainingUnitService;
import com.sport.training_amateur.pojo.AmateurAnalepticEdu;
import com.sport.util.file.FileSaveUtil;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: LiuJS
 * @Date: 2020/8/31 10:46
 */
@RequestMapping("/training")
@RestController
public class AmateurInventoryInfoController {
    @Autowired
    private AmateurInventoryInfoService amateurInventoryInfoService;

    @Autowired
    private RigPermissClient rigPermissClient;
    private String InventoryCode = "InventoryRights:";
    @Autowired
    private TrainingUnitService trainingUnitService;
    @Autowired
    private UserClient userClient;
    @Autowired
    private FileClient fileClient;

    @RequestMapping("/findInventoryInfo")
    public Map<String, Object> findInventoryInfo(Integer page, Integer limit, AmateurInventoryInfo amateurInventoryInfo) {
        Map<String, Object> result = new HashMap<>();
        String search = rigPermissClient.getReadRightSqlCondition("", InventoryCode + "search");
        Integer pages = page != null && limit != null ? (page - 1) * limit : null;
        List<AmateurInventoryInfo> list = amateurInventoryInfoService.findInventoryInfo(pages, limit, search, amateurInventoryInfo);
        int count = amateurInventoryInfoService.getCount(search, amateurInventoryInfo);

        for (AmateurInventoryInfo amateurInventoryInfo1 : list) {
            if (amateurInventoryInfo1.getTrainingUnit()!=null&&!"".equals(amateurInventoryInfo1.getTrainingUnit())){
                TrainingUnitBean trainingUnitBean = trainingUnitService.selectByunitKey(amateurInventoryInfo1.getTrainingUnit());
                if (trainingUnitBean!=null){
                    amateurInventoryInfo1.setInventoryUnit(trainingUnitBean.getUnitType());
                }
            }
            List<FileInfo> list1 = fileClient.findByMsgId(String.valueOf(amateurInventoryInfo1.getId()), AmateurInventoryInfo.InventoryFileCode).getData();
            amateurInventoryInfo1.setFileInfoList(list1);
        }
        result.put("code", 0);
        result.put("msg", "查询成功");
        result.put("count", count);
        result.put("data", list);
        return result;
    }


    @RequestMapping("/insertOrEditInventory")
    @ResponseBody
    public Map<String, Object> insertOrEditInventory(String InventoryFileId, AmateurInventoryInfo amateurInventoryInfo) {
        Map<String, Object> result = new HashMap<>();
        LoginAppUser loginAppUser = SysUserUtil.getLoginAppUser();
        boolean add = rigPermissClient.isAddFlag(InventoryCode + "add");
        boolean edit = rigPermissClient.isEditFlag(InventoryCode + "edit", loginAppUser.getId(), loginAppUser.getDeptID(), loginAppUser.getUnitID());
        Date date = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if (amateurInventoryInfo.getId() != null && !"".equals(amateurInventoryInfo.getId())) {
            if (edit) {
                amateurInventoryInfo.setStatus(1);
                amateurInventoryInfo.setUpdateTime(df.format(date));
                amateurInventoryInfo.setUpdateId(Math.toIntExact(loginAppUser.getId()));
                if (amateurInventoryInfo.getInventoryContent().length()<50){
                    result.put("code",1);
                    result.put("msg","请将文件内容复制到文本框中");
                }
                amateurInventoryInfoService.updateByPrimaryKeySelective(amateurInventoryInfo);
                if (InventoryFileId != null) {
                    FileSaveUtil.saveFileList(InventoryFileId, Long.valueOf(amateurInventoryInfo.getId()), AmateurInventoryInfo.InventoryFileCode);
                }

                result.put("code", 0);
                result.put("msg", "编辑成功!");
            } else {
                result.put("code", 1);
                result.put("msg", "您没有权限!");
            }
        } else {
            if (add) {
                amateurInventoryInfo.setStatus(1);
                amateurInventoryInfo.setUserid(Math.toIntExact(loginAppUser.getId()));
                amateurInventoryInfo.setUnitid(Math.toIntExact(loginAppUser.getUnitID()));
                amateurInventoryInfo.setDeptid(Math.toIntExact(loginAppUser.getDeptID()));
                amateurInventoryInfo.setCreateTime(df.format(date));
                if (amateurInventoryInfo.getInventoryContent().length()<50){
                    result.put("code",1);
                    result.put("msg","请将文件内容复制到文本框中");
                }
                amateurInventoryInfoService.insert(amateurInventoryInfo);
                if (StringUtils.isNotBlank(InventoryFileId)){
                    FileSaveUtil.saveFileList(InventoryFileId, Long.valueOf(amateurInventoryInfo.getId()), AmateurInventoryInfo.InventoryFileCode);
                }else {
                    result.put("code",1);
                    result.put("msg","请上传文件");
                }

                result.put("code", 0);
                result.put("msg", "新增成功!");
            } else {
                result.put("code", 1);
                result.put("msg", "您没有权限!");
            }
        }

        return result;
    }

    @RequestMapping("/delInventory")
    @ResponseBody
    public Map<String, Object> delInventory(Integer id) {
        Map<String, Object> result = new HashMap<>();
        LoginAppUser loginAppUser = SysUserUtil.getLoginAppUser();
        boolean del = rigPermissClient.isDeleteFlag(InventoryCode + "del", loginAppUser.getId(), loginAppUser.getDeptID(), loginAppUser.getUnitID());
        if (del) {
            amateurInventoryInfoService.deleteByPrimaryKey(id);
            result.put("code", 0);
            result.put("msg", "删除成功!");
        } else {
            result.put("code", 1);
            result.put("msg", "您没有权限");
        }

        return result;
    }
}

FileSaveUtil.saveFileList 用来上传附件 在添加和修改方法时使用
fileClient.findByMsgId 在上传多附件时在查询方法使用
另外提醒自己如果忘记怎么使用OSS可以看training_lnventory_form.html来复习。

3、MyBatis接收SQL语句里不是实体类的字段 2021\8\11

当某些业务场景 我们会使用查询不是实体类字段的sql语句,如果有实体类来接收,明显是不妥的。所以当遇到这类情况时可以使用Map来进行接收。
场景:当我要统计当天人数登录网站的次数。
步骤一
在Navicat里先写出语句来分组并进行统计,并给字段取别名,以配合后台代码用map接收

SELECT request_time as requestTime, api_type as apiType , count(request_time) as counts
FROM `tbl_sport_public_burying_point`
GROUP BY api_type , request_time ORDER BY request_time

步骤二
在 dao层里定义接口,返回类型为Map

  List<Map<String,Object>> getCountReportForm(String date);

在dao.xml里生成对应xml,基本上用Map接收非实体类字段就完成了,接下来也就是调用就完事了

  <select id="getCountReportForm" resultType="java.util.Map">
    SELECT request_time as requestTime, api_type as apiType , count(request_time) as counts
    FROM `tbl_sport_public_burying_point`
    <where>
      <if test="date != null and date != ''">
        and  request_time LIKE "%"#{date}"%"
      </if>
    </where>
    GROUP BY api_type , request_time
    ORDER BY request_time
  </select>

步骤三
在controller里调用方法遍历集合,在调用Map的get方法就能取到对应的值了

@RequestMapping("/getCountReportForm")
    @ResponseBody
    public Map<String, Object> getCountReportForm(String date, String endDate, String startDate) throws ParseException {
        Map<String, Object> result = new HashMap<String, Object>();
        SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");

        List<Map<String, Object>> countReportForm = publicBuryingPointService.getCountReportForm(date, endDate, startDate);
        List<Integer> counts = new ArrayList<>();
        List<String> apiType = new ArrayList<>();
        List<String> times = new ArrayList<>();
        List<String> typeAndTime = new ArrayList<>();
        for (Map<String, Object> map : countReportForm) {
            Object counts1 = map.get("counts");
            Object apiType1 = map.get("apiType");
            Object requestTime = map.get("requestTime");

            int i = Integer.parseInt(counts1.toString());
            String s = apiType1.toString();
            String s1 = requestTime.toString();
            String typeAndTime1 = s +"/" + s1 ;
            counts.add(i);
            apiType.add(s);
            times.add(requestTime.toString());
            typeAndTime.add(typeAndTime1);
        }
        result.put("requestTime", times);
        result.put("apiType", apiType);
        result.put("counts", counts );
        result.put("typeAndTime", typeAndTime );
        result.put("msg", "查询成功");
        result.put("code", 0);
        return result;
    }

Object counts1 = map.get(“counts”);
Object apiType1 = map.get(“apiType”);
Object requestTime = map.get(“requestTime”);
这里是取值。以上就是Mybatis接收非实体类字段值的所以过程(service因为UP主懒就不干了)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值