Commit 0c7f954a authored by 李洪明's avatar 李洪明

添加上传企业信息接口

parent fe6a499a
package com.bme.access.guangdong.model;
import lombok.Data;
@Data
public class Enterprise extends EnterpriseInfo {
private String SIGN;
}
...@@ -4,22 +4,18 @@ import lombok.Data; ...@@ -4,22 +4,18 @@ import lombok.Data;
@Data @Data
public class EnterpriseInfo { public class EnterpriseInfo {
private String XZQHDM; // 行政区划代码 字符(6)
private String QYBH; // 企业编号 字符(22) private String QYBH; // 企业编号 字符(22)
private String QYMC; // 企业名称 字符(100) private String QYMC; // 企业名称 字符(100)
private String TYSHXYDM; // 统一社会信用代码 字符(18) private String TYSHXYDM; // 统一社会信用代码 字符(18)
private String XZQHDM;
private String QYDZ; // 企业地址 字符(255) private String QYDZ; // 企业地址 字符(255)
private Number JD; // 经度 数值 private Number JD; // 经度 数值
private Number WD; // 纬度 数值 private Number WD; // 纬度 数值
private String FRDB; // 法人代表 字符(20) private String FRDB; // 法人代表 字符(20)
private String HYLX; // 行业类型 字符(50)
private String HYFZ; // 行业分支 字符(50) private String HYFZ; // 行业分支 字符(50)
private String JXFJGK; //绩效分级管控类型 字符(50) private String JXFJGK; //绩效分级管控类型 字符(50)
private String LXR; // 联系人 字符(20) private String LXR; // 联系人 字符(20)
private String LXRDH; // 联系人电话 字符(20) private String LXRDH; // 联系人电话 字符(20)
private Number ZHCRKSL; // 载货出入口数量 数值 private String PWXKZBH; //
private Number DZSL; // 道闸数量 数值 private String PWDJBH;
private Number YSCLSL; // 运输车辆数量 数值
private Number CNYSCLSL; // 厂内运输车辆数量 数值
private Number FDLYDJXSL; // 非道路移动机械数量 数值
} }
...@@ -22,4 +22,6 @@ public class EnterpriseOriginalInfo { ...@@ -22,4 +22,6 @@ public class EnterpriseOriginalInfo {
private Number transportVehiclesNumber; // 运输车辆数量 数值 private Number transportVehiclesNumber; // 运输车辆数量 数值
private Number inFactoryVehicleNumber; // 厂内运输车辆数量 数值 private Number inFactoryVehicleNumber; // 厂内运输车辆数量 数值
private Number noRoadVehicleNumber; // 非道路移动机械数量 数值 private Number noRoadVehicleNumber; // 非道路移动机械数量 数值
private String pollutantDischargePermitNo; // 排污许可证编号
private String pollutantDischargeRegistrationNo; // 排污登记编号
} }
package com.bme.access.guangdong.service; package com.bme.access.guangdong.service;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.PascalNameFilter;
import com.bme.access.guangdong.common.HttpUtils; import com.bme.access.guangdong.common.HttpUtils;
import com.bme.access.guangdong.dao.EnterpriseInfoMapper; import com.bme.access.guangdong.dao.EnterpriseInfoMapper;
import com.bme.access.guangdong.model.Enterprise;
import com.bme.access.guangdong.model.EnterpriseInfo; import com.bme.access.guangdong.model.EnterpriseInfo;
import com.bme.access.guangdong.model.EnterpriseOriginalInfo; import com.bme.access.guangdong.model.EnterpriseOriginalInfo;
import com.bme.access.guangdong.model.LoginResult;
import com.bme.access.guangdong.utils.AESPKCS7PaddingUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.json.JSONObject;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.TreeMap;
@Service @Service
@Slf4j @Slf4j
...@@ -19,46 +26,108 @@ public class EnterpriseService { ...@@ -19,46 +26,108 @@ public class EnterpriseService {
@Autowired @Autowired
private EnterpriseInfoMapper enterpriseInfoMapper; private EnterpriseInfoMapper enterpriseInfoMapper;
@Value("${cityId}") @Autowired
private String cityId; private LoginService loginService;
@Value("${account}")
private String account; private static String host = "http://113.96.111.154:18830";
@Value("${password}") private static String url = "/api/qymj/pushCompany";
private String password;
@Value("${key}")
private String key;
public void uploadEnterpriseInfo() { public void uploadEnterpriseInfo() {
// 查询企业信息 // 查询企业信息
EnterpriseInfo enterpriseInfo; EnterpriseInfo enterpriseInfo;
EnterpriseOriginalInfo originalInfo = enterpriseInfoMapper.getEnterpriseInfo(); EnterpriseOriginalInfo originalInfo = enterpriseInfoMapper.getEnterpriseInfo();
if (Objects.nonNull(originalInfo)) { if (Objects.nonNull(originalInfo)) {
enterpriseInfo = convertInfo(originalInfo); enterpriseInfo = convertInfo(originalInfo);
String jsonStr = JSON.toJSONString(enterpriseInfo, new PascalNameFilter()); String jsonStr = JSON.toJSONString(enterpriseInfo);
String result = HttpUtils.uploadData("qyjbxx", "1.0", cityId, jsonStr, account, password, key); String sign = getSign(jsonStr);
log.info("上传企业基本数据结果:{}", result); // 使用AES密钥进行加密
Enterprise enterprise = new Enterprise();
BeanUtils.copyProperties(enterpriseInfo, enterprise);
enterprise.setSIGN(sign);
LoginResult loginResult = loginService.login();
String key = "";
if (Objects.nonNull(loginResult) && Objects.nonNull(loginResult.getData())) {
key = loginResult.getData().getAes_secret();
}
enterprise.setSIGN(AESPKCS7PaddingUtils.encrypt(enterprise.getSIGN(), key));
enterprise.setQYBH(AESPKCS7PaddingUtils.encrypt(enterprise.getQYBH(), key));
enterprise.setQYMC(AESPKCS7PaddingUtils.encrypt(enterprise.getQYMC(), key));
enterprise.setTYSHXYDM(AESPKCS7PaddingUtils.encrypt(enterprise.getTYSHXYDM(), key));
enterprise.setXZQHDM(AESPKCS7PaddingUtils.encrypt(enterprise.getXZQHDM(), key));
enterprise.setQYDZ(AESPKCS7PaddingUtils.encrypt(enterprise.getQYDZ(), key));
// enterprise.setJD(AESPKCS7PaddingUtils.encrypt(enterprise.getSIGN(), key))
// enterprise.setWD(AESPKCS7PaddingUtils.encrypt(enterprise.getSIGN(), key))
enterprise.setFRDB(AESPKCS7PaddingUtils.encrypt(enterprise.getFRDB(), key));
enterprise.setHYFZ(AESPKCS7PaddingUtils.encrypt(enterprise.getHYFZ(), key));
enterprise.setJXFJGK(AESPKCS7PaddingUtils.encrypt(enterprise.getJXFJGK(), key));
enterprise.setLXR(AESPKCS7PaddingUtils.encrypt(enterprise.getLXR(), key));
enterprise.setLXRDH(AESPKCS7PaddingUtils.encrypt(enterprise.getLXRDH(), key));
enterprise.setPWXKZBH(AESPKCS7PaddingUtils.encrypt(enterprise.getPWXKZBH(), key));
enterprise.setPWDJBH(AESPKCS7PaddingUtils.encrypt(enterprise.getPWDJBH(), key));
String jsonData = JSON.toJSONString(enterprise);
try {
HttpUtils.sendPost(host, url, null, jsonData);
} catch (Exception e) {
log.info(e.getMessage());
}
// String result = HttpUtils.uploadData("qyjbxx", "1.0", cityId, jsonStr, account, password, key);
// log.info("上传企业基本数据结果:{}", result);
}
}
private String getSign(String jsonStr) {
org.json.JSONObject jsonObj = new org.json.JSONObject(jsonStr);
Map<String, Object> sortedMap = new TreeMap<>(jsonObj.toMap()); // 使用TreeMap自动排序键值对
String sortedJsonStr = new JSONObject(sortedMap).toString(); // 将排序后的Map转换回JSON字符串
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] encodedhash = digest.digest(sortedJsonStr.getBytes()); // 生成哈希值字节数组
return bytesToHex(encodedhash); // 将字节数组转换为十六进制字符串
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
private static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
sb.append(String.format("%02x", bytes[i]));
} }
return sb.toString();
} }
private EnterpriseInfo convertInfo(EnterpriseOriginalInfo originalInfo) { private EnterpriseInfo convertInfo(EnterpriseOriginalInfo originalInfo) {
EnterpriseInfo enterpriseInfo = new EnterpriseInfo(); EnterpriseInfo enterpriseInfo = new EnterpriseInfo();
// 经度
enterpriseInfo.setJD(originalInfo.getLongitude()); enterpriseInfo.setJD(originalInfo.getLongitude());
enterpriseInfo.setDZSL(originalInfo.getBarriersNumber()); // 行业分支
enterpriseInfo.setHYFZ(originalInfo.getIndustryBranch()); enterpriseInfo.setHYFZ(originalInfo.getIndustryBranch());
// 法人代表
enterpriseInfo.setFRDB(originalInfo.getLegalRepresentative()); enterpriseInfo.setFRDB(originalInfo.getLegalRepresentative());
enterpriseInfo.setHYLX(originalInfo.getIndustryType()); // 纬度
enterpriseInfo.setCNYSCLSL(originalInfo.getInFactoryVehicleNumber());
enterpriseInfo.setWD(originalInfo.getLatitude()); enterpriseInfo.setWD(originalInfo.getLatitude());
// 联系人
enterpriseInfo.setLXR(originalInfo.getContacts()); enterpriseInfo.setLXR(originalInfo.getContacts());
// 绩效分级管控类型
enterpriseInfo.setJXFJGK(originalInfo.getPerformanceGradingControlType()); enterpriseInfo.setJXFJGK(originalInfo.getPerformanceGradingControlType());
// 联系人电话
enterpriseInfo.setLXRDH(originalInfo.getContactPhone()); enterpriseInfo.setLXRDH(originalInfo.getContactPhone());
// 企业编号
enterpriseInfo.setQYBH(originalInfo.getEnterpriseId()); enterpriseInfo.setQYBH(originalInfo.getEnterpriseId());
// 企业地址
enterpriseInfo.setQYDZ(originalInfo.getEnterpriseAddress()); enterpriseInfo.setQYDZ(originalInfo.getEnterpriseAddress());
// 企业名称
enterpriseInfo.setQYMC(originalInfo.getEnterpriseName()); enterpriseInfo.setQYMC(originalInfo.getEnterpriseName());
enterpriseInfo.setZHCRKSL(originalInfo.getUnloadingEntrancesNumber()); // 统一社会信用代码
enterpriseInfo.setFDLYDJXSL(originalInfo.getNoRoadVehicleNumber());
enterpriseInfo.setYSCLSL(originalInfo.getTransportVehiclesNumber());
enterpriseInfo.setTYSHXYDM(originalInfo.getUnifiedSocialCreditCode()); enterpriseInfo.setTYSHXYDM(originalInfo.getUnifiedSocialCreditCode());
// 行政区划代码
enterpriseInfo.setXZQHDM(originalInfo.getRegionalismCode()); enterpriseInfo.setXZQHDM(originalInfo.getRegionalismCode());
// 排污许可证编号
enterpriseInfo.setPWXKZBH(originalInfo.getPollutantDischargePermitNo());
// 排污登记编号
enterpriseInfo.setPWDJBH(originalInfo.getPollutantDischargeRegistrationNo());
return enterpriseInfo; return enterpriseInfo;
} }
} }
package com.bme.access.guangdong.utils;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.io.UnsupportedEncodingException;
/**
* Created by Duqianlong on 2018/11/15.
*/
public class AESPKCS7PaddingUtils {
/**
* 算法/模式/填充
**/
private static final String CipherMode = "AES/CBC/PKCS7Padding";
// 创建密钥, 长度为128位(16bytes), 且转成字节格式
private static SecretKeySpec createKey(String key) {
byte[] data = null;
if (key == null) {
key = "";
}
StringBuffer sb = new StringBuffer(16);
sb.append(key);
while (sb.length() < 16) {
sb.append("0");
}
if (sb.length() > 16) {
sb.setLength(16);
}
try {
data = sb.toString().getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return new SecretKeySpec(data, "AES");
}
// 创建初始化向量, 长度为16bytes, 向量的作用其实就是salt
private static IvParameterSpec createIV(String iv) {
byte[] data = null;
if (iv == null) {
iv = "";
}
StringBuffer sb = new StringBuffer(16);
sb.append(iv);
while (sb.length() < 16) {
sb.append("0");
}
if (sb.length() > 16) {
sb.setLength(16);
}
try {
data = sb.toString().getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return new IvParameterSpec(data);
}
/****************************************************************************/
// 加密字节数据, 被加密的数据需要提前转化成字节格式
private static byte[] encrypt(byte[] content, String key, String iv) {
try {
SecretKeySpec secretKeySpec = createKey(key);
IvParameterSpec ivParameterSpec = createIV(iv);
Cipher cipher = Cipher.getInstance(CipherMode);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] result = cipher.doFinal(content); // 加密
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 加密字符串数据, 返回的字节数据还需转化成16进制字符串
public static String encrypt(String content, String key) {
byte[] data = null;
try {
data = content.getBytes("UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
data = encrypt(data, key, "text1234");
return byte2hex(data);
}
/****************************************************************************/
// 解密字节数组
private static byte[] decrypt(byte[] content, String key) {
try {
SecretKeySpec secretKeySpec = createKey(key);
IvParameterSpec ivParameterSpec = createIV("text1234");
Cipher cipher = Cipher.getInstance(CipherMode);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] result = cipher.doFinal(content);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 解密(输出结果为字符串), 密文为16进制的字符串
public static String decrypt(String content, String password) {
byte[] data = null;
try {
data = hex2byte(content);
} catch (Exception e) {
e.printStackTrace();
}
data = decrypt(data, password);
if (data == null) return null;
String result = null;
try {
result = new String(data, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
/****************************************************************************/
// 字节数组转成16进制大写字符串
private static String byte2hex(byte[] b) {
String tmp = "";
StringBuffer sb = new StringBuffer(b.length * 2);
for (int n = 0; n < b.length; n++) {
tmp = (Integer.toHexString(b[n] & 0XFF));
if (tmp.length() == 1) {
sb.append("0");
}
sb.append(tmp);
}
return sb.toString().toUpperCase();
}
// 将16进制字符串转换成字节数组
private static byte[] hex2byte(String inputString) {
if (inputString == null || inputString.length() < 2) {
return new byte[0];
}
inputString = inputString.toLowerCase();
int l = inputString.length() / 2;
byte[] result = new byte[l];
for (int i = 0; i < l; ++i) {
String tmp = inputString.substring(2 * i, 2 * i + 2);
result[i] = (byte) (Integer.parseInt(tmp, 16) & 0xFF);
}
return result;
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment