You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
5.6 KiB
Java
113 lines
5.6 KiB
Java
package com.nmgs.test;
|
|
|
|
import cn.hutool.json.JSONArray;
|
|
import com.alibaba.fastjson2.JSON;
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.nmgs.entity.Detail;
|
|
import com.nmgs.entity.DivdataTestSta;
|
|
import com.nmgs.entity.RootObject;
|
|
import com.nmgs.util.DBUtil;
|
|
import com.nmgs.util.DateTimeUtil;
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
import org.springframework.jdbc.core.RowMapper;
|
|
|
|
import java.sql.Date;
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
import java.sql.Timestamp;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* @author: shuguang
|
|
* @date: 2024年09月02日 14:41
|
|
* @description:
|
|
*/
|
|
public class Test0902 {
|
|
|
|
public static void main(String[] args) {
|
|
final List<Integer> RoadNoList = Arrays.asList(10,15,11,20,24,25,26,27,28,37,38,39,42,43,46,48,49,50,53,54,60,61,62,63,64,65,66,67,81,84,85,86,87,88,89,90);
|
|
try {
|
|
for (int i = 0; i < 760; i++) {
|
|
//CLASSDATE,FEEUNITID,VEHICLETYPE,FEE,CARCOUNT LENGTH DIVDATA_TEST_STA
|
|
//String sql = "select * from divdata_test where rownum=1";
|
|
String sql = "select ID,CLASSDATE,DIVDETAIL,VEHICLETYPE,STATUS from divdata_test where rownum<=10000 and status=0";
|
|
JdbcTemplate jdbcTemplate = new JdbcTemplate(new DBUtil().Hikar_DataSource_GT());
|
|
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
|
|
System.out.println("第"+(i+1)+"次处理,查询的集合条数" + list.size());
|
|
int count = 0;
|
|
if (list.size() > 0) {
|
|
for (Map<String, Object> map : list) {
|
|
String id = map.get("ID").toString();
|
|
String divdetail = map.get("DIVDETAIL").toString();
|
|
Timestamp classdate = (Timestamp) map.get("CLASSDATE");
|
|
Date date = new Date(classdate.getTime());
|
|
String formateString = DateTimeUtil.getFormateString(date, "yyyy-MM-dd");
|
|
int vehicletype = Integer.parseInt(map.get("VEHICLETYPE").toString());
|
|
String feeunitid = "";
|
|
long fee = 0;
|
|
long length = 0;
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
RootObject rootObject = objectMapper.readValue(divdetail, RootObject.class);
|
|
List<Detail> details = rootObject.getDetails();
|
|
for (Detail detail : details) {
|
|
if (RoadNoList.contains(detail.getRoadno())) {
|
|
feeunitid = detail.getFeeunitid();
|
|
if("0".equals(feeunitid) ){
|
|
length=0;
|
|
fee=0;
|
|
|
|
}else {
|
|
length = jdbcTemplate.queryForObject("select length from nmgmpayadmin.FEEUNIT_TABLE where ID= ?", new Object[]{feeunitid}, Long.class);
|
|
fee = detail.getFee();
|
|
}
|
|
// 定义查询语句
|
|
String querySql = "SELECT FEE, LENGTH FROM DIVDATA_TEST_STA WHERE CLASSDATE = TO_DATE(?, 'yyyy-MM-dd') AND VEHICLETYPE = ?";
|
|
List<DivdataTestSta> results = jdbcTemplate.query(
|
|
querySql,
|
|
new Object[]{formateString, vehicletype},
|
|
(rs, rowNum) -> {
|
|
DivdataTestSta divdataTestSta = new DivdataTestSta();
|
|
divdataTestSta.setFEE(rs.getLong("FEE"));
|
|
divdataTestSta.setLENGTH(rs.getLong("LENGTH"));
|
|
return divdataTestSta;
|
|
}
|
|
);
|
|
if (!results.isEmpty()) {
|
|
// 更新记录
|
|
DivdataTestSta divdataTestSta = results.get(0);
|
|
long updatedFee = divdataTestSta.getFEE() + fee;
|
|
long updatedLength = divdataTestSta.getLENGTH() + length;
|
|
String updateSql = "UPDATE DIVDATA_TEST_STA SET FEE = ?, LENGTH = ?, CARCOUNT = CARCOUNT + 1 WHERE VEHICLETYPE = ? AND CLASSDATE = TO_DATE(?, 'yyyy-MM-dd')";
|
|
jdbcTemplate.update(updateSql, new Object[]{updatedFee, updatedLength, vehicletype, formateString});
|
|
} else {
|
|
// 插入新记录
|
|
String insertSql = "INSERT INTO DIVDATA_TEST_STA (CLASSDATE, VEHICLETYPE, FEE, LENGTH, CARCOUNT) VALUES (TO_DATE(?, 'yyyy-MM-dd'), ?, ?, ?, 1)";
|
|
jdbcTemplate.update(insertSql, new Object[]{formateString, vehicletype, fee, length});
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
count++;
|
|
String updateSql = "UPDATE DIVDATA_TEST SET STATUS = 1 WHERE ID = ? ";
|
|
jdbcTemplate.update(updateSql, new Object[]{id});
|
|
System.out.println("第"+(i+1)+"次处理,已处理条数" + count);
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
|
|
}
|