Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bme-access-guangdong-upload
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李洪明
bme-access-guangdong-upload
Commits
0c7f954a
Commit
0c7f954a
authored
Dec 18, 2025
by
李洪明
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加上传企业信息接口
parent
fe6a499a
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
281 additions
and
26 deletions
+281
-26
Enterprise.java
src/main/java/com/bme/access/guangdong/model/Enterprise.java
+8
-0
EnterpriseInfo.java
...n/java/com/bme/access/guangdong/model/EnterpriseInfo.java
+3
-7
EnterpriseOriginalInfo.java
...om/bme/access/guangdong/model/EnterpriseOriginalInfo.java
+2
-0
EnterpriseService.java
...a/com/bme/access/guangdong/service/EnterpriseService.java
+88
-19
AESPKCS7PaddingUtils.java
.../com/bme/access/guangdong/utils/AESPKCS7PaddingUtils.java
+180
-0
No files found.
src/main/java/com/bme/access/guangdong/model/Enterprise.java
0 → 100644
View file @
0c7f954a
package
com
.
bme
.
access
.
guangdong
.
model
;
import
lombok.Data
;
@Data
public
class
Enterprise
extends
EnterpriseInfo
{
private
String
SIGN
;
}
src/main/java/com/bme/access/guangdong/model/EnterpriseInfo.java
View file @
0c7f954a
...
...
@@ -4,22 +4,18 @@ import lombok.Data;
@Data
public
class
EnterpriseInfo
{
private
String
XZQHDM
;
// 行政区划代码 字符(6)
private
String
QYBH
;
// 企业编号 字符(22)
private
String
QYMC
;
// 企业名称 字符(100)
private
String
TYSHXYDM
;
// 统一社会信用代码 字符(18)
private
String
XZQHDM
;
private
String
QYDZ
;
// 企业地址 字符(255)
private
Number
JD
;
// 经度 数值
private
Number
WD
;
// 纬度 数值
private
String
FRDB
;
// 法人代表 字符(20)
private
String
HYLX
;
// 行业类型 字符(50)
private
String
HYFZ
;
// 行业分支 字符(50)
private
String
JXFJGK
;
//绩效分级管控类型 字符(50)
private
String
LXR
;
// 联系人 字符(20)
private
String
LXRDH
;
// 联系人电话 字符(20)
private
Number
ZHCRKSL
;
// 载货出入口数量 数值
private
Number
DZSL
;
// 道闸数量 数值
private
Number
YSCLSL
;
// 运输车辆数量 数值
private
Number
CNYSCLSL
;
// 厂内运输车辆数量 数值
private
Number
FDLYDJXSL
;
// 非道路移动机械数量 数值
private
String
PWXKZBH
;
//
private
String
PWDJBH
;
}
src/main/java/com/bme/access/guangdong/model/EnterpriseOriginalInfo.java
View file @
0c7f954a
...
...
@@ -22,4 +22,6 @@ public class EnterpriseOriginalInfo {
private
Number
transportVehiclesNumber
;
// 运输车辆数量 数值
private
Number
inFactoryVehicleNumber
;
// 厂内运输车辆数量 数值
private
Number
noRoadVehicleNumber
;
// 非道路移动机械数量 数值
private
String
pollutantDischargePermitNo
;
// 排污许可证编号
private
String
pollutantDischargeRegistrationNo
;
// 排污登记编号
}
src/main/java/com/bme/access/guangdong/service/EnterpriseService.java
View file @
0c7f954a
package
com
.
bme
.
access
.
guangdong
.
service
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.serializer.PascalNameFilter
;
import
com.bme.access.guangdong.common.HttpUtils
;
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.EnterpriseOriginalInfo
;
import
com.bme.access.guangdong.model.LoginResult
;
import
com.bme.access.guangdong.utils.AESPKCS7PaddingUtils
;
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.Value
;
import
org.springframework.stereotype.Service
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.TreeMap
;
@Service
@Slf4j
...
...
@@ -19,46 +26,108 @@ public class EnterpriseService {
@Autowired
private
EnterpriseInfoMapper
enterpriseInfoMapper
;
@Value
(
"${cityId}"
)
private
String
cityId
;
@Value
(
"${account}"
)
private
String
account
;
@Value
(
"${password}"
)
private
String
password
;
@Value
(
"${key}"
)
private
String
key
;
@Autowired
private
LoginService
loginService
;
private
static
String
host
=
"http://113.96.111.154:18830"
;
private
static
String
url
=
"/api/qymj/pushCompany"
;
public
void
uploadEnterpriseInfo
()
{
// 查询企业信息
EnterpriseInfo
enterpriseInfo
;
EnterpriseOriginalInfo
originalInfo
=
enterpriseInfoMapper
.
getEnterpriseInfo
();
if
(
Objects
.
nonNull
(
originalInfo
))
{
enterpriseInfo
=
convertInfo
(
originalInfo
);
String
jsonStr
=
JSON
.
toJSONString
(
enterpriseInfo
,
new
PascalNameFilter
());
String
result
=
HttpUtils
.
uploadData
(
"qyjbxx"
,
"1.0"
,
cityId
,
jsonStr
,
account
,
password
,
key
);
log
.
info
(
"上传企业基本数据结果:{}"
,
result
);
String
jsonStr
=
JSON
.
toJSONString
(
enterpriseInfo
);
String
sign
=
getSign
(
jsonStr
);
// 使用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
)
{
EnterpriseInfo
enterpriseInfo
=
new
EnterpriseInfo
();
// 经度
enterpriseInfo
.
setJD
(
originalInfo
.
getLongitude
());
enterpriseInfo
.
setDZSL
(
originalInfo
.
getBarriersNumber
());
// 行业分支
enterpriseInfo
.
setHYFZ
(
originalInfo
.
getIndustryBranch
());
// 法人代表
enterpriseInfo
.
setFRDB
(
originalInfo
.
getLegalRepresentative
());
enterpriseInfo
.
setHYLX
(
originalInfo
.
getIndustryType
());
enterpriseInfo
.
setCNYSCLSL
(
originalInfo
.
getInFactoryVehicleNumber
());
// 纬度
enterpriseInfo
.
setWD
(
originalInfo
.
getLatitude
());
// 联系人
enterpriseInfo
.
setLXR
(
originalInfo
.
getContacts
());
// 绩效分级管控类型
enterpriseInfo
.
setJXFJGK
(
originalInfo
.
getPerformanceGradingControlType
());
// 联系人电话
enterpriseInfo
.
setLXRDH
(
originalInfo
.
getContactPhone
());
// 企业编号
enterpriseInfo
.
setQYBH
(
originalInfo
.
getEnterpriseId
());
// 企业地址
enterpriseInfo
.
setQYDZ
(
originalInfo
.
getEnterpriseAddress
());
// 企业名称
enterpriseInfo
.
setQYMC
(
originalInfo
.
getEnterpriseName
());
enterpriseInfo
.
setZHCRKSL
(
originalInfo
.
getUnloadingEntrancesNumber
());
enterpriseInfo
.
setFDLYDJXSL
(
originalInfo
.
getNoRoadVehicleNumber
());
enterpriseInfo
.
setYSCLSL
(
originalInfo
.
getTransportVehiclesNumber
());
// 统一社会信用代码
enterpriseInfo
.
setTYSHXYDM
(
originalInfo
.
getUnifiedSocialCreditCode
());
// 行政区划代码
enterpriseInfo
.
setXZQHDM
(
originalInfo
.
getRegionalismCode
());
// 排污许可证编号
enterpriseInfo
.
setPWXKZBH
(
originalInfo
.
getPollutantDischargePermitNo
());
// 排污登记编号
enterpriseInfo
.
setPWDJBH
(
originalInfo
.
getPollutantDischargeRegistrationNo
());
return
enterpriseInfo
;
}
}
src/main/java/com/bme/access/guangdong/utils/AESPKCS7PaddingUtils.java
0 → 100644
View file @
0c7f954a
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment