diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/jiaoshi/controller/KcZhihuijiaoshiMonitorLogController.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/jiaoshi/controller/KcZhihuijiaoshiMonitorLogController.java index ee84144b..35ad21c8 100644 --- a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/jiaoshi/controller/KcZhihuijiaoshiMonitorLogController.java +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/jiaoshi/controller/KcZhihuijiaoshiMonitorLogController.java @@ -199,7 +199,7 @@ public class KcZhihuijiaoshiMonitorLogController extends JeecgController */ 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 ycHhList = Lists.newArrayList();//异常节次 + private List ycKcmcList = Lists.newArrayList();//异常课程名称 + + private List jccsList = Lists.newArrayList();//监测次数 + private List yccsList = Lists.newArrayList();//异常次数 + private List 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 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 result = Maps.newHashMap(); + //查询日志 + QueryWrapper 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 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 jxlsSet = Sets.newHashSet(); + Set jssSet = Sets.newHashSet(); + Set djsSet = Sets.newHashSet(); +// Set zcktsSet = Sets.newHashSet(); +// Set ycktsSet = Sets.newHashSet(); + //Set zclSet = Sets.newHashSet(); + + Map oneListMap = Maps.newHashMap(); + Map 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> mainList = Lists.newArrayList(); - List list = Lists.newArrayList(); - list.add("楼1"); - list.add("11"); - list.add("22"); - mainList.add(list); + Map> oneListMapMap = Maps.newHashMap(); + + for (String key: oneListMap.keySet()){ + OneListClass o = oneListMap.get(key); + if(oneListMapMap.containsKey(o.getJxlName())){ + Map m = oneListMapMap.get(o.getJxlName()); + m.put(o.getHhName(),o); + }else{ + Map m = Maps.newHashMap(); + m.put(o.getHhName(),o); + oneListMapMap.put(o.getJxlName(),m); + } + } + for (String key: oneListMapMap.keySet()){ + Map 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 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 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 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; } } diff --git a/jeecg-module-main/src/main/resources/officetemplates/exp1/zhjs-tjfxbg.docx b/jeecg-module-main/src/main/resources/officetemplates/exp1/zhjs-tjfxbg.docx index 861e51c0..f0a2ec7d 100644 --- a/jeecg-module-main/src/main/resources/officetemplates/exp1/zhjs-tjfxbg.docx +++ b/jeecg-module-main/src/main/resources/officetemplates/exp1/zhjs-tjfxbg.docx @@ -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