Prechádzať zdrojové kódy

Add 添加公司用户最值统计

YueYunyun 2 rokov pred
rodič
commit
d7f938610b

+ 1 - 1
VB_DSM_V2.1/Scripts/Dockers/docker-compose-iwb-v2.yml

@@ -62,7 +62,7 @@ services:
 
   vber-server-web:
     build: ../../vbdsm-web
-    image: vbdsm-web:2.1.2
+    image: vbdsm-web:2.2.2
     container_name: vbdsm-web
     restart: always
     ports:

+ 78 - 0
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/dao/CompanyDateMDao.java

@@ -0,0 +1,78 @@
+package cn.vbdsm.analysis.dao;
+
+import cn.vbdsm.analysis.model.CompanyDateM;
+import cn.vbdsm.analysis.model.CompanyDateM;
+import cn.vbdsm.common.constants.DataSourceConstant;
+import cn.vbdsm.core.dao.datasource.DynamicDataSource;
+import cn.vbdsm.core.dao.datasource.DynamicDataSourceEntry;
+import org.springframework.stereotype.Repository;
+
+import javax.annotation.Resource;
+import javax.core.common.jdbc.BaseDaoSupport;
+import javax.core.common.jdbc.QueryRule;
+import javax.sql.DataSource;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 公司日最值 Dao
+ * @author LAUEZX
+ *
+ */
+
+@Repository
+public class CompanyDateMDao extends BaseDaoSupport<CompanyDateM, Long> {
+
+    private SimpleDateFormat monthSdf = new SimpleDateFormat("yyyyMM");
+
+    private DynamicDataSourceEntry dynamicDataSourceEntry;
+
+    @Override
+    protected String getPKColumn() { return "id"; }
+
+    /**
+     * 配置动态数据源
+     *
+     * @param dataSource
+     */
+    @Resource(name = "dynamicDataSource")
+    public void setDataSource(DataSource dataSource) {
+        dynamicDataSourceEntry = ((DynamicDataSource) dataSource).getDataSourceEntry();
+        super.setDataSourceReadOnly(dataSource);
+        super.setDataSourceWrite(dataSource);
+    }
+
+
+//	public List<CompanyDateM> selectForPage(int pageNo,int pageSize){
+//		int start = Page.getStartOfPage(pageNo, pageSize);
+//		String sql = "select * from " + op.tableName + "_copy" + " limit ?,?";
+//		dynamicDataSourceEntry.set(DataSourceConstant.DB_GOV);
+//		List<Map<String,Object>> result = super.findBySql(sql, start,pageSize);
+//		return JSONArray.parseArray(JSONArray.toJSONString(result), CompanyDateM.class);
+//	}
+
+
+    public int replaceForBatch(List<CompanyDateM> entity) throws Exception{
+        //保存到实时库
+        dynamicDataSourceEntry.set(DataSourceConstant.DB_GOV);
+        return this.replaceAll(entity);
+    }
+
+
+    public List<CompanyDateM> selectByMonth(Date m){
+        String month = monthSdf.format(m);
+
+        Calendar c = Calendar.getInstance();
+        c.setTime(m);
+        int lastDayNum = c.getMaximum(Calendar.DAY_OF_MONTH);
+        String lastDay = (lastDayNum < 10 ? ("0" + lastDayNum) : ("" + lastDayNum));
+
+        QueryRule queryRule = QueryRule.getInstance();
+        queryRule.andBetween("getDate", Long.valueOf(month + "01"),Long.valueOf(month + lastDay));
+
+        dynamicDataSourceEntry.set(DataSourceConstant.DB_GOV);
+        return super.find(queryRule);
+    }
+}

+ 10 - 1
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/dao/CompanyOnlineDao.java

@@ -11,6 +11,7 @@ import javax.core.common.jdbc.BaseDaoSupport;
 import javax.core.common.jdbc.QueryRule;
 import javax.sql.DataSource;
 
+import cn.vbdsm.analysis.model.DistrictOnline;
 import org.springframework.stereotype.Repository;
 
 import cn.vbdsm.analysis.model.CompanyDateP;
