2025年09月28日 1.0.2 增加ETC 门架计费扣费交易数据上传接口/DCPC/uploadEtcGantryPassData

main
gaoshuguang 2 months ago
parent d6ab1278da
commit a82f2bca47

@ -33,6 +33,7 @@ public class CorsConfig implements WebMvcConfigurer {
// 是否允许证书
.excludePathPatterns(
"/test/**",
"/DCPC/**",
"/ZDYH/**",
"/ReceptionMobileWeighInfo",
"/laneRequest/forward",

@ -0,0 +1,40 @@
package com.nmggs.query.common.config;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
import java.sql.*;
/**
* @author: shuguang
* @date: 20250928 9:42
* @description: Long VARCHAR2
*/
@MappedTypes(Long.class)
public class LongStringTypeHandler extends BaseTypeHandler<Long> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Long parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, parameter.toString()); // 入库转字符串
}
@Override
public Long getNullableResult(ResultSet rs, String columnName) throws SQLException {
String val = rs.getString(columnName);
return val == null ? null : Long.valueOf(val); // 出库转 Long
}
@Override
public Long getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String val = rs.getString(columnIndex);
return val == null ? null : Long.valueOf(val);
}
@Override
public Long getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String val = cs.getString(columnIndex);
return val == null ? null : Long.valueOf(val);
}
}

