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

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();
}
}
}