@@ -25,6 +26,7 @@ public class CompanyOnlineDao extends BaseDaoSupport<CompanyOnline, Long>{
 
 	//	private SimpleDateFormat fullSdf = new SimpleDateFormat("yyyyMMddHHmm");
 
+
 	private DynamicDataSourceEntry dynamicDataSourceEntry;
 
 	@Override
@@ -85,7 +87,14 @@ public class CompanyOnlineDao extends BaseDaoSupport<CompanyOnline, Long>{
 			return null;
 		}
 	}
-	
+
+	public List<CompanyOnline> selectByDate(Integer getDate) {
+		QueryRule queryRule = QueryRule.getInstance();
+		queryRule.andBetween("getTime", getDate + "000000",getDate + "235959");
+//		queryRule.andEqual("district", district);
+		dynamicDataSourceEntry.set(DataSourceConstant.DB_GOV);
+		return super.find(queryRule);
+	}
 	
 	/**
 	 * 查询企业时间段内的负荷数据

+ 3 - 0
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/dao/ProvinceDateMDao.java

@@ -81,3 +81,6 @@ public class ProvinceDateMDao extends BaseDaoSupport<ProvinceDateM, Long>{
 		return super.find(queryRule);
 	}
 }
+
+
+

+ 67 - 0
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/model/CompanyDateM.java

@@ -0,0 +1,67 @@
+package cn.vbdsm.analysis.model;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.math.BigDecimal; /**
+ * 县区日最值
+ * @author LAUEZX
+ *
+ */
+
+@Entity
+@Table(name = "t_company_date_m")
+public class CompanyDateM implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	//private Long id;//id
+	private Long companyId;//公司id
+	private Integer getDate;//日期
+	private BigDecimal mmin;//最小值
+	private Long minTime;//最小值时间
+	private BigDecimal mmax;//最大值
+	private Long maxTime;//最大值时间
+	private BigDecimal mavg = new BigDecimal(0);//平均值
+
+
+	public Long getCompanyId() {return companyId;	}
+	public void setCompanyId(Long companyId) {this.companyId = companyId;	}
+	public Integer getGetDate() {
+		return getDate;
+	}
+	public void setGetDate(Integer getDate) {
+		this.getDate = getDate;
+	}
+	public BigDecimal getMmin() {
+		return mmin;
+	}
+	public void setMmin(BigDecimal mmin) {
+		this.mmin = mmin;
+	}
+	public Long getMinTime() {
+		return minTime;
+	}
+	public void setMinTime(Long minTime) {
+		this.minTime = minTime;
+	}
+	public BigDecimal getMmax() {
+		return mmax;
+	}
+	public void setMmax(BigDecimal mmax) {
+		this.mmax = mmax;
+	}
+	public Long getMaxTime() {
+		return maxTime;
+	}
+	public void setMaxTime(Long maxTime) {
+		this.maxTime = maxTime;
+	}
+	public BigDecimal getMavg() {
+		return mavg;
+	}
+	public void setMavg(BigDecimal mavg) {
+		this.mavg = mavg;
+	}
+
+}

+ 1 - 0
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/model/DistrictDateM.java

@@ -91,3 +91,4 @@ public class DistrictDateM implements Serializable {
 	}
 	
 }
+

+ 72 - 33
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/timer/impl/DivisionLimitTimer.java

