Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
xyqb-user2
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
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
head_group
xyqb-user2
Commits
7cd8dc55
Commit
7cd8dc55
authored
Dec 13, 2019
by
杨锐
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
根据md5(phoneNo,idNo)获取用户信息 待测试。
parent
b73d7179
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
197 additions
and
2 deletions
+197
-2
UserHashPhoneNoIdNoMappingController.java
...ler/phonenoidno/UserHashPhoneNoIdNoMappingController.java
+115
-0
UserHashPhoneNoIdNoMapping.java
...cn/quantgroup/xyqb/entity/UserHashPhoneNoIdNoMapping.java
+24
-0
FindByMd5Enum.java
src/main/java/cn/quantgroup/xyqb/model/FindByMd5Enum.java
+32
-0
IUserHashPhoneNoIdNoMappingRepository.java
...yqb/repository/IUserHashPhoneNoIdNoMappingRepository.java
+9
-0
UserServiceImpl.java
...cn/quantgroup/xyqb/service/user/impl/UserServiceImpl.java
+17
-2
No files found.
src/main/java/cn/quantgroup/xyqb/controller/phonenoidno/UserHashPhoneNoIdNoMappingController.java
0 → 100644
View file @
7cd8dc55
package
cn
.
quantgroup
.
xyqb
.
controller
.
phonenoidno
;
import
cn.quantgroup.xyqb.entity.UserHashPhoneNoIdNoMapping
;
import
com.google.common.collect.Lists
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.jdbc.core.BatchPreparedStatementSetter
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.jdbc.core.RowCallbackHandler
;
import
org.springframework.util.DigestUtils
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.annotation.Resource
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.util.List
;
/**
* 同步xyqb_user.user_detail
* <p>
* Date: 2019/12/13
* Time: 上午10:42
*
* @author: yangrui
*/
@Slf4j
@RestController
@RequestMapping
(
"/v1/phonenoidno"
)
public
class
UserHashPhoneNoIdNoMappingController
{
private
static
final
String
SYNC_DATA_PHONE_NO_ID_NO
=
"syncdataphonenoidno"
;
private
static
final
String
SYNC_DATA_PHONE_NO_ID_NO_SWITCH
=
"switch"
;
private
static
final
String
SYNC_DATA_PHONE_NO_ID_NO_LAST_ID
=
"last_id"
;
@Resource
private
StringRedisTemplate
stringRedisTemplate
;
@Resource
private
JdbcTemplate
jdbcTemplate
;
/**
* md5(phone_no,id_no)
* 本地环境模拟-Xms3G -Xmx3G,单线程同步实际时间45分钟
*
* @return
*/
@GetMapping
(
"/sync/data"
)
public
String
syncData
()
{
log
.
info
(
"start"
);
long
start
=
System
.
currentTimeMillis
();
long
idStart
=
0
;
final
int
limit
=
5000
;
long
count
=
jdbcTemplate
.
queryForObject
(
"select count(id) from user_detail"
,
Long
.
class
);
Object
state
=
stringRedisTemplate
.
opsForHash
().
get
(
SYNC_DATA_PHONE_NO_ID_NO
,
SYNC_DATA_PHONE_NO_ID_NO_SWITCH
);
Object
lastIdObj
=
stringRedisTemplate
.
opsForHash
().
get
(
SYNC_DATA_PHONE_NO_ID_NO
,
SYNC_DATA_PHONE_NO_ID_NO_LAST_ID
);
if
(
lastIdObj
!=
null
)
{
idStart
=
(
long
)
lastIdObj
;
}
if
(
state
==
null
||
"on"
.
equals
(
state
))
{
if
(
count
>
0
)
{
long
page
=
count
/
limit
+
1
;
for
(
int
i
=
0
;
i
<
page
;
i
++)
{
List
<
UserHashPhoneNoIdNoMapping
>
userHashPhoneNoIdNoMappings
=
Lists
.
newArrayList
();
jdbcTemplate
.
query
(
"select id, user_id, phone_no, id_no"
+
" from user_detail where id > ? limit ?"
,
new
Object
[]{
idStart
,
limit
},
new
RowCallbackHandler
()
{
@Override
public
void
processRow
(
ResultSet
rs
)
throws
SQLException
{
UserHashPhoneNoIdNoMapping
userHashPhoneNoIdNoMapping
=
new
UserHashPhoneNoIdNoMapping
();
/* 暂存 */
userHashPhoneNoIdNoMapping
.
setId
(
rs
.
getLong
(
"id"
));
userHashPhoneNoIdNoMapping
.
setUserId
(
rs
.
getLong
(
"user_id"
));
userHashPhoneNoIdNoMapping
.
setPhoneNoIdNoMd5
(
DigestUtils
.
md5DigestAsHex
((
rs
.
getString
(
"phone_no"
)
+
rs
.
getString
(
"id_no"
)).
toLowerCase
().
getBytes
()));
userHashPhoneNoIdNoMappings
.
add
(
userHashPhoneNoIdNoMapping
);
}
});
// TODO: 2019/12/13 rewriteBatchedStatements=true
if
(
CollectionUtils
.
isNotEmpty
(
userHashPhoneNoIdNoMappings
))
{
jdbcTemplate
.
batchUpdate
(
"insert into user_hash_phone_no_id_no_mapping (user_id, phone_no_id_no_md5) values (?,?)"
,
new
BatchPreparedStatementSetter
()
{
@Override
public
void
setValues
(
PreparedStatement
ps
,
int
i
)
throws
SQLException
{
UserHashPhoneNoIdNoMapping
userHashPhoneNoIdNoMapping
=
userHashPhoneNoIdNoMappings
.
get
(
i
);
ps
.
setLong
(
1
,
userHashPhoneNoIdNoMapping
.
getUserId
());
ps
.
setString
(
2
,
userHashPhoneNoIdNoMapping
.
getPhoneNoIdNoMd5
());
}
@Override
public
int
getBatchSize
()
{
return
userHashPhoneNoIdNoMappings
.
size
();
}
});
}
idStart
=
userHashPhoneNoIdNoMappings
.
get
(
userHashPhoneNoIdNoMappings
.
size
()
-
1
).
getId
();
stringRedisTemplate
.
opsForHash
().
put
(
SYNC_DATA_PHONE_NO_ID_NO
,
SYNC_DATA_PHONE_NO_ID_NO_LAST_ID
,
String
.
valueOf
(
idStart
));
}
}
}
log
.
info
(
"done cost time = 【{}】"
,
System
.
currentTimeMillis
()
-
start
);
return
"SUCCESS"
;
}
@GetMapping
(
"/sync/data/stop"
)
public
String
syncDataStop
()
{
stringRedisTemplate
.
opsForHash
().
put
(
SYNC_DATA_PHONE_NO_ID_NO
,
SYNC_DATA_PHONE_NO_ID_NO_SWITCH
,
"off"
);
return
"SUCCESS"
;
}
@GetMapping
(
"/sync/data/open/switch"
)
public
String
syncDataOpenSwitch
()
{
stringRedisTemplate
.
opsForHash
().
put
(
SYNC_DATA_PHONE_NO_ID_NO
,
SYNC_DATA_PHONE_NO_ID_NO_SWITCH
,
"on"
);
return
"SUCCESS"
;
}
}
src/main/java/cn/quantgroup/xyqb/entity/UserHashPhoneNoIdNoMapping.java
0 → 100644
View file @
7cd8dc55
package
cn
.
quantgroup
.
xyqb
.
entity
;
import
lombok.Data
;
import
javax.persistence.*
;
import
java.sql.Timestamp
;
@Data
@Entity
@Table
(
name
=
"user_hash_phone_no_id_no_mapping"
)
public
class
UserHashPhoneNoIdNoMapping
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Long
id
;
@Column
(
name
=
"user_id"
)
private
Long
userId
;
@Column
(
name
=
"phone_no_id_no_md5"
)
private
String
phoneNoIdNoMd5
;
@Column
(
name
=
"created_at"
)
private
Timestamp
createdAt
;
@Column
(
name
=
"updated_at"
)
private
Timestamp
updatedAt
;
}
src/main/java/cn/quantgroup/xyqb/model/FindByMd5Enum.java
0 → 100644
View file @
7cd8dc55
package
cn
.
quantgroup
.
xyqb
.
model
;
import
lombok.Getter
;
/**
* Date: 2019/12/13
* Time: 上午11:22
*
* @author: yangrui
*/
@Getter
public
enum
FindByMd5Enum
{
/**
* md5(phoneNo)
*/
PHONENO
(
1
),
/**
* md5(idNo)
*/
IDNO
(
2
),
/**
* md5(phoneNoidNo)
*/
PHONENOIDNO
(
3
),;
private
int
type
;
FindByMd5Enum
(
int
type
)
{
this
.
type
=
type
;
}
}
src/main/java/cn/quantgroup/xyqb/repository/IUserHashPhoneNoIdNoMappingRepository.java
0 → 100644
View file @
7cd8dc55
package
cn
.
quantgroup
.
xyqb
.
repository
;
import
cn.quantgroup.xyqb.entity.UserHashPhoneNoIdNoMapping
;
import
org.springframework.data.jpa.repository.JpaRepository
;
public
interface
IUserHashPhoneNoIdNoMappingRepository
extends
JpaRepository
<
UserHashPhoneNoIdNoMapping
,
Long
>
{
UserHashPhoneNoIdNoMapping
findFirstByPhoneNoIdNoMd5
(
String
phoneNoIdNoMd5
);
}
src/main/java/cn/quantgroup/xyqb/service/user/impl/UserServiceImpl.java
View file @
7cd8dc55
...
...
@@ -4,10 +4,13 @@ import cn.quantgroup.xyqb.Constants;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.UserDetail
;
import
cn.quantgroup.xyqb.entity.UserHashMapping
;
import
cn.quantgroup.xyqb.entity.UserHashPhoneNoIdNoMapping
;
import
cn.quantgroup.xyqb.event.PhoneNoUpdateEvent
;
import
cn.quantgroup.xyqb.exception.DataException
;
import
cn.quantgroup.xyqb.model.FindByMd5Enum
;
import
cn.quantgroup.xyqb.model.UserInfo
;
import
cn.quantgroup.xyqb.repository.IUserHashMappingRepository
;
import
cn.quantgroup.xyqb.repository.IUserHashPhoneNoIdNoMappingRepository
;
import
cn.quantgroup.xyqb.repository.IUserRepository
;
import
cn.quantgroup.xyqb.service.user.IUserDetailService
;
import
cn.quantgroup.xyqb.service.user.IUserService
;
...
...
@@ -28,6 +31,7 @@ import org.springframework.stereotype.Service;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.Resource
;
import
java.sql.Timestamp
;
import
java.util.Collections
;
import
java.util.List
;
...
...
@@ -50,6 +54,9 @@ public class UserServiceImpl implements IUserService {
@Autowired
private
IUserHashMappingRepository
userHashMappingRepository
;
@Resource
private
IUserHashPhoneNoIdNoMappingRepository
userHashPhoneNoIdNoMappingRepository
;
@Autowired
private
IUserDetailService
userDetailService
;
...
...
@@ -196,10 +203,18 @@ public class UserServiceImpl implements IUserService {
md5Value
=
md5Value
.
toLowerCase
();
long
value
=
HashUtil
.
crc32
(
md5Value
);
UserHashMapping
userHashMapping
;
if
(
type
==
1
)
{
/* modify by yangrui on 2019/12/13 上午11:52 */
if
(
FindByMd5Enum
.
PHONENO
.
getType
()
==
type
)
{
userHashMapping
=
userHashMappingRepository
.
findByPhoneNoMd5ShortAndPhoneNoMd5
(
value
,
md5Value
);
}
else
{
}
else
if
(
FindByMd5Enum
.
IDNO
.
getType
()
==
type
)
{
userHashMapping
=
userHashMappingRepository
.
findByIdNoMd5ShortAndIdNoMd5
(
value
,
md5Value
);
}
else
{
userHashMapping
=
null
;
UserHashPhoneNoIdNoMapping
userHashPhoneNoIdNoMapping
=
userHashPhoneNoIdNoMappingRepository
.
findFirstByPhoneNoIdNoMd5
(
md5Value
);
if
(
userHashPhoneNoIdNoMapping
!=
null
)
{
userHashMapping
=
new
UserHashMapping
();
userHashMapping
.
setUserId
(
userHashPhoneNoIdNoMapping
.
getUserId
());
}
}
if
(
userHashMapping
==
null
)
{
return
null
;
...
...
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