2023年11月12日 新增导出

This commit is contained in:
bai 2023-11-12 20:27:21 +08:00
parent b237c037d6
commit cef411f7de
4 changed files with 419 additions and 17 deletions

View File

@ -199,7 +199,7 @@ public class KcZhihuijiaoshiMonitorLogController extends JeecgController<KcZhihu
/**
* 导出word
*
* @param xqxnParam
* @param kcZhihuijiaoshiMonitorLog
* @param request
* @param response
*/
@ -214,7 +214,7 @@ public class KcZhihuijiaoshiMonitorLogController extends JeecgController<KcZhihu
/**
* 导出word
*
* @param xqxnParam
* @param kcZhihuijiaoshiMonitorLog
* @param request
* @param response
*/

View File

@ -64,8 +64,6 @@ public class KcZhihuijiaoshiMonitorLog {
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间")
private java.util.Date updateTime;
@TableField(exist = false)
private String endTime;
//---------------------------导出--------------------------
@ -79,6 +77,8 @@ public class KcZhihuijiaoshiMonitorLog {
@Excel(name = "统计日期", width = 15)
@TableField(exist = false)
private String startTime;
@TableField(exist = false)
private String endTime;
/**教学楼名称*/
@Excel(name = "教学楼名称", width = 15)
@ApiModelProperty(value = "教学楼名称")

View File

@ -1,7 +1,9 @@
package org.jeecg.modules.kc.jiaoshi.export;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ArrayUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.beust.jcommander.internal.Sets;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.Data;
@ -27,9 +29,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@ -43,6 +45,11 @@ import java.util.stream.Collectors;
* </pre>
*/
public class Export extends BaseExport {
public Export(){
super();
initHhNameMap();
}
private Logger logger = LoggerFactory.getLogger(this.getClass());
@ -72,6 +79,112 @@ public class Export extends BaseExport {
// return sysDictService.queryDictItemsByCode(dictCode);
// }
//数量÷总数×100
public BigDecimal getPercentage(BigDecimal zc, BigDecimal yc){
BigDecimal all = zc.add(yc);
return zc.divide(all, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
}
//数量÷总数×100
public BigDecimal getPercentageByAll(BigDecimal yc, BigDecimal all){
if(yc.compareTo(new BigDecimal(0)) == 0){
return new BigDecimal("0");
}
if(all.compareTo(new BigDecimal(0)) == 0){
return new BigDecimal("0");
}
return yc.divide(all, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
}
public Integer isNull(Integer num){
if(num == null) return 0;
return num;
}
@Data
public class TwoListClass {
private String jxl;//教学楼
private String jsmc;//教室名称
private Integer kfkts = 0;//开放课堂数
//private Float zcktl;//正常课堂率
private Integer zckts = 0;//正常课堂数
private Integer yckts = 0;//异常课堂数
private String ycqksm;//异常情况说明
private List<String> ycHhList = Lists.newArrayList();//异常节次
private List<String> ycKcmcList = Lists.newArrayList();//异常课程名称
private List<Integer> jccsList = Lists.newArrayList();//监测次数
private List<Integer> yccsList = Lists.newArrayList();//异常次数
private List<Integer> yclList = Lists.newArrayList();//异常率
public void addKfkts(Integer num){
if(this.kfkts == null) this.kfkts = 0;
if(num == null) return;
this.kfkts += num;
}
public void addZckts(Integer num){
if(this.zckts == null) this.zckts = 0;
if(num == null) return;
this.zckts += num;
}
public void addYckts(Integer num){
if(this.yckts == null) this.yckts = 0;
if(num == null) return;
this.yckts += num;
}
public BigDecimal getZcktl(){
if(yckts != 0){
return getPercentage(new BigDecimal(zckts),new BigDecimal(yckts));
}else {
return new BigDecimal("100");
}
}
}
@Data
public class OneListClass {
private String jxlName;//教学楼名称
private String hhName;//节次名称
private Integer kfnum = 0;//开放数
private Integer zcnum = 0;//正常
private Integer ycnum = 0;//异常
public void addKfnum(Integer num){
if(this.kfnum == null) this.kfnum = 0;
if(num == null) return;
this.kfnum += num;
}
public void addZcnum(Integer num){
if(this.zcnum == null) this.zcnum = 0;
if(num == null) return;
this.zcnum += num;
}
public void addYcnum(Integer num){
if(this.ycnum == null) this.ycnum = 0;
if(num == null) return;
this.ycnum += num;
}
}
public Map<String, String> hhNameMap = Maps.newHashMap();
public void initHhNameMap(){
hhNameMap.put("01、02","第一大节");
hhNameMap.put("03、04","第二大节");
hhNameMap.put("05、06","第三大节");
hhNameMap.put("07、08","第四大节");
hhNameMap.put("09、10","第五大节");
hhNameMap.put("11、12","第六大节");
}
public String getHhName(String key){
String value = hhNameMap.get(key);
return StringUtils.defaultString(value,"");
}
/**
*
* 功能说明 : 拼接word导出
@ -88,30 +201,319 @@ public class Export extends BaseExport {
//********************************@A.单个内容替换***************************************************/
//********************************取数据***********************************************************/
Map<String, Object> result = Maps.newHashMap();
//查询日志
QueryWrapper<KcZhihuijiaoshiMonitorLog> mainQw = new QueryWrapper<>();
mainQw.isNotNull("kt_id");
mainQw.ge(StringUtils.isNotBlank(kcZhihuijiaoshiMonitorLog.getStartTime()),"create_time",kcZhihuijiaoshiMonitorLog.getStartTime());
mainQw.le(StringUtils.isNotBlank(kcZhihuijiaoshiMonitorLog.getEndTime()),"create_time",kcZhihuijiaoshiMonitorLog.getEndTime());
if(StringUtils.isNotBlank(kcZhihuijiaoshiMonitorLog.getJxlName())){
mainQw.in("jxl_name", Arrays.asList(StringUtils.split(kcZhihuijiaoshiMonitorLog.getJxlName(),",")));
}
List<KcZhihuijiaoshiMonitorLog> mainLogList = kcZhihuijiaoshiMonitorLogService.list(mainQw);
if(mainLogList.isEmpty()){
String today= DateUtil.today();
result.put("监测时间", today);
result.put("监测教学楼", kcZhihuijiaoshiMonitorLog.getJxlName());
result.put("教学楼数", "0");
result.put("教室数", "0");
result.put("大节数", "0");
result.put("运行正常课堂", "0");
result.put("运行异常课堂", "0");
result.put("正常率", "0");
wo.replaceTextPlus(result);
wo.insert2Table(0, 2, true, Lists.newArrayList());
wo.insert2Table(1, 1, true, Lists.newArrayList());
}
//折腾数据
int jxls = 0;
int jss = 0;
int djs = 0;
int zckts = 0;
int yckts = 0;
BigDecimal zcl = new BigDecimal(100);
Set<String> jxlsSet = Sets.newHashSet();
Set<String> jssSet = Sets.newHashSet();
Set<String> djsSet = Sets.newHashSet();
// Set<String> zcktsSet = Sets.newHashSet();
// Set<String> ycktsSet = Sets.newHashSet();
//Set<String> zclSet = Sets.newHashSet();
Map<String,OneListClass> oneListMap = Maps.newHashMap();
Map<String,TwoListClass> twoListMap = Maps.newHashMap();
for(KcZhihuijiaoshiMonitorLog monitorLog: mainLogList){
//基础数据
jxlsSet.add(monitorLog.getJxlName());
jssSet.add(monitorLog.getJsmc());
djsSet.add(monitorLog.getHh());
if(monitorLog.getLogType() != null && monitorLog.getLogType() == 1){
//zcktsSet.add();//日志类型(1:播放正常 | 2:播放失败拉起成功 | 3:播放失败拉起失败)
zckts++;
}else{
yckts++;
}
//第一个
if(oneListMap.containsKey(monitorLog.getJxlName() + "-" + monitorLog.getHh())){
OneListClass o = oneListMap.get(monitorLog.getJxlName() + "-" + monitorLog.getHh());
o.addKfnum(1);
if(monitorLog.getLogType() != null && monitorLog.getLogType() == 1){
o.addZcnum(1);
}else{
o.addYcnum(1);
}
}else{
OneListClass o = new OneListClass();
o.setJxlName(monitorLog.getJxlName());
o.setHhName(getHhName(monitorLog.getHh()));
o.setKfnum(1);
if(monitorLog.getLogType() != null && monitorLog.getLogType() == 1){
o.setZcnum(1);
}else{
o.setYcnum(1);
}
oneListMap.put(monitorLog.getJxlName() + "-" + monitorLog.getHh(),o);
}
//教学楼 教室名称 开放课堂数 正常课堂率 正常课堂数 异常课堂数 异常情况说明
//第二集
if(twoListMap.containsKey(monitorLog.getJxlName() + monitorLog.getJsmc())){
//存在累计数
TwoListClass o = twoListMap.get(monitorLog.getJxlName() + monitorLog.getJsmc());
o.addKfkts(1);
if(monitorLog.getLogType() != null && monitorLog.getLogType() == 1){
o.addZckts(1);
}else{
o.addYckts(1);
// String sm = "1.异常节次:"+getHhName(monitorLog.getHh())+" 异常课程:"+monitorLog.getKtName()+" 监测次数:"+" 异常次数:"+" 异常率:"+"";//1.异常节次 异常课程 监测次数 异常次数 异常率
// o.setYcqksm(sm);
o.getYcHhList().add(getHhName(monitorLog.getHh()));
o.getYcKcmcList().add(monitorLog.getKtName());//异常课程名称
o.getJccsList().add(1);//监测次数
o.getYccsList().add(1);//异常次数
// o.getYclList().add();//异常率
}
}else{
TwoListClass o = new TwoListClass();
o.setJxl(monitorLog.getJxlName());
o.setJsmc(monitorLog.getJsmc());
o.setKfkts(1);
// o.setZcktl(0);
o.setZckts(0);
o.setYckts(0);
//zcktl;//正常课堂率
if(monitorLog.getLogType() != null && monitorLog.getLogType() == 1){
o.setZckts(1);//正常课堂数
}else{
o.setYckts(1);//异常课堂数
//ycqksm;//异常情况说明
}
twoListMap.put(monitorLog.getJxlName() + monitorLog.getJsmc(),o);
}
}
jxls = jxlsSet.size();
jss = jssSet.size();
djs = djsSet.size();
if(yckts != 0){
zcl = getPercentage(new BigDecimal(zckts),new BigDecimal((yckts)));
}
//********************************取数据END*********************************************************/
//********************************通用*************************************************************/
String today= DateUtil.today();
result.put("监测时间", today);//学院名称
// result.put("监测教学楼",xqxnParam);//学期学年
result.put("监测时间", today);
result.put("监测教学楼", kcZhihuijiaoshiMonitorLog.getJxlName());
result.put("教学楼数", String.valueOf(jxls));
result.put("教室数", String.valueOf(jss));
result.put("大节数", String.valueOf(djs));
result.put("运行正常课堂", String.valueOf(zckts));
result.put("运行异常课堂", String.valueOf(yckts));
result.put("正常率", String.valueOf(zcl.floatValue()));
//********************************表头END**********************************************************/
wo.replaceTextPlus(result);
//********************************@A.单个内容替换END**************************************************/
final int[] index = { 2 };
// final int[] index = { 2 };
List<List<String>> mainList = Lists.newArrayList();
List<String> list = Lists.newArrayList();
list.add("楼1");
list.add("11");
list.add("22");
mainList.add(list);
Map<String,Map<String,OneListClass>> oneListMapMap = Maps.newHashMap();
for (String key: oneListMap.keySet()){
OneListClass o = oneListMap.get(key);
if(oneListMapMap.containsKey(o.getJxlName())){
Map<String,OneListClass> m = oneListMapMap.get(o.getJxlName());
m.put(o.getHhName(),o);
}else{
Map<String,OneListClass> m = Maps.newHashMap();
m.put(o.getHhName(),o);
oneListMapMap.put(o.getJxlName(),m);
}
}
for (String key: oneListMapMap.keySet()){
Map<String,OneListClass> m = oneListMapMap.get(key);
OneListClass all = new OneListClass();
OneListClass one = new OneListClass();
OneListClass two = new OneListClass();
OneListClass three = new OneListClass();
OneListClass four = new OneListClass();
OneListClass five = new OneListClass();
OneListClass six = new OneListClass();
for (String mkey: m.keySet()){
OneListClass o = m.get(mkey);
switch (o.getHhName()){
case "第一大节": {
all.setJxlName(o.getJxlName());
all.addKfnum(o.getKfnum());
all.addZcnum(o.getZcnum());
all.addYcnum(o.getYcnum());
one.setKfnum(isNull(o.getKfnum()));
one.setZcnum(isNull(o.getZcnum()));
one.setYcnum(isNull(o.getYcnum()));
break;
}
case "第二大节": {
all.setJxlName(o.getJxlName());
all.addKfnum(o.getKfnum());
all.addZcnum(o.getZcnum());
all.addYcnum(o.getYcnum());
two.setKfnum(isNull(o.getKfnum()));
two.setZcnum(isNull(o.getZcnum()));
two.setYcnum(isNull(o.getYcnum()));
break;
}
case "第三大节": {
all.setJxlName(o.getJxlName());
all.addKfnum(o.getKfnum());
all.addZcnum(o.getZcnum());
all.addYcnum(o.getYcnum());
three.setKfnum(isNull(o.getKfnum()));
three.setZcnum(isNull(o.getZcnum()));
three.setYcnum(isNull(o.getYcnum()));
break;
}
case "第四大节": {
all.setJxlName(o.getJxlName());
all.addKfnum(o.getKfnum());
all.addZcnum(o.getZcnum());
all.addYcnum(o.getYcnum());
four.setKfnum(isNull(o.getKfnum()));
four.setZcnum(isNull(o.getZcnum()));
four.setYcnum(isNull(o.getYcnum()));
break;
}
case "第五大节": {
all.setJxlName(o.getJxlName());
all.addKfnum(o.getKfnum());
all.addZcnum(o.getZcnum());
all.addYcnum(o.getYcnum());
five.setKfnum(isNull(o.getKfnum()));
five.setZcnum(isNull(o.getZcnum()));
five.setYcnum(isNull(o.getYcnum()));
break;
}
case "第六大节": {
all.setJxlName(o.getJxlName());
all.addKfnum(o.getKfnum());
all.addZcnum(o.getZcnum());
all.addYcnum(o.getYcnum());
six.setKfnum(isNull(o.getKfnum()));
six.setZcnum(isNull(o.getZcnum()));
six.setYcnum(isNull(o.getYcnum()));
break;
}
}
}
List<String> list = Lists.newArrayList();
list.add(all.getJxlName());
if(all.getYcnum() != 0){
BigDecimal num = getPercentage(new BigDecimal(all.getZcnum()), new BigDecimal(all.getYcnum()));
list.add(num.toString());
}else{
list.add("100");
}
list.add(String.valueOf(all.getKfnum()));
list.add(String.valueOf(all.getZcnum()));
list.add(String.valueOf(all.getYcnum()));
list.add(String.valueOf(one.getZcnum()));
list.add(String.valueOf(one.getYcnum()));
list.add(String.valueOf(two.getZcnum()));
list.add(String.valueOf(two.getYcnum()));
list.add(String.valueOf(three.getZcnum()));
list.add(String.valueOf(three.getYcnum()));
list.add(String.valueOf(four.getZcnum()));
list.add(String.valueOf(four.getYcnum()));
list.add(String.valueOf(five.getZcnum()));
list.add(String.valueOf(five.getYcnum()));
list.add(String.valueOf(six.getZcnum()));
list.add(String.valueOf(six.getYcnum()));
mainList.add(list);
}
wo.insert2Table(0, 2, true, mainList);
// index[0] += mainList.size() + 2;
mainList.clear();
for (String key: twoListMap.keySet()){
TwoListClass o = twoListMap.get(key);
List<String> list = Lists.newArrayList();
//教学楼 教室名称 开放课堂数 正常课堂率 正常课堂数 异常课堂数 异常情况说明
list.add(o.getJxl());
list.add(o.getJsmc());
list.add(StringUtils.defaultString(String.valueOf(o.getKfkts()),"0"));
list.add(StringUtils.defaultString(String.valueOf(o.getZcktl().toString()),"0"));
list.add(StringUtils.defaultString(String.valueOf(o.getZckts()),"0"));
list.add(StringUtils.defaultString(String.valueOf(o.getYckts()),"0"));
//1.异常节次 异常课程 监测次数 异常次数 异常率
Integer jccs = 0;
for (Integer x: o.getJccsList()){
if(x == null) x = 0;
jccs += x;
}
Integer yccs = 0;
// for (Integer x: o.getYccsList()){
// if(x == null) x = 0;
// yccs += x;
// }
yccs = o.getYckts();
String ycl = getPercentageByAll(new BigDecimal(yccs),new BigDecimal(o.getKfkts())).toString();
String sm = "1.异常节次:"+ArrayUtil.join(o.getYcHhList().toArray(new String[]{}),",")+" 异常课程:"+ArrayUtil.join(o.getYcKcmcList().toArray(new String[]{}),",")+" 监测次数:"+jccs+" 异常次数:"+yccs+" 异常率:"+ycl;
//list.add(o.getYcqksm());
list.add(sm);
mainList.add(list);
}
// List<String> list = Lists.newArrayList();
// list.add("楼1");
// list.add("11");
// list.add("22");
// mainList.add(list);
//WordOperator.fillNullCall(mainList,mainList);
//从固定位置开始添加1为第二个表格第二个1为固定位置
wo.insert2Table(0, index[0], true, mainList);
index[0] += mainList.size() + 2;
// wo.insert2Table(0, index[0], true, mainList);
wo.insert2Table(1, 1, true, mainList);
// index[0] += mainList.size() + 2;
mainList.clear();
//第二列表 最后一行拼接 1.异常节次 异常课程 监测次数 异常次数 异常率
return wo;
}
}

View File

@ -2,7 +2,7 @@
一、总体情况
监测时间:{监测时间}
监测教学楼:{监测教学楼}
在监测时间段内开课前15分钟开始每间隔15分钟对线上开放课堂进行直播状态监测。本监测时间段内共{教学楼数}个教学楼{教室数}间教室提供线上开放课堂{}大节,运行正常课堂{运行正常课堂}大节,{运行异常课堂}大节课堂监测异常,线上开放课堂运行正常率为{正常率}%。
在监测时间段内开课前15分钟开始每间隔15分钟对线上开放课堂进行直播状态监测。本监测时间段内共{教学楼数}个教学楼{教室数}间教室提供线上开放课堂{大节数}大节,运行正常课堂{运行正常课堂}大节,{运行异常课堂}大节课堂监测异常,线上开放课堂运行正常率为{正常率}%。
线上开放课堂运行情况一览表
教学楼
合计
@ -46,23 +46,6 @@ Z
Z
Z
Z
合计
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
@ -80,7 +63,5 @@ Z
z
z
z
1.异常节次: 异常课程: 监测次数: 异常次数: 异常率
z