@@ -10,38 +10,14 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import cn.vbdsm.analysis.dao.*;
+import cn.vbdsm.analysis.model.*;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-import cn.vbdsm.analysis.dao.CityDao;
-import cn.vbdsm.analysis.dao.CityDateMDao;
-import cn.vbdsm.analysis.dao.CityMonthMDao;
-import cn.vbdsm.analysis.dao.CityOnlineDao;
-import cn.vbdsm.analysis.dao.DistrictDateMDao;
-import cn.vbdsm.analysis.dao.DistrictMonthMDao;
-import cn.vbdsm.analysis.dao.DistrictOnlineDao;
-import cn.vbdsm.analysis.dao.ParkDateMDao;
-import cn.vbdsm.analysis.dao.ParkMonthMDao;
-import cn.vbdsm.analysis.dao.ParkOnlineDao;
-import cn.vbdsm.analysis.dao.PowerUserDao;
-import cn.vbdsm.analysis.dao.ProvinceDateMDao;
-import cn.vbdsm.analysis.dao.ProvinceMonthMDao;
-import cn.vbdsm.analysis.dao.ProvinceOnlineDao;
-import cn.vbdsm.analysis.model.CityDateM;
-import cn.vbdsm.analysis.model.CityMonthM;
-import cn.vbdsm.analysis.model.CityOnline;
-import cn.vbdsm.analysis.model.DistrictDateM;
-import cn.vbdsm.analysis.model.DistrictMonthM;
-import cn.vbdsm.analysis.model.DistrictOnline;
-import cn.vbdsm.analysis.model.ParkDateM;
-import cn.vbdsm.analysis.model.ParkMonthM;
-import cn.vbdsm.analysis.model.ParkOnline;
-import cn.vbdsm.analysis.model.ProvinceDateM;
-import cn.vbdsm.analysis.model.ProvinceMonthM;
-import cn.vbdsm.analysis.model.ProvinceOnline;
 import cn.vbdsm.common.annotation.Comment;
 import cn.vbdsm.common.constants.CronExpression;
 
