Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
elearn
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hqzhdj
elearn
Commits
bcfed5b5
Commit
bcfed5b5
authored
Oct 18, 2024
by
阳浪
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
配置信息
parent
def59a6d
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
86 additions
and
125 deletions
+86
-125
cloud-core/src/main/java/com/yizhi/core/application/enums/InternationalEnums.java
+1
-1
cloud-core/src/main/java/com/yizhi/core/application/log/LogEventPublisher.java
+4
-5
cloud-core/src/main/java/com/yizhi/core/application/operatelog/intercepter/OperationLogInteceptor.java
+3
-5
cloud-core/src/main/java/com/yizhi/core/application/publish/CloudEventPublisher.java
+5
-5
cloud-gateWay/src/main/java/com/yizhi/application/filter/EntryFilter.java
+0
-1
cloud-gateWay/src/main/java/com/yizhi/application/filter/LogPostFilter.java
+3
-4
cloud-gateWay/src/main/java/com/yizhi/application/filter/LogPreFilter.java
+0
-21
cloud-gateWay/src/main/resources/bootstrap.properties
+3
-3
cloud-log/src/main/java/com/yizhi/application/LogApplication.java
+2
-1
cloud-log/src/main/resources/bootstrap.properties
+3
-3
cloud-orm/pom.xml
+0
-15
cloud-orm/src/main/java/com/yizhi/application/orm/generator/MybatisCodeGenerator.java
+1
-1
cloud-system-api/src/main/java/com/yizhi/system/application/vo/OutsideUserSyncVO.java
+1
-1
cloud-system-api/src/main/java/com/yizhi/system/application/vo/SaltAccountVO.java
+2
-2
cloud-system-api/src/main/java/com/yizhi/system/application/vo/SaltPlusAccountVO.java
+2
-2
cloud-system/pom.xml
+5
-0
cloud-system/src/main/java/com/yizhi/system/application/SystemApplication.java
+2
-2
cloud-system/src/main/java/com/yizhi/system/application/constant/CommunityParams.java
+1
-1
cloud-system/src/main/java/com/yizhi/system/application/constant/OutsideUserMsg.java
+1
-1
cloud-system/src/main/java/com/yizhi/system/application/controller/remote/SaltController.java
+28
-30
cloud-system/src/main/java/com/yizhi/system/application/service/impl/AccountImportServiceImpl.java
+2
-2
cloud-system/src/main/java/com/yizhi/system/application/service/impl/AccountServiceImpl.java
+4
-5
cloud-system/src/main/java/com/yizhi/system/application/service/impl/OrganizationServiceImpl.java
+3
-4
cloud-system/src/main/resources/bootstrap.properties
+2
-2
cloud-system/src/test/java/com/yizhi/application/CodeGenerator.java
+1
-1
cloud-system/src/test/resources/jdbc-tomcat.properties
+1
-1
cloud-util/src/main/java/com/yizhi/util/application/regex/RegexUtil.java
+1
-1
pom.xml
+4
-4
wmy.json
+1
-1
No files found.
cloud-core/src/main/java/com/yizhi/core/application/enums/InternationalEnums.java
View file @
bcfed5b5
...
...
@@ -41,7 +41,7 @@ public enum InternationalEnums {
SALTCONTROLLER3
(
"SaltController3"
,
"用户名禁止明文传输"
),
SALTCONTROLLER4
(
"SaltController4"
,
"传递的appId有误"
),
SALTCONTROLLER5
(
"SaltController5"
,
"传递的盐和加密用户名中的盐不一致"
),
SALTCONTROLLER6
(
"SaltController6"
,
"
学习平台
暂无本账户信息,请联系管理员!"
),
SALTCONTROLLER6
(
"SaltController6"
,
"
智慧党建
暂无本账户信息,请联系管理员!"
),
SALTCONTROLLER7
(
"SaltController7"
,
"加密失败!"
),
SALTCONTROLLER8
(
"SaltController8"
,
"解密失败!"
),
SALTCONTROLLER9
(
"SaltController9"
,
"更新失败,无效的AppId"
),
...
...
cloud-core/src/main/java/com/yizhi/core/application/log/LogEventPublisher.java
View file @
bcfed5b5
...
...
@@ -4,8 +4,6 @@
package
com
.
yizhi
.
core
.
application
.
log
;
import
com.yizhi.core.application.event.LogEvent
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
...
...
@@ -16,11 +14,12 @@ import org.springframework.stereotype.Component;
@Component
public
class
LogEventPublisher
{
@Autowired
RabbitTemplate
rabbitTemplate
;
/*
@Autowired
RabbitTemplate rabbitTemplate;
*/
public
<
T
>
void
publish
(
LogEvent
<
T
>
event
)
{
rabbitTemplate
.
convertAndSend
(
event
.
getQueue
(),
event
.
getData
());
//rabbitTemplate.convertAndSend(event.getQueue(),event.getData());
}
}
cloud-core/src/main/java/com/yizhi/core/application/operatelog/intercepter/OperationLogInteceptor.java
View file @
bcfed5b5
...
...
@@ -17,8 +17,6 @@ import com.yizhi.core.application.operatelog.source.Version;
import
com.yizhi.core.application.log.OperateLog
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.amqp.core.AmqpTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.method.HandlerMethod
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
org.springframework.web.servlet.ModelAndView
;
...
...
@@ -27,9 +25,9 @@ import com.yizhi.util.application.constant.QueueConstant;
import
com.yizhi.util.application.json.JsonUtil
;
public
class
OperationLogInteceptor
implements
HandlerInterceptor
{
/*
@Autowired
private
AmqpTemplate
rabbitTemplate
;
private AmqpTemplate rabbitTemplate;
*/
private
Logger
logger
=
LoggerFactory
.
getLogger
(
getClass
());
...
...
@@ -86,7 +84,7 @@ public class OperationLogInteceptor implements HandlerInterceptor {
}
// 获取操作系统和浏览器信息
setBrowserAndOS
(
request
,
operateLog
);
rabbitTemplate
.
convertAndSend
(
QueueConstant
.
OPERATE_LOG_QUEUE
,
operateLog
);
//
rabbitTemplate.convertAndSend(QueueConstant.OPERATE_LOG_QUEUE, operateLog);
logger
.
info
(
"operate log ======"
,
operateLog
);
}
}
catch
(
Exception
el
)
{
...
...
cloud-core/src/main/java/com/yizhi/core/application/publish/CloudEventPublisher.java
View file @
bcfed5b5
...
...
@@ -4,8 +4,6 @@
package
com
.
yizhi
.
core
.
application
.
publish
;
import
com.yizhi.core.application.event.EventWrapper
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
...
...
@@ -17,12 +15,13 @@ import org.springframework.stereotype.Component;
@Component
public
class
CloudEventPublisher
{
@Autowired
RabbitTemplate
rabbitTemplate
;
//
@Autowired
//
RabbitTemplate rabbitTemplate;
public
<
T
>
void
publish
(
String
queue
,
EventWrapper
<
T
>
event
)
{
rabbitTemplate
.
convertAndSend
(
queue
,
event
);
//rabbitTemplate.convertAndSend(queue,event);
}
}
\ No newline at end of file
cloud-gateWay/src/main/java/com/yizhi/application/filter/EntryFilter.java
View file @
bcfed5b5
...
...
@@ -23,7 +23,6 @@ import io.jsonwebtoken.Claims;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.amqp.core.AmqpTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
...
...
cloud-gateWay/src/main/java/com/yizhi/application/filter/LogPostFilter.java
View file @
bcfed5b5
...
...
@@ -9,7 +9,6 @@ import com.yizhi.logging.dto.RequestLogDTO;
import
com.yizhi.util.application.constant.GlobalConstant
;
import
com.yizhi.util.application.constant.QueueConstant
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
...
...
@@ -42,9 +41,9 @@ public class LogPostFilter extends BaseZuulFilter {
@Value
(
"${gateway.logSwitch:false}"
)
private
Boolean
logSwitch
;
/*
@Autowired
private
RabbitTemplate
rabbitTemplate
;
private RabbitTemplate rabbitTemplate;
*/
@Override
public
boolean
shouldFilter
()
{
...
...
@@ -110,7 +109,7 @@ public class LogPostFilter extends BaseZuulFilter {
.
terminalType
(
getUserAgent
(
request
.
getHeader
(
"User-Agent"
)))
.
build
();
rabbitTemplate
.
convertAndSend
(
QueueConstant
.
REQUEST_LOG_QUEUE
,
requestLogDTO
);
//
rabbitTemplate.convertAndSend(QueueConstant.REQUEST_LOG_QUEUE, requestLogDTO);
return
null
;
}
...
...
cloud-gateWay/src/main/java/com/yizhi/application/filter/LogPreFilter.java
View file @
bcfed5b5
package
com
.
yizhi
.
application
.
filter
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.net.InetAddress
;
import
java.net.UnknownHostException
;
import
java.nio.charset.Charset
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.UUID
;
import
javax.servlet.http.HttpServletRequest
;
import
com.yizhi.core.application.cache.CacheNamespace
;
import
lombok.extern.slf4j.Slf4j
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.LinkedMultiValueMap
;
import
org.springframework.util.MultiValueMap
;
import
org.springframework.util.StreamUtils
;
import
com.netflix.zuul.ZuulFilter
;
import
com.netflix.zuul.context.RequestContext
;
import
org.springframework.util.StringUtils
;
/**
* @ClassName LogPostFilter
...
...
cloud-gateWay/src/main/resources/bootstrap.properties
View file @
bcfed5b5
server.port
=
8090
spring.application.name
=
gateWay
ACTIVE
=
${spring.profiles.active}
spring.profiles.active
=
wmy4
spring.profiles.active
=
prod
# nacos
spring.cloud.nacos.config.shared-dataids
=
common-${spring.profiles.active}.properties
spring.cloud.nacos.config.namespace
=
${spring.profiles.active}
spring.cloud.nacos.config.prefix
=
${spring.application.name}
spring.cloud.nacos.config.file-extension
=
properties
spring.cloud.nacos.config.server-addr
=
192.168.1.9:8848
\ No newline at end of file
spring.cloud.nacos.config.server-addr
=
10.23.1.183:8848
\ No newline at end of file
cloud-log/src/main/java/com/yizhi/application/LogApplication.java
View file @
bcfed5b5
...
...
@@ -4,12 +4,13 @@ import com.yizhi.core.application.log.LogQueue;
import
org.springframework.amqp.core.Queue
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.ComponentScan
;
@SpringBootApplication
@SpringBootApplication
(
exclude
=
{
RabbitAutoConfiguration
.
class
})
@EnableDiscoveryClient
@ComponentScan
(
basePackages
=
{
"com.yizhi"
})
public
class
LogApplication
{
...
...
cloud-log/src/main/resources/bootstrap.properties
View file @
bcfed5b5
server.port
=
35000
spring.application.name
=
log
ACTIVE
=
${spring.profiles.active}
spring.profiles.active
=
wmy401
spring.profiles.active
=
prod
# nacos
spring.cloud.nacos.config.shared-dataids
=
common-${spring.profiles.active}.properties
spring.cloud.nacos.config.namespace
=
${spring.profiles.active}
spring.cloud.nacos.config.prefix
=
${spring.application.name}
spring.cloud.nacos.config.file-extension
=
properties
spring.cloud.nacos.config.server-addr
=
192.168.1.7:3333
\ No newline at end of file
spring.cloud.nacos.config.server-addr
=
10.23.1.183:8848
\ No newline at end of file
cloud-orm/pom.xml
View file @
bcfed5b5
...
...
@@ -32,21 +32,6 @@
<dependency>
<groupId>
com.baomidou
</groupId>
<artifactId>
mybatis-plus
</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-jdbc</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.velocity</groupId>-->
<!-- <artifactId>velocity-engine-core</artifactId>-->
<!-- <version>2.0</version>-->
<!-- </dependency>-->
<dependency>
<groupId>
com.baomidou
</groupId>
<artifactId>
mybatisplus-spring-boot-starter
</artifactId>
<version>
1.0.5
</version>
</dependency>
...
...
cloud-orm/src/main/java/com/yizhi/application/orm/generator/MybatisCodeGenerator.java
View file @
bcfed5b5
...
...
@@ -58,7 +58,7 @@ public class MybatisCodeGenerator {
return
super
.
processTypeConvert
(
fieldType
);
}
});
dsc
.
setDriverName
(
"com.mysql.jdbc.Driver"
);
dsc
.
setDriverName
(
"com.mysql.
cj.
jdbc.Driver"
);
dsc
.
setUsername
(
"root"
);
dsc
.
setPassword
(
"fulan@321#$"
);
dsc
.
setUrl
(
"jdbc:mysql://192.168.0.150:3306/cloud_message?characterEncoding=utf8"
);
...
...
cloud-system-api/src/main/java/com/yizhi/system/application/vo/OutsideUserSyncVO.java
View file @
bcfed5b5
...
...
@@ -13,7 +13,7 @@ import java.util.List;
@Data
public
class
OutsideUserSyncVO
{
@ApiModelProperty
(
value
=
"接入方的应用唯一标识(对接时
学习平台
会生成提供到给对方)"
)
@ApiModelProperty
(
value
=
"接入方的应用唯一标识(对接时
智慧党建
会生成提供到给对方)"
)
private
String
appId
;
@ApiModelProperty
(
value
=
"接入的用户信息"
)
...
...
cloud-system-api/src/main/java/com/yizhi/system/application/vo/SaltAccountVO.java
View file @
bcfed5b5
...
...
@@ -20,10 +20,10 @@ public class SaltAccountVO {
@ApiModelProperty
(
"盐"
)
private
String
salt
;
@ApiModelProperty
(
"
学习平台
提供给第三方的appId"
)
@ApiModelProperty
(
"
智慧党建
提供给第三方的appId"
)
private
String
appId
;
@ApiModelProperty
(
"用户名验证方式:null或0=不验证用户名;1=第三方使用
学习平台的加密规则验证用户名;2=学习平台
使用第三方的加密规则验证用户名"
)
@ApiModelProperty
(
"用户名验证方式:null或0=不验证用户名;1=第三方使用
智慧党建的加密规则验证用户名;2=智慧党建
使用第三方的加密规则验证用户名"
)
private
Integer
type
;
@ApiModelProperty
(
"终端类型:1=安卓,0=IOS,3=微信,4=PC"
)
...
...
cloud-system-api/src/main/java/com/yizhi/system/application/vo/SaltPlusAccountVO.java
View file @
bcfed5b5
...
...
@@ -12,7 +12,7 @@ import lombok.Data;
public
class
SaltPlusAccountVO
{
@ApiModelProperty
(
"
学习平台
提供给第三方的appId"
)
@ApiModelProperty
(
"
智慧党建
提供给第三方的appId"
)
private
String
appId
;
@ApiModelProperty
(
"加密的账号名称(md5nm)"
)
...
...
@@ -24,7 +24,7 @@ public class SaltPlusAccountVO {
@ApiModelProperty
(
"盐"
)
private
String
salt
;
@ApiModelProperty
(
"用户名验证方式:null或0=不验证用户名;1=第三方使用
学习平台的加密规则验证用户名;2=学习平台
使用第三方的加密规则验证用户名"
)
@ApiModelProperty
(
"用户名验证方式:null或0=不验证用户名;1=第三方使用
智慧党建的加密规则验证用户名;2=智慧党建
使用第三方的加密规则验证用户名"
)
private
Integer
type
;
@ApiModelProperty
(
"提供的一次性校验值,访问后立即失效"
)
...
...
cloud-system/pom.xml
View file @
bcfed5b5
...
...
@@ -115,4 +115,8 @@
</plugins>
</build>
<properties>
<!-- 跳过测试 -->
<skipTests>
true
</skipTests>
</properties>
</project>
\ No newline at end of file
cloud-system/src/main/java/com/yizhi/system/application/SystemApplication.java
View file @
bcfed5b5
package
com
.
yizhi
.
system
.
application
;
import
feign.RequestInterceptor
;
import
feign.RequestTemplate
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
import
org.springframework.cloud.netflix.hystrix.EnableHystrix
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.core.env.Environment
;
import
org.springframework.scheduling.annotation.EnableAsync
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
import
java.net.InetAddress
;
import
java.net.UnknownHostException
;
import
java.util.Enumeration
;
@EnableHystrix
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
(
basePackages
=
"com.yizhi"
)
@EnableAsync
@ComponentScan
(
basePackages
=
{
"com.yizhi"
})
public
class
SystemApplication
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
SystemApplication
.
class
);
public
static
void
main
(
String
[]
args
)
throws
UnknownHostException
{
Environment
env
=
SpringApplication
.
run
(
SystemApplication
.
class
,
args
).
getEnvironment
();
String
port
=
env
.
getProperty
(
"server.port"
,
"8080"
);
logger
.
info
(
"Access URLs:\n----------------------------------------------------------\n\t"
+
"Local: \t\thttp://127.0.0.1:{}\n\t"
+
"External: \thttp://{}:{}\n----------------------------------------------------------"
,
port
,
InetAddress
.
getLocalHost
().
getHostAddress
(),
port
);
}
@Bean
//帮助调其他服务时,能取到上下文里面的信息 public RequestInterceptor headerInterceptor() { return new RequestInterceptor() { @Override public void apply(RequestTemplate requestTemplate) { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder .getRequestAttributes(); if (attributes != null) { HttpServletRequest request = attributes.getRequest(); Enumeration<String> headerNames = request.getHeaderNames(); if (headerNames != null) { while (headerNames.hasMoreElements()) { String name = headerNames.nextElement(); String values = request.getHeader(name); requestTemplate.header(name, values); } } } } }; } }
\ No newline at end of file
package
com
.
yizhi
.
system
.
application
;
import
feign.RequestInterceptor
;
import
feign.RequestTemplate
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
import
org.springframework.cloud.netflix.hystrix.EnableHystrix
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.core.env.Environment
;
import
org.springframework.scheduling.annotation.EnableAsync
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
import
java.net.InetAddress
;
import
java.net.UnknownHostException
;
import
java.util.Enumeration
;
@EnableHystrix
@SpringBootApplication
(
exclude
=
{
RabbitAutoConfiguration
.
class
})
@EnableDiscoveryClient
@EnableFeignClients
(
basePackages
=
"com.yizhi"
)
@EnableAsync
@ComponentScan
(
basePackages
=
{
"com.yizhi"
})
public
class
SystemApplication
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
SystemApplication
.
class
);
public
static
void
main
(
String
[]
args
)
throws
UnknownHostException
{
Environment
env
=
SpringApplication
.
run
(
SystemApplication
.
class
,
args
).
getEnvironment
();
String
port
=
env
.
getProperty
(
"server.port"
,
"8080"
);
logger
.
info
(
"Access URLs:\n----------------------------------------------------------\n\t"
+
"Local: \t\thttp://10.23.1.183:{}\n\t"
+
"External: \thttp://{}:{}\n----------------------------------------------------------"
,
port
,
InetAddress
.
getLocalHost
().
getHostAddress
(),
port
);
}
@Bean
//帮助调其他服务时,能取到上下文里面的信息 public RequestInterceptor headerInterceptor() { return new RequestInterceptor() { @Override public void apply(RequestTemplate requestTemplate) { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder .getRequestAttributes(); if (attributes != null) { HttpServletRequest request = attributes.getRequest(); Enumeration<String> headerNames = request.getHeaderNames(); if (headerNames != null) { while (headerNames.hasMoreElements()) { String name = headerNames.nextElement(); String values = request.getHeader(name); requestTemplate.header(name, values); } } } } }; } }
\ No newline at end of file
...
...
cloud-system/src/main/java/com/yizhi/system/application/constant/CommunityParams.java
View file @
bcfed5b5
...
...
@@ -5,7 +5,7 @@ package com.yizhi.system.application.constant;
*/
public
interface
CommunityParams
{
final
static
String
GET_TOKEN_LOCATION
=
"http://1
27.0.0.1
:8301"
;
final
static
String
GET_TOKEN_LOCATION
=
"http://1
0.23.1.183
:8301"
;
final
static
String
GET_TOKEN_URL
=
"/auth/oauth/token"
;
final
static
String
SYMBOL_1
=
"?"
;
final
static
String
SYMBOL_2
=
"="
;
...
...
cloud-system/src/main/java/com/yizhi/system/application/constant/OutsideUserMsg.java
View file @
bcfed5b5
...
...
@@ -7,7 +7,7 @@ public enum OutsideUserMsg {
TOKEN_INVALID
(
"19011"
,
"令牌无效!"
),
USER_IS_NULL
(
"19010"
,
"用户名为空!"
),
USER_STATUS_EXISTS
(
"19009"
,
"同步的用户必须指定状态!"
),
USER_NOT_EXISTS
(
"19008"
,
"
学习平台
暂无本账户信息,请联系管理员!"
),
USER_NOT_EXISTS
(
"19008"
,
"
智慧党建
暂无本账户信息,请联系管理员!"
),
USER_INFO_DECRYP_ERROR
(
"19007"
,
"包含用户信息解密失败"
),
USER_ORG_NAME_IS_EMPTY
(
"19006"
,
"包含用户组织信息为空的用户"
),
USER_FULL_NAME_IS_EMPTY
(
"19005"
,
"包含用户昵称为空的用户"
),
...
...
cloud-system/src/main/java/com/yizhi/system/application/controller/remote/SaltController.java
View file @
bcfed5b5
...
...
@@ -20,14 +20,10 @@ import com.yizhi.system.application.vo.SaltPlusAccountVO;
import
com.yizhi.system.application.vo.UpdateAccountReqVO
;
import
com.yizhi.system.application.vo.UpdateAccountVO
;
import
com.yizhi.system.application.vo.domain.Account
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
...
@@ -64,6 +60,8 @@ import com.yizhi.util.application.json.JsonUtil;
import
com.yizhi.util.application.regex.RegexUtil
;
import
com.yizhi.wechat.application.utils.HttpClientUtils
;
import
javax.annotation.Resource
;
/**
* 第三方用户数据同步接口
*
...
...
@@ -84,12 +82,12 @@ public class SaltController {
final
Integer
NO_VALIDATION
=
0
;
/**
* 第三方使用
学习平台
的加密规则验证用户名
* 第三方使用
智慧党建
的加密规则验证用户名
*/
final
Integer
SALT_VALIDATION
=
1
;
/**
*
学习平台
使用第三方的加密规则验证用户名
*
智慧党建
使用第三方的加密规则验证用户名
*/
final
Integer
OTHER_VALIDATION
=
2
;
...
...
@@ -114,14 +112,14 @@ public class SaltController {
@Autowired
IdGenerator
idGenerator
;
@
Autowired
@
Resource
AccountMapper
accountMapper
;
@Autowired
OrganizationIndexService
organizationIndexService
;
@Autowired
RabbitTemplate
rabbitTemplate
;
/*
@Autowired
RabbitTemplate rabbitTemplate;
*/
@Autowired
LogEventPublisher
publisher
;
...
...
@@ -326,7 +324,7 @@ public class SaltController {
if
(
StringUtils
.
isEmpty
(
nameString
))
{
publisher
.
publish
(
event
);
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER1
.
getName
()));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
InternationalEnums
.
SALTCONTROLLER1
.
getName
());
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -353,7 +351,7 @@ public class SaltController {
if
(
System
.
currentTimeMillis
()
>
expireTime
.
getTime
())
{
publisher
.
publish
(
event
);
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER2
.
getName
()+
appId
));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
InternationalEnums
.
SALTCONTROLLER2
.
getName
()+
appId
);
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -368,7 +366,7 @@ public class SaltController {
if
(
selectOne
.
getRsaState
().
equals
(
0
)){
publisher
.
publish
(
event
);
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER3
.
getName
()));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
InternationalEnums
.
SALTCONTROLLER3
.
getName
());
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -381,7 +379,7 @@ public class SaltController {
}
else
{
publisher
.
publish
(
event
);
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER4
.
getName
()+
appId
));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
InternationalEnums
.
SALTCONTROLLER4
.
getName
()+
appId
);
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -396,7 +394,7 @@ public class SaltController {
if
(
null
==
decryptName
)
{
publisher
.
publish
(
event
);
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER5
.
getName
()+
saltAccountVO
.
getSalt
()));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
InternationalEnums
.
SALTCONTROLLER5
.
getName
()+
saltAccountVO
.
getSalt
());
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -417,7 +415,7 @@ public class SaltController {
if
(
null
==
user
)
{
publisher
.
publish
(
event
);
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER6
.
getName
()+
nameString
));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
InternationalEnums
.
SALTCONTROLLER6
.
getName
()+
nameString
);
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -451,7 +449,7 @@ public class SaltController {
}
else
{
publisher
.
publish
(
event
);
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
Constants
.
MSG_NOT_SITE_ACCESS_AUTH
.
getName
()+
user
.
getName
()));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
Constants
.
MSG_NOT_SITE_ACCESS_AUTH
.
getName
()+
user
.
getName
());
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -465,7 +463,7 @@ public class SaltController {
e
.
printStackTrace
();
publisher
.
publish
(
event
);
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER7
.
getName
()));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
InternationalEnums
.
SALTCONTROLLER7
.
getName
());
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -479,7 +477,7 @@ public class SaltController {
e
.
printStackTrace
();
publisher
.
publish
(
event
);
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER8
.
getName
()));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
InternationalEnums
.
SALTCONTROLLER8
.
getName
());
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -544,7 +542,7 @@ public class SaltController {
String
appId
=
updateAccountReqVO
.
getAppId
();
if
(
null
==
appId
)
{
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER9
.
getName
()+
appId
));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
InternationalEnums
.
SALTCONTROLLER9
.
getName
()+
appId
);
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -566,7 +564,7 @@ public class SaltController {
if
(
System
.
currentTimeMillis
()
>
expireTime
.
getTime
())
{
String
error
=
InternationalEnums
.
SALTCONTROLLER10
.
getName
();
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
error
));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
InternationalEnums
.
SALTCONTROLLER10
.
getName
());
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -978,7 +976,7 @@ public class SaltController {
//错误的信息发送给任务详情表
if
(
CollectionUtils
.
isNotEmpty
(
failEvents
))
{
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
}
TaskLogEvent
successLogEvent
=
TaskLogEvent
.
success
(
taskContextTemp
,
"批量更新用户成功"
,
""
);
LogEvent
<
TaskLogEvent
>
successEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
successLogEvent
);
...
...
@@ -1019,7 +1017,7 @@ public class SaltController {
String
appId
=
updateAccountReqVO
.
getAppId
();
if
(
null
==
appId
)
{
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER49
.
getName
()));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
InternationalEnums
.
SALTCONTROLLER49
.
getName
()+
appId
);
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -1039,7 +1037,7 @@ public class SaltController {
if
(
System
.
currentTimeMillis
()
>
expireTime
.
getTime
())
{
String
error
=
InternationalEnums
.
SALTCONTROLLER50
.
getName
();
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER50
.
getName
()));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
TaskLogEvent
failLogEvent
=
TaskLogEvent
.
fail
(
taskContextTemp
,
InternationalEnums
.
SALTCONTROLLER50
.
getName
());
LogEvent
<
TaskLogEvent
>
faileEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
failLogEvent
);
publisher
.
publish
(
faileEvent
);
...
...
@@ -1439,7 +1437,7 @@ public class SaltController {
//错误的信息发送给任务详情表
if
(
CollectionUtils
.
isNotEmpty
(
failEvents
))
{
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
}
TaskLogEvent
successLogEvent
=
TaskLogEvent
.
success
(
taskContextTemp
,
"批量新增用户成功"
,
""
);
LogEvent
<
TaskLogEvent
>
successEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
successLogEvent
);
...
...
@@ -1478,7 +1476,7 @@ public class SaltController {
String
appId
=
updateAccountReqVO
.
getAppId
();
if
(
null
==
appId
)
{
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER59
.
getName
()));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
return
Response
.
fail
(
InternationalEnums
.
SALTCONTROLLER59
.
getName
());
}
// 查询companyId
...
...
@@ -1495,7 +1493,7 @@ public class SaltController {
if
(
System
.
currentTimeMillis
()
>
expireTime
.
getTime
())
{
String
error
=
InternationalEnums
.
SALTCONTROLLER60
.
getName
();
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
error
));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
return
Response
.
fail
(
error
);
}
com
.
yizhi
.
system
.
application
.
domain
.
Account
account
=
new
com
.
yizhi
.
system
.
application
.
domain
.
Account
();
...
...
@@ -1579,7 +1577,7 @@ public class SaltController {
}
if
(
CollectionUtils
.
isNotEmpty
(
failEvents
))
{
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
}
TaskLogEvent
successLogEvent
=
TaskLogEvent
.
success
(
taskContextTemp
,
"批量禁用用户成功"
,
""
);
LogEvent
<
TaskLogEvent
>
successEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
successLogEvent
);
...
...
@@ -1622,7 +1620,7 @@ public class SaltController {
String
appId
=
updateAccountReqVO
.
getAppId
();
if
(
null
==
appId
)
{
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
InternationalEnums
.
SALTCONTROLLER64
.
getName
()));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
return
Response
.
fail
(
InternationalEnums
.
SALTCONTROLLER64
.
getName
());
}
// 查询companyId
...
...
@@ -1639,7 +1637,7 @@ public class SaltController {
if
(
System
.
currentTimeMillis
()
>
expireTime
.
getTime
())
{
String
error
=
InternationalEnums
.
SALTCONTROLLER65
.
getName
();
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
error
));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
return
Response
.
fail
(
error
);
}
com
.
yizhi
.
system
.
application
.
domain
.
Account
account
=
new
com
.
yizhi
.
system
.
application
.
domain
.
Account
();
...
...
@@ -1723,7 +1721,7 @@ public class SaltController {
}
if
(
CollectionUtils
.
isNotEmpty
(
failEvents
))
{
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
}
TaskLogEvent
successLogEvent
=
TaskLogEvent
.
success
(
taskContextTemp
,
"查询用户成功"
,
""
);
LogEvent
<
TaskLogEvent
>
successEvent
=
new
LogEvent
<>(
LogQueue
.
TASK_LOG_QUEUE
,
successLogEvent
);
...
...
cloud-system/src/main/java/com/yizhi/system/application/service/impl/AccountImportServiceImpl.java
View file @
bcfed5b5
package
com
.
yizhi
.
system
.
application
.
service
.
impl
;
import
com.baomidou.mybatisplus.mapper.EntityWrapper
;
import
com.baomidou.mybatisplus.service.impl.ServiceImpl
;
import
com.yizhi.application.orm.id.IdGenerator
;
import
com.yizhi.application.orm.util.QueryUtil
;
import
com.yizhi.core.application.cache.RedisCache
;
import
com.yizhi.core.application.context.RequestContext
;
import
com.yizhi.core.application.exception.BizException
;
import
com.yizhi.core.application.log.LogQueue
;
import
com.yizhi.core.application.log.TaskLogDetailEvent
;
import
com.yizhi.system.application.constant.AccountExportConditionConstant
;
import
com.yizhi.system.application.constant.AuthzConstant
;
import
com.yizhi.system.application.constant.ImpAccountError
;
import
com.yizhi.system.application.domain.Account
;
import
com.yizhi.system.application.domain.Company
;
import
com.yizhi.system.application.domain.Organization
;
import
com.yizhi.system.application.mapper.*
;
import
com.yizhi.system.application.model.AccountImpModel
;
import
com.yizhi.system.application.model.ImportModel
;
import
com.yizhi.system.application.service.*
;
import
com.yizhi.system.application.service.using.OrganizationCacheService
;
import
com.yizhi.system.application.service.using.OrganizationIndexService
;
import
com.yizhi.util.application.constant.ReturnCode
;
import
com.yizhi.util.application.date.DateUtil
;
import
com.yizhi.util.application.encrypt.ShaEncrypt
;
import
com.yizhi.util.application.regex.RegexUtil
;
import
com.yizhi.wechat.application.feign.WeiXinClient
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Service
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
class
AccountImportServiceImpl
extends
ServiceImpl
<
AccountMapper
,
Account
>
implements
IAccountImportService
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
AccountImportServiceImpl
.
class
);
@Autowired
AccountMapper
accountMapper
;
@Autowired
AuthzAccountRoleMapper
accountRoleMapper
;
@Autowired
AuthzRoleMapper
roleMapper
;
@Autowired
IOrganizationService
orgService
;
@Autowired
SiteMapper
siteMapper
;
@Autowired
CompanyMapper
companyMapper
;
@Autowired
IdGenerator
idGenerator
;
@Autowired
AuthorityService
authorityService
;
@Autowired
AccountEnableLogMapper
logMapper
;
@Autowired
AuthzGroupMemberMapper
memberMapper
;
@Autowired
IAuthzUserGroupService
groupService
;
@Autowired
OrganizationMapper
organizationMapper
;
@Autowired
private
IOrganizationService
organizationService
;
@Autowired
private
AuthzGroupMemberMapper
groupMemberMapper
;
@Autowired
private
OrganizationIndexService
organizationIndexService
;
@Autowired
private
OrganizationCacheService
organizationCacheService
;
@Autowired
private
AuthService
authService
;
@Autowired
RabbitTemplate
rabbitTemplate
;
@Autowired
RedisCache
redisCache
;
@Autowired
private
ISmsSendRecordService
smsSendRecordService
;
@Autowired
private
WeiXinClient
weiXinClient
;
@Override
public
List
<
AccountImpModel
>
importAccount
(
ImportModel
importModel
,
RequestContext
context
)
{
List
<
AccountImpModel
>
models
=
importModel
.
getData
();
// 获取企业的id Long companyId = context.getCompanyId(); logger.info("当前用户的企业的companyId:" + companyId); // 获取当前企业的用户name 的列表 List<String> names = accountMapper.selectNamesByCompanyId(companyId); logger.info("names size:" + names.size()); names = names.parallelStream().map(name -> { return name.toLowerCase(); }).collect(Collectors.toList()); logger.info("names lowCase:" + names.size()); Long taskId = importModel.getTaskId(); if (CollectionUtils.isNotEmpty(models)) { List<TaskLogDetailEvent> failEvents = new ArrayList<TaskLogDetailEvent>(); // 根组织 Organization rootOrg = new Organization(); rootOrg.setParentId(0L); rootOrg.setDeleted(Boolean.valueOf(false)); rootOrg.setCompanyId(context.getCompanyId()); EntityWrapper<Organization> rootOrgEw = new EntityWrapper(rootOrg); rootOrgEw.like("code", AuthzConstant.DEFAULT_COMPANY_ORG_ROOT_CODE_SUFFIX); rootOrg = rootOrg.selectOne(rootOrgEw); if (null == rootOrg) { failEvents.add(new TaskLogDetailEvent(taskId, "!!!查找根组织错误:未成功查询到根组织!!!")); rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents); return models; } List<Account> accounts = new ArrayList<Account>(); // 文件中的用户名集合 List<String> accountNamesInFile = new ArrayList<String>(); List<String> newAaccountNamesInFile = new ArrayList<>(); // 初始化文件中的手机号集合 List<String> accountMobileInFile = new ArrayList<String>(); // 初始化组织id Long orgId = null; List<Map<String, Long>> tempList = new ArrayList<Map<String, Long>>(); // 存放已添加的节点数据 Map<String, Map<String, Long>> orgMap = new HashMap<String, Map<String, Long>>(); Map<String, Long> childOrgMap = new HashMap<String, Long>(); Map<Long, String> parentIdLayerMap = new HashMap<>(); //判断是否有新节点产生 boolean isNewNode = false; boolean clearFlag = false; Long parentId; List<Account> updateAccountList = new ArrayList<Account>(); // 初始化解绑集合 List<Long> accountIds = new ArrayList<Long>(8); for (int j = 0; j < models.size(); j++) { AccountImpModel model = models.get(j); int i = j + 2; // 获取操作栏位的信息 String operation = model.getOperation(); boolean unBindUserFlag = false; if (StringUtils.isNotEmpty(operation)) { unBindUserFlag = AccountExportConditionConstant.UNBIND_USER.equals(operation.trim()); } // 判断操作是否解绑 if (!unBindUserFlag) { parentId = rootOrg.getId(); isNewNode = false; childOrgMap = new HashMap<String, Long>(); //检查用组织不能为空 // if (StringUtils.isEmpty(operation.trim())) { if (StringUtils.isEmpty(model.getFullOrgName() != null ? model.getFullOrgName().trim() : model.getFullOrgName())) { model.setResult(ImpAccountError.ORG_CODE_EMPTY); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.ORG_CODE_EMPTY)); continue; } // } // add 2018-7-17 10:00:14 String[] orgNameArray = model.getFullOrgName().trim().split("\\+"); // 子组织名不能和跟组织相同 add 2019年4月2日 int step = j + 2; if (useArrayUtils(orgNameArray, rootOrg.getName())) { model.setResult(ImpAccountError.ORGANIZATION_REPEAT); failEvents.add(new TaskLogDetailEvent(taskId, "第" + step + "行:" + ImpAccountError.ORGANIZATION_REPEAT)); continue; } orgNameArray = checkOrgImportCode(orgNameArray, rootOrg.getName().trim()); List<Organization> organizationList = new ArrayList<Organization>(); Date sysDate = new Date(); Organization midOrg = null; String newOrgCode = null; // 组织列表的新增 for (int k = 0; k < orgNameArray.length; k++) { Long id = null; if (!isNewNode && !orgMap.isEmpty()) { if (orgMap.size() > 0 && orgMap.get(orgNameArray[0]) != null) { parentId = orgMap.get(orgNameArray[0]).get(getAllParentName(orgNameArray, k)); if (parentId != null) { if (k == 0) { parentId = rootOrg.getId(); } else { parentId = orgMap.get(orgNameArray[0]).get(getAllParentName(orgNameArray, k - 1)); } orgId = orgMap.get(orgNameArray[0]).get(getAllParentName(orgNameArray, k)); if (k > 0) { if (k == 1) { logger.info("已存在组织:" + orgNameArray[k] + "_" + k + " 本节点ID:" + orgMap.get(orgNameArray[0]).get(orgNameArray[k] + k) + " 父节点ID:" + parentId + "组织ID:" + orgId); } else { logger.info("已存在组织:" + orgNameArray[k] + "_" + k + " 本节点ID:" + orgMap.get(orgNameArray[0]).get(getAllParentName(orgNameArray, k)) + " 父节点ID:" + parentId + "组织ID:" + orgId); } } continue; } } } if (k == 0) { parentId = rootOrg.getId(); } else { parentId = orgMap.get(orgNameArray[0]).get(getAllParentName(orgNameArray, k - 1)); logger.info("parentId:" + parentId); } midOrg = getOrg(orgNameArray[k], parentId); if (midOrg != null) { logger.info("已经存在导入组织的名称:" + k + "-层级-" + midOrg.getEnName()); logger.info("已经存在导入组织id:" + k + "-层级-" + midOrg.getId()); parentId = midOrg.getId(); orgId = parentId; isNewNode = false; if (k == 0) { childOrgMap.put(getAllParentName(orgNameArray, k), orgId); orgMap.put(orgNameArray[0], childOrgMap); midOrg.setParentIdLayer(rootOrg.getId() + Organization.PARENT_ID_LAYER_SEPARATOR + midOrg.getId()); parentIdLayerMap.put(midOrg.getId(), midOrg.getParentIdLayer()); } else { childOrgMap.put(getAllParentName(orgNameArray, k), orgId); childOrgMap.putAll(orgMap.get(orgNameArray[0])); orgMap.put(orgNameArray[0], childOrgMap); midOrg.setParentIdLayer(parentIdLayerMap.get(midOrg.getParentId()) + Organization.PARENT_ID_LAYER_SEPARATOR + midOrg.getId()); parentIdLayerMap.put(midOrg.getId(), midOrg.getParentIdLayer()); } continue; } else { Organization organization = new Organization(); id = idGenerator.generate(); logger.info("公司id:" + context.getCompanyId()); organization.setCompanyId(context.getCompanyId()); // 生成组织编码 // 获取redis中的编码值编码 String orgCode = redisCache.get(context.getCompanyCode()) + ""; if (orgCode != null && !"".equals(orgCode) && !"null".equals(orgCode)) { // 新的组织编码 newOrgCode = (Integer.valueOf(orgCode) + 1) + ""; // 放到缓存中 redisCache.set(context.getCompanyCode(), newOrgCode); } else { newOrgCode = "1"; redisCache.set(context.getCompanyCode(), newOrgCode); } String orgNum = ""; switch (newOrgCode.length()) { case 1: orgNum = "000" + newOrgCode; break; case 2: orgNum = "00" + newOrgCode; break; case 3: orgNum = "0" + newOrgCode; break; default: orgNum = newOrgCode; } organization.setCode(context.getCompanyCode() + orgNum); organization.setId(id); organization.setName(orgNameArray[k].trim()); // 设置rootId organization.setRootId(rootOrg.getId()); if (organization.getName().equals("理赔")) { int uu = 0; logger.info("理赔"); } if (k == 0) { organization.setParentId(rootOrg.getId()); organization.setParentIdLayer(rootOrg.getId() + Organization.PARENT_ID_LAYER_SEPARATOR + organization.getId()); parentIdLayerMap.put(organization.getId(), organization.getParentIdLayer()); } else { if (k > 0) { parentId = orgMap.get(orgNameArray[0]).get(getAllParentName(orgNameArray, k - 1)); logger.info("父级parentId:" + parentId); } organization.setParentId(parentId); organization.setParentIdLayer(parentIdLayerMap.get(organization.getParentId()) + Organization.PARENT_ID_LAYER_SEPARATOR + organization.getId()); parentIdLayerMap.put(organization.getId(), organization.getParentIdLayer()); } organization.setLayer(k + 1); organization.setCreateTime(sysDate); organization.setCreateByName(context.getAccountName()); organization.setCompanyId(context.getCompanyId()); organizationList.add(organization); parentId = id; orgId = id; logger.info("组织的id:" + orgId); } //有新节点产生,那么它下面的子节点全部是新增加 isNewNode = true; if (k == 0) { childOrgMap.put(getAllParentName(orgNameArray, k), id); orgMap.put(orgNameArray[0], childOrgMap); } else { childOrgMap.put(getAllParentName(orgNameArray, k), id); childOrgMap.putAll(orgMap.get(orgNameArray[0])); orgMap.put(orgNameArray[0], childOrgMap); } logger.info("添加新组织:" + orgNameArray[k] + "_" + k + ":" + id); } // 组织列表新增完成 if (organizationList != null && organizationList.size() > 0) { // 批量新增组织 orgService.insertBatch(organizationList); logger.info("organization add complete!"); clearFlag = true; } // 获取用户名 String name = model.getName(); logger.info("当前 current_name:" + name); String workNum = model.getWorknum(); //检查用户名不能为空 if (StringUtils.isEmpty(name)) { model.setResult(ImpAccountError.NAME_EMPTY); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NAME_EMPTY)); continue; } // 转为小写 name = name.trim().toLowerCase(); // 获取用户名密码 String password = model.getPassword() != null ? model.getPassword().trim() : null; if (StringUtils.isEmpty(operation)) { //检查密码不能为空 if (StringUtils.isEmpty(password)) { model.setResult(ImpAccountError.PASSWORD_EMPTY); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.PASSWORD_EMPTY)); continue; } //检查密码是否合法 if (!RegexUtil.checkAccountPassword(password.trim())) { model.setResult(ImpAccountError.PASSWORD_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.PASSWORD_FORMAT_ERROR)); continue; } } //检查名称是否合法 if (StringUtils.isNotEmpty(name)) { if (!RegexUtil.checkAccountName(name.trim())) { model.setResult(ImpAccountError.NAME_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NAME_FORMAT_ERROR)); continue; } } //检查手机是否合法 String phone = model.getMobile(); if (StringUtils.isNotEmpty(phone)) { if (!RegexUtil.checkMobile(phone.trim())) { model.setResult(ImpAccountError.PHONE_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.PHONE_FORMAT_ERROR)); continue; } } //检查邮箱是否合法 String email = model.getEmail(); if (StringUtils.isNotEmpty(email.trim())) { if (!RegexUtil.checkEmail(email.trim())) { model.setResult(ImpAccountError.EMAIL_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.EMAIL_FORMAT_ERROR)); continue; } } //判断备注 add by ly 2019-4-4 11:28:18 String remarkFirst = model.getRemarkFirst(); logger.info("remarkFirst的值是:" + remarkFirst); if (StringUtils.isNotEmpty(remarkFirst)) { if (!RegexUtil.isSuccessRemark(remarkFirst.trim())) { model.setResult(ImpAccountError.REMARK_REQUIRED); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.REMARK_REQUIRED)); continue; } if ((remarkFirst.trim()).length() > 50) { model.setResult(ImpAccountError.REMARK_LENGTH); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.REMARK_LENGTH)); continue; } } String remarkSecond = model.getRemarkSecond(); if (StringUtils.isNotEmpty(remarkSecond)) { if (!RegexUtil.isSuccessRemark(remarkSecond.trim())) { model.setResult(ImpAccountError.REMARK_REQUIRED); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.REMARK_REQUIRED)); continue; } if ((remarkSecond.trim()).length() > 50) { model.setResult(ImpAccountError.REMARK_LENGTH); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.REMARK_LENGTH)); continue; } } String remarkThird = model.getRemarkThird(); if (StringUtils.isNotEmpty(remarkThird)) { if (!RegexUtil.isSuccessRemark(remarkThird.trim())) { model.setResult(ImpAccountError.REMARK_REQUIRED); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.REMARK_REQUIRED)); continue; } if ((remarkThird.trim()).length() > 50) { model.setResult(ImpAccountError.REMARK_LENGTH); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.REMARK_LENGTH)); continue; } } // 判断导入用户 2019-2-28 List<String> mobileList = accountMapper.selectMobilesByCompanyId(companyId); String newName = ""; if (StringUtils.isEmpty(operation)) { // 检查文件中是否有重名 if (accountNamesInFile.contains(name.toLowerCase())) { model.setResult(ImpAccountError.NAME_EXIST_IN_FILE); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NAME_EXIST_IN_FILE)); continue; } accountNamesInFile.add(name.toLowerCase()); //检查名称是否重复 // modified by shengchenglong,不区分大小写 if (names.contains(name.toLowerCase())) { model.setResult(ImpAccountError.NAME_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NAME_EXIST)); continue; } names.add(name.toLowerCase()); // 新增用户 //检查手机号是否重复 if (StringUtils.isNotEmpty(phone)) { if (accountMapper.countExistMobile(0L, context.getCompanyId(), phone.trim()) > 0) { model.setResult(ImpAccountError.MOBILE_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.MOBILE_EXIST)); continue; } mobileList.add(phone); } } else { if (AccountExportConditionConstant.UPDATE_NAME.equals(operation.trim())) { logger.info("name" + name); logger.info("" + names); if (!names.contains(name)) { model.setResult(ImpAccountError.MODIFY_NAME_NOT_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.MODIFY_NAME_NOT_EXIST)); continue; } Account userInfo = new Account(); userInfo.setName(model.getName().trim()); userInfo.setCompanyId(companyId); Account account = this.selectOne(QueryUtil.condition(userInfo)); if (!StringUtils.isNotEmpty(account.getMobile())) { if (StringUtils.isNotEmpty(phone)) { if (!phone.equals(account.getMobile())) { if (mobileList.contains(phone)) { model.setResult(ImpAccountError.MOBILE_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.MOBILE_EXIST)); continue; } } } } newName = model.getNewName().trim(); if (StringUtils.isNotEmpty(newName)) { logger.info("当前的新名称:" + newName); boolean flag = RegexUtil.checkAccountName(newName.trim()); logger.info("校验的结果:" + flag); // 校验新用户名的格式 if (!RegexUtil.checkAccountName(newName.trim())) { model.setResult(ImpAccountError.NEW_NAME_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NEW_NAME_FORMAT_ERROR)); continue; } newName = newName.toLowerCase(); // 检查文件中是否有重名 if (newAaccountNamesInFile.contains(newName)) { model.setResult(ImpAccountError.NEW_NAME_EXIST_IN_FILE); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NEW_NAME_EXIST_IN_FILE)); continue; } newAaccountNamesInFile.add(model.getNewName()); //检查名称是否和数据库中的名称重复 if (names.contains(model.getNewName())) { model.setResult(ImpAccountError.NAME_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NAME_EXIST)); continue; } names.add(name); } } } // 判断文件中手机号是否重复 if (StringUtils.isNotEmpty(phone)) { if (accountMobileInFile.contains(phone)) { model.setResult(ImpAccountError.MOBILE_EXIST_IN_FILE); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.MOBILE_EXIST_IN_FILE)); continue; } } accountMobileInFile.add(phone); String fullName = model.getFullName(); if (StringUtils.isNotEmpty(fullName)) { if ((fullName.trim()).length() > 20) { model.setResult(ImpAccountError.FULLNAME_LENGTH_LONG); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.FULLNAME_LENGTH_LONG)); continue; } mobileList.add(phone); } String enable = model.getEnabled(); Boolean enabled = null; if (StringUtils.isNotEmpty(enable)) { if ("1".equals(enable)) { enabled = Boolean.TRUE; } else if ("0".equals(enable)) { enabled = Boolean.FALSE; } } //查询账号过期类型 Integer expiredType = 0; String validDate = model.getValidDate(); Date startDate = null; Date endDate = null; Date expiredTime = null; Integer validDays = 0; try { if (org.apache.commons.lang3.StringUtils.EMPTY.equals(org.apache.commons.lang3.StringUtils.trimToEmpty(validDate))) { expiredType = 1; } else { if (validDate.indexOf("-") != -1) { String[] dateArr = validDate.split("-"); if (dateArr.length < 2) { model.setResult(ImpAccountError.VALIDDATE_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.VALIDDATE_FORMAT_ERROR)); continue; } else { expiredType = 2; startDate = DateUtil.parseShort(dateArr[0]); endDate = DateUtil.parseShort(dateArr[1]); } } else { expiredType = 3; validDays = Integer.parseInt(validDate); Calendar cal = Calendar.getInstance(); //根据有效天数计算账号过期时间 cal.add(Calendar.DATE, validDays); expiredTime = cal.getTime(); } } } catch (Exception e) { model.setResult(ImpAccountError.VALIDDATE_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.VALIDDATE_FORMAT_ERROR)); continue; } Account account = new Account(); account.setId(idGenerator.generate()); account.setName(name.trim()); account.setCompanyId(companyId); account.setEmail(email); account.setMobile(phone); account.setTelephone(phone); account.setWorkNum(workNum); account.setExpiredType(expiredType); account.setStartTime(startDate); account.setEndTime(endDate); account.setExpiredTime(expiredTime); account.setValidDays(validDays); account.setOrgId(orgId); logger.info("导入用户的用户组织id"); account.setFullName(model.getFullName()); account.setPosition(model.getPosition()); account.setCreateById(importModel.getAccountId()); account.setCreateByName(importModel.getAccountName()); account.setCreateTime(new Date()); // add by ly 2019-4-4 11:13:27 account.setRemarkFirst(model.getRemarkFirst()); account.setRemarkSecond(model.getRemarkSecond()); account.setRemarkThird(model.getRemarkThird()); // 判断导入用户还是新增用户 logger.info("当前导入操作:" + operation.trim()); if (StringUtils.isEmpty(operation)) { // 新增用户 account.setPassword(ShaEncrypt.encryptNewPassword(password)); accounts.add(account); } else { if (AccountExportConditionConstant.UPDATE_NAME.equals(operation.trim())) { try { // 获取用户信息 Account updateAccount = new Account(); updateAccount.setName(name); updateAccount.setCompanyId(companyId); // 获取当前的用户的信息 updateAccount = this.selectOne(QueryUtil.condition(updateAccount)); logger.info("返回用户:" + updateAccount); // 密码校验 if (StringUtils.isNotEmpty(password)) { //检查密码是否合法 if (!RegexUtil.checkAccountPassword(password.trim())) { model.setResult(ImpAccountError.PASSWORD_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.PASSWORD_FORMAT_ERROR)); continue; } account.setPassword(ShaEncrypt.encryptNewPassword(password)); } //更新部门校验部门为空,不修改 if (StringUtils.isEmpty(model.getFullOrgName() != null ? model.getFullOrgName().trim() : model.getFullOrgName())) { account.setOrgId(updateAccount.getOrgId()); } if (updateAccount != null) { logger.info("用户id:" + updateAccount.getId()); if (enabled != null) { account.setEnabled(enabled); if (enabled) { account.setEnabledTime(new Date()); } } account.setId(updateAccount.getId()); // 可修改用户的名 add 2019年7月25日11:28:26 by lingye String new_name = StringUtils.isNotEmpty(newName) ? newName : name; account.setName(new_name); } account.setCreateTime(null); account.setUpdateTime(new Date()); updateAccountList.add(account); } catch (Exception e) { logger.info("更新异常{}", e); } } } // 解绑用户 } else if (unBindUserFlag) { String name = model.getName(); logger.info("解绑的用户名:" + name); if (StringUtils.isEmpty(name)) { model.setResult(ImpAccountError.NAME_EMPTY); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NAME_EMPTY)); continue; } if (!names.contains(name)) { model.setResult(ImpAccountError.UNBIND_NAME_NOT_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.UNBIND_NAME_NOT_EXIST)); continue; } Account userInfo = new Account(); userInfo.setName(model.getName().trim()); userInfo.setCompanyId(companyId); Account account = this.selectOne(QueryUtil.condition(userInfo)); if (account == null) { model.setResult(ImpAccountError.UNBIND_NAME_NOT_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.UNBIND_NAME_NOT_EXIST)); continue; } accountIds.add(account.getId()); } } if (CollectionUtils.isNotEmpty(accountIds)) { // 解绑用户 Boolean unbindUserResult = weiXinClient.unbindUser(accountIds); if (CollectionUtils.isNotEmpty(failEvents)) { rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents); } return models; } if (CollectionUtils.isNotEmpty(accounts)) { if (!this.insertBatch(accounts)) { throw new BizException(ReturnCode.SAVE_FAIL.getCode(), ReturnCode.SAVE_FAIL.getMsg()); } clearFlag = true; } // 更新用户信息 if (CollectionUtils.isNotEmpty(updateAccountList)) { if (!this.updateBatchById(updateAccountList)) { throw new BizException(ReturnCode.UPDATE_FAIL.getCode(), ReturnCode.UPDATE_FAIL.getMsg()); } clearFlag = true; } if (clearFlag) { Company company = companyMapper.selectById(companyId); if (company!=null){ // 计算左右索引 organizationIndexService.addInitTask(companyId); } } //错误的信息发送给任务详情表 if (CollectionUtils.isNotEmpty(failEvents)) { rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents); } return models; } else { throw new BizException(ReturnCode.RESOURCE_NOT_FOUND.getCode(), ReturnCode.RESOURCE_NOT_FOUND.getMsg()); } } /** * 获取当前节点的所有父亲节点 * * @param orgNameArray * @param curIndex * @return */ private String getAllParentName(String[] orgNameArray, int curIndex) { String name = ""; for (int i = 0; i < curIndex + 1; i++) { name += orgNameArray[i]; } return name + curIndex; } /** * 数组包含 * * @param arr * @param targetValue * @return */ public boolean useArrayUtils(String[] arr, String targetValue) { return ArrayUtils.contains(arr, targetValue); } /** * 去除跟组织 * * @param fullOrgName * @param rootName * @return */ private String[] checkOrgImportCode(String[] fullOrgName, String rootName) { if (fullOrgName[0].equals(rootName)) { return Arrays.copyOfRange(fullOrgName, 1, fullOrgName.length); } return fullOrgName; } /** * 查询组织 * * @param name * @param parentId * @return */ public Organization getOrg(String name, Long parentId) { Organization org = new Organization(); org.setName(name.trim()); org.setParentId(parentId); org.setDeleted(false); return orgService.selectOne(QueryUtil.condition(org)); } }
\ No newline at end of file
package
com
.
yizhi
.
system
.
application
.
service
.
impl
;
import
com.baomidou.mybatisplus.mapper.EntityWrapper
;
import
com.baomidou.mybatisplus.service.impl.ServiceImpl
;
import
com.yizhi.application.orm.id.IdGenerator
;
import
com.yizhi.application.orm.util.QueryUtil
;
import
com.yizhi.core.application.cache.RedisCache
;
import
com.yizhi.core.application.context.RequestContext
;
import
com.yizhi.core.application.exception.BizException
;
import
com.yizhi.core.application.log.LogQueue
;
import
com.yizhi.core.application.log.TaskLogDetailEvent
;
import
com.yizhi.system.application.constant.AccountExportConditionConstant
;
import
com.yizhi.system.application.constant.AuthzConstant
;
import
com.yizhi.system.application.constant.ImpAccountError
;
import
com.yizhi.system.application.domain.Account
;
import
com.yizhi.system.application.domain.Company
;
import
com.yizhi.system.application.domain.Organization
;
import
com.yizhi.system.application.mapper.*
;
import
com.yizhi.system.application.model.AccountImpModel
;
import
com.yizhi.system.application.model.ImportModel
;
import
com.yizhi.system.application.service.*
;
import
com.yizhi.system.application.service.using.OrganizationCacheService
;
import
com.yizhi.system.application.service.using.OrganizationIndexService
;
import
com.yizhi.util.application.constant.ReturnCode
;
import
com.yizhi.util.application.date.DateUtil
;
import
com.yizhi.util.application.encrypt.ShaEncrypt
;
import
com.yizhi.util.application.regex.RegexUtil
;
import
com.yizhi.wechat.application.feign.WeiXinClient
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Service
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
class
AccountImportServiceImpl
extends
ServiceImpl
<
AccountMapper
,
Account
>
implements
IAccountImportService
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
AccountImportServiceImpl
.
class
);
@Autowired
AccountMapper
accountMapper
;
@Autowired
AuthzAccountRoleMapper
accountRoleMapper
;
@Autowired
AuthzRoleMapper
roleMapper
;
@Autowired
IOrganizationService
orgService
;
@Autowired
SiteMapper
siteMapper
;
@Autowired
CompanyMapper
companyMapper
;
@Autowired
IdGenerator
idGenerator
;
@Autowired
AuthorityService
authorityService
;
@Autowired
AccountEnableLogMapper
logMapper
;
@Autowired
AuthzGroupMemberMapper
memberMapper
;
@Autowired
IAuthzUserGroupService
groupService
;
@Autowired
OrganizationMapper
organizationMapper
;
@Autowired
private
IOrganizationService
organizationService
;
@Autowired
private
AuthzGroupMemberMapper
groupMemberMapper
;
@Autowired
private
OrganizationIndexService
organizationIndexService
;
@Autowired
private
OrganizationCacheService
organizationCacheService
;
@Autowired
private
AuthService
authService
;
/*@Autowired RabbitTemplate rabbitTemplate;*/
@Autowired
RedisCache
redisCache
;
@Autowired
private
ISmsSendRecordService
smsSendRecordService
;
@Autowired
private
WeiXinClient
weiXinClient
;
@Override
public
List
<
AccountImpModel
>
importAccount
(
ImportModel
importModel
,
RequestContext
context
)
{
List
<
AccountImpModel
>
models
=
importModel
.
getData
();
// 获取企业的id Long companyId = context.getCompanyId(); logger.info("当前用户的企业的companyId:" + companyId); // 获取当前企业的用户name 的列表 List<String> names = accountMapper.selectNamesByCompanyId(companyId); logger.info("names size:" + names.size()); names = names.parallelStream().map(name -> { return name.toLowerCase(); }).collect(Collectors.toList()); logger.info("names lowCase:" + names.size()); Long taskId = importModel.getTaskId(); if (CollectionUtils.isNotEmpty(models)) { List<TaskLogDetailEvent> failEvents = new ArrayList<TaskLogDetailEvent>(); // 根组织 Organization rootOrg = new Organization(); rootOrg.setParentId(0L); rootOrg.setDeleted(Boolean.valueOf(false)); rootOrg.setCompanyId(context.getCompanyId()); EntityWrapper<Organization> rootOrgEw = new EntityWrapper(rootOrg); rootOrgEw.like("code", AuthzConstant.DEFAULT_COMPANY_ORG_ROOT_CODE_SUFFIX); rootOrg = rootOrg.selectOne(rootOrgEw); if (null == rootOrg) { failEvents.add(new TaskLogDetailEvent(taskId, "!!!查找根组织错误:未成功查询到根组织!!!")); //rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents); return models; } List<Account> accounts = new ArrayList<Account>(); // 文件中的用户名集合 List<String> accountNamesInFile = new ArrayList<String>(); List<String> newAaccountNamesInFile = new ArrayList<>(); // 初始化文件中的手机号集合 List<String> accountMobileInFile = new ArrayList<String>(); // 初始化组织id Long orgId = null; List<Map<String, Long>> tempList = new ArrayList<Map<String, Long>>(); // 存放已添加的节点数据 Map<String, Map<String, Long>> orgMap = new HashMap<String, Map<String, Long>>(); Map<String, Long> childOrgMap = new HashMap<String, Long>(); Map<Long, String> parentIdLayerMap = new HashMap<>(); //判断是否有新节点产生 boolean isNewNode = false; boolean clearFlag = false; Long parentId; List<Account> updateAccountList = new ArrayList<Account>(); // 初始化解绑集合 List<Long> accountIds = new ArrayList<Long>(8); for (int j = 0; j < models.size(); j++) { AccountImpModel model = models.get(j); int i = j + 2; // 获取操作栏位的信息 String operation = model.getOperation(); boolean unBindUserFlag = false; if (StringUtils.isNotEmpty(operation)) { unBindUserFlag = AccountExportConditionConstant.UNBIND_USER.equals(operation.trim()); } // 判断操作是否解绑 if (!unBindUserFlag) { parentId = rootOrg.getId(); isNewNode = false; childOrgMap = new HashMap<String, Long>(); //检查用组织不能为空 // if (StringUtils.isEmpty(operation.trim())) { if (StringUtils.isEmpty(model.getFullOrgName() != null ? model.getFullOrgName().trim() : model.getFullOrgName())) { model.setResult(ImpAccountError.ORG_CODE_EMPTY); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.ORG_CODE_EMPTY)); continue; } // } // add 2018-7-17 10:00:14 String[] orgNameArray = model.getFullOrgName().trim().split("\\+"); // 子组织名不能和跟组织相同 add 2019年4月2日 int step = j + 2; if (useArrayUtils(orgNameArray, rootOrg.getName())) { model.setResult(ImpAccountError.ORGANIZATION_REPEAT); failEvents.add(new TaskLogDetailEvent(taskId, "第" + step + "行:" + ImpAccountError.ORGANIZATION_REPEAT)); continue; } orgNameArray = checkOrgImportCode(orgNameArray, rootOrg.getName().trim()); List<Organization> organizationList = new ArrayList<Organization>(); Date sysDate = new Date(); Organization midOrg = null; String newOrgCode = null; // 组织列表的新增 for (int k = 0; k < orgNameArray.length; k++) { Long id = null; if (!isNewNode && !orgMap.isEmpty()) { if (orgMap.size() > 0 && orgMap.get(orgNameArray[0]) != null) { parentId = orgMap.get(orgNameArray[0]).get(getAllParentName(orgNameArray, k)); if (parentId != null) { if (k == 0) { parentId = rootOrg.getId(); } else { parentId = orgMap.get(orgNameArray[0]).get(getAllParentName(orgNameArray, k - 1)); } orgId = orgMap.get(orgNameArray[0]).get(getAllParentName(orgNameArray, k)); if (k > 0) { if (k == 1) { logger.info("已存在组织:" + orgNameArray[k] + "_" + k + " 本节点ID:" + orgMap.get(orgNameArray[0]).get(orgNameArray[k] + k) + " 父节点ID:" + parentId + "组织ID:" + orgId); } else { logger.info("已存在组织:" + orgNameArray[k] + "_" + k + " 本节点ID:" + orgMap.get(orgNameArray[0]).get(getAllParentName(orgNameArray, k)) + " 父节点ID:" + parentId + "组织ID:" + orgId); } } continue; } } } if (k == 0) { parentId = rootOrg.getId(); } else { parentId = orgMap.get(orgNameArray[0]).get(getAllParentName(orgNameArray, k - 1)); logger.info("parentId:" + parentId); } midOrg = getOrg(orgNameArray[k], parentId); if (midOrg != null) { logger.info("已经存在导入组织的名称:" + k + "-层级-" + midOrg.getEnName()); logger.info("已经存在导入组织id:" + k + "-层级-" + midOrg.getId()); parentId = midOrg.getId(); orgId = parentId; isNewNode = false; if (k == 0) { childOrgMap.put(getAllParentName(orgNameArray, k), orgId); orgMap.put(orgNameArray[0], childOrgMap); midOrg.setParentIdLayer(rootOrg.getId() + Organization.PARENT_ID_LAYER_SEPARATOR + midOrg.getId()); parentIdLayerMap.put(midOrg.getId(), midOrg.getParentIdLayer()); } else { childOrgMap.put(getAllParentName(orgNameArray, k), orgId); childOrgMap.putAll(orgMap.get(orgNameArray[0])); orgMap.put(orgNameArray[0], childOrgMap); midOrg.setParentIdLayer(parentIdLayerMap.get(midOrg.getParentId()) + Organization.PARENT_ID_LAYER_SEPARATOR + midOrg.getId()); parentIdLayerMap.put(midOrg.getId(), midOrg.getParentIdLayer()); } continue; } else { Organization organization = new Organization(); id = idGenerator.generate(); logger.info("公司id:" + context.getCompanyId()); organization.setCompanyId(context.getCompanyId()); // 生成组织编码 // 获取redis中的编码值编码 String orgCode = redisCache.get(context.getCompanyCode()) + ""; if (orgCode != null && !"".equals(orgCode) && !"null".equals(orgCode)) { // 新的组织编码 newOrgCode = (Integer.valueOf(orgCode) + 1) + ""; // 放到缓存中 redisCache.set(context.getCompanyCode(), newOrgCode); } else { newOrgCode = "1"; redisCache.set(context.getCompanyCode(), newOrgCode); } String orgNum = ""; switch (newOrgCode.length()) { case 1: orgNum = "000" + newOrgCode; break; case 2: orgNum = "00" + newOrgCode; break; case 3: orgNum = "0" + newOrgCode; break; default: orgNum = newOrgCode; } organization.setCode(context.getCompanyCode() + orgNum); organization.setId(id); organization.setName(orgNameArray[k].trim()); // 设置rootId organization.setRootId(rootOrg.getId()); if (organization.getName().equals("理赔")) { int uu = 0; logger.info("理赔"); } if (k == 0) { organization.setParentId(rootOrg.getId()); organization.setParentIdLayer(rootOrg.getId() + Organization.PARENT_ID_LAYER_SEPARATOR + organization.getId()); parentIdLayerMap.put(organization.getId(), organization.getParentIdLayer()); } else { if (k > 0) { parentId = orgMap.get(orgNameArray[0]).get(getAllParentName(orgNameArray, k - 1)); logger.info("父级parentId:" + parentId); } organization.setParentId(parentId); organization.setParentIdLayer(parentIdLayerMap.get(organization.getParentId()) + Organization.PARENT_ID_LAYER_SEPARATOR + organization.getId()); parentIdLayerMap.put(organization.getId(), organization.getParentIdLayer()); } organization.setLayer(k + 1); organization.setCreateTime(sysDate); organization.setCreateByName(context.getAccountName()); organization.setCompanyId(context.getCompanyId()); organizationList.add(organization); parentId = id; orgId = id; logger.info("组织的id:" + orgId); } //有新节点产生,那么它下面的子节点全部是新增加 isNewNode = true; if (k == 0) { childOrgMap.put(getAllParentName(orgNameArray, k), id); orgMap.put(orgNameArray[0], childOrgMap); } else { childOrgMap.put(getAllParentName(orgNameArray, k), id); childOrgMap.putAll(orgMap.get(orgNameArray[0])); orgMap.put(orgNameArray[0], childOrgMap); } logger.info("添加新组织:" + orgNameArray[k] + "_" + k + ":" + id); } // 组织列表新增完成 if (organizationList != null && organizationList.size() > 0) { // 批量新增组织 orgService.insertBatch(organizationList); logger.info("organization add complete!"); clearFlag = true; } // 获取用户名 String name = model.getName(); logger.info("当前 current_name:" + name); String workNum = model.getWorknum(); //检查用户名不能为空 if (StringUtils.isEmpty(name)) { model.setResult(ImpAccountError.NAME_EMPTY); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NAME_EMPTY)); continue; } // 转为小写 name = name.trim().toLowerCase(); // 获取用户名密码 String password = model.getPassword() != null ? model.getPassword().trim() : null; if (StringUtils.isEmpty(operation)) { //检查密码不能为空 if (StringUtils.isEmpty(password)) { model.setResult(ImpAccountError.PASSWORD_EMPTY); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.PASSWORD_EMPTY)); continue; } //检查密码是否合法 if (!RegexUtil.checkAccountPassword(password.trim())) { model.setResult(ImpAccountError.PASSWORD_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.PASSWORD_FORMAT_ERROR)); continue; } } //检查名称是否合法 if (StringUtils.isNotEmpty(name)) { if (!RegexUtil.checkAccountName(name.trim())) { model.setResult(ImpAccountError.NAME_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NAME_FORMAT_ERROR)); continue; } } //检查手机是否合法 String phone = model.getMobile(); if (StringUtils.isNotEmpty(phone)) { if (!RegexUtil.checkMobile(phone.trim())) { model.setResult(ImpAccountError.PHONE_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.PHONE_FORMAT_ERROR)); continue; } } //检查邮箱是否合法 String email = model.getEmail(); if (StringUtils.isNotEmpty(email.trim())) { if (!RegexUtil.checkEmail(email.trim())) { model.setResult(ImpAccountError.EMAIL_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.EMAIL_FORMAT_ERROR)); continue; } } //判断备注 add by ly 2019-4-4 11:28:18 String remarkFirst = model.getRemarkFirst(); logger.info("remarkFirst的值是:" + remarkFirst); if (StringUtils.isNotEmpty(remarkFirst)) { if (!RegexUtil.isSuccessRemark(remarkFirst.trim())) { model.setResult(ImpAccountError.REMARK_REQUIRED); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.REMARK_REQUIRED)); continue; } if ((remarkFirst.trim()).length() > 50) { model.setResult(ImpAccountError.REMARK_LENGTH); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.REMARK_LENGTH)); continue; } } String remarkSecond = model.getRemarkSecond(); if (StringUtils.isNotEmpty(remarkSecond)) { if (!RegexUtil.isSuccessRemark(remarkSecond.trim())) { model.setResult(ImpAccountError.REMARK_REQUIRED); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.REMARK_REQUIRED)); continue; } if ((remarkSecond.trim()).length() > 50) { model.setResult(ImpAccountError.REMARK_LENGTH); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.REMARK_LENGTH)); continue; } } String remarkThird = model.getRemarkThird(); if (StringUtils.isNotEmpty(remarkThird)) { if (!RegexUtil.isSuccessRemark(remarkThird.trim())) { model.setResult(ImpAccountError.REMARK_REQUIRED); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.REMARK_REQUIRED)); continue; } if ((remarkThird.trim()).length() > 50) { model.setResult(ImpAccountError.REMARK_LENGTH); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.REMARK_LENGTH)); continue; } } // 判断导入用户 2019-2-28 List<String> mobileList = accountMapper.selectMobilesByCompanyId(companyId); String newName = ""; if (StringUtils.isEmpty(operation)) { // 检查文件中是否有重名 if (accountNamesInFile.contains(name.toLowerCase())) { model.setResult(ImpAccountError.NAME_EXIST_IN_FILE); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NAME_EXIST_IN_FILE)); continue; } accountNamesInFile.add(name.toLowerCase()); //检查名称是否重复 // modified by shengchenglong,不区分大小写 if (names.contains(name.toLowerCase())) { model.setResult(ImpAccountError.NAME_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NAME_EXIST)); continue; } names.add(name.toLowerCase()); // 新增用户 //检查手机号是否重复 if (StringUtils.isNotEmpty(phone)) { if (accountMapper.countExistMobile(0L, context.getCompanyId(), phone.trim()) > 0) { model.setResult(ImpAccountError.MOBILE_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.MOBILE_EXIST)); continue; } mobileList.add(phone); } } else { if (AccountExportConditionConstant.UPDATE_NAME.equals(operation.trim())) { logger.info("name" + name); logger.info("" + names); if (!names.contains(name)) { model.setResult(ImpAccountError.MODIFY_NAME_NOT_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.MODIFY_NAME_NOT_EXIST)); continue; } Account userInfo = new Account(); userInfo.setName(model.getName().trim()); userInfo.setCompanyId(companyId); Account account = this.selectOne(QueryUtil.condition(userInfo)); if (!StringUtils.isNotEmpty(account.getMobile())) { if (StringUtils.isNotEmpty(phone)) { if (!phone.equals(account.getMobile())) { if (mobileList.contains(phone)) { model.setResult(ImpAccountError.MOBILE_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.MOBILE_EXIST)); continue; } } } } newName = model.getNewName().trim(); if (StringUtils.isNotEmpty(newName)) { logger.info("当前的新名称:" + newName); boolean flag = RegexUtil.checkAccountName(newName.trim()); logger.info("校验的结果:" + flag); // 校验新用户名的格式 if (!RegexUtil.checkAccountName(newName.trim())) { model.setResult(ImpAccountError.NEW_NAME_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NEW_NAME_FORMAT_ERROR)); continue; } newName = newName.toLowerCase(); // 检查文件中是否有重名 if (newAaccountNamesInFile.contains(newName)) { model.setResult(ImpAccountError.NEW_NAME_EXIST_IN_FILE); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NEW_NAME_EXIST_IN_FILE)); continue; } newAaccountNamesInFile.add(model.getNewName()); //检查名称是否和数据库中的名称重复 if (names.contains(model.getNewName())) { model.setResult(ImpAccountError.NAME_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NAME_EXIST)); continue; } names.add(name); } } } // 判断文件中手机号是否重复 if (StringUtils.isNotEmpty(phone)) { if (accountMobileInFile.contains(phone)) { model.setResult(ImpAccountError.MOBILE_EXIST_IN_FILE); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.MOBILE_EXIST_IN_FILE)); continue; } } accountMobileInFile.add(phone); String fullName = model.getFullName(); if (StringUtils.isNotEmpty(fullName)) { if ((fullName.trim()).length() > 20) { model.setResult(ImpAccountError.FULLNAME_LENGTH_LONG); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.FULLNAME_LENGTH_LONG)); continue; } mobileList.add(phone); } String enable = model.getEnabled(); Boolean enabled = null; if (StringUtils.isNotEmpty(enable)) { if ("1".equals(enable)) { enabled = Boolean.TRUE; } else if ("0".equals(enable)) { enabled = Boolean.FALSE; } } //查询账号过期类型 Integer expiredType = 0; String validDate = model.getValidDate(); Date startDate = null; Date endDate = null; Date expiredTime = null; Integer validDays = 0; try { if (org.apache.commons.lang3.StringUtils.EMPTY.equals(org.apache.commons.lang3.StringUtils.trimToEmpty(validDate))) { expiredType = 1; } else { if (validDate.indexOf("-") != -1) { String[] dateArr = validDate.split("-"); if (dateArr.length < 2) { model.setResult(ImpAccountError.VALIDDATE_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.VALIDDATE_FORMAT_ERROR)); continue; } else { expiredType = 2; startDate = DateUtil.parseShort(dateArr[0]); endDate = DateUtil.parseShort(dateArr[1]); } } else { expiredType = 3; validDays = Integer.parseInt(validDate); Calendar cal = Calendar.getInstance(); //根据有效天数计算账号过期时间 cal.add(Calendar.DATE, validDays); expiredTime = cal.getTime(); } } } catch (Exception e) { model.setResult(ImpAccountError.VALIDDATE_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.VALIDDATE_FORMAT_ERROR)); continue; } Account account = new Account(); account.setId(idGenerator.generate()); account.setName(name.trim()); account.setCompanyId(companyId); account.setEmail(email); account.setMobile(phone); account.setTelephone(phone); account.setWorkNum(workNum); account.setExpiredType(expiredType); account.setStartTime(startDate); account.setEndTime(endDate); account.setExpiredTime(expiredTime); account.setValidDays(validDays); account.setOrgId(orgId); logger.info("导入用户的用户组织id"); account.setFullName(model.getFullName()); account.setPosition(model.getPosition()); account.setCreateById(importModel.getAccountId()); account.setCreateByName(importModel.getAccountName()); account.setCreateTime(new Date()); // add by ly 2019-4-4 11:13:27 account.setRemarkFirst(model.getRemarkFirst()); account.setRemarkSecond(model.getRemarkSecond()); account.setRemarkThird(model.getRemarkThird()); // 判断导入用户还是新增用户 logger.info("当前导入操作:" + operation.trim()); if (StringUtils.isEmpty(operation)) { // 新增用户 account.setPassword(ShaEncrypt.encryptNewPassword(password)); accounts.add(account); } else { if (AccountExportConditionConstant.UPDATE_NAME.equals(operation.trim())) { try { // 获取用户信息 Account updateAccount = new Account(); updateAccount.setName(name); updateAccount.setCompanyId(companyId); // 获取当前的用户的信息 updateAccount = this.selectOne(QueryUtil.condition(updateAccount)); logger.info("返回用户:" + updateAccount); // 密码校验 if (StringUtils.isNotEmpty(password)) { //检查密码是否合法 if (!RegexUtil.checkAccountPassword(password.trim())) { model.setResult(ImpAccountError.PASSWORD_FORMAT_ERROR); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.PASSWORD_FORMAT_ERROR)); continue; } account.setPassword(ShaEncrypt.encryptNewPassword(password)); } //更新部门校验部门为空,不修改 if (StringUtils.isEmpty(model.getFullOrgName() != null ? model.getFullOrgName().trim() : model.getFullOrgName())) { account.setOrgId(updateAccount.getOrgId()); } if (updateAccount != null) { logger.info("用户id:" + updateAccount.getId()); if (enabled != null) { account.setEnabled(enabled); if (enabled) { account.setEnabledTime(new Date()); } } account.setId(updateAccount.getId()); // 可修改用户的名 add 2019年7月25日11:28:26 by lingye String new_name = StringUtils.isNotEmpty(newName) ? newName : name; account.setName(new_name); } account.setCreateTime(null); account.setUpdateTime(new Date()); updateAccountList.add(account); } catch (Exception e) { logger.info("更新异常{}", e); } } } // 解绑用户 } else if (unBindUserFlag) { String name = model.getName(); logger.info("解绑的用户名:" + name); if (StringUtils.isEmpty(name)) { model.setResult(ImpAccountError.NAME_EMPTY); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.NAME_EMPTY)); continue; } if (!names.contains(name)) { model.setResult(ImpAccountError.UNBIND_NAME_NOT_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.UNBIND_NAME_NOT_EXIST)); continue; } Account userInfo = new Account(); userInfo.setName(model.getName().trim()); userInfo.setCompanyId(companyId); Account account = this.selectOne(QueryUtil.condition(userInfo)); if (account == null) { model.setResult(ImpAccountError.UNBIND_NAME_NOT_EXIST); failEvents.add(new TaskLogDetailEvent(taskId, "第" + i + "行:" + ImpAccountError.UNBIND_NAME_NOT_EXIST)); continue; } accountIds.add(account.getId()); } } if (CollectionUtils.isNotEmpty(accountIds)) { // 解绑用户 Boolean unbindUserResult = weiXinClient.unbindUser(accountIds); if (CollectionUtils.isNotEmpty(failEvents)) { //rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents); } return models; } if (CollectionUtils.isNotEmpty(accounts)) { if (!this.insertBatch(accounts)) { throw new BizException(ReturnCode.SAVE_FAIL.getCode(), ReturnCode.SAVE_FAIL.getMsg()); } clearFlag = true; } // 更新用户信息 if (CollectionUtils.isNotEmpty(updateAccountList)) { if (!this.updateBatchById(updateAccountList)) { throw new BizException(ReturnCode.UPDATE_FAIL.getCode(), ReturnCode.UPDATE_FAIL.getMsg()); } clearFlag = true; } if (clearFlag) { Company company = companyMapper.selectById(companyId); if (company!=null){ // 计算左右索引 organizationIndexService.addInitTask(companyId); } } //错误的信息发送给任务详情表 if (CollectionUtils.isNotEmpty(failEvents)) { // rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents); } return models; } else { throw new BizException(ReturnCode.RESOURCE_NOT_FOUND.getCode(), ReturnCode.RESOURCE_NOT_FOUND.getMsg()); } } /** * 获取当前节点的所有父亲节点 * * @param orgNameArray * @param curIndex * @return */ private String getAllParentName(String[] orgNameArray, int curIndex) { String name = ""; for (int i = 0; i < curIndex + 1; i++) { name += orgNameArray[i]; } return name + curIndex; } /** * 数组包含 * * @param arr * @param targetValue * @return */ public boolean useArrayUtils(String[] arr, String targetValue) { return ArrayUtils.contains(arr, targetValue); } /** * 去除跟组织 * * @param fullOrgName * @param rootName * @return */ private String[] checkOrgImportCode(String[] fullOrgName, String rootName) { if (fullOrgName[0].equals(rootName)) { return Arrays.copyOfRange(fullOrgName, 1, fullOrgName.length); } return fullOrgName; } /** * 查询组织 * * @param name * @param parentId * @return */ public Organization getOrg(String name, Long parentId) { Organization org = new Organization(); org.setName(name.trim()); org.setParentId(parentId); org.setDeleted(false); return orgService.selectOne(QueryUtil.condition(org)); } }
\ No newline at end of file
...
...
cloud-system/src/main/java/com/yizhi/system/application/service/impl/AccountServiceImpl.java
View file @
bcfed5b5
...
...
@@ -54,7 +54,6 @@ import org.apache.commons.lang3.StringUtils;
import
org.apache.ibatis.session.RowBounds
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -104,9 +103,9 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
private
OrganizationCacheService
organizationCacheService
;
@Autowired
private
AuthService
authService
;
/*
@Autowired
RabbitTemplate
rabbitTemplate
;
RabbitTemplate rabbitTemplate;
*/
@Autowired
RedisCache
redisCache
;
...
...
@@ -1491,7 +1490,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
rootOrg
=
rootOrg
.
selectOne
(
rootOrgEw
);
if
(
null
==
rootOrg
)
{
failEvents
.
add
(
new
TaskLogDetailEvent
(
taskId
,
"!!!查找根组织错误:未成功查询到根组织!!!"
));
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
return
models
;
}
...
...
@@ -2044,7 +2043,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
}
//错误的信息发送给任务详情表
if
(
CollectionUtils
.
isNotEmpty
(
failEvents
))
{
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
}
return
models
;
}
else
{
...
...
cloud-system/src/main/java/com/yizhi/system/application/service/impl/OrganizationServiceImpl.java
View file @
bcfed5b5
...
...
@@ -50,7 +50,6 @@ import org.apache.commons.collections.CollectionUtils;
import
org.apache.commons.lang.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.cache.annotation.Cacheable
;
...
...
@@ -85,8 +84,8 @@ public class OrganizationServiceImpl extends ServiceImpl<OrganizationMapper, Org
private
SiteMapper
siteMapper
;
@Autowired
private
AuthzGroupMemberMapper
groupMemberMapper
;
@Autowired
RabbitTemplate
rabbitTemplate
;
/*
@Autowired
RabbitTemplate rabbitTemplate;
*/
@Autowired
private
IAuthzGroupMemberService
groupMemberService
;
@Autowired
...
...
@@ -436,7 +435,7 @@ public class OrganizationServiceImpl extends ServiceImpl<OrganizationMapper, Org
}
//错误的信息发送给任务详情表
if
(
CollectionUtils
.
isNotEmpty
(
failEvents
))
{
rabbitTemplate
.
convertAndSend
(
LogQueue
.
BATCH_TASK_LOG_DETAIL_QUEUE
,
failEvents
);
//
rabbitTemplate.convertAndSend(LogQueue.BATCH_TASK_LOG_DETAIL_QUEUE, failEvents);
}
}
return
impModels
;
...
...
cloud-system/src/main/resources/bootstrap.properties
View file @
bcfed5b5
server.port
=
35000
spring.application.name
=
system
ACTIVE
=
${spring.profiles.active}
spring.profiles.active
=
dev
spring.profiles.active
=
prod
# nacos
spring.cloud.nacos.config.shared-dataids
=
common-${spring.profiles.active}.properties
spring.cloud.nacos.config.namespace
=
${spring.profiles.active}
spring.cloud.nacos.config.prefix
=
${spring.application.name}
spring.cloud.nacos.config.file-extension
=
properties
spring.cloud.nacos.config.server-addr
=
1
92.168.1.22:3333
spring.cloud.nacos.config.server-addr
=
1
0.23.1.183:8848
mybatis-plus.global-config.logic-not-delete-value
=
0
mybatis-plus.global-config.logic-delete-value
=
1
mybatis-plus.global-config.sql-injector
=
com.baomidou.mybatisplus.mapper.LogicSqlInjector
cloud-system/src/test/java/com/yizhi/application/CodeGenerator.java
View file @
bcfed5b5
...
...
@@ -53,7 +53,7 @@
// DataSourceConfig dsc = new DataSourceConfig();
// dsc.setUrl("jdbc:mysql://172.17.3.163:3306/czt?useUnicode=true&useSSL=false&characterEncoding=utf8");
// // dsc.setSchemaName("public");
// dsc.setDriverName("com.mysql.jdbc.Driver");
// dsc.setDriverName("com.mysql.
cj.
jdbc.Driver");
// dsc.setUsername("root");
// dsc.setPassword("123456");
// mpg.setDataSource(dsc);
...
...
cloud-system/src/test/resources/jdbc-tomcat.properties
View file @
bcfed5b5
connection.url
=
jdbc:mysql://192.168.0.150:3306/cloud_security?useUnicode=true&characterEncoding=UTF-8&relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull
connection.driverClassName
=
com.mysql.jdbc.Driver
connection.driverClassName
=
com.mysql.
cj.
jdbc.Driver
connection.username
=
root
connection.password
=
fulan@321#$
cloud-util/src/main/java/com/yizhi/util/application/regex/RegexUtil.java
View file @
bcfed5b5
...
...
@@ -146,7 +146,7 @@ public class RegexUtil {
}
/**
* 匹配IP地址(简单匹配,格式,如:192.168.1.1,1
27.0.0.1
,没有匹配IP段的大小)
* 匹配IP地址(简单匹配,格式,如:192.168.1.1,1
0.23.1.183
,没有匹配IP段的大小)
* @param ipAddress IPv4标准地址
* @return 验证成功返回true,验证失败返回false
*/
...
...
pom.xml
View file @
bcfed5b5
...
...
@@ -55,8 +55,8 @@
<repositories>
<repository>
<id>
learning
-data-group
</id>
<url>
http://192.168.0.15:8081/repository/
learning
-data-group/
</url>
<id>
hqzhdj
-data-group
</id>
<url>
http://192.168.0.15:8081/repository/
hqzhdj
-data-group/
</url>
<releases>
<enabled>
true
</enabled>
</releases>
...
...
@@ -69,8 +69,8 @@
<distributionManagement>
<snapshotRepository>
<id>
learning
-data
</id>
<url>
http://192.168.0.15:8081/repository/
learning
-data/
</url>
<id>
hqzhdj
-data
</id>
<url>
http://192.168.0.15:8081/repository/
hqzhdj
-data/
</url>
</snapshotRepository>
</distributionManagement>
...
...
wmy.json
View file @
bcfed5b5
...
...
@@ -7,7 +7,7 @@
"parentPom"
:
"elearn"
,
"servicePom"
:
"elearn/cloud-system"
,
"dev"
:
{
"JAVA_OPTS"
:
"-Dspring.profiles.active=
dev
-Dspring.cloud.nacos.config.server-addr=192.168.1.22:3333,192.168.1.22:4444,192.168.1.22:5555"
"JAVA_OPTS"
:
"-Dspring.profiles.active=
prod
-Dspring.cloud.nacos.config.server-addr=192.168.1.22:3333,192.168.1.22:4444,192.168.1.22:5555"
},
"sit"
:
{
"JAVA_OPTS"
:
"-Dspring.profiles.active=sit -Dspring.cloud.nacos.config.server-addr=192.168.1.13:3333,192.168.1.24:4444,192.168.1.38:5555"
...
...
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