开发时遇到的问题
前言
该问题用来记录平时在开发时所遇见过的卡点问题,以方便以后再遇到相似问题时能更快解决,同时也能记录问题。
记录问题主要分类为两大块:前端所遇卡点问题与后端所遇卡点问题
前端所遇卡点问题
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主懒就不干了)