pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/schedulerTask/SchedulerTaskFactory.java
@@ -61,11 +61,6 @@ if(threadPoolPriority != null && threadPoolPriority.intValue() >= 0){ pro.put("org.quartz.threadPool.threadPriority", "" + (threadPoolPriority==null?5:(threadPoolPriority<=0?5:threadPoolPriority))); } if(threadPoolMaxCount != null && threadPoolPriority != null){ if(threadPoolMaxCount.intValue() < threadPoolPriority.intValue()){ throw new SchedulerException("threadPoolMaxCount必须大于等于threadPoolPriority") ; } } scheduler = new StdSchedulerFactory(pro).getScheduler(); } catch (SchedulerException e) { log.error(e) ; pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/DateTime.java
@@ -603,7 +603,7 @@ */ public static Long lastXMinuteTime(int xMin) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.MINUTE, -xMin); cal.add(Calendar.MINUTE, xMin<=0?xMin:-xMin); Date date = cal.getTime() ; return date.getTime() ; } @@ -619,7 +619,7 @@ Date d = new SimpleDateFormat("yyyy-MM-dd HH", Locale.CHINA).parse(yyyy_MM_dd_HH); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.HOUR_OF_DAY, -xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?xhour:-xhour); Date date = cal.getTime() ; return DateTime.yyyy_MM_dd_HH(date) ; } @@ -633,7 +633,7 @@ Date d = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.CHINA).parse(yyyy_MM_dd_HH_mm); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.HOUR_OF_DAY, -xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?xhour:-xhour); Date date = cal.getTime() ; return DateTime.yyyy_MM_dd_HH_mm(date) ; } @@ -647,7 +647,7 @@ Date d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).parse(yyyy_MM_dd_HH_mm_ss); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.HOUR_OF_DAY, -xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?xhour:-xhour); Date date = cal.getTime() ; return DateTime.yyyy_MM_dd_HH_mm_ss(date) ; } @@ -661,7 +661,7 @@ Date d = new SimpleDateFormat("yyyyMMddHH", Locale.CHINA).parse(yyyyMMddHH); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.HOUR_OF_DAY, -xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?xhour:-xhour); Date date = cal.getTime() ; return DateTime.yyyyMMddHH(date) ; } @@ -675,7 +675,7 @@ Date d = new SimpleDateFormat("yyyyMMddHHmm", Locale.CHINA).parse(yyyyMMddHHmm); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.HOUR_OF_DAY, -xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?xhour:-xhour); Date date = cal.getTime() ; return DateTime.yyyyMMddHHmm(date) ; } @@ -689,7 +689,7 @@ Date d = new SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA).parse(yyyyMMddHHmmss); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.HOUR_OF_DAY, -xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?xhour:-xhour); Date date = cal.getTime() ; return DateTime.yyyyMMddHHmmss(date) ; } @@ -703,7 +703,7 @@ public static String lastXHour_yyyy_MM_dd_HH(int xhour){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, -xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?xhour:-xhour); date.setTime(cal.getTimeInMillis()); return DateTime.yyyy_MM_dd_HH(date) ; } @@ -715,7 +715,7 @@ public static String lastXHour_yyyy_MM_dd_HH_mm(int xhour){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, -xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?xhour:-xhour); date.setTime(cal.getTimeInMillis()); return DateTime.yyyy_MM_dd_HH_mm(date) ; } @@ -727,7 +727,7 @@ public static String lastXHour_yyyy_MM_dd_HH_mm_ss(int xhour){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, -xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?xhour:-xhour); date.setTime(cal.getTimeInMillis()); return DateTime.yyyy_MM_dd_HH_mm_ss(date) ; } @@ -739,7 +739,7 @@ public static String lastXHour_yyyyMMddHH(int xhour){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, -xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?xhour:-xhour); date.setTime(cal.getTimeInMillis()); return DateTime.yyyyMMddHH(date) ; } @@ -751,7 +751,7 @@ public static String lastXHour_yyyyMMddHHmm(int xhour){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, -xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?xhour:-xhour); date.setTime(cal.getTimeInMillis()); return DateTime.yyyyMMddHHmm(date) ; } @@ -763,7 +763,7 @@ public static String lastXHour_yyyyMMddHHmmss(int xhour){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, -xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?xhour:-xhour); date.setTime(cal.getTimeInMillis()); return DateTime.yyyyMMddHHmmss(date) ; } @@ -779,7 +779,7 @@ Date d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).parse(yyyy_MM_dd_HH_mm_ss); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.MINUTE, xminute); cal.add(Calendar.MINUTE, xminute<=0?-xminute:xminute ); Date date = cal.getTime() ; return DateTime.yyyy_MM_dd_HH_mm_ss(date) ; } @@ -795,7 +795,7 @@ Date d = new SimpleDateFormat("yyyy-MM-dd HH", Locale.CHINA).parse(yyyy_MM_dd_HH); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.HOUR_OF_DAY, xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?-xhour:xhour ); Date date = cal.getTime() ; return DateTime.yyyy_MM_dd_HH(date) ; } @@ -809,7 +809,7 @@ Date d = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.CHINA).parse(yyyy_MM_dd_HH_mm); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.HOUR_OF_DAY, xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?-xhour:xhour); Date date = cal.getTime() ; return DateTime.yyyy_MM_dd_HH_mm(date) ; } @@ -823,7 +823,7 @@ Date d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).parse(yyyy_MM_dd_HH_mm_ss); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.HOUR_OF_DAY, xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?-xhour:xhour); Date date = cal.getTime() ; return DateTime.yyyy_MM_dd_HH_mm_ss(date) ; } @@ -837,7 +837,7 @@ Date d = new SimpleDateFormat("yyyyMMddHH", Locale.CHINA).parse(yyyyMMddHH); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.HOUR_OF_DAY, xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?-xhour:xhour); Date date = cal.getTime() ; return DateTime.yyyyMMddHH(date) ; } @@ -851,7 +851,7 @@ Date d = new SimpleDateFormat("yyyyMMddHHmm", Locale.CHINA).parse(yyyyMMddHHmm); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.HOUR_OF_DAY, xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?-xhour:xhour); Date date = cal.getTime() ; return DateTime.yyyyMMddHHmm(date) ; } /** @@ -864,7 +864,7 @@ Date d = new SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA).parse(yyyyMMddHHmmss); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.HOUR_OF_DAY, xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?-xhour:xhour); Date date = cal.getTime() ; return DateTime.yyyyMMddHHmmss(date) ; } @@ -878,7 +878,7 @@ public static String nextXHour_yyyy_MM_dd_HH(int xhour){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?-xhour:xhour); date.setTime(cal.getTimeInMillis()); return DateTime.yyyy_MM_dd_HH(date) ; } @@ -890,7 +890,7 @@ public static String nextXHour_yyyy_MM_dd_HH_mm(int xhour){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?-xhour:xhour); date.setTime(cal.getTimeInMillis()); return DateTime.yyyy_MM_dd_HH_mm(date) ; } @@ -902,7 +902,7 @@ public static String nextXHour_yyyy_MM_dd_HH_mm_ss(int xhour){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?-xhour:xhour); date.setTime(cal.getTimeInMillis()); return DateTime.yyyy_MM_dd_HH_mm_ss(date) ; } @@ -916,7 +916,7 @@ public static String nextXHour_yyyyMMddHH(int xhour){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?-xhour:xhour); date.setTime(cal.getTimeInMillis()); return DateTime.yyyyMMddHH(date) ; } @@ -928,7 +928,7 @@ public static String nextXHour_yyyyMMddHHmm(int xhour){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?-xhour:xhour); date.setTime(cal.getTimeInMillis()); return DateTime.yyyyMMddHHmm(date) ; } @@ -940,7 +940,7 @@ public static String nextXHour_yyyyMMddHHmmss(int xhour){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, xhour); cal.add(Calendar.HOUR_OF_DAY, xhour<=0?-xhour:xhour); date.setTime(cal.getTimeInMillis()); return DateTime.yyyyMMddHHmmss(date) ; } @@ -959,7 +959,7 @@ Date d = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).parse(yyyy_MM_dd); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.DAY_OF_YEAR, -xday); cal.add(Calendar.DAY_OF_YEAR, xday<=0?xday:-xday); Date date = cal.getTime() ; return DateTime.yyyy_MM_dd(date) ; } @@ -973,7 +973,7 @@ Date d = new SimpleDateFormat("yyyyMMdd", Locale.CHINA).parse(yyyyMMdd); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.DAY_OF_YEAR, -xday); cal.add(Calendar.DAY_OF_YEAR, xday<=0?xday:-xday); Date date = cal.getTime() ; return DateTime.yyyyMMdd(date) ; } @@ -985,7 +985,7 @@ public static String lastXDay_yyyy_MM_dd(int xday){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, -xday); cal.add(Calendar.DAY_OF_YEAR, xday<=0?xday:-xday); date.setTime(cal.getTimeInMillis()); return DateTime.yyyy_MM_dd(date) ; } @@ -997,7 +997,7 @@ public static String lastXDay_yyyy_MM_dd_HH_ss(int xday){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, -xday); cal.add(Calendar.DAY_OF_YEAR, xday<=0?xday:-xday); date.setTime(cal.getTimeInMillis()); return DateTime.yyyy_MM_dd_HH_mm_ss(date) ; } @@ -1009,7 +1009,7 @@ public static String lastXDay_yyyyMMdd(int xday){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, -xday); cal.add(Calendar.DAY_OF_YEAR, xday<=0?xday:-xday); date.setTime(cal.getTimeInMillis()); return DateTime.yyyyMMdd(date) ; } @@ -1028,7 +1028,7 @@ Date d = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).parse(yyyy_MM_dd); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.DAY_OF_YEAR, xday); cal.add(Calendar.DAY_OF_YEAR, xday<=0?-xday:xday); Date date = cal.getTime() ; return DateTime.yyyy_MM_dd(date) ; } @@ -1042,7 +1042,7 @@ Date d = new SimpleDateFormat("yyyyMMdd", Locale.CHINA).parse(yyyyMMdd); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.add(Calendar.DAY_OF_YEAR, xday); cal.add(Calendar.DAY_OF_YEAR, xday<=0?-xday:xday); Date date = cal.getTime() ; return DateTime.yyyyMMdd(date) ; } @@ -1054,7 +1054,7 @@ public static String nextXDay_yyyy_MM_dd(int xday){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, xday); cal.add(Calendar.DAY_OF_YEAR, xday<=0?-xday:xday); date.setTime(cal.getTimeInMillis()); return DateTime.yyyy_MM_dd(date) ; } @@ -1066,7 +1066,7 @@ public static String nextXDay_yyyyMMdd(int xday){ Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, xday); cal.add(Calendar.DAY_OF_YEAR, xday<=0?-xday:xday); date.setTime(cal.getTimeInMillis()); return DateTime.yyyyMMdd(date) ; } @@ -1640,6 +1640,8 @@ Date dt = getDate(1447857387L) ; String s = yyyy_MM_dd_HH_mm_ss(dt); System.out.println(s); System.out.println(lastMonth_ym()) ; } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/IDLongGenerator.java
@@ -11,7 +11,7 @@ private static final Object synObj = new Object() ; private static final int yearLenght = 4 ;//4:年度取四位, 3:年度取三位, 2:年度取两位, 1:年度取一位, 0:年度取0位 private static final int yearLength = 4 ;//4:年度取四位, 3:年度取三位, 2:年度取两位, 1:年度取一位, 0:年度取0位 private static int add = 0 ; private static final int chengShu = 1000 ;//1000:三位自增量,即一秒钟可产生10000个ID @@ -114,17 +114,17 @@ //上次生成ID 与本次生成ID 不在同一秒内 last = now ; add = 0 ; id = last * chengShu + add ++; id = last * chengShu + add++; }else{ //上次生成ID 与本次生成ID 在同一秒内 if(add >= maxAdd){ //附加量已经用尽 waitNextSecond(last) ;//等到下一秒 id = last * chengShu + add ++ ;//返回上一秒生成的ID id = last * chengShu + add++ ;//返回上一秒生成的ID add = 0 ;//附加量归零,为下一秒准备 }else{ //附加量未用尽 id = last * chengShu + add ++ ; id = last * chengShu + add++ ; } } return (id * 100) + suffix ; @@ -238,28 +238,31 @@ * @return 处理后的年度 */ private static int dealYear(int year){ if(yearLenght == 0){ if(yearLength == 0){ return 0 ; }else if(yearLenght == 1){ }else if(yearLength == 1){ return year % 10 ; }else if(yearLenght == 2){ }else if(yearLength == 2){ return year % 100 ; }else if(yearLenght == 3){ }else if(yearLength == 3){ return year % 1000 ; }else if(yearLenght == 4){ }else if(yearLength == 4){ return year ; }else{ return year ; } } // // public static void main(String[] args){ // Calendar cal = Calendar.getInstance(); // System.out.println(cal.get(Calendar.MONTH) + 1) ; // // IDLongGenerator o = new IDLongGenerator() ; // int total = 800 ; // long start = System.currentTimeMillis() ; // int total = 1 ; // for(int i = 0 ; i < total ; i++){ // System.out.println(o.generate()) ; // } // long start = System.currentTimeMillis() ; // long end = System.currentTimeMillis() ; // System.out.println("产生" + total + "ID用时" + (end - start) + "毫秒"); // pipIrr-platform/pipIrr-global/src/bak/RmLossHistory.java
File was deleted pipIrr-platform/pipIrr-global/src/bak/RmLossHistoryMapper.java
File was deleted pipIrr-platform/pipIrr-global/src/bak/RmLossHistoryMapper.xml
File was deleted pipIrr-platform/pipIrr-global/src/bak/RmLossLast.java
File was deleted pipIrr-platform/pipIrr-global/src/bak/RmLossLastMapper.java
File was deleted pipIrr-platform/pipIrr-global/src/bak/RmLossLastMapper.xml
File was deleted pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmClientAmountDayLastMapper.java
@@ -2,9 +2,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dy.pipIrrGlobal.pojoRm.RmClientAmountDayLast; import com.dy.pipIrrGlobal.voRm.VoClientAmountDay; import org.apache.ibatis.annotations.Mapper; import java.util.List; import java.util.Map; /** * @Author: liurunyu @@ -62,4 +64,19 @@ * @return update count */ int updateByPrimaryKey(RmClientAmountDayLast record); /** * 根据指定条件获取记录总数 * @param params * @return */ Long getRecordCount(Map<?, ?> params); /** * 根据指定条件获取记录 * @param params * @return */ List<VoClientAmountDay> getClientAmountDayLast(Map<?, ?> params); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmClientAmountDayMapper.java
@@ -2,11 +2,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dy.pipIrrGlobal.pojoRm.RmClientAmountDay; import com.dy.pipIrrGlobal.voRm.VoClientAmountDay; import com.dy.pipIrrGlobal.voRm.VoControllerAlarmState; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.Date; import java.util.List; import java.util.Map; /** * @Author: liurunyu @@ -71,4 +74,18 @@ * @return update count */ int updateByPrimaryKey(RmClientAmountDay record); /** * 根据指定条件获取记录总数 * @param params * @return */ Long getRecordCount(Map<?, ?> params); /** * 根据指定条件获取记录 * @param params * @return */ List<VoClientAmountDay> getClientAmountDayHistory(Map<?, ?> params); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/util/Org.java
@@ -1,67 +1,28 @@ package com.dy.pipIrrGlobal.util; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.annotation.JSONField; import com.baomidou.mybatisplus.annotation.EnumValue; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public enum Org { // Ym("ym", "元谋"), // Pj("pj", "片角镇"), Sp("sp", "沙盘"), Jyg("ym", "嘉峪关"); @EnumValue public String tag ; public String name ; Org(String tag, String name){ this.tag = tag ; this.name = name ; } /** * @Author: liurunyu * @Date: 2024/7/24 11:45 * @Description */ public class Org { //用来转json public static List<Map> OrgList = new ArrayList<>(); static { Org[] all = Org.values(); for (Org one : all) { Map<String, String> objMap = new HashMap<>(); objMap.put("tag", one.tag); objMap.put("name", one.name); OrgList.add(objMap) ; public static List<OrgVo> OrgList = new ArrayList<>(); public class OrgVo{ public String tag ; public String name ; public String getTag() { return this.tag ; } public String getName() { return this.name ; } } public String getTag() { return this.tag ; } public String getName() { return this.name ; } public static Org get(String tag){ // if(tag.equals(Ym.tag) || tag.equals(Jyg.tag)){ // return Ym ; // }else if(tag.equals(Pj.tag)){ // return Pj ; // } if(tag.equals(Jyg.tag)){ return Jyg ; }else if(tag.equals(Sp.tag)) { return Sp; } return null ; } @JSONField public JSONObject toJson() { return JSONObject.of("tag", getTag(), "name", getName()); } } } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/util/OrgListenerSupport.java
New file @@ -0,0 +1,56 @@ package com.dy.pipIrrGlobal.util; import com.dy.common.util.ConfigXml; import com.dy.common.webListener.ConfigListener; import org.jdom2.Document; import org.springframework.boot.context.event.ApplicationReadyEvent; import java.net.URL; /** * @Author: liurunyu * @Date: 2024/7/24 13:41 * @Description */ public abstract class OrgListenerSupport { /** * 实始化 */ @SuppressWarnings("unused ") protected void init() { this.init(null); } /** * 实始化 */ @SuppressWarnings("unused ") protected void init(ApplicationReadyEvent event) { try { URL configFileURL = ConfigListener.class.getResource("/init-config.xml"); ConfigXml configXml = new ConfigXml(); Document doc = configXml.createDom(configFileURL); this.doInit(configXml, doc); } catch (Exception e) { System.out.println("系统启动时,初始化配置出错 !"); System.out.println(e.getMessage()); e.printStackTrace(); } } private void doInit(ConfigXml configXml, Document doc) throws Exception { if (configXml != null && doc != null) { for (int num = 1; num <= 10000; num++) { if (configXml.existElement(doc, "config.orgs.org" + num)) { String orgTag = configXml.getSetAttrTxt(doc, "config.orgs.org" + num, "tag", null, false, null); String orgName = configXml.getSetAttrTxt(doc, "config.orgs.org" + num, "name", null, false, null); Org.OrgVo vo = new Org().new OrgVo() ; vo.tag = orgTag ; vo.name = orgName ; Org.OrgList.add(vo) ; }else{ break ; } } } } } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoClientAmountDay.java
New file @@ -0,0 +1,62 @@ package com.dy.pipIrrGlobal.voRm; import com.dy.common.po.BaseEntity; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.sql.Date; /** * @author :WuZeYu * @Date :2024/7/23 16:21 * @LastEditTime :2024/7/23 16:21 * @Description */ @Data @Schema(title = "农户日用水量统计视图对象") public class VoClientAmountDay implements BaseEntity { private static final long serialVersionUID = 202407231622001L; @Schema(description = "农户ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String clientId; @Schema(description = "日取水量", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Double amount; @Schema(description = "日花费金额", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Double money; @Schema(description = "统计日期(yyyy-mm-dd)", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private java.sql.Date dt; @Schema(description = "统计日最后一次开阀日期时间(yyyy-mm-dd HH:MM:SS)", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private java.util.Date openDtLast; @Schema(description = "统计日最后一次关阀日期时间(yyyy-mm-dd HH:MM:SS)", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private java.util.Date closeDtLast; @Schema(description = "统计日最后一次开阀取水量", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Double thisAmountLast; @Schema(description = "统计日最后一次开阀花费金额", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Double thisMoneyLast; @Schema(description = "统计日最后一次开阀取水时长(分钟)", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Long thisTimeLast; @Schema(description = "统计日最后一次关阀上报控制器时钟", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private java.util.Date rtuDtLast; @Schema(description = "农户姓名", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String clientName; } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoControllerAlarmState.java
@@ -1,5 +1,6 @@ package com.dy.pipIrrGlobal.voRm; import com.dy.common.po.BaseEntity; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -15,7 +16,7 @@ */ @Data @Schema(title = "控制器报警与状态视图对象") public class VoControllerAlarmState { public class VoControllerAlarmState implements BaseEntity { private static final long serialVersionUID = 202407230842001L; pipIrr-platform/pipIrr-global/src/main/resources/application-database-pj.yml
@@ -14,10 +14,10 @@ # 数据源名称:当存在多个数据源时,设置名字可以很方便的来进行区分,默认自动生成名称,格式是:"DataSource-" + System.identityHashCode(this) name: druid-mysql-pj #配置初始化大小、最小、最大 initialSize: 1 minIdle: 1 initialSize: 10 minIdle: 10 maxActive: 100 #配置获取连接等待超时的时间,单位是毫秒 # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁 maxWait: 6000 #配置间隔多久进行一次检测,检测需要关闭的空闲连接,单位毫秒。 默认是60s,太长可能会导致无法及时检测到连接中断 timeBetweenEvictionRunsMillis: 60000 pipIrr-platform/pipIrr-global/src/main/resources/application-database-sp.yml
@@ -16,7 +16,7 @@ #配置初始化大小、最小、最大 initialSize: 10 minIdle: 10 maxActive: 200 maxActive: 100 # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁 maxWait: 60000 #配置间隔多久进行一次检测,检测需要关闭的空闲连接,单位毫秒。 默认是60s,太长可能会导致无法及时检测到连接中断 pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml
@@ -16,7 +16,7 @@ #配置初始化大小、最小、最大 initialSize: 10 minIdle: 10 maxActive: 200 maxActive: 100 # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁 maxWait: 60000 #配置间隔多久进行一次检测,检测需要关闭的空闲连接,单位毫秒。 默认是60s,太长可能会导致无法及时检测到连接中断 pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -159,10 +159,7 @@ - /sso/sso - /remote/comRes/receive - /wx/comRes/receive #自动统计配置 #自动统计配置,自动统计定时任务会每天定时进行 auto-statistics: #月统计 month: startDay: 1 startHour: 0 startMinute: 5 startHour: 9 #开始小时 0 startMinute: 51 #开始分钟 5 pipIrr-platform/pipIrr-global/src/main/resources/init-config.xml
@@ -2,7 +2,7 @@ <config> <orgs> <!-- 多个组织,用编号区分,编号从1开始 --> <org1 name="ym"> <org1 tag="ym" name="元谋"> <districts> <province name="云南省" num="53" level="1"> <city name="楚雄彝族自治州" num="23" level="2"> @@ -18,8 +18,8 @@ <item4 name="银行转账"/> </payments> <settings> <item1 item_name="lng" item_value="101.87345" remarks="经度"/> <item2 item_name="lat" item_value="25.70424" remarks="纬度"/> <item1 item_name="lng" item_value="101.87345" remarks="经度"/> <item2 item_name="lat" item_value="25.70424" remarks="纬度"/> </settings> <waterTypes> <item1 typeName="灌溉用水"/> @@ -29,7 +29,7 @@ <item5 typeName="绿化用水"/> </waterTypes> </org1> <org2 name="sp"> <org2 tag="sp" name="沙盘"> <districts> <province name="天津" num="53" level="1"> <city name="天津市" num="23" level="2"> pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateHistoryMapper.xml
@@ -353,7 +353,7 @@ <select id="getRecordCount" resultType="java.lang.Long"> select count(*) from rm_alarm_state_history rash Left join pr_intake pint on intake_id = pint.id Left join pr_intake pint on rash.intake_id = pint.id <where> <if test="alarmState == 1"> and ( @@ -434,7 +434,7 @@ rash.alarm_valve as alarmValve, rash.power_type as powerType from rm_alarm_state_history rash Left join pr_intake pint on intake_id = pint.id Left join pr_intake pint on rash.intake_id = pint.id <where> <if test="alarmState == 1"> and ( pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmClientAmountDayLastMapper.xml
@@ -188,4 +188,53 @@ rtu_dt_last = #{rtuDtLast,jdbcType=TIMESTAMP} where id = #{id,jdbcType=BIGINT} </update> <!--根据指定条件获取记录总数--> <select id="getRecordCount" resultType="java.lang.Long"> select count(*) from rm_client_amount_day_last rcadl Left join se_client sc on sc.id = rcadl.client_id <where> <if test="clientName != null"> and sc.name = #{clientName,jdbcType=VARCHAR} </if> <if test="startDt != null"> and rash.dt >= #{startDt,jdbcType=TIMESTAMP} </if> <if test="endDt != null"> and rash.dt <= #{endDt,jdbcType=TIMESTAMP} </if> </where> </select> <!--根据指定条件获取记录--> <select id="getClientAmountDayLast" resultType="com.dy.pipIrrGlobal.voRm.VoClientAmountDay"> select CAST(rcadl.client_id AS char)AS clientId, rcadl.amount as amount, rcadl.money as money, rcadl.dt as dt, rcadl.open_dt_last as openDtLast, rcadl.close_dt_last as closeDtLast, rcadl.this_amount_last as thisAmountLast, rcadl.this_money_last as thisMoneyLast, rcadl.this_time_last as thisTimeLast, rcadl.rtu_dt_last as rtuDtLast, sc.name as clientName from rm_client_amount_day_last rcadl Left join se_client sc on sc.id = rcadl.client_id <where> <if test="clientName != null"> and sc.name = #{clientName,jdbcType=VARCHAR} </if> <if test="startDt != null"> and rash.dt >= #{startDt,jdbcType=TIMESTAMP} </if> <if test="endDt != null"> and rash.dt <= #{endDt,jdbcType=TIMESTAMP} </if> </where> ORDER BY rcadl.dt DESC <if test="pageCurr != null and pageSize != null"> LIMIT ${(pageCurr-1)*pageSize}, ${pageSize} </if> </select> </mapper> pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmClientAmountDayMapper.xml
@@ -178,4 +178,53 @@ rtu_dt_last = #{rtuDtLast,jdbcType=TIMESTAMP} where id = #{id,jdbcType=BIGINT} </update> <!--根据指定条件获取记录总数--> <select id="getRecordCount" resultType="java.lang.Long"> select count(*) from rm_client_amount_day rcad Left join se_client sc on sc.id = rcad.client_id <where> <if test="clientName != null"> and sc.name = #{clientName,jdbcType=VARCHAR} </if> <if test="startDt != null"> and rash.dt >= #{startDt,jdbcType=TIMESTAMP} </if> <if test="endDt != null"> and rash.dt <= #{endDt,jdbcType=TIMESTAMP} </if> </where> </select> <!--根据指定条件获取记录--> <select id="getClientAmountDayHistory" resultType="com.dy.pipIrrGlobal.voRm.VoClientAmountDay"> select CAST(rcad.client_id AS char)AS clientId, rcad.amount as amount, rcad.money as money, rcad.dt as dt, rcad.open_dt_last as openDtLast, rcad.close_dt_last as closeDtLast, rcad.this_amount_last as thisAmountLast, rcad.this_money_last as thisMoneyLast, rcad.this_time_last as thisTimeLast, rcad.rtu_dt_last as rtuDtLast, sc.name as clientName from rm_client_amount_day rcad Left join se_client sc on sc.id = rcad.client_id <where> <if test="clientName != null"> and sc.name = #{clientName,jdbcType=VARCHAR} </if> <if test="startDt != null"> and rash.dt >= #{startDt,jdbcType=TIMESTAMP} </if> <if test="endDt != null"> and rash.dt <= #{endDt,jdbcType=TIMESTAMP} </if> </where> ORDER BY rcad.dt DESC <if test="pageCurr != null and pageSize != null"> LIMIT ${(pageCurr-1)*pageSize}, ${pageSize} </if> </select> </mapper> pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java
@@ -180,13 +180,19 @@ if(ServerProperties.cacheUpDownDataMaxCount <= ServerProperties.cacheUpDownDataWarnCount){ throw new Exception("cacheUpDownDataMaxCount必须大于cacheUpDownDataWarnCount") ; } //没有上行数据的分钟数,达到这个分钟数,认为RTU断网了,取值范围是2_100 //没有上行数据的分钟数,达到这个分钟数,认为RTU断网了,取值范围是2-100 ServerProperties.disconnectedByNoUpDataMinutes = 0L + conf.getSetAttrPlusInt(doc, "config.base", "disconnectedByNoUpDataMinutes", null, 1, 100, null) ; if(ServerProperties.disconnectedByNoUpDataMinutes < 1 || ServerProperties.disconnectedByNoUpDataMinutes > 100){ throw new Exception("disconnectedByNoUpDataMinutes取值必须是1~100") ; } ServerProperties.disconnectedByNoUpDataMinutes = ServerProperties.disconnectedByNoUpDataMinutes * 60 * 1000 ; //工作报太频繁,N次上报处理1次,取值范围是1-100 ServerProperties.workReportDealOneByTimes = conf.getSetAttrPlusInt(doc, "config.base", "workReportDealOneByTimes", null, 1, 100, null) ; if(ServerProperties.workReportDealOneByTimes < 1 || ServerProperties.workReportDealOneByTimes > 100){ throw new Exception("workReportDealOneByTimes取值必须是1~100") ; } //设置ID生成器的后缀 IDLongGenerator.setSuffix(ServerProperties.dbDataIdSuffix.intValue()); pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/ServerProperties.java
@@ -43,4 +43,7 @@ //没有上行数据的分钟数,达到这个分钟数,认为RTU断网了,取值范围是2000_100000 public static Long disconnectedByNoUpDataMinutes = 3000L ; //工作报太频繁,N次上报处理1次 public static Integer workReportDealOneByTimes = 5 ; } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealWorkReport.java
@@ -1,6 +1,7 @@ package com.dy.rtuMw.server.rtuData.p206V1_0_0; import com.dy.pipIrrGlobal.pojoSe.SeClient; import com.dy.rtuMw.server.ServerProperties; import com.dy.rtuMw.server.rtuData.TaskSurpport; import com.dy.rtuMw.server.rtuData.dbSv.DbSv; import com.dy.common.mw.protocol.Data; @@ -12,6 +13,9 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.HashMap; import java.util.Map; /** * @Author liurunyu * @Date 2024/2/27 14:20 @@ -21,6 +25,8 @@ public class TkDealWorkReport extends TaskSurpport { private static final Logger log = LogManager.getLogger(TkDealWorkReport.class.getName()) ; private static final Map<String, Integer> RtuReportTimes = new HashMap<>(); //类ID,一定与Tree.xml配置文件中配置一致 public static final String taskId = "TkDealWorkReport" ; @@ -35,14 +41,30 @@ DataV1_0_1 dV1_0_1 = (DataV1_0_1) d.getSubData();//前面任务已经判断不为null Object cdObj = dV1_0_1.subData; if (cdObj != null && cdObj instanceof DataCd84Vo) { Object[] objs = this.getTaskResults(TkPreGenObjs.taskId) ; DbSv sv = (DbSv)objs[0] ; PrController controller = (PrController)objs[1] ; SeClient clientVo = (SeClient)objs[3] ;//这个值对象中只有id和name会有值 try{ this.doDeal(sv, clientVo, controller, d.getRtuAddr(), dV1_0_1, (DataCd84Vo)cdObj) ; }catch (Exception e){ log.error("保存控制器阀开工作报时发生异常", e); boolean deal = false ; Integer times = RtuReportTimes.get(d.rtuAddr) ; if(times == null){ times = 1 ; RtuReportTimes.put(d.rtuAddr, times) ; deal = true ;//第一次 }else{ times++ ; if(times > ServerProperties.workReportDealOneByTimes){ times = 1 ;//循环第一次 deal = true ; } RtuReportTimes.put(d.rtuAddr, times) ; } if(deal){ Object[] objs = this.getTaskResults(TkPreGenObjs.taskId) ; DbSv sv = (DbSv)objs[0] ; PrController controller = (PrController)objs[1] ; SeClient clientVo = (SeClient)objs[3] ;//这个值对象中只有id和name会有值 try{ this.doDeal(sv, clientVo, controller, d.getRtuAddr(), dV1_0_1, (DataCd84Vo)cdObj) ; }catch (Exception e){ log.error("保存控制器阀开工作报时发生异常", e); } } } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
@@ -18,7 +18,8 @@ dbDataIdSuffix:数据库数据id生成器的id后缀,0是默认的后缀,一般web系统应用,数据中间件id后缀大于等于1 cacheUpDownDataWarnCount:上下行数据缓存队列中缓存数据个数的报警量,这个与现实项目所接水表数相关 cacheUpDownDataMaxCount:上下行数据缓存队列中缓存数据个数的最大值,这个与现实项目所接水表数相关 disconnectedByNoUpDataMinutes:没有上行数据的分钟数,达到这个分钟数,认为RTU断网了,取值范围是2_100 disconnectedByNoUpDataMinutes:没有上行数据的分钟数,达到这个分钟数,认为RTU断网了,取值范围是2-100 workReportDealOneByTimes: 工作报太频繁,N次上报处理1次,取值范围是1-100 --> <base orgTag="ym" @@ -34,6 +35,7 @@ cacheUpDownDataWarnCount="100000" cacheUpDownDataMaxCount="110000" disconnectedByNoUpDataMinutes="3" workReportDealOneByTimes="5" /> <!-- pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/util/InitListener.java
@@ -103,7 +103,7 @@ if(configXml != null && doc != null){ for(int num = 1; num <= 10000; num++){ if(configXml.existElement(doc, "config.orgs.org" + num)){ String orgTag = configXml.getSetAttrTxt(doc, "config.orgs.org" + num,"name", null, false, null) ; String orgTag = configXml.getSetAttrTxt(doc, "config.orgs.org" + num,"tag", null, false, null) ; //设置数据源 DataSourceContext.set(orgTag); if(!this.existDistricts()){ pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/controllerAlarmState/ControllerAlarmStateCtrl.java
File was deleted pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/controllerAlarmState/ControllerAlarmStateSv.java
File was deleted pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/ClientAmountDayQueryVo.java
New file @@ -0,0 +1,38 @@ package com.dy.pipIrrRemote.records; import com.dy.common.webUtil.QueryConditionVo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; /** * @author :WuZeYu * @Date :2024/7/23 15:55 * @LastEditTime :2024/7/23 15:55 * @Description */ @Data @EqualsAndHashCode(callSuper = false) @ToString(callSuper = true) @NoArgsConstructor @AllArgsConstructor @Builder @Schema(name = "农户日用水量统计查询条件") public class ClientAmountDayQueryVo extends QueryConditionVo { @Schema(description = "农户姓名", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String clientName; @Schema(description = "统计开始日期", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date startDt; @Schema(description = "统计结束日期", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date endDt; } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/ControllerAlarmStateQueryVo.java
File was renamed from pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/controllerAlarmState/QueryVo.java @@ -1,4 +1,4 @@ package com.dy.pipIrrRemote.controllerAlarmState; package com.dy.pipIrrRemote.records; import com.dy.common.webUtil.QueryConditionVo; import com.fasterxml.jackson.annotation.JsonFormat; @@ -21,7 +21,7 @@ @AllArgsConstructor @Builder @Schema(name = "控制器报警与状态查询条件") public class QueryVo extends QueryConditionVo { public class ControllerAlarmStateQueryVo extends QueryConditionVo { @Schema(description = "取水口名称", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String intakeName; pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/RecordsCtrl.java
New file @@ -0,0 +1,153 @@ package com.dy.pipIrrRemote.records; import com.dy.common.aop.SsoAop; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.QueryResultVo; import com.dy.common.webUtil.ResultCodeMsg; import com.dy.pipIrrGlobal.voRm.VoClientAmountDay; import com.dy.pipIrrGlobal.voRm.VoControllerAlarmState; import com.dy.pipIrrGlobal.voSe.VoActiveCard; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @author :WuZeYu * @Date :2024/7/22 20:00 * @LastEditTime :2024/7/22 20:00 * @Description */ @Slf4j @Tag(name = "检测控制查询", description = "检测控制查询") @RestController @RequestMapping(path = "remoteRecords") public class RecordsCtrl { @Autowired private RecordsSv recordsSv; /** * 根据指定条件获取控制器报警与状态列表(历史) * * @param vo 查询条件 * @return 符合条件的控制器报警与状态列表(历史) */ @Operation(summary = "获得一页控制器报警与状态记录", description = "返回一页控制器报警与状态数据") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "返回一页控制器报警与状态数据(BaseResponse.content:QueryResultVo[{}])", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = VoActiveCard.class))} ) }) @GetMapping(path = "/getControllerAlarmStateHistory") @SsoAop() public BaseResponse<QueryResultVo<List<VoControllerAlarmState>>> getControllerAlarmStateHistory(@RequestBody ControllerAlarmStateQueryVo vo) { try { QueryResultVo<List<VoControllerAlarmState>> res = recordsSv.getControllerAlarmStateHistory(vo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取控制器报警与状态记录异常", e); return BaseResponseUtils.buildException(e.getMessage()); } } /** * 根据指定条件获取控制器报警与状态列表(最新) * * @param vo 查询条件 * @return 符合条件的控制器报警与状态列表(最新) */ @Operation(summary = "获得一页控制器报警与状态记录", description = "返回一页控制器报警与状态数据") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "返回一页控制器报警与状态数据(BaseResponse.content:QueryResultVo[{}])", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = VoActiveCard.class))} ) }) @GetMapping(path = "/getControllerAlarmStateLast") @SsoAop() public BaseResponse<QueryResultVo<List<VoControllerAlarmState>>> getControllerAlarmStateLast(@RequestBody ControllerAlarmStateQueryVo vo) { try { QueryResultVo<List<VoControllerAlarmState>> res = recordsSv.getControllerAlarmStateLast(vo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取控制器记录异常", e); return BaseResponseUtils.buildException(e.getMessage()); } } /** * 根据指定条件获取农户日用水量统计列表(历史) * * @param vo 查询条件 * @return 符合条件的农户日用水量统计列表(历史) */ @Operation(summary = "获得一页农户日用水量统计记录", description = "返回一页农户日用水量统计数据") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "返回一页控制器报警与状态数据(BaseResponse.content:QueryResultVo[{}])", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = VoActiveCard.class))} ) }) @GetMapping(path = "/getClientAmountDayHistory") @SsoAop() public BaseResponse<QueryResultVo<List<VoClientAmountDay>>> getClientAmountDayHistory(@RequestBody ClientAmountDayQueryVo vo) { try { QueryResultVo<List<VoClientAmountDay>> res = recordsSv.getClientAmountDayHistory(vo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取农户日用水量统计记录异常", e); return BaseResponseUtils.buildException(e.getMessage()); } } /** * 根据指定条件获取农户日用水量统计列表(最新) * * @param vo 查询条件 * @return 符合条件的农户日用水量统计列表(最新) */ @Operation(summary = "获得一页农户日用水量统计记录", description = "返回一页农户日用水量统计数据") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "返回一页控制器报警与状态数据(BaseResponse.content:QueryResultVo[{}])", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = VoActiveCard.class))} ) }) @GetMapping(path = "/getClientAmountDayLast") @SsoAop() public BaseResponse<QueryResultVo<List<VoClientAmountDay>>> getClientAmountDayLast(@RequestBody ClientAmountDayQueryVo vo) { try { QueryResultVo<List<VoClientAmountDay>> res = recordsSv.getClientAmountDayLast(vo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取农户日用水量统计记录异常", e); return BaseResponseUtils.buildException(e.getMessage()); } } } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/RecordsSv.java
New file @@ -0,0 +1,121 @@ package com.dy.pipIrrRemote.records; import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrGlobal.daoRm.RmAlarmStateHistoryMapper; import com.dy.pipIrrGlobal.daoRm.RmAlarmStateLastMapper; import com.dy.pipIrrGlobal.daoRm.RmClientAmountDayLastMapper; import com.dy.pipIrrGlobal.daoRm.RmClientAmountDayMapper; import com.dy.pipIrrGlobal.voRm.VoClientAmountDay; import com.dy.pipIrrGlobal.voRm.VoControllerAlarmState; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.utils.PojoUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; /** * @author :WuZeYu * @Date :2024/7/22 20:01 * @LastEditTime :2024/7/22 20:01 * @Description */ @Slf4j @Service public class RecordsSv { @Autowired private RmAlarmStateHistoryMapper rmAlarmStateHistoryMapper; @Autowired private RmAlarmStateLastMapper rmAlarmStateLastMapper; @Autowired private RmClientAmountDayLastMapper rmClientAmountDayLastMapper; @Autowired private RmClientAmountDayMapper rmClientAmountDayMapper; /** * 获得一页控制器报警与状态记录(历史) * @param vo * @return */ public QueryResultVo<List<VoControllerAlarmState>> getControllerAlarmStateHistory(ControllerAlarmStateQueryVo vo) { Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo); Long itemTotal = rmAlarmStateHistoryMapper.getRecordCount(params); QueryResultVo<List<VoControllerAlarmState>> rsVo = new QueryResultVo<>(); rsVo.pageSize = vo.pageSize; rsVo.pageCurr = vo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmAlarmStateHistoryMapper.getControllerAlarmStateHistory(params); return rsVo; } /** * 获得一页控制器报警与状态记录(最新) * @param vo * @return */ public QueryResultVo<List<VoControllerAlarmState>> getControllerAlarmStateLast(ControllerAlarmStateQueryVo vo) { Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo); Long itemTotal = rmAlarmStateLastMapper.getRecordCount(params); QueryResultVo<List<VoControllerAlarmState>> rsVo = new QueryResultVo<>(); rsVo.pageSize = vo.pageSize; rsVo.pageCurr = vo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmAlarmStateLastMapper.getControllerAlarmStateLast(params); return rsVo; } /** * 获得一页农户日用水量统计记录(历史) * @param vo * @return */ public QueryResultVo<List<VoClientAmountDay>> getClientAmountDayHistory(ClientAmountDayQueryVo vo) { Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo); Long itemTotal = rmClientAmountDayMapper.getRecordCount(params); QueryResultVo<List<VoClientAmountDay>> rsVo = new QueryResultVo<>(); rsVo.pageSize = vo.pageSize; rsVo.pageCurr = vo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmClientAmountDayMapper.getClientAmountDayHistory(params); return rsVo; } /** * 获得一页农户日用水量统计记录(最新) * @param vo * @return */ public QueryResultVo<List<VoClientAmountDay>> getClientAmountDayLast(ClientAmountDayQueryVo vo) { Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo); Long itemTotal = rmClientAmountDayLastMapper.getRecordCount(params); QueryResultVo<List<VoClientAmountDay>> rsVo = new QueryResultVo<>(); rsVo.pageSize = vo.pageSize; rsVo.pageCurr = vo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmClientAmountDayLastMapper.getClientAmountDayLast(params); return rsVo; } } pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java
@@ -29,8 +29,6 @@ import java.util.Objects; import java.util.UUID; //import org.springframework.cache.CacheManager; /** * 注解Tag 在API中显示: Tag 注解, 给整个接口起了个名字与描述" * 注解ApiResponses 和 注解ApiResponse 用来配置响应; @@ -70,7 +68,7 @@ ) }) @GetMapping(path = "allOrg") public BaseResponse<List<Org>> allOrg(){ public BaseResponse<List<Org.OrgVo>> allOrg(){ //List<Org> list = Arrays.asList(Org.Ym, Org.Pj) ; return BaseResponseUtils.buildSuccess(Org.OrgList); } pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/util/SsoListener.java
@@ -1,22 +1,25 @@ package com.dy.sso.util; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletContextEvent; import jakarta.servlet.ServletContextListener; import lombok.extern.slf4j.Slf4j; import com.dy.pipIrrGlobal.util.OrgListenerSupport; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; @Slf4j public class SsoListener implements ServletContextListener { @Component public class SsoListener extends OrgListenerSupport implements ApplicationListener<ApplicationReadyEvent> { @Override public void contextInitialized(ServletContextEvent event) { ServletContextListener.super.contextInitialized(event); ServletContext con = event.getServletContext(); public void onApplicationEvent(ApplicationReadyEvent event) { try { //等1秒,等待com.alibaba.druid.pool.DruidDataSource实始化完成 Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } finally { super.init(); } } @Override public void contextDestroyed(ServletContextEvent event) { ServletContextListener.super.contextDestroyed(event); } } pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/PipIrrStatisticsApplication.java
@@ -18,7 +18,7 @@ }) } ) @MapperScan(basePackages={"com.dy.pipIrrGlobal.daoBa"}) @MapperScan(basePackages={"com.dy.pipIrrGlobal.daoRm", "com.dy.pipIrrGlobal.daoPr", "com.dy.pipIrrGlobal.daoSe", "com.dy.pipIrrGlobal.daoBa"}) public class PipIrrStatisticsApplication { public static void main(String[] args) { pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/listeners/StClient.java
New file @@ -0,0 +1,50 @@ package com.dy.pipIrrStatistics.listeners; import com.dy.pipIrrGlobal.daoRm.RmClientAmountDayMapper; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * @Author: liurunyu * @Date: 2024/7/24 9:31 * @Description */ @Component public class StClient { private static Logger log = LogManager.getLogger(StClient.class.getName()) ; @Autowired protected RmClientAmountDayMapper rmClientAmountDayDao ; private String statisticsYyyy_mm; private Long statisticsStartId ; private Long statisticsEndId ; protected void statistics(String statisticsYyyy_mm, Long statisticsStartId, Long statisticsEndId){ this.statisticsYyyy_mm = statisticsYyyy_mm ; this.statisticsStartId = statisticsStartId ; this.statisticsEndId = statisticsEndId ; this.statisticsMonth() ; this.statisticsYear() ; } /** * 月统计---农户 */ private void statisticsMonth(){ log.info(statisticsYyyy_mm + " " + statisticsStartId + " " + statisticsEndId); log.info(rmClientAmountDayDao.toString()); } /** * 年统计---农户 */ private void statisticsYear(){ } } pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/listeners/StIntake.java
New file @@ -0,0 +1,50 @@ package com.dy.pipIrrStatistics.listeners; import com.dy.pipIrrGlobal.daoRm.RmIntakeAmountDayMapper; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * @Author: liurunyu * @Date: 2024/7/24 9:30 * @Description */ @Component public class StIntake { private static Logger log = LogManager.getLogger(StIntake.class.getName()) ; @Autowired protected RmIntakeAmountDayMapper rmIntakeAmountDayDao ; private String statisticsYyyy_mm; private Long statisticsStartId ; private Long statisticsEndId ; protected void statistics(String statisticsYyyy_mm, Long statisticsStartId, Long statisticsEndId){ this.statisticsYyyy_mm = statisticsYyyy_mm ; this.statisticsStartId = statisticsStartId ; this.statisticsEndId = statisticsEndId ; this.statisticsMonth() ; this.statisticsYear() ; } /** * 月统计---取水口 */ private void statisticsMonth(){ log.info(statisticsYyyy_mm + " " + statisticsStartId + " " + statisticsEndId); log.info(rmIntakeAmountDayDao.toString()); } /** * 年统计---取水口 */ private void statisticsYear(){ } } pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/listeners/StLoss.java
New file @@ -0,0 +1,50 @@ package com.dy.pipIrrStatistics.listeners; import com.dy.pipIrrGlobal.daoRm.RmLossHistoryMapper; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * @Author: liurunyu * @Date: 2024/7/24 9:10 * @Description */ @Component public class StLoss { private static Logger log = LogManager.getLogger(StLoss.class.getName()) ; @Autowired protected RmLossHistoryMapper rmLossHistoryDao ; private String statisticsYyyy_mm; private Long statisticsStartId ; private Long statisticsEndId ; protected void statistics(String statisticsYyyy_mm, Long statisticsStartId, Long statisticsEndId){ this.statisticsYyyy_mm = statisticsYyyy_mm ; this.statisticsStartId = statisticsStartId ; this.statisticsEndId = statisticsEndId ; this.statisticsMonth() ; this.statisticsYear() ; } /** * 月统计---漏损 */ private void statisticsMonth(){ log.info(statisticsYyyy_mm + " " + statisticsStartId + " " + statisticsEndId); log.info(rmLossHistoryDao.toString()); } /** * 年统计---漏损 */ private void statisticsYear(){ } } pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/listeners/StLossSv.java
New file @@ -0,0 +1,9 @@ package com.dy.pipIrrStatistics.listeners; /** * @Author: liurunyu * @Date: 2024/7/24 11:24 * @Description */ public class StLossSv { } pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/listeners/StatisticsJob.java
New file @@ -0,0 +1,68 @@ package com.dy.pipIrrStatistics.listeners; import com.dy.common.schedulerTask.TaskJob; import com.dy.common.schedulerTask.Test; import com.dy.common.springUtil.SpringContextUtil; import com.dy.common.util.DateTime; import com.dy.common.util.IDLongGenerator; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * @Author: liurunyu * @Date: 2024/7/22 16:41 * @Description */ public class StatisticsJob extends TaskJob { private static Logger log = LogManager.getLogger(Test.class.getName()) ; private StLoss stLoss ; private StIntake stIntake ; private StClient stClient ; private String statisticsYyyy_mm; private Long statisticsStartId ; private Long statisticsEndId ; @Override public void execute(JobExecutionContext ctx) throws JobExecutionException { stLoss = SpringContextUtil.getBean(StLoss.class); stIntake = SpringContextUtil.getBean(StIntake.class); stClient = SpringContextUtil.getBean(StClient.class); if(stLoss != null && stIntake != null && stClient != null){ int[] ymd = DateTime.yyyy_MM_dd_2_ymdGroup(DateTime.yyyy_MM_dd()) ; if(ymd[2] == 1){ //统计上个月的 statisticsYyyy_mm = DateTime.lastMonth_ym() ;//统计月 int lastYear = Integer.parseInt(statisticsYyyy_mm.substring(0, 4)) ; int lastMonth = Integer.parseInt(statisticsYyyy_mm.substring(5, 7)) ; statisticsStartId = IDLongGenerator.generateOneDayStartId(lastYear, lastMonth, 1) ; statisticsEndId = IDLongGenerator.generateOneDayEndId(lastYear, lastMonth, 31) ; }else{ //统计本月的 statisticsYyyy_mm = ymd[0] + "-" + ymd[1] ;//统计月 statisticsStartId = IDLongGenerator.generateOneDayStartId(ymd[0], ymd[1], 1) ; statisticsEndId = IDLongGenerator.generateOneDayEndId(ymd[0], ymd[1], 31) ; } doStatistics() ; }else{ log.error("未能从Spring容器中得到统计bean"); } } /** * 统计 */ private void doStatistics(){ stLoss.statistics(statisticsYyyy_mm, statisticsStartId, statisticsEndId) ; stIntake.statistics(statisticsYyyy_mm, statisticsStartId, statisticsEndId) ; stClient.statistics(statisticsYyyy_mm, statisticsStartId, statisticsEndId) ; } } pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/listeners/StatisticsListener.java
New file @@ -0,0 +1,68 @@ package com.dy.pipIrrStatistics.listeners; /** * @Author: liurunyu * @Date: 2024/7/22 14:39 * @Description */ import com.dy.common.schedulerTask.SchedulerTaskSupport; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; /** * 监听器,实现功能:在系统启动时初始化,向数据库中插入数据 * 本监听器不能采用ServletContextListener方式,因为Servlet上下文Context创建后 * Spring容器并没有创建完,而本类中用了Spring容器中的Bean,即*Dao 。 * 所以采用了Spring事件监听器来实现 */ @Component public class StatisticsListener implements ApplicationListener<ApplicationReadyEvent> { private static Logger log = LogManager.getLogger(StatisticsListener.class.getName()) ; private static final String JobName = "statisticsJob" ; private static final String JobGroupName = "statisticsGroup" ; private static final Integer ThreadPoolMaxCount = 1 ;//线程池线程最大个数 private static final Integer ThreadPoolPriority = 5 ;//线程优先级 @Value("${auto-statistics.startHour: 0}") protected Integer startHour;//统计开始小时 @Value("${auto-statistics.startMinute: 5}") protected Integer startMinute;//统计开始分钟 /** * SpringBoot容器已经准备好了,执行下面方法 * @param event 事件 */ @Override public void onApplicationEvent(@NonNull ApplicationReadyEvent event) { try { //等1秒,等待com.alibaba.druid.pool.DruidDataSource实始化完成 Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); }finally { try{ this.start(event); }catch (Exception e){ log.error("注册统计定时任务出错", e); } } } /** * 初始化 */ private void start(ApplicationReadyEvent event) throws Exception{ SchedulerTaskSupport.setThreadPoolPro(ThreadPoolMaxCount, ThreadPoolPriority); SchedulerTaskSupport.addDailyJob(JobName, JobGroupName, StatisticsJob.class, null, startHour, startMinute ) ; } } pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/listeners/StatisticsMonthListener.java
File was deleted pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/resources/application.yml
@@ -1,6 +1,6 @@ spring: profiles: include: global, database include: global, database, database-ym, database-pj, database-sp #actutor的web端口 management: @@ -10,9 +10,9 @@ server: port: ${pipIrr.statistics.webPort} servlet: context-path: /sso #web访问上下文路径 context-path: /statistics #web访问上下文路径 context-parameters: #GenerateIdSetSuffixListener中应用,取值范围是0-99 IdSuffix: ${pipIrr.statistics.IdSuffix} #ConfigListener中应用 configFileNames: config-global.xml,config-sso.xml configFileNames: config-global.xml