@@ -61,20 +37,23 @@ public class DivisionLimitTimer extends LimitAnalBase {
 	@Autowired private DistrictOnlineDao districtOnlineDao;
 	@Autowired private CityOnlineDao cityOnlineDao;
 	@Autowired private ProvinceOnlineDao provinceOnlineDao;
-	
-	
+	@Autowired private CompanyOnlineDao companyOnlineDao;
+
 	//操作园区、省、城市日最值统计数据
 	@Autowired private ParkDateMDao parkDateMDao;
 	@Autowired private ProvinceDateMDao provinceDateMDao;
 	@Autowired private CityDateMDao cityDateMDao;
 	@Autowired private DistrictDateMDao districtDateMDao;
-	
+	@Autowired private CompanyDateMDao companyDateMDao;
+
 	//操作园区、省、城市月最值统计数据
 	@Autowired private ParkMonthMDao parkMonthMDao;
 	@Autowired private ProvinceMonthMDao provinceMonthMDao;
 	@Autowired private CityMonthMDao cityMonthMDao;
 	@Autowired private DistrictMonthMDao districtMonthMDao;
-	
+	//@Autowired private CompanyMonthMDao companyMonthMDao;
+
+
 	//查找企业和园区
 	@Autowired private PowerUserDao powerUserDao;
 	
@@ -418,7 +397,7 @@ public class DivisionLimitTimer extends LimitAnalBase {
 				}
 				//平均值
 				districtData.get(district).setMavg(districtData.get(district).getMavg().add(online.getP()));
-				
+
 				String totalKey = "district_" + district;
 				if(!total.containsKey(totalKey)){
 					total.put(totalKey, new BigDecimal(0));
@@ -426,12 +405,45 @@ public class DivisionLimitTimer extends LimitAnalBase {
 				total.put(totalKey,total.get(totalKey).add(new BigDecimal(1)));
 			}
 		}
-		
+
+		Map<String,CompanyDateM> companyData = new HashMap<String,CompanyDateM>();
+		List<CompanyOnline> companyOnlineList = companyOnlineDao.selectByDate(time);
+		for (CompanyOnline online : companyOnlineList) {
+			String company = online.getCompanyId().toString();
+			if(!companyData.containsKey(company)){
+				CompanyDateM pm = new CompanyDateM();
+				pm.setGetDate(Integer.valueOf(time));
+				pm.setCompanyId(online.getCompanyId());
+				companyData.put(company,pm);
+			}
+			if(online.getP() != null){
+				//最小值
+				if(isMin(companyData.get(company).getMmin(), online.getP(),false)){
+					companyData.get(company).setMinTime(online.getGetTime());
+					companyData.get(company).setMmin(online.getP());
+				}
+				//最大值
+				if(isMax(companyData.get(company).getMmax(), online.getP(),false)){
+					companyData.get(company).setMaxTime(online.getGetTime());
+					companyData.get(company).setMmax(online.getP());
+				}
+				//平均值
+				companyData.get(company).setMavg(companyData.get(company).getMavg().add(online.getP()));
+
+				String totalKey = "company_" + company;
+				if(!total.containsKey(totalKey)){
+					total.put(totalKey, new BigDecimal(0));
+				}
+				total.put(totalKey,total.get(totalKey).add(new BigDecimal(1)));
+			}
+		}
+
 		List<DistrictDateM> districtDateList = new ArrayList<DistrictDateM>();
 		List<CityDateM> cityDateList = new ArrayList<CityDateM>();
 		List<ProvinceDateM> provinceDateList = new ArrayList<ProvinceDateM>();
 		List<ParkDateM> parkDateList = new ArrayList<ParkDateM>();
-		
+		List<CompanyDateM> companyDateList = new ArrayList<CompanyDateM>();
+
 		for (Entry<String, BigDecimal> entry : total.entrySet()) {
 			if(entry.getKey().startsWith("park_")){
 				String key = entry.getKey().replace("park_","");
@@ -461,6 +473,13 @@ public class DivisionLimitTimer extends LimitAnalBase {
 					(districtData.get(key).getMmin() == null || districtData.get(key).getMmin().doubleValue() == 0))){
 					districtDateList.add(districtData.get(key));
 				}
+			}else if(entry.getKey().startsWith("company_")){
+				String key = entry.getKey().replace("company_","");
+				companyData.get(key).setMavg(companyData.get(key).getMavg().divide(entry.getValue(),BigDecimal.ROUND_UP));
+				if(!((companyData.get(key).getMmax() == null || companyData.get(key).getMmax().doubleValue() == 0) &&
+					(companyData.get(key).getMmin() == null || companyData.get(key).getMmin().doubleValue() == 0))){
+					companyDateList.add(companyData.get(key));
+				}
 			}
 			
 			if(parkDateList.size() > 0 && parkDateList.size() % 1000 == 0){
@@ -502,6 +521,16 @@ public class DivisionLimitTimer extends LimitAnalBase {
 					e.printStackTrace();
 				}
 			}
+
+			if(companyDateList.size() > 0 && companyDateList.size() % 1000 == 0){
+				try {
+					int count = companyDateMDao.replaceForBatch(companyDateList);
+					LOG.info("产生" + companyDateList.size() + "条公司最值统计数据,成功写入" + count + "条。");
+					companyDateList.clear();
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+			}
 			
 		}
 		
@@ -541,6 +570,16 @@ public class DivisionLimitTimer extends LimitAnalBase {
 				e.printStackTrace();
 			}
 		}
+
+		if(companyDateList.size() > 0){
+			try {
+				int count = companyDateMDao.replaceForBatch(companyDateList);
+				LOG.info("产生" + companyDateList.size() + "条公司最值统计数据,成功写入" + count + "条。");
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+
 	}
 	
 	

+ 1 - 2
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/resources/local/redis-host.properties

@@ -1,2 +1 @@
-#redis_ref_hosts=47.112.30.247:6399:Iwb-2017
-redis_ref_hosts=vbdsm-redis:6379
+redis_ref_hosts=192.168.0.104:6379:Iwb-2017

+ 2 - 1
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/resources/local/schedule.xml

@@ -55,9 +55,10 @@
     <timer>overWarnTimer.calcOnlineDataOverWarn</timer>
     <timer>h24Timer.h24Timer</timer>
 
+    <timer>overWarnTimer.calcOnlineDataOverWarn</timer>
     <!--    <timer>fgpTimer.monitorFgpForEvery</timer>-->
     <!--    <timer>fgpTimer.monitorFgpForLastDate</timer>-->
     <!--    <timer>fgpTimer.monitorFgpFor7DaysAgo</timer>-->
-    <timer>overWarnTimer.calcOnlineDataOverWarn</timer>
+
 
 </timers>