@ -21,6 +21,7 @@ public class Constant {
public static final String YYYYMMDDHH = "yyyyMMddHH";
public static final String YYMMDD = "yyMMdd";
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
public static final String YYYY_MM_DD_T_HH_MM_SS = "yyyy-MM-ddTHH:mm:ss";
public static final String YYYY_MM_DD = "yyyy-MM-dd";
public static final String APP_KEY = "2Z6hOpl5kNYWAzr8PeA5";

@ -0,0 +1,27 @@
package com.nmggs.query.common.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
/**
* @author: shuguang
* @date: 20250925 14:28
* @description:
*/
@Slf4j
public class JsonUtil {
public static String conversionJson(Map<String, Object> map, String uuid) {
String result = "";
// 使用ObjectMapper将List<Map<String, Object>>转换为JSON字符串
com.fasterxml.jackson.databind.ObjectMapper objectMapper = new ObjectMapper();
try {
result = objectMapper.writeValueAsString(map);
} catch (JsonProcessingException e) {
log.info("[uuid:" + uuid + "]-转换json数据报错" + e.getMessage());
}
return result;
}
}

@ -22,6 +22,11 @@ public class AddInterfaceController {
private AddInterfaceService addInterfaceService;
@PostMapping("/DCPC/uploadEtcGantryPassData")
public String uploadEtcGantryPassData(@RequestBody Map<String, Object> params) {
String uuid = UuidUtil.getUuid();
return addInterfaceService.uploadEtcGantryPassData(params, uuid);
}
@PostMapping("/baseinfo/QueryExStationTrans")
public String QueryExStationTrans(@RequestBody Map<String, Object> params) {
String uuid = UuidUtil.getUuid();

@ -0,0 +1,14 @@
package com.nmggs.query.entity;
import lombok.Data;
/**
* @author: shuguang
* @date: 20250926 10:16
* @description:
*/
@Data
public class DCPCFailList {
private String tradeId;
private String info;
}

@ -0,0 +1,20 @@
package com.nmggs.query.entity;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
/**
* @author: shuguang
* @date: 20250926 9:35
* @description:
*/
@Data
public class DCPCUploadGantryData {
@JsonProperty("msgId")
private String msgId;
@JsonProperty("tradeInfoList")
private List<DCPCGantryPass> tradeInfoList;
}

@ -0,0 +1,19 @@
package com.nmggs.query.entity;
import lombok.Data;
import java.util.List;
/**
* @author: shuguang
* @date: 20250926 10:14
* @description:
*/
@Data
public class DCPCUploadReturnData {
private Integer subCode;
private String info;
private String receiveTime;
private Integer successCount;
private List<DCPCFailList> failList;
}

@ -0,0 +1,20 @@
package com.nmggs.query.entity;
import lombok.Data;
/**
* @author: shuguang
* @date: 20250925 14:30
* @description:
*/
@Data
public class RequestExSta {
private String VehiclePlate;
private String dateStart;
private String dateEnd;
private String authKey;
private String md5;
}

@ -0,0 +1,20 @@
package com.nmggs.query.entity;
import lombok.Data;
/**
* @author: shuguang
* @date: 20250925 14:30
* @description:
*/
@Data
public class RequestMinFee {
private String version;
private Integer subcomno;
private Integer stano;
private String authKey;
private String md5;
}

@ -0,0 +1,18 @@
package com.nmggs.query.entity;
import lombok.Data;
/**
* @author: shuguang
* @date: 20250925 14:30
* @description:
*/
@Data
public class RequestParam {
private String fileName;
private String authKey;
private String md5;
}

@ -0,0 +1,18 @@
package com.nmggs.query.entity;
import lombok.Data;
/**
* @author: shuguang
* @date: 20250925 14:30
* @description:
*/
@Data
public class RequestVersion {
private Integer version;
private String authKey;
private String md5;
}

@ -0,0 +1,25 @@
package com.nmggs.query.entity.fx;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* @author: shuguang
* @date: 20250918 17:51
* @description:
*/
@Data
@TableName("zdyh_equipment_statistics")
public class EquipmentStatistics {
@TableField("classdate")
private Date classdate;
@TableField("equipmentid")
private Integer equipmentid;
@TableField("departmentno")
private Integer departmentno;
@TableField("state")
private Integer state;
}

@ -0,0 +1,14 @@
package com.nmggs.query.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nmggs.query.entity.DCPCGantryPass;
import org.apache.ibatis.annotations.Mapper;
/**
* @author: shuguang
* @date: 20250926 10:00
* @description:
*/
@Mapper
public interface DCPCGantryPassMapper extends BaseMapper<DCPCGantryPass> {
}

@ -0,0 +1,15 @@
package com.nmggs.query.mapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.Map;
/**
* @author: shuguang
* @date: 20250926 11:28
* @description:
*/
@Mapper
public interface GantryTableMapper {
Map<String, Object> selectByGantryId(String gantryId);
}

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--你的mapper路径-->
<mapper namespace="com.nmggs.query.mapper.GantryTableMapper">
<select id="selectByGantryId" resultType="java.util.Map">
select * from GANTRY_TABLE where ID = '#{gantryId}'
</select>
</mapper>

@ -0,0 +1,16 @@
package com.nmggs.query.mapper.fx;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nmggs.query.entity.fx.EquipmentStatistics;
import org.apache.ibatis.annotations.Mapper;
/**
* @author: shuguang
* @date: 20250918 17:54
* @description:
*/
@Mapper
@DS("fx")
public interface EquipmentStatisticsMapper extends BaseMapper<EquipmentStatistics> {
}

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nmggs.query.mapper.fx.EquipmentStatisticsMapper">
</mapper>

@ -49,4 +49,15 @@ public interface AddInterfaceService {
* @date 2025-04-27 9:53
*/
String QueryExStationTrans(Map<String, Object> params, String uuid);
/**
* ETC
*
* @param params
* @param uuid uuid
* @return java.lang.String
* @author shuguang
* @date 2025-04-27 9:53
*/
String uploadEtcGantryPassData(Map<String, Object> params, String uuid);
}

@ -1,22 +1,36 @@
package com.nmggs.query.service.impl;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.nmggs.query.common.config.ExecutionTimeLogger;
import com.nmggs.query.common.emnu.Constant;
import com.nmggs.query.common.emnu.MessageEnum;
import com.nmggs.query.common.exception.PPException;
import com.nmggs.query.common.utils.CheckUtils;
import com.nmggs.query.common.utils.DateTimeUtil;
import com.nmggs.query.common.utils.FileUtil;
import com.nmggs.query.common.utils.JsonUtil;
import com.nmggs.query.common.utils.MD5Util;
import com.nmggs.query.common.utils.PropertiesUtil;
import com.nmggs.query.common.utils.SM4Utils;
import com.nmggs.query.entity.DCPCFailList;
import com.nmggs.query.entity.DCPCGantryPass;
import com.nmggs.query.entity.DCPCUploadGantryData;
import com.nmggs.query.entity.DCPCUploadReturnData;
import com.nmggs.query.entity.RequestExSta;
import com.nmggs.query.entity.RequestMinFee;
import com.nmggs.query.entity.RequestVersion;
import com.nmggs.query.entity.ResData;
import com.nmggs.query.mapper.AddInterfaceMapper;
import com.nmggs.query.mapper.DCPCGantryPassMapper;
import com.nmggs.query.mapper.GantryTableMapper;
import com.nmggs.query.service.AddInterfaceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
@ -29,6 +43,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -45,6 +60,10 @@ public class AddInterfaceServiceImpl implements AddInterfaceService {
@Resource
private AddInterfaceMapper addInterfaceMapper;
@Resource
private DCPCGantryPassMapper dcpcGantryPassMapper;
@Resource
private GantryTableMapper gantryTableMapper;
/**
*
@ -59,11 +78,25 @@ public class AddInterfaceServiceImpl implements AddInterfaceService {
@ExecutionTimeLogger
public String gantryfee(Map<String, Object> params, String uuid) {
log.info("[uuid:" + uuid + "]-开始通过接口获取收费门架费率,参数为" + params);
// 鉴权码
String authKey = PropertiesUtil.getValue("authKey");
int version = (Integer) params.get("version");
String reqAuthKey = (String) params.get("authKey");
String reqMd5 = (String) params.get("md5");
String dataJson = JsonUtil.conversionJson(params, uuid);
// 解析响应数据
ResData resData = JSON.parseObject(dataJson, ResData.class);
// 提取密钥和加密数据
String returnedKey = resData.getKey();
String encryptedData = resData.getData();
// 解密数据
String decryptedData = SM4Utils.sm4Decrypt(encryptedData, SM4Utils.sm4Decrypt(returnedKey, authKey));
log.info("[uuid:" + uuid + "]-解密后的数据{}", decryptedData);
RequestVersion requestParam = JSON.parseObject(decryptedData, RequestVersion.class);
int version = requestParam.getVersion();
String reqAuthKey = requestParam.getAuthKey();
String reqMd5 = requestParam.getMd5();
String verifyMd5 = MD5Util.md5(version + authKey);
log.info("[uuid:" + uuid + "]-鉴权码为:" + authKey + ",请求鉴权码为:" + reqAuthKey + ",请求md5为" + reqMd5 + ",验证md5为" + verifyMd5);
CheckUtils.checkAddParams(authKey, reqAuthKey, reqMd5, verifyMd5);
@ -123,11 +156,23 @@ public class AddInterfaceServiceImpl implements AddInterfaceService {
@ExecutionTimeLogger
public String gantryinfo(Map<String, Object> params, String uuid) {
log.info("[uuid:" + uuid + "]-开始通过接口获取连通关系数据,参数为" + params);
//鉴权码
String authKey = PropertiesUtil.getValue("authKey");
int version = (Integer) params.get("version");
String reqAuthKey = (String) params.get("authKey");
String reqMd5 = (String) params.get("md5");
String dataJson = JsonUtil.conversionJson(params, uuid);
// 解析响应数据
ResData resData = JSON.parseObject(dataJson, ResData.class);
// 提取密钥和加密数据
String returnedKey = resData.getKey();
String encryptedData = resData.getData();
// 解密数据
String decryptedData = SM4Utils.sm4Decrypt(encryptedData, SM4Utils.sm4Decrypt(returnedKey, authKey));
log.info("[uuid:" + uuid + "]-解密后的数据{}", decryptedData);
RequestVersion requestParam = JSON.parseObject(decryptedData, RequestVersion.class);
int version = requestParam.getVersion();
String reqAuthKey = requestParam.getAuthKey();
String reqMd5 = requestParam.getMd5();
String verifyMd5 = MD5Util.md5(version + authKey);
log.info("[uuid:" + uuid + "]-鉴权码为:" + authKey + ",请求鉴权码为:" + reqAuthKey + ",请求md5为" + reqMd5 + ",验证md5为" + verifyMd5);
CheckUtils.checkAddParams(authKey, reqAuthKey, reqMd5, verifyMd5);
@ -163,13 +208,26 @@ public class AddInterfaceServiceImpl implements AddInterfaceService {
@ExecutionTimeLogger
public void minPath(Map<String, Object> params, String uuid, HttpServletResponse response) {
log.info("[uuid:" + uuid + "]-开始通过接口根据参数下载最小费额文件,参数为" + params);
String version = (String) params.get("version");
int subcomno = (Integer) params.get("subcomno");
int stano = (Integer) params.get("stano");
//鉴权码
String authKey = PropertiesUtil.getValue("authKey");
String reqAuthKey = (String) params.get("authKey");
String reqMd5 = (String) params.get("md5");
String dataJson = JsonUtil.conversionJson(params, uuid);
// 解析响应数据
ResData resData = JSON.parseObject(dataJson, ResData.class);
// 提取密钥和加密数据
String returnedKey = resData.getKey();
String encryptedData = resData.getData();
// 解密数据
String decryptedData = SM4Utils.sm4Decrypt(encryptedData, SM4Utils.sm4Decrypt(returnedKey, authKey));
log.info("[uuid:" + uuid + "]-解密后的数据{}", decryptedData);
RequestMinFee requestParam = JSON.parseObject(decryptedData, RequestMinFee.class);
String version = requestParam.getVersion();
int subcomno = requestParam.getSubcomno();
int stano = requestParam.getStano();
String reqAuthKey = requestParam.getAuthKey();
String reqMd5 = requestParam.getMd5();
String verifyMd5 = MD5Util.md5(version + subcomno + stano + authKey);
log.info("[uuid:" + uuid + "]-鉴权码为:" + authKey + ",请求鉴权码为:" + reqAuthKey + ",请求md5为" + reqMd5 + ",验证md5为" + verifyMd5);
CheckUtils.checkAddParams(authKey, reqAuthKey, reqMd5, verifyMd5);
@ -252,13 +310,23 @@ public class AddInterfaceServiceImpl implements AddInterfaceService {
public String QueryExStationTrans(Map<String, Object> params, String uuid) {
String result;
log.info("[uuid:" + uuid + "]-开始通过接口获取出口交易数据,参数为" + params);
String vehiclePlate = (String) params.get("VehiclePlate");
String dateStart = (String) params.get("dateStart");
String dateEnd = (String) params.get("dateEnd");
//鉴权码
String authKey = PropertiesUtil.getValue("authKey");
String reqAuthKey = (String) params.get("authKey");
String reqMd5 = (String) params.get("md5");
String dataJson = JsonUtil.conversionJson(params, uuid);
// 解析响应数据
ResData resData = JSON.parseObject(dataJson, ResData.class);
// 提取密钥和加密数据
String returnedKey = resData.getKey();
String encryptedData = resData.getData();
// 解密数据
String decryptedData = SM4Utils.sm4Decrypt(encryptedData, SM4Utils.sm4Decrypt(returnedKey, authKey));
log.info("[uuid:" + uuid + "]-解密后的数据{}", decryptedData);
RequestExSta requestParam = JSON.parseObject(decryptedData, RequestExSta.class);
String vehiclePlate = requestParam.getVehiclePlate();
String dateStart = requestParam.getDateStart();
String dateEnd = requestParam.getDateEnd();
String reqAuthKey = requestParam.getAuthKey();
String reqMd5 = requestParam.getMd5();
String verifyMd5 = MD5Util.md5(vehiclePlate + dateStart + dateEnd + authKey);
log.info("[uuid:" + uuid + "]-鉴权码为:" + authKey + ",请求鉴权码为:" + reqAuthKey + ",请求md5为" + reqMd5 + ",验证md5为" + verifyMd5);
CheckUtils.checkAddParams(authKey, reqAuthKey, reqMd5, verifyMd5);
@ -274,6 +342,90 @@ public class AddInterfaceServiceImpl implements AddInterfaceService {
return result;
}
/**
* ETC
*
* @param params
* @param uuid uuid
* @return java.lang.String
* @author shuguang
* @date 2025-04-27 9:53
*/
@Override
@Transactional(rollbackFor = Exception.class)
@ExecutionTimeLogger
public String uploadEtcGantryPassData(Map<String, Object> params, String uuid) {
String result;
log.info("[uuid:" + uuid + "]-开始通过接口接收DCPC-ETC门架计费扣费交易数据参数为" + params);
DCPCUploadReturnData returnData = new DCPCUploadReturnData();
try {
String authKey = PropertiesUtil.getValue("authKey");
String dataJson = JsonUtil.conversionJson(params, uuid);
// 解析响应数据
ResData resData = JSON.parseObject(dataJson, ResData.class);
// 提取密钥和加密数据
String returnedKey = resData.getKey();
String encryptedData = resData.getData();
// 解密数据
String decryptedData = SM4Utils.sm4Decrypt(encryptedData, SM4Utils.sm4Decrypt(returnedKey, authKey));
log.info("[uuid:" + uuid + "]-解密后的数据{}", decryptedData);
DCPCUploadGantryData dcpcUploadGantryData = JSON.parseObject(decryptedData, DCPCUploadGantryData.class);
List<DCPCGantryPass> tradeInfoList = dcpcUploadGantryData.getTradeInfoList();
returnData.setReceiveTime(DateTimeUtil.getFormateString(new Date(), Constant.YYYY_MM_DD_T_HH_MM_SS));
int successCount = 0;
if (tradeInfoList != null && tradeInfoList.size() > 0) {
if (tradeInfoList.size() > 100) {
returnData.setSubCode(998);
returnData.setInfo("业务数组长度超出100");
} else {
for (DCPCGantryPass pass : tradeInfoList) {
QueryWrapper<DCPCGantryPass> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("TRADEID", pass.getTradeId());
boolean exists = dcpcGantryPassMapper.exists(queryWrapper);
if (!exists) {
//入库的时候STANO、ROADNO需要查询GANTRY_TABLE表获取
Map<String, Object> gantryTable = gantryTableMapper.selectByGantryId(pass.getGantryId());
if (gantryTable != null) {
pass.setStano(Integer.valueOf(gantryTable.get("STANO").toString()));
pass.setRoadno(Integer.valueOf(gantryTable.get("ROADNO").toString()));
dcpcGantryPassMapper.insert(pass);
successCount++;
}else {
DCPCFailList failList = new DCPCFailList();
failList.setTradeId(pass.getTradeId());
failList.setInfo(pass.getGantryId()+"门架信息不存在");
returnData.getFailList().add(failList);
}
} else {
//重复记录不做入库
DCPCFailList failList = new DCPCFailList();
failList.setTradeId(pass.getTradeId());
failList.setInfo("主键重复记录不做入库");
returnData.getFailList().add(failList);
}
}
returnData.setSubCode(200);
returnData.setInfo("DCPC-ETC门架计费扣费交易数据接收成功");
returnData.setSuccessCount(successCount);
}
} else {
returnData.setSubCode(401);
returnData.setInfo("业务数据为空");
}
} catch (Exception e) {
log.error("[uuid:" + uuid + "]-DCPC-ETC门架计费扣费交易数据接收异常" + e.getMessage(), e);
returnData.setSubCode(501);
returnData.setInfo("DCPC-ETC门架计费扣费交易数据接收异常");
}
String jsonResult = JSON.toJSONString(returnData);
//对数据进行加密返回并携带加密密钥
result = encryptData(jsonResult, uuid);
log.info("[uuid:{}]-接收DCPC-ETC门架计费扣费交易数据处理完成", uuid);
return result;
}
private String conversionJson(List<Map<String, Object>> list, String uuid) {
String result = "";

@ -1,12 +1,17 @@
package com.nmggs.query.service.impl;
import com.alibaba.fastjson2.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.nmggs.query.common.config.ExecutionTimeLogger;
import com.nmggs.query.common.emnu.MessageEnum;
import com.nmggs.query.common.exception.PPException;
import com.nmggs.query.common.utils.CheckUtils;
import com.nmggs.query.common.utils.JsonUtil;
import com.nmggs.query.common.utils.PropertiesUtil;
import com.nmggs.query.common.utils.SM4Utils;
import com.nmggs.query.entity.RequestParam;
import com.nmggs.query.entity.ResData;
import com.nmggs.query.mapper.InterfaceQueryMapper;
import com.nmggs.query.service.GetDataService;
import lombok.extern.slf4j.Slf4j;
@ -40,11 +45,22 @@ public class GetDataServiceImpl implements GetDataService {
@ExecutionTimeLogger
public String getData(Map<String, Object> params, String uuid) {
log.info("[uuid:" + uuid + "]-开始通过接口获取基础信息,参数为"+params);
//鉴权码
String authKey = PropertiesUtil.getValue("authKey");
String fileName = (String) params.get("fileName");
String reqAuthKey = (String) params.get("authKey");
String reqMd5 = (String) params.get("md5");
String dataJson = JsonUtil.conversionJson(params, uuid);
// 解析响应数据
ResData resData = JSON.parseObject(dataJson, ResData.class);
// 提取密钥和加密数据
String returnedKey = resData.getKey();
String encryptedData = resData.getData();
// 解密数据
String decryptedData = SM4Utils.sm4Decrypt(encryptedData, SM4Utils.sm4Decrypt(returnedKey, authKey));
log.info("[uuid:" + uuid + "]-解密后的数据{}", decryptedData);
RequestParam requestParam = JSON.parseObject(decryptedData, RequestParam.class);
String fileName = requestParam.getFileName();
String reqAuthKey = requestParam.getAuthKey();
String reqMd5 = requestParam.getMd5();
CheckUtils.checkParams(authKey, reqAuthKey, reqMd5, fileName);
List<Map<String, Object>> list;
String result = null;
@ -53,7 +69,7 @@ public class GetDataServiceImpl implements GetDataService {
log.info("[uuid:" + uuid + "]-当前获取的是收费公路业主信息");
list = interfaceQueryMapper.getBasicLinkOwnerDownloadReq15();
//收费公路信息
} else if (fileName.contains("BASIC_TOLLROADDOWNLOAD_REdisplayedSideImageQ_15")) {
} else if (fileName.contains("BASIC_TOLLROADDOWNLOAD_REQ_15")) {
log.info("[uuid:" + uuid + "]-当前获取的是收费公路信息");
list = interfaceQueryMapper.getBasicTollRoadDownloadReq15();
//收费路段信息

@ -7,13 +7,16 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.nmggs.query.common.config.ExecutionTimeLogger;
import com.nmggs.query.common.exception.Result;
import com.nmggs.query.common.utils.DateTimeUtil;
import com.nmggs.query.common.utils.PropertiesUtil;
import com.nmggs.query.common.utils.SM4Utils;
import com.nmggs.query.entity.ResData;
import com.nmggs.query.entity.fx.EquipmentInfo;
import com.nmggs.query.entity.fx.EquipmentStatistics;
import com.nmggs.query.entity.fx.UseInfo;
import com.nmggs.query.entity.fx.WarningInfo;
import com.nmggs.query.mapper.fx.EquipmentInfoMapper;
import com.nmggs.query.mapper.fx.EquipmentStatisticsMapper;
import com.nmggs.query.mapper.fx.UseInfoMapper;
import com.nmggs.query.mapper.fx.WarningInfoMapper;
import com.nmggs.query.service.ZDYHDataService;
@ -39,6 +42,8 @@ public class ZDYHDataServiceImpl implements ZDYHDataService {
private UseInfoMapper useInfoMapper;
@Resource
private WarningInfoMapper warningInfoMapper;
@Resource
private EquipmentStatisticsMapper equipmentStatisticsMapper;
/**
*
@ -67,6 +72,9 @@ public class ZDYHDataServiceImpl implements ZDYHDataService {
List<EquipmentInfo> equipmentInfos = JSON.parseArray(decryptedData, EquipmentInfo.class);
int updateCount = 0;
int insertCount = 0;
int updateCount2 = 0;
int insertCount2 = 0;
Date classdate = DateTimeUtil.getDateByDay(new Date());
if (equipmentInfos != null && equipmentInfos.size() > 0) {
for (EquipmentInfo info : equipmentInfos) {
Integer equipmentid = info.getEquipmentid();
@ -83,11 +91,27 @@ public class ZDYHDataServiceImpl implements ZDYHDataService {
equipmentInfoMapper.insert(info);
insertCount++;
}
QueryWrapper<EquipmentStatistics> statisticsQueryWrapper = new QueryWrapper<>();
statisticsQueryWrapper.eq("classdate", classdate)
.eq("equipmentid", equipmentid);
EquipmentStatistics statistics = new EquipmentStatistics();
statistics.setClassdate(classdate);
statistics.setEquipmentid(equipmentid);
statistics.setState(info.getState());
statistics.setDepartmentno(info.getDepartmentno());
boolean staExist = equipmentStatisticsMapper.exists(statisticsQueryWrapper);
if (!staExist) {
equipmentStatisticsMapper.insert(statistics);
insertCount2++;
}else {
equipmentStatisticsMapper.update(statistics, statisticsQueryWrapper);
updateCount2++;
}
}
}
log.info("[uuid:{}]-接收重点隐患车辆设备信息完成,更新数量:{},插入数量:{}", uuid, updateCount, insertCount);
log.info("[uuid:{}]-更新设备状态统计表zdyh_equipment_statistics完成更新数量{},插入数量:{}", uuid, updateCount2, insertCount2);
return Result.success("接收重点隐患车辆设备数据成功");
}

@ -15,75 +15,85 @@ public class Test250825 {
String fixedKey = "8c602c65fe6f57c4b721c5078bb8a916";
String s = SM4Utils.generateKey();
System.out.println("密钥"+s);
String json ="[\n" +
" {\n" +
" \"classdate\": \"2025-09-15\",\n" +
" \"equipmentid\": 487,\n" +
" \"equipmentname\": \"高速二支队\u200C\u200C赤峰大队\",\n" +
" \"departmentno\": 16,\n" +
" \"departmentname\": \"高速二支队\",\n" +
" \"passcount\": 120,\n" +
" \"warncount\": 5,\n" +
" \"fatiguecount\": 3,\n" +
" \"truckfatiguecount\": 1,\n" +
" \"dangerfatiguecount\": 1,\n" +
" \"carfatiguecount\": 1,\n" +
" \"severefatiguecount\": 2,\n" +
" \"truckseverefatiguecount\": 1,\n" +
" \"dangerseverefatiguecount\": 1,\n" +
" \"carseverefatiguecount\": 1,\n" +
" \"speedcount\": 10,\n" +
" \"truckspeedcount\": 3,\n" +
" \"dangerspeedcount\": 2,\n" +
" \"carspeedcount\": 5,\n" +
" \"facilitycount\": 8,\n" +
" \"truckfacilitycount\": 3,\n" +
" \"dangerfacilitycount\": 2,\n" +
" \"carfacilitycount\": 3,\n" +
" \"feeevasioncount\": 5,\n" +
" \"truckfeeevasioncount\": 2,\n" +
" \"dangerfeeevasioncount\": 1,\n" +
" \"carfeeevasioncount\": 2\n" +
" },\n" +
" {\n" +
" \"classdate\": \"2025-09-16\",\n" +
" \"equipmentid\": 335,\n" +
" \"equipmentname\": \"高速一支队\u200C\u200C苏木山大队\",\n" +
" \"departmentno\": 15,\n" +
" \"departmentname\": \"高速一支队\",\n" +
" \"passcount\": 150,\n" +
" \"warncount\": 7,\n" +
" \"fatiguecount\": 4,\n" +
" \"truckfatiguecount\": 2,\n" +
" \"dangerfatiguecount\": 1,\n" +
" \"carfatiguecount\": 1,\n" +
" \"severefatiguecount\": 3,\n" +
" \"truckseverefatiguecount\": 1,\n" +
" \"dangerseverefatiguecount\": 1,\n" +
" \"carseverefatiguecount\": 1,\n" +
" \"speedcount\": 12,\n" +
" \"truckspeedcount\": 4,\n" +
" \"dangerspeedcount\": 3,\n" +
" \"carspeedcount\": 5,\n" +
" \"facilitycount\": 10,\n" +
" \"truckfacilitycount\": 4,\n" +
" \"dangerfacilitycount\": 3,\n" +
" \"carfacilitycount\": 3,\n" +
" \"feeevasioncount\": 6,\n" +
" \"truckfeeevasioncount\": 3,\n" +
" \"dangerfeeevasioncount\": 2,\n" +
" \"carfeeevasioncount\": 1\n" +
" }\n" +
"]";
String sm4Encrypt = SM4Utils.sm4Encrypt(json, s);
ResData resData = new ResData();
resData.setKey(SM4Utils.sm4Encrypt(s, fixedKey));
resData.setData(sm4Encrypt);
// 推送数据
String pushJson = JSON.toJSONString(resData);
System.out.println(pushJson);
//
//String json ="[\n" +
// " {\n" +
// " \"classdate\": \"2025-09-15\",\n" +
// " \"equipmentid\": 487,\n" +
// " \"equipmentname\": \"高速二支队\u200C\u200C赤峰大队\",\n" +
// " \"departmentno\": 16,\n" +
// " \"departmentname\": \"高速二支队\",\n" +
// " \"passcount\": 120,\n" +
// " \"warncount\": 5,\n" +
// " \"fatiguecount\": 3,\n" +
// " \"truckfatiguecount\": 1,\n" +
// " \"dangerfatiguecount\": 1,\n" +
// " \"carfatiguecount\": 1,\n" +
// " \"severefatiguecount\": 2,\n" +
// " \"truckseverefatiguecount\": 1,\n" +
// " \"dangerseverefatiguecount\": 1,\n" +
// " \"carseverefatiguecount\": 1,\n" +
// " \"speedcount\": 10,\n" +
// " \"truckspeedcount\": 3,\n" +
// " \"dangerspeedcount\": 2,\n" +
// " \"carspeedcount\": 5,\n" +
// " \"facilitycount\": 8,\n" +
// " \"truckfacilitycount\": 3,\n" +
// " \"dangerfacilitycount\": 2,\n" +
// " \"carfacilitycount\": 3,\n" +
// " \"feeevasioncount\": 5,\n" +
// " \"truckfeeevasioncount\": 2,\n" +
// " \"dangerfeeevasioncount\": 1,\n" +
// " \"carfeeevasioncount\": 2\n" +
// " },\n" +
// " {\n" +
// " \"classdate\": \"2025-09-16\",\n" +
// " \"equipmentid\": 335,\n" +
// " \"equipmentname\": \"高速一支队\u200C\u200C苏木山大队\",\n" +
// " \"departmentno\": 15,\n" +
// " \"departmentname\": \"高速一支队\",\n" +
// " \"passcount\": 150,\n" +
// " \"warncount\": 7,\n" +
// " \"fatiguecount\": 4,\n" +
// " \"truckfatiguecount\": 2,\n" +
// " \"dangerfatiguecount\": 1,\n" +
// " \"carfatiguecount\": 1,\n" +
// " \"severefatiguecount\": 3,\n" +
// " \"truckseverefatiguecount\": 1,\n" +
// " \"dangerseverefatiguecount\": 1,\n" +
// " \"carseverefatiguecount\": 1,\n" +
// " \"speedcount\": 12,\n" +
// " \"truckspeedcount\": 4,\n" +
// " \"dangerspeedcount\": 3,\n" +
// " \"carspeedcount\": 5,\n" +
// " \"facilitycount\": 10,\n" +
// " \"truckfacilitycount\": 4,\n" +
// " \"dangerfacilitycount\": 3,\n" +
// " \"carfacilitycount\": 3,\n" +
// " \"feeevasioncount\": 6,\n" +
// " \"truckfeeevasioncount\": 3,\n" +
// " \"dangerfeeevasioncount\": 2,\n" +
// " \"carfeeevasioncount\": 1\n" +
// " }\n" +
// "]";
//String json ="{\"fileName\":\"BASIC_LINKOWNERDOWNLOAD_REQ_15_20250925111943000000.json\",\"authKey\":\"8c602c65fe6f57c4b721c5078bb8a916\",\"md5\":\"f9c7245154069df4f1f5b46115a71388\"}";
//String sm4Encrypt = SM4Utils.sm4Encrypt(json, s);
//ResData resData = new ResData();
//resData.setKey(SM4Utils.sm4Encrypt(s, fixedKey));
//resData.setData(sm4Encrypt);
//// 推送数据
//String pushJson = JSON.toJSONString(resData);
//System.out.println(pushJson);
//
//String pushJson = "{\n" +
// " \"key\": \"F1m2UtAVAvgyA3F+/z9zsvWNQmarbzhCFfhrVZBhgfAyRRRGvmXZDx4peEXwAv9j\",\n" +
// " \"data\": \"kLgoY4eqf84MCan7fFTTibHMKVvpidaQICAD1LwSi/eumspzr7RhIZE/skQUZln/5SWW4Ep5S8G6LMIPy67BR5x79Qldj/TYVHsooUCWRoC0xGOMQAA896HvorjOxz4sW0BHtT/7ngp57IMvO8hV9HahTWW3fcVNzWppo9LkV2qZlvWoGoZEgdYUCXmSpjBNlUjMjk+BUR5Dp5Vh5JaAOQ==\"\n" +
// "}";
String pushJson="{\n" +
" \"data\": \"VHtIhqoFZTimL3rv0yTera+wUyDpW1UIzKo2ETSr2bcj+KfMAOQGcPED7Nkv8OSJ8vVPcxfNCcH2a9T7HACLtLy4mwI3/c+Blwx8Nal4qRlNXGqAYs52/hq5FDkqv9VQtNHCsdK2PKHjJRgutN5dSCl1fs7gKgBCyWZsIukXRliyCsYmdc7MJFkT8rTJx6okdjaslSzt/Tcvfa0dMQbp+JVOpdLT+1ku7Okw/u1cyQJwpnsE91RTAxKPpBnzkrBdWODamQ8ORqHz6Bzmtc4zqKyBEsw5t9uR8LbwZ7iviP1jsjv00hzGWavz+25/qcBmGlC+BEQYr8E1SGj//p51dPTKp8Sy4gj2xkFmzWcDrF+CH4vaRUy4xUwv+/+x8BfL3VaQUJ7O1IrNks6kbJRbAEwhQARtLjFQOf2wiMh+HFyd4MMsmTPClp2S7a4AHGNNi6MKmDArqYOYlHtXXdgqg0usJ50X47t7F1ZYvRFFx7v/svculmgPWCqma5+qgEeEESvJhfYCvlDDVaIMnVOf4YRyGHp/yYUj/vM8ZTx6bzdMW05VVH+V8NesGzGQKb6l\",\n" +
" \"key\": \"Sz/6H1ZrpW1uJQOmp/aeueOhvom4SVdk5+2ONatgcxAyRRRGvmXZDx4peEXwAv9j\"\n" +
"}";
ResData returnResData = JSON.parseObject(pushJson, ResData.class);
String resDataKey = returnResData.getKey();
String deReturnKey = SM4Utils.sm4Decrypt(resDataKey, fixedKey);

@ -11,3 +11,4 @@
出口交易查询http://ip:port/GetDataInterface/baseinfo/QueryExStationTrans
同时增加返回json进行SM4加密文件也进行SM4加密
2 2025年09月10日 1.0.1 修改通过堡垒机转发相关请求
3 2025年09月28日 1.0.2 增加ETC 门架计费扣费交易数据上传接口/DCPC/uploadEtcGantryPassData
Loading…
Cancel
Save