Toggle navigation
Toggle navigation
This project
Loading...
Sign in
jiujian
/
client-customer-order-api
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
wangyingyang
2024-11-07 21:27:56 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
5b10e65830605af1f72f94a7299a53c4a8ce7bd2
5b10e658
1 parent
8cc7e878
add login
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
145 additions
and
9 deletions
src/main/java/com/infoloop/tianting/config/WebMvcConfig.java
src/main/java/com/infoloop/tianting/constant/CommonConstants.java
src/main/java/com/infoloop/tianting/controller/ClientCustomerController.java
src/main/java/com/infoloop/tianting/enums/LoginSourceEnum.java
src/main/java/com/infoloop/tianting/intercepter/LoginInterceptor.java
src/main/java/com/infoloop/tianting/model/dto/PermissionDTO.java
src/main/java/com/infoloop/tianting/service/LoginService.java
src/main/java/com/infoloop/tianting/service/client/ClientCustomerServiceRpcClient.java
src/main/java/com/infoloop/tianting/service/impl/LoginServiceImpl.java
src/main/java/com/infoloop/tianting/config/WebMvcConfig.java
View file @
5b10e65
...
...
@@ -6,7 +6,9 @@ import com.infoloop.tianting.intercepter.ApiSignInterceptor;
import
com.infoloop.tianting.intercepter.LoginInterceptor
;
import
com.infoloop.tianting.intercepter.RequestMonitor
;
import
com.infoloop.tianting.intercepter.ResourceInjector
;
import
com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient
;
import
com.infoloop.tianting.tracing.HttpTracingInterceptor
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.web.servlet.FilterRegistrationBean
;
import
org.springframework.context.annotation.Bean
;
...
...
@@ -30,12 +32,13 @@ public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
public
WebMvcConfig
(
final
Tracing
tracing
,
final
ResourceInjector
resourceInjector
)
{
final
ResourceInjector
resourceInjector
,
final
ClientCustomerServiceRpcClient
clientCustomerServiceRpcClient
)
{
this
.
httpInterceptors
=
new
ArrayList
<>();
this
.
httpInterceptors
.
add
(
new
HttpTracingInterceptor
(
tracing
));
this
.
httpInterceptors
.
add
(
new
RequestMonitor
());
this
.
httpInterceptors
.
add
(
new
ApiSignInterceptor
());
this
.
httpInterceptors
.
add
(
new
LoginInterceptor
());
this
.
httpInterceptors
.
add
(
new
LoginInterceptor
(
clientCustomerServiceRpcClient
));
this
.
httpInterceptors
.
add
(
resourceInjector
);
}
...
...
@@ -75,6 +78,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
final
var
registrationBean
=
new
FilterRegistrationBean
<
HttpServletRequestWrapperFilter
>();
registrationBean
.
setFilter
(
new
HttpServletRequestWrapperFilter
());
registrationBean
.
addUrlPatterns
(
"/*"
);
registrationBean
.
addUrlPatterns
();
return
registrationBean
;
}
}
...
...
src/main/java/com/infoloop/tianting/constant/CommonConstants.java
View file @
5b10e65
...
...
@@ -54,5 +54,6 @@ public interface CommonConstants {
String
ENTERPRISE_ID
=
"enterpriseId"
;
String
LOGIN_SOURCE
=
"loginSource"
;
}
...
...
src/main/java/com/infoloop/tianting/controller/ClientCustomerController.java
View file @
5b10e65
package
com
.
infoloop
.
tianting
.
controller
;
import
cn.dev33.satoken.annotation.SaIgnore
;
import
cn.dev33.satoken.stp.SaTokenInfo
;
import
com.github.xiaoymin.knife4j.annotations.ApiSupport
;
import
com.infoloop.tianting.model.dto.ClientCustomerDbDTO.ClientCustomerDto
;
import
com.infoloop.tianting.model.dto.ClientCustomerDbDTO.HospitalRecordDto
;
import
com.infoloop.tianting.model.dto.PermissionDTO.LoginDto
;
import
com.infoloop.tianting.model.dto.WxUserDto.WxUserOpenIdDto
;
import
com.infoloop.tianting.model.dto.WxUserDto.WxUserPhoneResponseDto
;
import
com.infoloop.tianting.service.ClientCustomerService
;
import
com.infoloop.tianting.service.LoginService
;
import
com.infoloop.tianting.service.WxMiniProgramService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
java.util.List
;
import
javax.validation.Valid
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -17,6 +22,8 @@ import org.springframework.http.HttpStatus;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.ResponseStatus
;
import
org.springframework.web.bind.annotation.RestController
;
...
...
@@ -29,6 +36,7 @@ import org.springframework.web.bind.annotation.RestController;
public
class
ClientCustomerController
{
private
final
ClientCustomerService
clientCustomerService
;
private
final
WxMiniProgramService
wxMiniProgramService
;
private
final
LoginService
loginService
;
@ApiOperation
(
value
=
"根据hisCustomerId获取ClientCustomer"
)
@GetMapping
(
"/customers/his/{hisCustomerId}"
)
...
...
@@ -67,4 +75,12 @@ public class ClientCustomerController {
return
wxMiniProgramService
.
getUserPhoneInfoByCode
(
code
);
}
@SaIgnore
@ApiOperation
(
value
=
"登陆"
)
@PostMapping
(
"/login"
)
@ResponseStatus
(
HttpStatus
.
OK
)
public
SaTokenInfo
login
(
@Valid@RequestBody
LoginDto
loginDto
)
{
return
loginService
.
login
(
loginDto
);
}
}
...
...
src/main/java/com/infoloop/tianting/enums/LoginSourceEnum.java
0 → 100644
View file @
5b10e65
package
com
.
infoloop
.
tianting
.
enums
;
import
com.infoloop.tianting.exception.BaseEnum
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
@Getter
@AllArgsConstructor
public
enum
LoginSourceEnum
{
CUSTOMER
(
1
,
"小程序住院客户"
),
MINI_PROGRAM
(
2
,
"小程序非住院客户"
),
CLIENT
(
3
,
"院区端"
),
KDS
(
4
,
"KDS"
),
;
/**
* 订单类型的值
*/
private
final
Integer
value
;
/**
* 订单类型的名字
*/
private
final
String
name
;
}
src/main/java/com/infoloop/tianting/intercepter/LoginInterceptor.java
View file @
5b10e65
...
...
@@ -3,13 +3,21 @@ package com.infoloop.tianting.intercepter;
import
cn.dev33.satoken.annotation.SaIgnore
;
import
cn.dev33.satoken.error.SaErrorCode
;
import
cn.dev33.satoken.exception.SaTokenException
;
import
cn.dev33.satoken.stp.StpUtil
;
import
cn.dev33.satoken.strategy.SaStrategy
;
import
cn.hutool.core.convert.Convert
;
import
com.infoloop.tianting.constant.CommonConstants
;
import
com.infoloop.tianting.context.LoginContextHolder
;
import
com.infoloop.tianting.enums.LoginSourceEnum
;
import
com.infoloop.tianting.exception.ErrorCodeEnum
;
import
com.infoloop.tianting.model.common.ResponseResult
;
import
com.infoloop.tianting.service.ClientCustomerService
;
import
com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient
;
import
com.infoloop.tianting.utils.ResponseUtil
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.tomcat.jni.Error
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.method.HandlerMethod
;
...
...
@@ -24,6 +32,8 @@ import java.io.IOException;
@SuppressWarnings
(
"all"
)
@RequiredArgsConstructor
public
class
LoginInterceptor
extends
HandlerInterceptorAdapter
{
// private final ClientCustomerService clientCustomerService;
private
final
ClientCustomerServiceRpcClient
clientCustomerServiceRpcClient
;
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
throws
IOException
{
...
...
@@ -52,13 +62,20 @@ public class LoginInterceptor extends HandlerInterceptorAdapter {
private
boolean
handleLogin
(
HttpServletRequest
request
,
HttpServletResponse
response
,
LoginContextHolder
.
LoginInfo
.
LoginInfoBuilder
builder
)
throws
SaTokenException
{
// StpUtil.checkLogin();
// final var loginId = StpUtil.getLoginIdAsInt();
// final var enterpriseId = Convert.toInt(StpUtil.getExtra(CommonConstants.ENTERPRISE_ID));
//TODO: 校验登录,获取登录用户信息,注入登录用户上下文信息
builder
.
id
(
1
)
.
enterpriseId
(
1
)
.
name
(
"admin"
);
StpUtil
.
checkLogin
();
final
var
loginId
=
StpUtil
.
getLoginIdAsInt
();
final
var
enterpriseId
=
Convert
.
toInt
(
StpUtil
.
getExtra
(
CommonConstants
.
ENTERPRISE_ID
));
final
var
loginSource
=
Convert
.
toInt
(
StpUtil
.
getExtra
(
CommonConstants
.
LOGIN_SOURCE
));
// if (loginSource.equals(LoginSourceEnum.CUSTOMER.getValue())) {
final
var
customer
=
clientCustomerServiceRpcClient
.
getClientCustomerById
(
loginId
);
if
(
customer
==
null
)
{
response
.
setStatus
(
HttpStatus
.
FORBIDDEN
.
value
());
ResponseUtil
.
write
(
response
,
ResponseResult
.
failed
(
ErrorCodeEnum
.
VALIDATE_FAILED
));
return
false
;
}
builder
.
id
(
loginId
)
.
enterpriseId
(
enterpriseId
)
.
name
(
customer
.
getResponse
().
getName
());
return
true
;
}
...
...
src/main/java/com/infoloop/tianting/model/dto/PermissionDTO.java
0 → 100644
View file @
5b10e65
package
com
.
infoloop
.
tianting
.
model
.
dto
;
import
com.infoloop.tianting.enums.LoginSourceEnum
;
import
io.swagger.annotations.ApiModel
;
import
lombok.Builder
;
import
lombok.Data
;
@Data
@ApiModel
(
description
=
"权限相关DTO"
)
public
class
PermissionDTO
{
@Data
@Builder
@ApiModel
(
description
=
"Login DTO"
)
public
static
class
LoginDto
{
private
LoginSourceEnum
loginSourceEnum
;
private
String
hisCustomerId
;
}
}
src/main/java/com/infoloop/tianting/service/LoginService.java
0 → 100644
View file @
5b10e65
package
com
.
infoloop
.
tianting
.
service
;
import
cn.dev33.satoken.stp.SaTokenInfo
;
import
com.infoloop.tianting.model.dto.PermissionDTO.LoginDto
;
public
interface
LoginService
{
SaTokenInfo
login
(
LoginDto
loginDto
);
}
src/main/java/com/infoloop/tianting/service/client/ClientCustomerServiceRpcClient.java
View file @
5b10e65
...
...
@@ -9,6 +9,8 @@ import com.infoloop.tianting.clientcustomerservice.DeleteClientCustomerLabelRefs
import
com.infoloop.tianting.clientcustomerservice.DeleteClientCustomerLabelRefsRpcResponse
;
import
com.infoloop.tianting.clientcustomerservice.GetClientCustomerByHISCustomerIdRpcRequest
;
import
com.infoloop.tianting.clientcustomerservice.GetClientCustomerByHISCustomerIdRpcResponse
;
import
com.infoloop.tianting.clientcustomerservice.GetClientCustomerByIdRpcRequest
;
import
com.infoloop.tianting.clientcustomerservice.GetClientCustomerByIdRpcResponse
;
import
com.infoloop.tianting.clientcustomerservice.GetClientCustomerByMobileRpcRequest
;
import
com.infoloop.tianting.clientcustomerservice.GetClientCustomerByMobileRpcResponse
;
import
com.infoloop.tianting.clientcustomerservice.GetClientCustomerHospitalRecordsByCustomerIdRpcRequest
;
...
...
@@ -40,6 +42,11 @@ public class ClientCustomerServiceRpcClient {
return
clientCustomerServiceRpcBlockingStub
.
getClientCustomerByHISCustomerId
(
request
);
}
public
GetClientCustomerByIdRpcResponse
getClientCustomerById
(
Integer
id
)
{
final
var
request
=
GetClientCustomerByIdRpcRequest
.
newBuilder
().
setId
(
id
).
build
();
return
clientCustomerServiceRpcBlockingStub
.
getClientCustomerById
(
request
);
}
public
GetClientCustomerByMobileRpcResponse
getClientCustomerByMobile
(
String
phone
)
{
final
var
request
=
GetClientCustomerByMobileRpcRequest
.
newBuilder
()
.
setMobile
(
phone
)
...
...
src/main/java/com/infoloop/tianting/service/impl/LoginServiceImpl.java
0 → 100644
View file @
5b10e65
package
com
.
infoloop
.
tianting
.
service
.
impl
;
import
cn.dev33.satoken.stp.SaLoginModel
;
import
cn.dev33.satoken.stp.SaTokenInfo
;
import
cn.dev33.satoken.stp.StpUtil
;
import
com.infoloop.tianting.constant.CommonConstants
;
import
com.infoloop.tianting.exception.ClientEndExceptions
;
import
com.infoloop.tianting.exception.ErrorCodeEnum
;
import
com.infoloop.tianting.model.dto.PermissionDTO.LoginDto
;
import
com.infoloop.tianting.service.ClientCustomerService
;
import
com.infoloop.tianting.service.LoginService
;
import
com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
@Slf4j
@Service
@RequiredArgsConstructor
(
onConstructor
=
@__
(
@Autowired
))
public
class
LoginServiceImpl
implements
LoginService
{
private
final
ClientCustomerServiceRpcClient
clientCustomerServiceRpcClient
;
@Override
public
SaTokenInfo
login
(
LoginDto
loginDto
)
{
final
var
customer
=
clientCustomerServiceRpcClient
.
getClientCustomerByHISCustomerId
(
loginDto
.
getHisCustomerId
());
if
(
customer
.
getResponse
().
getId
()
==
0
)
{
throw
ClientEndExceptions
.
AuthenticationFailure
.
build
(
ErrorCodeEnum
.
UNAUTHORIZED
.
name
());
}
StpUtil
.
login
(
customer
.
getResponse
().
getId
(),
SaLoginModel
.
create
()
.
setExtra
(
CommonConstants
.
ENTERPRISE_ID
,
customer
.
getResponse
().
getEnterpriseId
())
.
setExtra
(
CommonConstants
.
LOGIN_SOURCE
,
loginDto
.
getLoginSourceEnum
().
getValue
())
.
build
());
return
StpUtil
.
getTokenInfo
();
}
}
Please
register
or
login
to post a comment