package com.bean.freezer;
import static org.junit.Assert.fail;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.bean.gnet.UUIDGenerator;
import com.common.SouthOrder;
import com.dao.recharge.RechargeDao;
import com.utils.HttpClientUtils;
import base.bean.Fbean;
import common.Logger;
/**
* @describtion: 插入设备日用量数据工具类
* @author robin 2020年6月23日 上午11:11:26
*
*/
public class FreezerGenerator {
public static void main(String[] args) {
// 数据手动连接6步曲
System.out.print("数据库手动连接");
Connection conn = getConnection();
Logger logger = Logger.getLogger(FreezerGenerator.class);
List<Date> dateTime = getDateTime();
// 1.调取用户登录接口
String loginUrl = "https://yun.sinocold.net:5001/api/ExternalApi/login?account=xx&pwd=yy";
String projectUrl = "https://yun.sinocold.net:5001/api/ExternalApi/GetPr?";
String loginInfo = HttpClientUtils.doGet(loginUrl);
JSONObject loginObject = JSONObject.parseObject(loginInfo);
if (!loginObject.getString("Code").equals("200") && loginObject.getString("Message").equals("成功")) {
System.out.println("接口调用失败!");
} else {
logger.info("登录成功,开始处理业务逻辑!");
long startTime = System.currentTimeMillis();
if (loginObject != null) {
JSONObject data = loginObject.getJSONObject("Data");
String token = data.getString("token");
JSONArray projectData = data.getJSONArray("ProjectData");
for (int j = 0; j < projectData.size(); j++) {
JSONObject js = projectData.getJSONObject(j);
String companyId = js.getString("CompanyId");
// String companyName = js.getString("CompanyName");
String projectId = js.getString("ProjectId");
String realMonth=null;
// 开关作用,定义在循环外层
boolean flag = true;
// 2.调用获取项目能耗接口
for (Date date : dateTime) { // System.out.println(new
String day = new SimpleDateFormat("yyyy-MM-dd").format(date);
String projectEnergyUrl = projectUrl + "companyId=" + companyId + "&projectId=" + projectId
+ "&startDate=" + day + "&subentryId=1";// +"&Authorization=Bearer "+token
String coolDevice = HttpClientUtils.doGetByToken(projectEnergyUrl, token);
String month = day.substring(0, 7);// 2020-06 2020-06-22 从昨天开始
String everyDay = day.substring(8, 10);// 22 2020-06-22 从昨天开始
String dday = "D" + everyDay;
System.out.println("查询日期:" + day + "--------->" + coolDevice + "\t");
JSONObject deviceObject = JSONObject.parseObject(coolDevice);
if (deviceObject.getString("Code").equals("200")&& deviceObject.getString("Message").equals("成功"))
{
JSONObject dataInfo = deviceObject.getJSONObject("Data");
JSONObject innerData = dataInfo.getJSONObject("Data");
JSONArray lastDeviceInfos = innerData.getJSONArray("独立租户");
//第二次外层循环flag=false ,每个循环执行 40次
if(!flag) {
for (int i = 0; i < lastDeviceInfos.size(); i++) {
JSONObject singleDevice = lastDeviceInfos.getJSONObject(i);
String id = singleDevice.getString("Id");
String value = singleDevice.getString("value");
// 方法2:JVM直接跟数据库通讯
try {
String sql2="update Freezer_DayNumber set "+dday+"=? where UUID=? and MON_MON=?";
PreparedStatement statement2 = conn.prepareStatement(sql2);
statement2.setString(1,value);
statement2.setString(2,id);
statement2.setString(3,month);
statement2.executeUpdate();
logger.info("sql语句2-------------->"+sql2);
} catch (SQLException e) {
logger.info("数据库连接异常!");
e.printStackTrace();
}
}//for循环结尾括号
//如果月份相同,则为false
}else {
// lastDeviceInfos 循环遍历冷柜设备信息 内层for循环执行 40次(因为40个冷柜设备),外层日期循环执行一次
for (int i = 0; i < lastDeviceInfos.size(); i++) {
JSONObject singleDevice = lastDeviceInfos.getJSONObject(i);
String id = singleDevice.getString("Id");
String value = singleDevice.getString("value");
// System.out.println(month+"/"+id+"/"+value+"\t");
// String name = singleDevice.getString("name");//可以不插入表
// 数据库操作 coolDevice信息,最终存入数据库表
String uuid = UUIDGenerator.generate();
// fb.setA1(id);
// fb.setA2(value);
// fb.setA3(dday);
// fb.setA4(month);
// try {
// //插入表Freezer_DayNumber信息
// rechargeDao.addFreezerDayNumber(fb);
// } catch (Exception e) {
// e.printStackTrace();
// }
// 方法2:JVM直接跟数据库通讯
try {
// 月份变化的时候执行插入操作
String sql = "insert into Freezer_DayNumber(SY_ID,UUID,MON_MON," + dday
+ ") values (?,?,?,?)";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, uuid);
statement.setString(2, id);
statement.setString(3, month);
statement.setString(4, value);
statement.executeUpdate();
logger.info("sql语句1-------------->" + sql);
// //月份和上一次循环一样的话就执行更新操作
// String sql2="update Freezer_DayNumber set "+dday+"=? where UUID=?";
// PreparedStatement statement2 = conn.prepareStatement(sql2);
// statement2.setString(1,value);
// statement2.setString(2,id);
// statement2.executeUpdate();
// logger.info("sql语句2-------------->"+sql2);
// }else {
// //月分变化的时候执行插入操作
// String sql3="insert into Freezer_DayNumber(SY_ID,UUID,MON_MON,"+dday+") values (?,?,?,?)";
// PreparedStatement statement3 = conn.prepareStatement(sql3);
// statement3.setString(1,uuid);
// statement3.setString(2,id);
// statement3.setString(3,month);
// statement3.setString(4,value);
// statement3.executeUpdate();
// logger.info("sql语句3-------------->"+sql3);
// }
/*
* 数据库查询语句没问题 String sql="select * from rooms_man"; ResultSet resultSet =
* statement.executeQuery(sql); while (resultSet.next()) { String rm_id =
* resultSet.getString("rm_id"); logger.info(rm_id); }
*/
} catch (SQLException e) {
logger.info("数据库连接异常!");
e.printStackTrace();
}
}//for循环结尾括号
}//else结尾 40次循环遍历过程 结束月
// realMonth = day.substring(0, 7);
//realMonth是结束月、month是开始月
if (everyDay.equals("01")) {
flag = true;
}else {
flag =false;
}
}//if结尾
try {
System.out.println("开始睡眠了,等待10秒");
// 接口调用不能太频繁
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} //以上是双层for循环结尾
}
long endTime = System.currentTimeMillis();
logger.info("经历了:" + (endTime - startTime) / 1000 / 60 + " 分钟");
}
}
}
private static Connection getConnection() {
String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=JDY";
String userName = "sa";
String password = "11";
try {
// 1.注册驱动
Class.forName(driverName);
// 2.创建连接对象
Connection connection = DriverManager.getConnection(url, userName, password);
// String sql = "select * from rooms_man";
// 3-1.创建数据库预处理对象
// PreparedStatement psStatement = connection.prepareStatement(sql);
// psStatement.setXxx(int index,Object val);
// psStatement.executeQuery();
// 3-2.创建数据库语句对象
// Statement statement = connection.createStatement();
// 4.数据库查询
// statement.executeUpdate(sql);
// 5.遍历结果集
// 6.关闭异常
return connection;
} catch (Exception e) {
System.out.println("数据库连接失败!");
e.printStackTrace();
}
return null;
}
private static List<Date> getDateTime() {
// 存日期的数组
List<Date> dateList = new ArrayList<Date>();
Calendar cal = Calendar.getInstance();
Date subTime = null;
Date parseBeginTime = null;
String beginTime = "2020-03-28";
try {
parseBeginTime = new SimpleDateFormat("yyyy-MM-dd").parse(beginTime);
} catch (ParseException e1) {
e1.printStackTrace();
}
do {
try {
// 获取当前日期的对应天数
int day = cal.get(Calendar.DAY_OF_MONTH);
// 天数减一
cal.set(Calendar.DAY_OF_MONTH, day - 1);
// 获取昨天日期
subTime = cal.getTime();
dateList.add(subTime);
} catch (Exception e) {
e.printStackTrace();
}
} while (!new SimpleDateFormat("yyyy-MM-dd").format(subTime)
.equals(new SimpleDateFormat("yyyy-MM-dd").format(parseBeginTime)));
return dateList;
}
}
历经15分钟,迁移数据OK
表中数据由无变有