|
|
|
@ -6,6 +6,7 @@ import java.math.RoundingMode;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.dsideal.QingLong.Start;
|
|
|
|
|
import com.dsideal.QingLong.Util.CommonUtil;
|
|
|
|
@ -19,9 +20,12 @@ import com.jfinal.plugin.activerecord.dialect.PostgreSqlDialect;
|
|
|
|
|
import com.jfinal.plugin.hikaricp.HikariCpPlugin;
|
|
|
|
|
import com.jfinal.plugin.redis.RedisPlugin;
|
|
|
|
|
|
|
|
|
|
import java.sql.SQLException;
|
|
|
|
|
import java.text.DecimalFormat;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class ZbdcModel {
|
|
|
|
|
/**
|
|
|
|
|
* 功能:传入学校类型ID,返回此学校类型有哪些学段
|
|
|
|
@ -650,9 +654,6 @@ public class ZbdcModel {
|
|
|
|
|
return Db.find(sql);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 功能:获取指定科目下的填报模板
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* 功能:获取指定科目下的填报模板
|
|
|
|
|
*/
|
|
|
|
@ -1481,12 +1482,21 @@ public class ZbdcModel {
|
|
|
|
|
}
|
|
|
|
|
//配备情况
|
|
|
|
|
List<Record> listPb = calcPbl(year);
|
|
|
|
|
Map<String, Float> mapPb = new HashMap<>();
|
|
|
|
|
Map<String, Float> mapPbl = new HashMap<>();//配备率
|
|
|
|
|
Map<String, Integer> mapNowCnt = new HashMap<>();//现有品种数量
|
|
|
|
|
Map<String, Integer> mapNeedCnt = new HashMap<>();//应配置品种数量
|
|
|
|
|
for (Record record : listPb) {
|
|
|
|
|
String bureau_id = record.getStr("bureau_id");
|
|
|
|
|
String col = record.getStr("col"); //summary_yypbl
|
|
|
|
|
float radio = record.getFloat("radio");
|
|
|
|
|
mapPb.put(bureau_id + "_" + col, radio);
|
|
|
|
|
int nowcnt = record.getInt("nowcnt");
|
|
|
|
|
int needcnt = record.getInt("needcnt");
|
|
|
|
|
//配置率
|
|
|
|
|
mapPbl.put(bureau_id + "_" + col, radio);
|
|
|
|
|
//已配置品种数量
|
|
|
|
|
mapNowCnt.put(bureau_id + "_" + col, nowcnt);
|
|
|
|
|
//应配置品牌数量
|
|
|
|
|
mapNeedCnt.put(bureau_id + "_" + col, needcnt);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (Record record : p.getList()) {
|
|
|
|
@ -1585,34 +1595,35 @@ public class ZbdcModel {
|
|
|
|
|
record.set("summary_qdljtrmj", record.getFloat("cz_qdljtrmj") + record.getFloat("gz_qdljtrmj"));
|
|
|
|
|
record.set("summary_lsjtrshshu", record.getInt("cz_lsjtrshshu") + record.getInt("gz_lsjtrshshu"));
|
|
|
|
|
record.set("summary_lsjtrmj", record.getFloat("cz_lsjtrmj") + record.getFloat("gz_lsjtrmj"));
|
|
|
|
|
//配备率
|
|
|
|
|
record.set("xx_kxpbl", mapPb.get(bureau_id + "_" + "xx_kxpbl"));//小学科学 配备率
|
|
|
|
|
record.set("xx_yypbl", mapPb.get(bureau_id + "_" + "xx_yypbl"));//小学音乐 配备率
|
|
|
|
|
record.set("cz_yypbl", mapPb.get(bureau_id + "_" + "cz_yypbl"));//初中音乐 配备率
|
|
|
|
|
record.set("gz_yypbl", mapPb.get(bureau_id + "_" + "gz_yypbl"));//高中音乐 配备率
|
|
|
|
|
record.set("summary_yypbl", mapPb.get(bureau_id + "_" + "summary_yypbl"));//汇总 配备率
|
|
|
|
|
|
|
|
|
|
record.set("xx_typbl", mapPb.get(bureau_id + "_" + "xx_typbl"));//小学体育 配备率
|
|
|
|
|
record.set("cz_typbl", mapPb.get(bureau_id + "_" + "cz_typbl"));//初中体育 配备率
|
|
|
|
|
record.set("gz_typbl", mapPb.get(bureau_id + "_" + "gz_typbl"));//高中体育 配备率
|
|
|
|
|
record.set("summary_typbl", mapPb.get(bureau_id + "_" + "summary_typbl"));//汇总 配备率
|
|
|
|
|
|
|
|
|
|
record.set("xx_mspbl", mapPb.get(bureau_id + "_" + "xx_mspbl"));//小学美术 配备率
|
|
|
|
|
record.set("cz_mspbl", mapPb.get(bureau_id + "_" + "cz_mspbl"));//初中美术 配备率
|
|
|
|
|
record.set("gz_mspbl", mapPb.get(bureau_id + "_" + "gz_mspbl"));//高中美术 配备率
|
|
|
|
|
record.set("summary_mspbl", mapPb.get(bureau_id + "_" + "summary_mspbl"));//汇总 配备率
|
|
|
|
|
|
|
|
|
|
record.set("cz_wlpbl", mapPb.get(bureau_id + "_" + "cz_wlpbl"));//初中物理 配备率
|
|
|
|
|
record.set("gz_wlpbl", mapPb.get(bureau_id + "_" + "gz_wlpbl"));//高中物理 配备率
|
|
|
|
|
record.set("summary_wlpbl", mapPb.get(bureau_id + "_" + "summary_wlpbl"));//汇总 配备率
|
|
|
|
|
|
|
|
|
|
record.set("cz_hxpbl", mapPb.get(bureau_id + "_" + "cz_hxpbl"));//初中化学 配备率
|
|
|
|
|
record.set("gz_hxpbl", mapPb.get(bureau_id + "_" + "gz_hxpbl"));//高中化学 配备率
|
|
|
|
|
record.set("summary_hxpbl", mapPb.get(bureau_id + "_" + "summary_hxpbl"));//汇总 配备率
|
|
|
|
|
|
|
|
|
|
record.set("cz_swpbl", mapPb.get(bureau_id + "_" + "cz_swpbl"));//初中生物 配备率
|
|
|
|
|
record.set("gz_swpbl", mapPb.get(bureau_id + "_" + "gz_swpbl"));//高中生物 配备率
|
|
|
|
|
record.set("summary_swpbl", mapPb.get(bureau_id + "_" + "summary_swpbl"));//汇总 配备率
|
|
|
|
|
|
|
|
|
|
//配备率 cz_swyppz cz_swypjs
|
|
|
|
|
record.set("xx_kxpbl", mapPbl.get(bureau_id + "_" + "xx_kxpbl"));//小学科学 配备率
|
|
|
|
|
record.set("xx_yypbl", mapPbl.get(bureau_id + "_" + "xx_yypbl"));//小学音乐 配备率
|
|
|
|
|
record.set("cz_yypbl", mapPbl.get(bureau_id + "_" + "cz_yypbl"));//初中音乐 配备率
|
|
|
|
|
record.set("gz_yypbl", mapPbl.get(bureau_id + "_" + "gz_yypbl"));//高中音乐 配备率
|
|
|
|
|
record.set("summary_yypbl", mapPbl.get(bureau_id + "_" + "summary_yypbl"));//汇总 配备率
|
|
|
|
|
|
|
|
|
|
record.set("xx_typbl", mapPbl.get(bureau_id + "_" + "xx_typbl"));//小学体育 配备率
|
|
|
|
|
record.set("cz_typbl", mapPbl.get(bureau_id + "_" + "cz_typbl"));//初中体育 配备率
|
|
|
|
|
record.set("gz_typbl", mapPbl.get(bureau_id + "_" + "gz_typbl"));//高中体育 配备率
|
|
|
|
|
record.set("summary_typbl", mapPbl.get(bureau_id + "_" + "summary_typbl"));//汇总 配备率
|
|
|
|
|
|
|
|
|
|
record.set("xx_mspbl", mapPbl.get(bureau_id + "_" + "xx_mspbl"));//小学美术 配备率
|
|
|
|
|
record.set("cz_mspbl", mapPbl.get(bureau_id + "_" + "cz_mspbl"));//初中美术 配备率
|
|
|
|
|
record.set("gz_mspbl", mapPbl.get(bureau_id + "_" + "gz_mspbl"));//高中美术 配备率
|
|
|
|
|
record.set("summary_mspbl", mapPbl.get(bureau_id + "_" + "summary_mspbl"));//汇总 配备率
|
|
|
|
|
|
|
|
|
|
record.set("cz_wlpbl", mapPbl.get(bureau_id + "_" + "cz_wlpbl"));//初中物理 配备率
|
|
|
|
|
record.set("gz_wlpbl", mapPbl.get(bureau_id + "_" + "gz_wlpbl"));//高中物理 配备率
|
|
|
|
|
record.set("summary_wlpbl", mapPbl.get(bureau_id + "_" + "summary_wlpbl"));//汇总 配备率
|
|
|
|
|
|
|
|
|
|
record.set("cz_hxpbl", mapPbl.get(bureau_id + "_" + "cz_hxpbl"));//初中化学 配备率
|
|
|
|
|
record.set("gz_hxpbl", mapPbl.get(bureau_id + "_" + "gz_hxpbl"));//高中化学 配备率
|
|
|
|
|
record.set("summary_hxpbl", mapPbl.get(bureau_id + "_" + "summary_hxpbl"));//汇总 配备率
|
|
|
|
|
|
|
|
|
|
record.set("cz_swpbl", mapPbl.get(bureau_id + "_" + "cz_swpbl"));//初中生物 配备率
|
|
|
|
|
record.set("gz_swpbl", mapPbl.get(bureau_id + "_" + "gz_swpbl"));//高中生物 配备率
|
|
|
|
|
record.set("summary_swpbl", mapPbl.get(bureau_id + "_" + "summary_swpbl"));//汇总 配备率
|
|
|
|
|
|
|
|
|
|
//如果配备率为空,则设为0,什么情况下为空呢?比如用户就没有配置
|
|
|
|
|
for (Map.Entry<String, Object> entry : record.getColumns().entrySet()) {
|
|
|
|
@ -1798,55 +1809,61 @@ public class ZbdcModel {
|
|
|
|
|
* @param year
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public List<Record> getSummaryCgzb(int year) {
|
|
|
|
|
//TODO
|
|
|
|
|
return null;
|
|
|
|
|
// Kv kv = Kv.by("year", year);
|
|
|
|
|
// SqlPara sqlPara = Db.getSqlPara("Zbdc.getSummaryCgzb", kv);
|
|
|
|
|
// List<Record> list = Db.find(sqlPara);
|
|
|
|
|
// list = expandList(list);
|
|
|
|
|
// //共七个配备率,需要重新计算
|
|
|
|
|
// Map<String, Kv> wlPbl = calcPbl(year, new String[]{"初中物理", "高中物理"}); //key:市直,二道区,南关区 Kv:count,radio
|
|
|
|
|
// Map<String, Kv> hxPbl = calcPbl(year, new String[]{"初中化学", "高中化学"});
|
|
|
|
|
// Map<String, Kv> swPbl = calcPbl(year, new String[]{"初中生物", "高中生物"});
|
|
|
|
|
// Map<String, Kv> kxPbl = calcPbl(year, new String[]{"小学科学"});
|
|
|
|
|
// Map<String, Kv> yyPbl = calcPbl(year, new String[]{"小学音乐", "初中音乐", "高中音乐"});
|
|
|
|
|
// Map<String, Kv> tyPbl = calcPbl(year, new String[]{"小学体育", "初中体育", "高中体育"});
|
|
|
|
|
// Map<String, Kv> msPbl = calcPbl(year, new String[]{"小学美术", "初中美术", "高中美术"});
|
|
|
|
|
// //修改一下list
|
|
|
|
|
// for (Record record : list) {
|
|
|
|
|
// String area_name = record.getStr("area_name");
|
|
|
|
|
// if (wlPbl.containsKey(area_name)) {//物理配备率
|
|
|
|
|
// float value = wlPbl.get(area_name).getFloat("radio") / wlPbl.get(area_name).getInt("count");
|
|
|
|
|
// record.set("wl_pbl", String.format("%.2f%%", value * 100));
|
|
|
|
|
// }
|
|
|
|
|
// if (hxPbl.containsKey(area_name)) {//化学配备率
|
|
|
|
|
// float value = hxPbl.get(area_name).getFloat("radio") / hxPbl.get(area_name).getInt("count");
|
|
|
|
|
// record.set("hx_pbl", String.format("%.2f%%", value * 100));
|
|
|
|
|
// }
|
|
|
|
|
// if (swPbl.containsKey(area_name)) {//生物配备率
|
|
|
|
|
// float value = swPbl.get(area_name).getFloat("radio") / swPbl.get(area_name).getInt("count");
|
|
|
|
|
// record.set("sw_pbl", String.format("%.2f%%", value * 100));
|
|
|
|
|
// }
|
|
|
|
|
// if (kxPbl.containsKey(area_name)) {//小学科学配备率
|
|
|
|
|
// float value = kxPbl.get(area_name).getFloat("radio") / kxPbl.get(area_name).getInt("count");
|
|
|
|
|
// record.set("kx_pbl", String.format("%.2f%%", value * 100));
|
|
|
|
|
// }
|
|
|
|
|
// if (yyPbl.containsKey(area_name)) {//音乐配备率
|
|
|
|
|
// float value = yyPbl.get(area_name).getFloat("radio") / yyPbl.get(area_name).getInt("count");
|
|
|
|
|
// record.set("yy_pbl", String.format("%.2f%%", value * 100));
|
|
|
|
|
// }
|
|
|
|
|
// if (tyPbl.containsKey(area_name)) {//体育配备率
|
|
|
|
|
// float value = tyPbl.get(area_name).getFloat("radio") / tyPbl.get(area_name).getInt("count");
|
|
|
|
|
// record.set("ty_pbl", String.format("%.2f%%", value * 100));
|
|
|
|
|
// }
|
|
|
|
|
// if (msPbl.containsKey(area_name)) {//美术配备率
|
|
|
|
|
// float value = msPbl.get(area_name).getFloat("radio") / msPbl.get(area_name).getInt("count");
|
|
|
|
|
// record.set("ms_pbl", String.format("%.2f%%", value * 100));
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// addSummaryRow(list);
|
|
|
|
|
// return list;
|
|
|
|
|
public List<JSONObject> getSummaryCgzb(int year) {
|
|
|
|
|
//基于常规装备查询功能构建统计功能
|
|
|
|
|
Page<Record> list = getQueryCgzb(null, 0, year, "", 1, 9999);
|
|
|
|
|
String json = JsonKit.toJson(list.getList());
|
|
|
|
|
JSONArray ja = JSONArray.parseArray(json);
|
|
|
|
|
Map<String, JSONObject> map = new HashMap<>();
|
|
|
|
|
for (int i = 0; i < ja.size(); i++) {
|
|
|
|
|
JSONObject j2 = ja.getJSONObject(i);
|
|
|
|
|
String area_name = j2.getString("area_name");
|
|
|
|
|
//移除多余属性
|
|
|
|
|
j2.remove("id");
|
|
|
|
|
j2.remove("bureau_id");
|
|
|
|
|
j2.remove("bureau_name");
|
|
|
|
|
j2.remove("year");
|
|
|
|
|
j2.remove("school_type_name");
|
|
|
|
|
|
|
|
|
|
//处理一下配备率百分号
|
|
|
|
|
j2 = convertBfhToDouble(j2);
|
|
|
|
|
if (map.containsKey(area_name)) {//包含
|
|
|
|
|
JSONObject j1 = map.get(area_name);
|
|
|
|
|
j1 = convertBfhToDouble(j1);
|
|
|
|
|
//将jo中所有属性叠加到j2上去,并重新将j2放入到map中, 将j2的所有属性值累加到j1上
|
|
|
|
|
CommonUtil.mergeJsonObjects(j1, j2);
|
|
|
|
|
//放回去
|
|
|
|
|
j1.put("cnt", j1.getInteger("cnt") + 1);
|
|
|
|
|
map.put(area_name, j1);
|
|
|
|
|
} else {//不包含
|
|
|
|
|
j2.put("cnt", 1);
|
|
|
|
|
map.put(area_name, j2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//所有以pbl结尾的字段,都需要再除以cnt
|
|
|
|
|
for (String key : map.keySet()) {
|
|
|
|
|
JSONObject j = map.get(key);
|
|
|
|
|
for (String k : j.keySet()) {
|
|
|
|
|
if (k.endsWith("pbl")) {
|
|
|
|
|
// 计算百分比
|
|
|
|
|
String percentage = String.format("%.1f%%", j.getDouble(k) / j.getInteger("cnt"));
|
|
|
|
|
j.put(k, percentage);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//以指定顺序的顺序输出
|
|
|
|
|
List<Record> L = getQueryXzqh();
|
|
|
|
|
List<JSONObject> res = new ArrayList<>();
|
|
|
|
|
for (int i = 0; i < L.size(); i++) {
|
|
|
|
|
Record r = L.get(i);
|
|
|
|
|
String area_name = r.getStr("area_name");
|
|
|
|
|
if (map.containsKey(area_name)) {
|
|
|
|
|
JSONObject j = map.get(area_name);
|
|
|
|
|
res.add(j);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//System.out.println(JsonKit.toJson(res));
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -2304,7 +2321,26 @@ public class ZbdcModel {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
/**
|
|
|
|
|
* 功能:将JSONObject对象中的百分比转换为double
|
|
|
|
|
*
|
|
|
|
|
* @param jo
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static JSONObject convertBfhToDouble(JSONObject jo) {
|
|
|
|
|
Set<String> keys = jo.keySet();
|
|
|
|
|
for (String key : keys) {
|
|
|
|
|
// 累加数值
|
|
|
|
|
Object v = jo.get(key);
|
|
|
|
|
if (v.toString().indexOf("%") > 0) {
|
|
|
|
|
v = v.toString().replace("%", "");
|
|
|
|
|
jo.put(key, (Double.parseDouble(v.toString())));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return jo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) throws SQLException {
|
|
|
|
|
//告之配置文件位置
|
|
|
|
|
PropKit.use("application.properties");
|
|
|
|
|
HikariCpPlugin hp = new HikariCpPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"),
|
|
|
|
@ -2336,8 +2372,6 @@ public class ZbdcModel {
|
|
|
|
|
redis.start();
|
|
|
|
|
|
|
|
|
|
ZbdcModel zm = new ZbdcModel();
|
|
|
|
|
List<Record> list = zm.calcPbl(2024);
|
|
|
|
|
String json = JsonKit.toJson(list);
|
|
|
|
|
System.out.println(json);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|