From cef411f7deeb7625d98bd6c95a660ad523e5e4dd Mon Sep 17 00:00:00 2001 From: bai <1643359946@qq.com> Date: Sun, 12 Nov 2023 20:27:21 +0800 Subject: [PATCH] =?UTF-8?q?2023=E5=B9=B411=E6=9C=8812=E6=97=A5=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KcZhihuijiaoshiMonitorLogController.java | 4 +- .../entity/KcZhihuijiaoshiMonitorLog.java | 4 +- .../modules/kc/jiaoshi/export/Export.java | 428 +++++++++++++++++- .../officetemplates/exp1/zhjs-tjfxbg.docx | Bin 22645 -> 22315 bytes 4 files changed, 419 insertions(+), 17 deletions(-) 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 861e51c07b5bc82f0590ca6f58445313714cf280..f0a2ec7d56775985b2d2729904be54545e5e16f7 100644 GIT binary patch delta 7612 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 delta 7986 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