Commit f1ff49ff authored by AfirSraftGarrier's avatar AfirSraftGarrier

Merge branch 'master' into for-yx

parents c75b27a6 3f0b43e8
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE REQUEST-----
MIICrjCCAZYCAQAwTzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
DAJHWjELMAkGA1UECgwCU1IxCzAJBgNVBAsMAlNSMQwwCgYDVQQDDANBQ0MwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/8E30sg/i8rr1Vu9jplt/60eF
hNMcNbhRTml0IFz7Da7s9DB4I20fys7ogmGVzCTFJFt3HoOZW6WaSg0C/e+A7Nw9
dzIZ8kUFFKxA4zfqgQBeAbofP+VqrAIi7Pm5D69LqDiFQqVVnSE7TA4G2VfI2Wls
kJuUJ2lcpMtks2R8/lu92U5MAJJ/4gwvep5EEKJfGy3vnZ9Y0WWZELzOIxIyWdCU
auT8hS+U/YB/ldRznQJuZ12q3tTG/rnsgDMoS2xf+5bWttFtiifhxSJXme4z7iSZ
xb08RMlYShPY4xwbKuEUsGk9awttwzrP/t8TwISKLYB1Fz4ymnkEN+DRrEcFAgMB
AAGgGjAYBgkqhkiG9w0BCQcxCwwJc3J0aGlua2VyMA0GCSqGSIb3DQEBCwUAA4IB
AQBRyccBv7lwv4/GNiXTWTcuLPXbauSXAGyVT2Vk2XFg3dI5ZBYbE/Ir05Afhf4+
gdTBIzeRBSI1hcYrdYDHhFXaq/JS8lO/wEMULvJBcHVEsUa9LHf9hBRmr6+aO6Sn
QYWGUtPfYSn3/WzUUBYeSWvotCqwOUjfmdcPXtbOIHapy5fUuF3UHST4DLHdkjVq
ihbwyr4XS68W63hHzs1mvjgD+v5fn0KMfxm8QUEtJ9duDLF3RMGv71K0F3qHk+5a
qT2vmkBGs4nDYfUHs930mjb+/nUkRxk4KQZupJ64WSiTjNkIEf0dsj/MmCfQoTJK
nlb2i5Qp2A6N71bqoH0eWunw
MIICljCCAX4CAQAwUTELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
DAJHWjELMAkGA1UECgwCU1IxCzAJBgNVBAsMAlNSMQ4wDAYDVQQDDAVTUi1DQTCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOGm68efDJou2ElrzrEUpDGS
p5oOqn+60UbFKquObbH1sfnkpJeJYsTLT9EkZYEt1um76St2+4VJAyeLC6KEW4j8
q8QoIoDDwYa85+uwEgNAj8AJikBidCboFjdgtHJLqwmrdJGHYtqnFnIdyvzLZe7G
rxsbDhZ399qEaxvYmwGRI7ZkT5v9lPpw9RqfPysaS829zn6W1mUCeVPPMSbCtgSq
sYjRPDHuzi15GygEnsMMFTozSvLm5xrpSbY9jNvXo5weUy/OCaIkiVmiL2dUVMf1
0y4PphxvzGnnX78dJ7iuo1as+V0zs6CngVdiMWmmt1yX2TyTsm2tbZHH5w+wknkC
AwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAAmVVU9YceDSOtKv5k0YLc0so6rsD0
y53KlEVDRDBmllSl45Q5J444U3bgg+mBQgHfEcTG5r/LCiBifnpezvNMHPvrlBK2
4ivKNXfqi/sK9OwWvZfRHMfkQalPoDsno2AZ5HKTf9ljf+/qQlvHegSt+5CbeLOZ
+wWgLujDcCo/qNRIgBkJJMERt2tdllww7rUC1e0vXQaLUoL1tre+n9lKSNscxX1P
Cx8a8RJF+9Rdu+ZZOvn0zU+xwxRmiYBrtnJDS1p/Mstpa97xezC6CofpXZGbvUwm
0XjjwV4rzQ1XEdG1oUgusC2tp9PYRZHiPE4HIi0HoRKxj8XHGggEIGkz
-----END CERTIFICATE REQUEST-----
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
B81C2DC0B70ABED4
B81C2DC0B70ABED8
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE REQUEST-----
MIICrjCCAZYCAQAwTzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
DAJHWjELMAkGA1UECgwCU1IxCzAJBgNVBAsMAlNSMQwwCgYDVQQDDANBQ0MwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD1PB+QqgxKYnsqypu3lT5u6TDB
Chdrn91utjDynvIk0fKjrOAvlzpugoRLHSkpz5kWyw727otdq4MBdMxzVN2udEBC
dcNekfgzm1ZhWl71lNX7sDTigIdd7hBnNZY/uYz0bRdExkodqmx08VENnc4Xkj1E
Iw5YB0+3hLBC0Y2Ab++qKq3x97V6+Oeoqqu1wtRLA4VV2GqTHbg9jooBmJUsPu1W
4MVPX5Oi7QkemPeWyfY6C3z/Ur9ifc+/5UIrIkh9Tb3u15bZ2Hx04LfkwdiUOW4a
gVLQKCB/b1vFaT7sueC4DonBSxpVtbnI0viDPLYN7Vd9AuTzF8ceYpGvId5/AgMB
AAGgGjAYBgkqhkiG9w0BCQcxCwwJc3J0aGlua2VyMA0GCSqGSIb3DQEBCwUAA4IB
AQBhTESkmnhrk9h+Otd4LXk0REuDtcT/JYxoTwm8I5Umpys+a3sw9oqgK/6zogm+
uEJyC2XcshFJVo2sf0qCvc6EeZHPiW8Ip5PfFk+7FzYIPJC74VEbWSx8O7KMXknl
aaujpf5Z8kT/ZjoutV6cb38bwHuKeYTSj9iZIMoyIo/DCmnBFAGA0BcsVzYOplCQ
M3YYOa1INc5LukZQyL+vlLUmWwG4iDktcrql0Cre1wXOQtNfgAcdhajNtEih60Av
KQNV/iazeQJI+wqn2gZu0muQJsK5uWFyj5kexxPtL/vriWXw4M6Kkirg96TH9l9W
CyPnz6CoTaohfq58sGTiorrS
MIICmjCCAYICAQAwVTELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
DAJHWjELMAkGA1UECgwCU1IxCzAJBgNVBAsMAlNSMRIwEAYDVQQDDAlTUi1DTElF
TlQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC//jI81JWRFmuXI2TH
dQX7Mu1chPBXhmkGRP8Ex77CQRcAzTFNV3m5SuMJ+ggO+Ig7O24LzupSjJEto5tY
Zzu15DJWrBMvtdDCK+zsPCwatLSQ1nx+5q4OsLzuA+MsWrF2r+KfnEIh4CSGf4Ap
FS9yUz157JIVqWnHmABy40/DssWOsch0/oJ1W1Ge8XgmVKKwg83Gl+VUFdJWL+4n
lupKTXKAL/EOxgcGK8nXUBhOR/kj6kHMk0avoG3J4Y0tM5NNTqhD2HbSuW+TdSf9
SNc/dUeaUHgvZuvzkaFEI2xxulQsLPD3PGmugJi88wROyf1k3o8f14Yo3y3wWMM/
MdolAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEALbAVckgD4YRmV1lcLQtlL5cy
oGyqhf+5YfvdlK5jOVVSnT/vE3nPvoz5SQ1ewDTewHdS3nyYirxbyxh730/RhFeU
r7nzqvzasH8tsk/R5NImRYDEp1yuCc5aUpQYHeBx2oVMwClCZm1TmmnJbH+EXHZw
TLlLAVaGmu1UbBozb1RIf/LeTO3e8H7S/8D9nPLprjOjVqUUEOWEuxgO+cGO5wkw
AvbysVaMxTmHhKXW74OpOlSXY/i+Ma93OYJ3K7XwuAjrGOIuemjEn8fy2RkyO3KZ
0kW19fiJllm5BFyL+vXwW3S8gD8k2B4hpPlgtAHZk2DztjAoN9KLkg4EUsbQWQ==
-----END CERTIFICATE REQUEST-----
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9TwfkKoMSmJ7Ksqbt5U+
bukwwQoXa5/dbrYw8p7yJNHyo6zgL5c6boKESx0pKc+ZFssO9u6LXauDAXTMc1Td
rnRAQnXDXpH4M5tWYVpe9ZTV+7A04oCHXe4QZzWWP7mM9G0XRMZKHapsdPFRDZ3O
F5I9RCMOWAdPt4SwQtGNgG/vqiqt8fe1evjnqKqrtcLUSwOFVdhqkx24PY6KAZiV
LD7tVuDFT1+Tou0JHpj3lsn2Ogt8/1K/Yn3Pv+VCKyJIfU297teW2dh8dOC35MHY
lDluGoFS0Cggf29bxWk+7LnguA6JwUsaVbW5yNL4gzy2De1XfQLk8xfHHmKRryHe
fwIDAQAB
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv/4yPNSVkRZrlyNkx3UF
+zLtXITwV4ZpBkT/BMe+wkEXAM0xTVd5uUrjCfoIDviIOztuC87qUoyRLaObWGc7
teQyVqwTL7XQwivs7DwsGrS0kNZ8fuauDrC87gPjLFqxdq/in5xCIeAkhn+AKRUv
clM9eeySFalpx5gAcuNPw7LFjrHIdP6CdVtRnvF4JlSisIPNxpflVBXSVi/uJ5bq
Sk1ygC/xDsYHBivJ11AYTkf5I+pBzJNGr6BtyeGNLTOTTU6oQ9h20rlvk3Un/UjX
P3VHmlB4L2br85GhRCNscbpULCzw9zxproCYvPMETsn9ZN6PH9eGKN8t8FjDPzHa
JQIDAQAB
-----END PUBLIC KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQD1PB+QqgxKYnsq
ypu3lT5u6TDBChdrn91utjDynvIk0fKjrOAvlzpugoRLHSkpz5kWyw727otdq4MB
dMxzVN2udEBCdcNekfgzm1ZhWl71lNX7sDTigIdd7hBnNZY/uYz0bRdExkodqmx0
8VENnc4Xkj1EIw5YB0+3hLBC0Y2Ab++qKq3x97V6+Oeoqqu1wtRLA4VV2GqTHbg9
jooBmJUsPu1W4MVPX5Oi7QkemPeWyfY6C3z/Ur9ifc+/5UIrIkh9Tb3u15bZ2Hx0
4LfkwdiUOW4agVLQKCB/b1vFaT7sueC4DonBSxpVtbnI0viDPLYN7Vd9AuTzF8ce
YpGvId5/AgMBAAECggEBAOAoFLImvRVA71Qt3ifwQyEeBXJtxvqZJc4MurEKmEsP
nLn/Suw1TzO0GTiPbxDIsSYkdYlAgiMcoqKyIC9LY1YS7KnS+sF2q2iAlHRoJmRT
p0Rny+89jH5PHK86TBvzfuPs01gJ57U2EezSp0PK+paRFW8ym+naxQL6RiLNaIn7
/P9sfUZfqu67fCstc6MIu+aO4hpjCX8Xm+V8zeubJykHfuPz84rLxDz1eSpVp2Ue
j4NRepJfGW+2fERkHBQV0tFWdxk7lbokUh7RFzsRJGJ/Ho0Zqq4AZvPG11B5giS2
DSlD66XTQB+YFwEJQU2zOmSkVoig3z37uIXOA+0Q0AECgYEA/Yurp+lp87hjZS5v
PdoxzsD/vOup/YM/OHqY6bsUi8rckwQQToEwJ6MzDA13LQw2DEOMxxC6JOx5GxWy
jzJueLEPlRaogbJxdfXfw/4twkJEr/brjnNvsD1foYqvoz5eO89cLW2zhr2Oyy91
8ob7f2k36UYxKUlemLYqZ727lkUCgYEA95vbe2xCVR4LNOkY1f4LJVZGwSCWNEz+
HDfp61EBxLaEpM3yjTz1GekNcxW33oeLNdou2z+3mHuxpV7Yk9NK5LC3STAJI2uH
yyHcnoPxw8ZRLsVCYiQxyOyIS6JPrrJ+cIkrtQl6Jj+068G0QuD0DPf/BhchJwSv
YC2pWl/Of/MCgYAnR4ETZVTVviYf4b64HVqEBmBYO0Y9kRy1OkEATMxVD9t2JzYD
g34bVewtnNRutSqWYcyodk3wNHZanNTp3E1DA2M/nKAEX8m2FZ5R9cnPA4cyn5VE
n1uZORjcpOiq6JmeuHQ2UX1zjWBW2AZ0yTajOYDA8e/hzo0KKYaORdWO5QKBgQC5
ISbxGPhfe58VaFLRbKgYunEcZKjpYcd8gbG7501TLsPuFK2NPE5lmQIdUdev4dgL
4520/+bdc15XLprvq8MLSbVAW1H50aQuFJtHSY+xuM1qEsKXbkhq2a7uHeVF0N8I
dQbgzL0va+JxgtqsRlUyfRmIDDMVYUNevcUpdQiIUQKBgQCbe01wKZKmfLs9Gnhu
YExwKWw+Uy4OUfT4vNWaeNjTWhzIxeerSzoX9WOnl4m6YzVTlM6BgeRiCRQt/+AN
UtGDW8H16xnCE2mKbmoHO+VEjSAqIYH9L8sQAvYDOJpLn5U5YlLPuvAX7LyachW3
+73hLbLm2l2qrVL7AYRqGAqmug==
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC//jI81JWRFmuX
I2THdQX7Mu1chPBXhmkGRP8Ex77CQRcAzTFNV3m5SuMJ+ggO+Ig7O24LzupSjJEt
o5tYZzu15DJWrBMvtdDCK+zsPCwatLSQ1nx+5q4OsLzuA+MsWrF2r+KfnEIh4CSG
f4ApFS9yUz157JIVqWnHmABy40/DssWOsch0/oJ1W1Ge8XgmVKKwg83Gl+VUFdJW
L+4nlupKTXKAL/EOxgcGK8nXUBhOR/kj6kHMk0avoG3J4Y0tM5NNTqhD2HbSuW+T
dSf9SNc/dUeaUHgvZuvzkaFEI2xxulQsLPD3PGmugJi88wROyf1k3o8f14Yo3y3w
WMM/MdolAgMBAAECggEBALzkvMqqoSjpNRuzP/EZirP2DCBtzwVeAbCga4Npfp4i
ah5ow6wDd4g9TJlBPXJ1RZt5QjEt988V67RKdomIr++qP3iUvh+/s0+G5ggav43a
4php3n0AOpnLe2Z1vqmh5V4PeFlu5IXtwCHwCcjhxhemHCL8BVJ4ptEwFKj0SkMP
yGenUXZSyH/Vy/tcq3vg9NBUyBs8ZfBAMl1Jr+rtc/HvqaBKnVJvaJ+MGGyD0Pj3
vIdELbMS0aggDqegtEM/jPepdw2NQ3sm1acNLGWLa87wKYZ/FYYjHHcS86h6NtrU
ORcTKRVIj5yDPpxapDAxDBvLySBv59QeeBHF7rzfsSECgYEA6r9wHoHkOQoixSqP
w7CDQFVHz2dwhCJWsQtyIJa5feIuvF6ecHkbrKD9bkq09JZU/FykZ6KaRd9mSI7t
H5bHVYulbJJtz5G+snyrFWHqPrhhZ8KxtMwS5Ju1Ft9BxYxiFELPAcxWQpHcoO39
9Nwg4OkeOOCK9LeGKJ01nON7u0kCgYEA0V/dAjz/JIVAvHFclXhQP3jp8SaMJxo9
8koweNFVPDnL1mPOweM+8duZlElB0nKa9tfDOt8D/naUSJ9mzfJT5QQL5l0VIRmo
D+vpNLRwSTc/SqTv41L32B6yF2Sft1IeSaxf2ey+4hOGeeqPyL7nrofstIROdf37
Y4nlPTlQq/0CgYEAqZQXu4IbyvS+f24qorPtbNjuYi6YQmvH8meRT2dyojR1jJBR
pnBmhINb8IO5SwMaa5/FCDSXe6hRbFMLiwlSAEM8Aj2ZZBwmBSw4Lt8n550siFdG
JpRRhaHR5K7tBXdPFtHYVrU1DyvtlLe4AF3QxojA01eqKfQ1zzsaErbmmDkCgYBL
K1ikmhOcH/8q6KQtwaFF+Ho9KvK8gy5kU4Btj/JDChkFopWzhIuvt4C+/UIVdTHv
l20vMKw1aos4O4pkPDEkkrxW+2o/lP+Cn9b9Jh7+Gkit2uOJQNtci0CzJ1w0K9ZV
6v4KtnWdoxbvpGf00Z1KSuCPusSUlhfwF6zmuzIcXQKBgCxLDpAZWqsTTONqfU91
vGJ8oxWdDXsAOnauYgai6hNqCIFtwGKj6pN/86na6FxAJRCRS9e0ECpra3AB+MbP
GjFCi0Pqksq1qsu1QtgfzBDDx4w9w+Hwrlp9EqAgj9hFE844rU0aPEbrAuVEvYW4
4/LJjwVqjnO4rAOIupn2QxH/
-----END PRIVATE KEY-----
# 1.生成服务器端私钥
openssl genrsa -out server.key 2048
# 2.生成服务器端公钥
openssl rsa -in server.key -pubout -out server.pem
# 3.生成客户端私钥
openssl genrsa -out client.key 2048
# 4.生成客户端公钥
openssl rsa -in client.key -pubout -out client.pem
# 5.生成 CA 私钥
openssl genrsa -out ca.key 2048
# 6.生成CA的csr文件,保存必要信息
openssl req -new -key ca.key -out ca.csr
# 7.生成CA的证书文件crt文件
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt -days 3650
# 8.生成服务器端的csr文件,为生成服务器证书做准备
openssl req -new -key server.key -out server.csr
# 9.生成服务器端证书crt文件
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt -days 3650
# 10.生成client 端csr文件,为生成client证书做准备
openssl req -new -key client.key -out client.csr
# 11.生成client 端证书crt文件
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt -days 3650
# 将key文件进行PKCS8编码
openssl pkcs8 -topk8 -in server.key -out server.pkcs8.key -nocrypt
openssl pkcs8 -topk8 -in client.key -out client.pkcs8.key -nocrypt
# 注意生成的 Common Name不能一样,否则客户端会出错
\ No newline at end of file
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE REQUEST-----
MIICrjCCAZYCAQAwTzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
DAJHWjELMAkGA1UECgwCU1IxCzAJBgNVBAsMAlNSMQwwCgYDVQQDDANBQ0MwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtJ69gFGF6Tz0YDWEQ5Zvm1zyE
gyJzd+5AH33TVA6SAAUzWHfe+1f4U6NWURyF2f9LREtUZq2dFIiRycm5857ANWa6
89it8jGDRsSDIbSH5XJfh9m04k+XtPlqrr2fde4AAx32/DbnRbCdtonjrkR0emit
mfBN/mpaQWDGRU5z/q8LV006tajaDXykjL60tJhv+HDmX3lPgSFLyow6+rvAeHa6
RSxvWGGbke4jdoZMHJVguPGyyu5NBcxqvJSaJqjX8myACdnCDAwkm/kqVPLaJbTc
3Mi0qqHmR1sr9aCWS0GCsSQku2AhVwdrjILlZDPWBD82yADd0gymtBZ1fEEFAgMB
AAGgGjAYBgkqhkiG9w0BCQcxCwwJc3J0aGlua2VyMA0GCSqGSIb3DQEBCwUAA4IB
AQA4prOJNCytDJw8WxVu92t8JR4Acxa1bDKsrvvl/OKkDzZT0/yfZUsVq4pSdxzI
OgYiuYSgwC7kBoq4MqzV1MBeO6/kOaOKiPHbJyIrKuqEZ8Nxe9RKOZ40AE+zCUBA
TzSX+errvc+ZQweGsmjTenic3nT9wuFgM2B7VnpDagzvhbSlG7NdGldrhBMWL3JY
IKiovSmAoSndeT+7+7qkGPx48l8sTGdPvziRxPVHtmFPfLMacUDMVE8BRdEQ+xtt
Nh6R+GPPfchGOfH3/mEeYAgUgS4/m0AqzODyEB3SUcz/UDlYBfO9uhOPkCnbzsdz
L0JCPdF3ZR5yjQEWJJGnEM0r
MIICmjCCAYICAQAwVTELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
DAJHWjELMAkGA1UECgwCU1IxCzAJBgNVBAsMAlNSMRIwEAYDVQQDDAlTUi1TRVJW
RVIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCt718RXKUVJwm4V2Go
Tk0X2d4R8RsmpdrxQnyAbQE8P4BxJAPZYCrYZQ4PMh9mcMcCeSHq6hMSPlgZKxYO
wHJAOI7g/WcbtGfsXkzqyfnZtG8KACP35ykcgffGVi5MBIM1aG7ah11o0ZpmFtue
T8cYWd4W1+NKfObFDviU1g8wV5ka6L+zeih+5Eiy6Zd9m8q+DjdTHaQVTlgIrLLy
n+6pkwgt3EMxVBy7wN+k2RK656iVqRHc4ttPWWc7HCVa1u9XiFR2K56qJDKLt4nE
WJ3O+qC0D++l8N/blZI3TYU07nC9j3mdWs8pOSvAQO+1Gg76LTM2T1bGL5at1ZYo
RBmfAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAa4KUVDxcBOjIewXpPBMEQOW2
cTD0SQminwEnJJAC8ocp34Ia9ZZnBz3G7izQ9BTWL4iTlBXkcpqM4SoUYTAKbXIi
JQZbFPeacn0jCp3X9tl8Pea4lWNfT03iuvDA2izo5TmbEufO9SXSsm5UvrPAXuk8
Q1jzlk3Se8SwI240Vm6OTidS3YdM7ldet+ds4aUa1HuR75jUYy44jjDap4qCnmyn
4NAH7jB1EeqbJt6I8U9KbUQxbHeaxzWtD2L3pcsVD+JsADz4rNcJm+UD2vII425B
uTIQM/pU/FveRqt2W0r9GIKdKztE6RdFTU3Czfu4VRb0P+iH2K0ec4WRcgjyog==
-----END CERTIFICATE REQUEST-----
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEArSevYBRhek89GA1hEOWb5tc8hIMic3fuQB9901QOkgAFM1h3
3vtX+FOjVlEchdn/S0RLVGatnRSIkcnJufOewDVmuvPYrfIxg0bEgyG0h+VyX4fZ
tOJPl7T5aq69n3XuAAMd9vw250WwnbaJ465EdHporZnwTf5qWkFgxkVOc/6vC1dN
OrWo2g18pIy+tLSYb/hw5l95T4EhS8qMOvq7wHh2ukUsb1hhm5HuI3aGTByVYLjx
ssruTQXMaryUmiao1/JsgAnZwgwMJJv5KlTy2iW03NzItKqh5kdbK/WglktBgrEk
JLtgIVcHa4yC5WQz1gQ/NsgA3dIMprQWdXxBBQIDAQABAoIBAB0lyQfLZn1ISWh7
GBPYEt5Q7QcBbBMz5Q82PeANDkbVagqyobsPZEeRDLXDAaImiCsLXALhJeiDRFoG
Ncbvk5GXa6uc0KS3WE5Y40uPqOwXW6FpJOSmE+/drv6eW500JNQrsieZXUShHpHt
4FhLRYq18FkIyMLYSN7YkonNsN8lgT8e55RlBWSBI+zEGYglihIYQFSIi6TDMAMC
L32bP/vJ+WvdZwa6qhmSq7ddbyQhe4TRmfxn8ygC4l+y8F6GaZ6BNHAqz18U+J1l
khMkXI8EC38ESS0Oj4/29QK8gs/xtzcYBo+jTBWPG8zTI+eMyXf0+jIAC1dNHY3c
jTQYVCECgYEA1FV03i76VWTZ0GjZZ/KAAQoKt2Lnkg4v8V+LeRVQLU+xpIcxoAua
nQssW5ZQzVqu/kHc292KKIz6Wq0qyov8MmOPTQRPDF9pE9THwcPrtKrNOfl4e+J9
pQSHu+ZDujxRHjk/aRXEYkclC/nEQIceycbTwPsZA2TdTFLJ5YcWZVcCgYEA0MOe
VVnHuPftfYAEIfAUnAw1soilYafRil9LFWExkusRsw/U64co3Sf0lFxL/9JpVCSu
cfUjc4MDl40t6ZSZSZnSQQ151p+cqkmPK4CfdQ55GD3N7P+qANCEqIPZf5aTrt7n
S93pif3zNCjZgcuZHXb/zhU0KC9ua2ugyqCr1wMCgYEAxEU14QblqTeuyyGQDLCw
t8UzgK5wxaZNlL0vrD4SPcATwbSiH4F6ar3gQ8yfZiLz7NyuraGLys39wQGes1lQ
RreWx6c69oHfHFCsUSSr5PWY/IToZQNIBtg4K2y+oBCPHvPl9FoFjJ6c1QQL72W3
BOa/5/ty9JswoBNKwtrqzcMCgYEAtGQ0jt/zetuRdd6Gs6S2yliqlckJzyaqI/1P
7ft8UM2bD7VgcNzr7J4383MFoNr6dOD1dDc1GP1evzgZMjtbcYPfcKLqYxCs2WCS
vC56mzWUYeQV6vLIvcdwugSkjmFY38Rw7Nemk7zCyJF70XJSrmlDhZpA5XCG43+v
AyhvFG0CgYEAtqzZQDTob14+ZEKdaheWkve1U3eR/wMz0wkPHLZuowG2x2196yE4
FFxG1qvGRk3e1bp1D6PwYgQGmLpKV9R0TlEt49BR1McXu68saEsB+SjqI0ReDTJ+
9i4TcQaOtJOWrQ+8jqbG5JU8c+FcgwELSIOPN6jHplDePB8RupdcDYg=
MIIEowIBAAKCAQEAre9fEVylFScJuFdhqE5NF9neEfEbJqXa8UJ8gG0BPD+AcSQD
2WAq2GUODzIfZnDHAnkh6uoTEj5YGSsWDsByQDiO4P1nG7Rn7F5M6sn52bRvCgAj
9+cpHIH3xlYuTASDNWhu2oddaNGaZhbbnk/HGFneFtfjSnzmxQ74lNYPMFeZGui/
s3oofuRIsumXfZvKvg43Ux2kFU5YCKyy8p/uqZMILdxDMVQcu8DfpNkSuueolakR
3OLbT1lnOxwlWtbvV4hUdiueqiQyi7eJxFidzvqgtA/vpfDf25WSN02FNO5wvY95
nVrPKTkrwEDvtRoO+i0zNk9Wxi+WrdWWKEQZnwIDAQABAoIBAE+C2HuwVUrZIKlj
UKJGwRlBIDIlfNrrAK4/TXjL27+167pM03Ggc5WehJHPwOjsbx0jUKz5uiQh2dYP
izLNKK1Q7YfObz8L9mHoLdM653ts70GsFMUzp+h/RUwmg11+xpg4mExPixTqlGFM
27KAF6x7EHpy0FVxyXCVym8Hd8QJ1mGmxbGPRQgY8bCz0/wBjqDtqlsdcvjMo+u4
5xBz3FG1KBrEFJpPZZdpNvzCDLzplMcbJw85vtbErPzlqELsJFTLKefD7IIfJ4YG
LXr1H+6aFqNuqaS42Shsa6egwllsVj+mVEa+8qnfGGcMlXJOoeTzHoG9qCkNcXWg
EqPLIbkCgYEA1k7/ByMUF7rMJINaeTCkH+KVeRc/1rvJPVASrLKwoq4gV2XnhGsm
DBrYvzfNFfmofx3JclmVNNTUJaR+LI01zMXat/aQLAkrbPdZ4HH2/0fSmSDuv8Q+
HSWrykpFK40fsQmWZOh7AWTdFBRF3D98hfdqZAw82ZA8OJ9GorwYTeUCgYEAz8Ww
3jgWGKH/+lXYRl6gF7vTs8sxjRJtwwVCrdtroPC+3vV/1ndTmqHSnY8xP3UiMnF0
8h1CrY7ab1m8panzWCwmkYtbqlvlkv3W6StB0M8jrZmPu7NLb3IYVWEuca65JCzl
pEDocHUBGCP6fZ+jmbYYUuU7cjlujnSJ33Q48TMCgYAdbivHpyGTQKvYN9Gs4ukn
F86/GlpB+vff26c04DUxogf++Jear7xB3U32tIsNgYOKMWUAtxyubKvVn4lURPAm
duVabhnOclPsWuuUzxHEbPCW5tbiruh4yDuXRCvLl03K2i41HVgHEPrrTv1pCa7o
FtodczDID+61N+pTXtFXoQKBgQCvmmg4CLM0ModErxVRtFwecxMkXFIO50p5j5Kh
mlfG+HJ5wog/XS79/FMj84guF/PFKnsqvmxCgABCKFf2tEMFfJtEW8Ino+/OYlgn
TfYcY1XGPYlrnMfe81F5p983GfNEjeWxA2Lw2RMJsi7dyfTdzzeTqEar7bpxEDIO
+A3AXQKBgD825+ykNYEKdaj+oBNf5NN9QZ1sDfRksBfmG4vnJSvV8HZGePHy+mJ0
ba82D81i606rahUTOWNathrTTl6ltDY3rAXb+89aI71DnFA2Zx7h01L0a5OZNp4A
8LOfALw8rrv2icC/4RhHPjl7MPLBAIUM8RrLqLuaLKiJpdwo7Qad
-----END RSA PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArSevYBRhek89GA1hEOWb
5tc8hIMic3fuQB9901QOkgAFM1h33vtX+FOjVlEchdn/S0RLVGatnRSIkcnJufOe
wDVmuvPYrfIxg0bEgyG0h+VyX4fZtOJPl7T5aq69n3XuAAMd9vw250WwnbaJ465E
dHporZnwTf5qWkFgxkVOc/6vC1dNOrWo2g18pIy+tLSYb/hw5l95T4EhS8qMOvq7
wHh2ukUsb1hhm5HuI3aGTByVYLjxssruTQXMaryUmiao1/JsgAnZwgwMJJv5KlTy
2iW03NzItKqh5kdbK/WglktBgrEkJLtgIVcHa4yC5WQz1gQ/NsgA3dIMprQWdXxB
BQIDAQAB
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAre9fEVylFScJuFdhqE5N
F9neEfEbJqXa8UJ8gG0BPD+AcSQD2WAq2GUODzIfZnDHAnkh6uoTEj5YGSsWDsBy
QDiO4P1nG7Rn7F5M6sn52bRvCgAj9+cpHIH3xlYuTASDNWhu2oddaNGaZhbbnk/H
GFneFtfjSnzmxQ74lNYPMFeZGui/s3oofuRIsumXfZvKvg43Ux2kFU5YCKyy8p/u
qZMILdxDMVQcu8DfpNkSuueolakR3OLbT1lnOxwlWtbvV4hUdiueqiQyi7eJxFid
zvqgtA/vpfDf25WSN02FNO5wvY95nVrPKTkrwEDvtRoO+i0zNk9Wxi+WrdWWKEQZ
nwIDAQAB
-----END PUBLIC KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCtJ69gFGF6Tz0Y
DWEQ5Zvm1zyEgyJzd+5AH33TVA6SAAUzWHfe+1f4U6NWURyF2f9LREtUZq2dFIiR
ycm5857ANWa689it8jGDRsSDIbSH5XJfh9m04k+XtPlqrr2fde4AAx32/DbnRbCd
tonjrkR0emitmfBN/mpaQWDGRU5z/q8LV006tajaDXykjL60tJhv+HDmX3lPgSFL
yow6+rvAeHa6RSxvWGGbke4jdoZMHJVguPGyyu5NBcxqvJSaJqjX8myACdnCDAwk
m/kqVPLaJbTc3Mi0qqHmR1sr9aCWS0GCsSQku2AhVwdrjILlZDPWBD82yADd0gym
tBZ1fEEFAgMBAAECggEAHSXJB8tmfUhJaHsYE9gS3lDtBwFsEzPlDzY94A0ORtVq
CrKhuw9kR5EMtcMBoiaIKwtcAuEl6INEWgY1xu+TkZdrq5zQpLdYTljjS4+o7Bdb
oWkk5KYT792u/p5bnTQk1CuyJ5ldRKEeke3gWEtFirXwWQjIwthI3tiSic2w3yWB
Px7nlGUFZIEj7MQZiCWKEhhAVIiLpMMwAwIvfZs/+8n5a91nBrqqGZKrt11vJCF7
hNGZ/GfzKALiX7LwXoZpnoE0cCrPXxT4nWWSEyRcjwQLfwRJLQ6Pj/b1AryCz/G3
NxgGj6NMFY8bzNMj54zJd/T6MgALV00djdyNNBhUIQKBgQDUVXTeLvpVZNnQaNln
8oABCgq3YueSDi/xX4t5FVAtT7GkhzGgC5qdCyxbllDNWq7+Qdzb3YoojPparSrK
i/wyY49NBE8MX2kT1MfBw+u0qs05+Xh74n2lBIe75kO6PFEeOT9pFcRiRyUL+cRA
hx7JxtPA+xkDZN1MUsnlhxZlVwKBgQDQw55VWce49+19gAQh8BScDDWyiKVhp9GK
X0sVYTGS6xGzD9TrhyjdJ/SUXEv/0mlUJK5x9SNzgwOXjS3plJlJmdJBDXnWn5yq
SY8rgJ91DnkYPc3s/6oA0ISog9l/lpOu3udL3emJ/fM0KNmBy5kddv/OFTQoL25r
a6DKoKvXAwKBgQDERTXhBuWpN67LIZAMsLC3xTOArnDFpk2UvS+sPhI9wBPBtKIf
gXpqveBDzJ9mIvPs3K6toYvKzf3BAZ6zWVBGt5bHpzr2gd8cUKxRJKvk9Zj8hOhl
A0gG2DgrbL6gEI8e8+X0WgWMnpzVBAvvZbcE5r/n+3L0mzCgE0rC2urNwwKBgQC0
ZDSO3/N625F13oazpLbKWKqVyQnPJqoj/U/t+3xQzZsPtWBw3OvsnjfzcwWg2vp0
4PV0NzUY/V6/OBkyO1txg99woupjEKzZYJK8LnqbNZRh5BXq8si9x3C6BKSOYVjf
xHDs16aTvMLIkXvRclKuaUOFmkDlcIbjf68DKG8UbQKBgQC2rNlANOhvXj5kQp1q
F5aS97VTd5H/AzPTCQ8ctm6jAbbHbX3rITgUXEbWq8ZGTd7VunUPo/BiBAaYukpX
1HROUS3j0FHUxxe7ryxoSwH5KOojRF4NMn72LhNxBo60k5atD7yOpsbklTxz4VyD
AQtIg483qMemUN48HxG6l1wNiA==
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCt718RXKUVJwm4
V2GoTk0X2d4R8RsmpdrxQnyAbQE8P4BxJAPZYCrYZQ4PMh9mcMcCeSHq6hMSPlgZ
KxYOwHJAOI7g/WcbtGfsXkzqyfnZtG8KACP35ykcgffGVi5MBIM1aG7ah11o0Zpm
FtueT8cYWd4W1+NKfObFDviU1g8wV5ka6L+zeih+5Eiy6Zd9m8q+DjdTHaQVTlgI
rLLyn+6pkwgt3EMxVBy7wN+k2RK656iVqRHc4ttPWWc7HCVa1u9XiFR2K56qJDKL
t4nEWJ3O+qC0D++l8N/blZI3TYU07nC9j3mdWs8pOSvAQO+1Gg76LTM2T1bGL5at
1ZYoRBmfAgMBAAECggEAT4LYe7BVStkgqWNQokbBGUEgMiV82usArj9NeMvbv7Xr
ukzTcaBzlZ6Ekc/A6OxvHSNQrPm6JCHZ1g+LMs0orVDth85vPwv2Yegt0zrne2zv
QawUxTOn6H9FTCaDXX7GmDiYTE+LFOqUYUzbsoAXrHsQenLQVXHJcJXKbwd3xAnW
YabFsY9FCBjxsLPT/AGOoO2qWx1y+Myj67jnEHPcUbUoGsQUmk9ll2k2/MIMvOmU
xxsnDzm+1sSs/OWoQuwkVMsp58Psgh8nhgYtevUf7poWo26ppLjZKGxrp6DCWWxW
P6ZURr7yqd8YZwyVck6h5PMegb2oKQ1xdaASo8shuQKBgQDWTv8HIxQXuswkg1p5
MKQf4pV5Fz/Wu8k9UBKssrCiriBXZeeEayYMGti/N80V+ah/HclyWZU01NQlpH4s
jTXMxdq39pAsCSts91ngcfb/R9KZIO6/xD4dJavKSkUrjR+xCZZk6HsBZN0UFEXc
P3yF92pkDDzZkDw4n0aivBhN5QKBgQDPxbDeOBYYof/6VdhGXqAXu9OzyzGNEm3D
BUKt22ug8L7e9X/Wd1OaodKdjzE/dSIycXTyHUKtjtpvWbylqfNYLCaRi1uqW+WS
/dbpK0HQzyOtmY+7s0tvchhVYS5xrrkkLOWkQOhwdQEYI/p9n6OZthhS5TtyOW6O
dInfdDjxMwKBgB1uK8enIZNAq9g30azi6ScXzr8aWkH699/bpzTgNTGiB/74l5qv
vEHdTfa0iw2Bg4oxZQC3HK5sq9WfiVRE8CZ25VpuGc5yU+xa65TPEcRs8Jbm1uKu
6HjIO5dEK8uXTcraLjUdWAcQ+utO/WkJrugW2h1zMMgP7rU36lNe0VehAoGBAK+a
aDgIszQyh0SvFVG0XB5zEyRcUg7nSnmPkqGaV8b4cnnCiD9dLv38UyPziC4X88Uq
eyq+bEKAAEIoV/a0QwV8m0Rbwiej785iWCdN9hxjVcY9iWucx97zUXmn3zcZ80SN
5bEDYvDZEwmyLt3J9N3PN5OoRqvtunEQMg74DcBdAoGAPzbn7KQ1gQp1qP6gE1/k
031BnWwN9GSwF+Ybi+clK9XwdkZ48fL6YnRtrzYPzWLrTqtqFRM5Y1q2GtNOXqW0
NjesBdv7z1ojvUOcUDZnHuHTUvRrk5k2ngDws58AvDyuu/aJwL/hGEc+OXsw8sEA
hQzxGsuou5osqIml3CjtBp0=
-----END PRIVATE KEY-----
......@@ -12,15 +12,15 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import iot.sixiang.license.auth.AuthManager;
import iot.sixiang.license.device.DeviceManager;
import iot.sixiang.license.entity.Permission;
import iot.sixiang.license.entity.Report;
import iot.sixiang.license.entity.User;
import iot.sixiang.license.entity.UserPermission;
import iot.sixiang.license.handler.IotLicenseException;
import iot.sixiang.license.jwt.UserUtils;
import iot.sixiang.license.log.BusinessType;
import iot.sixiang.license.log.MyLog;
import iot.sixiang.license.mapper.UserMapper;
import iot.sixiang.license.model.BaseResult;
import iot.sixiang.license.model.PageInfoModel;
import iot.sixiang.license.model.PageResult;
......@@ -28,10 +28,7 @@ import iot.sixiang.license.model.ResResult;
import iot.sixiang.license.model.dto.AssignUserPermissionDTO;
import iot.sixiang.license.model.dto.UpdateNotifyDTO;
import iot.sixiang.license.model.vo.*;
import iot.sixiang.license.service.PermissionService;
import iot.sixiang.license.service.ReportService;
import iot.sixiang.license.service.UserPermissionService;
import iot.sixiang.license.service.UserService;
import iot.sixiang.license.service.*;
import iot.sixiang.license.util.CommonUtil;
import iot.sixiang.license.util.EmailUtils;
import iot.sixiang.license.util.TreeUtil;
......@@ -45,7 +42,6 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
......@@ -63,12 +59,20 @@ public class UserController {
@Resource
EmailUtils emailUtils;
@Autowired
@Resource
private UserService userService;
@Resource
private PermissionService permissionService;
@Resource
private UserPermissionService userPermissionService;
@Resource
private ApplyService applyService;
@Resource
private DeviceService deviceService;
@Resource
private DeviceManager deviceManager;
@Resource
private AuthManager authManager;
@Value("${rsa.private_key}")
private String PRIVATE_KRY;
......@@ -147,8 +151,16 @@ public class UserController {
if (!CommonUtil.checkPermission(userPermissions, 2)) {
throw new IotLicenseException(403, "您无删除用户权限!");
}
List<UserChildIdVO> childUser = userService.getChildUser(Integer.parseInt(userId));
if (!childUser.isEmpty()) {
throw new IotLicenseException(403, "该账户存在子账号,请先删除所有子账号!");
}
deviceService.deleteByUserId(Integer.parseInt(userId));
applyService.deleteByUserId(Integer.parseInt(userId));
boolean res = userService.deleteUser(Integer.parseInt(userId));
userPermissionService.deleteUserPermission(Integer.parseInt(userId));
deviceManager.initDevices();
authManager.initApps();
UserUtils.removeToken(userId);
UserUtils.removeTokenExp(userId);
if (res) {
......
......@@ -21,4 +21,6 @@ public interface ApplyMapper extends BaseMapper<Apply> {
List<AppVo> getAppList(String appName, List<Integer> userChildIds);
Apply getApplyByAppName(String appName);
void deleteByUserId(Integer userId);
}
......@@ -18,4 +18,6 @@ public interface DeviceMapper extends BaseMapper<Device> {
boolean addDevice(String sn, String appId);
int updateDeviceById(Device device);
void deleteByUserId(int userId);
}
......@@ -20,4 +20,6 @@ public interface ApplyService extends IService<Apply> {
boolean addApply(String appName, String appKey, int userId);
PageInfoModel<AppVo> getAppList(int pageNo, int pageSize, String appName, List<Integer> userChildIds);
void deleteByUserId(Integer userId);
}
......@@ -30,4 +30,6 @@ public interface DeviceService extends IService<Device> {
ResResult getBindStatus(TerminalDevieUnBindDTO terminalDevieUnBindDTO);
BaseResult platFormBind(PlatFormBindDTO platFormBindDTO);
void deleteByUserId(int userId);
}
......@@ -71,4 +71,9 @@ public class ApplyServiceImpl extends ServiceImpl<ApplyMapper, Apply> implements
objectPageInfoModel.setResult(result);
return objectPageInfoModel;
}
@Override
public void deleteByUserId(Integer userId) {
applyMapper.deleteByUserId(userId);
}
}
......@@ -156,7 +156,15 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
if (deviceId.equals(device.getDeviceId())) {
return BaseResult.success();
} else {
return BaseResult.failed().setMsgValue("设备sn已被绑定");
return BaseResult.failed().setMsgValue("设备编码已被绑定");
}
}
LambdaQueryWrapper<Device> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(Device::getSn, sn).last("limit 1");
Device device1 = deviceMapper.selectOne(lambdaQueryWrapper);
if (device1 != null) {
if (!deviceId.equals(device1.getDeviceId())) {
return BaseResult.failed().setMsgValue("SN已存在");
}
}
LambdaQueryWrapper<Device> wrapper = new LambdaQueryWrapper<>();
......@@ -180,4 +188,9 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
return BaseResult.failed();
}
}
@Override
public void deleteByUserId(int userId) {
deviceMapper.deleteByUserId(userId);
}
}
......@@ -45,7 +45,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
throw new IotLicenseException(ResultCode.VALIDATE_FAILED.getCode(), ResultCode.VALIDATE_FAILED.getMsg());
}
List<UserVo> records = userMapper.getUserList(userName, company, userIds);
records = records.stream().sorted(Comparator.comparing(UserVo::getCreateTime, Comparator.reverseOrder())).collect(Collectors.toList());
records = records.stream().sorted(Comparator.comparing(UserVo::getCreateTime, Comparator.reverseOrder())).sorted(Comparator.comparing(UserVo::getLevel)).collect(Collectors.toList());
List<UserVo> result = new ArrayList<>();
int begin = (pageNo - 1) * pageSize;
if (begin >= 0 && records.size() > 0) {
......
......@@ -6,9 +6,15 @@
app.app_id, app.app_name, app.app_key, app.create_time, app.update_time, us.user_id,
COUNT(sn) AS deviceCount, us.user_name, us.company
</sql>
<insert id="addApply" parameterType="iot.sixiang.license.entity.Apply">
insert into apply(app_id,app_name, app_key, user_id, create_time, update_time) values (#{appId}, #{appName}, #{appKey}, #{userId}, now(), now())
</insert>
<delete id="deleteByUserId">
delete from `apply` where user_id = #{userId}
</delete>
<select id="getAppList" resultType="iot.sixiang.license.model.vo.AppVo">
SELECT <include refid="AppVoColumn"/>
FROM apply AS app LEFT JOIN device AS de ON app.app_id = de.app_id
......
<?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="iot.sixiang.license.mapper.DeviceMapper">
<delete id="deleteByUserId">
delete device from device,apply,`user` WHERE device.app_id = apply.app_id
and user.user_id = apply.user_id and user.user_id = #{userId}
</delete>
<select id="getDeviceList" resultType="iot.sixiang.license.model.vo.DeviceVo">
SELECT de.device_id, de.app_id, app_name,user_name,sn,sn_bind,de.status,de.create_time,de.update_time,de.device_id IN (select
......
......@@ -15,7 +15,7 @@
</update>
<select id="getUserList" resultType="iot.sixiang.license.model.vo.UserVo">
SELECT user.user_id, user_name, password, company, user.create_time, user.update_time,
SELECT user.user_id, user_name, password, company, user.level, user.create_time, user.update_time,
COUNT(device.`device_id`) totalDevice,
COUNT(if(device.device_id is NOT NULL, if (device.`status` = 0 or device.`status` is NULL, 1, NULL), NULL))
unUseDevice,
......
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