Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
dd_school
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
wangqi
dd_school
Commits
272909d3
Commit
272909d3
authored
Oct 10, 2023
by
Cat
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://49.232.152.146:6688/qangqi/dd_school
parents
a6bb6ef0
75f3944a
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
326 additions
and
0 deletions
+326
-0
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
+2
-0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
+2
-0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+6
-0
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+31
-0
smart-campus/src/main/java/yangtz/cs/liu/campus/vo/teacher/SchoolTeacherVO.java
+5
-0
smart-campus/src/main/java/yangtz/cs/liu/dingding/controller/DdAppLoginController.java
+225
-0
smart-campus/src/main/java/yangtz/cs/liu/wechat/service/api/IWxLoginService.java
+1
-0
smart-campus/src/main/java/yangtz/cs/liu/wechat/service/impl/api/WxLoginServiceImpl.java
+54
-0
No files found.
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
View file @
272909d3
...
@@ -130,6 +130,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
...
@@ -130,6 +130,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
//wx信息采集相关接口放行
//wx信息采集相关接口放行
.
antMatchers
(
"/wx/schoolInfo/**"
).
permitAll
()
.
antMatchers
(
"/wx/schoolInfo/**"
).
permitAll
()
.
antMatchers
(
"/wx/user/getToken"
).
permitAll
()
.
antMatchers
(
"/wx/user/getToken"
).
permitAll
()
//钉钉免登录接口
.
antMatchers
(
"/dd/App/user/**"
).
permitAll
()
//开发一个接口字典
//开发一个接口字典
.
antMatchers
(
"/system/dict/data/type/**"
).
permitAll
()
.
antMatchers
(
"/system/dict/data/type/**"
).
permitAll
()
// .antMatchers("/**").permitAll()
// .antMatchers("/**").permitAll()
...
...
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
View file @
272909d3
...
@@ -20,6 +20,8 @@ public interface SysUserMapper {
...
@@ -20,6 +20,8 @@ public interface SysUserMapper {
*/
*/
public
List
<
SysUser
>
selectUserList
(
SysUser
sysUser
);
public
List
<
SysUser
>
selectUserList
(
SysUser
sysUser
);
public
List
<
SysUser
>
selectUserListTypeLogin
(
SysUser
sysUser
);
/**
/**
* 根据条件分页查询已配用户角色列表
* 根据条件分页查询已配用户角色列表
*
*
...
...
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
View file @
272909d3
...
@@ -74,7 +74,13 @@ public class SysUserServiceImpl implements ISysUserService {
...
@@ -74,7 +74,13 @@ public class SysUserServiceImpl implements ISysUserService {
public
List
<
SysUser
>
selectUserList
(
SysUser
user
)
{
public
List
<
SysUser
>
selectUserList
(
SysUser
user
)
{
return
userMapper
.
selectUserList
(
user
);
return
userMapper
.
selectUserList
(
user
);
}
}
public
List
<
SysUser
>
selectUserTypeList
(
SysUser
user
)
{
return
userMapper
.
selectUserList
(
user
);
}
public
List
<
SysUser
>
selectUserListTypeLogin
(
SysUser
user
)
{
return
userMapper
.
selectUserListTypeLogin
(
user
);
}
/**
/**
* 根据条件分页查询已分配用户角色列表
* 根据条件分页查询已分配用户角色列表
*
*
...
...
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
View file @
272909d3
...
@@ -94,6 +94,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -94,6 +94,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${params.dataScope}
${params.dataScope}
</select>
</select>
<select
id=
"selectUserListTypeLogin"
parameterType=
"SysUser"
resultMap=
"SysUserResult"
>
select u.user_id, u.dept_id, u.login_name, u.user_name,u.user_type, u.user_login_type, u.email, u.avatar, u.phonenumber, u.sex,u.salt,u.student_id, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0'
<if
test=
"userLoginType != null and userLoginType != 0"
>
AND u.user_login_type = #{userLoginType}
</if>
<if
test=
"userId != null and userId != 0"
>
AND u.user_id = #{userId}
</if>
<if
test=
"userName != null and userName != ''"
>
AND u.user_name like concat('%', #{userName}, '%')
</if>
<if
test=
"status != null and status != ''"
>
AND u.status = #{status}
</if>
<if
test=
"phonenumber != null and phonenumber != ''"
>
AND u.phonenumber like concat('%', #{phonenumber}, '%')
</if>
<if
test=
"params.beginTime != null and params.beginTime != ''"
>
<!-- 开始时间检索 -->
AND date_format(u.create_time,'%y%m%d')
>
= date_format(#{params.beginTime},'%y%m%d')
</if>
<if
test=
"params.endTime != null and params.endTime != ''"
>
<!-- 结束时间检索 -->
AND date_format(u.create_time,'%y%m%d')
<
= date_format(#{params.endTime},'%y%m%d')
</if>
<if
test=
"deptId != null and deptId != 0"
>
AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
</if>
</select>
<select
id=
"selectAllocatedList"
parameterType=
"SysUser"
resultMap=
"SysUserResult"
>
<select
id=
"selectAllocatedList"
parameterType=
"SysUser"
resultMap=
"SysUserResult"
>
select distinct u.user_id, u.dept_id, u.user_name, u.login_name, u.user_type,u.email, u.phonenumber, u.status, u.create_time
select distinct u.user_id, u.dept_id, u.user_name, u.login_name, u.user_type,u.email, u.phonenumber, u.status, u.create_time
from sys_user u
from sys_user u
...
...
smart-campus/src/main/java/yangtz/cs/liu/campus/vo/teacher/SchoolTeacherVO.java
View file @
272909d3
...
@@ -110,6 +110,11 @@ public class SchoolTeacherVO extends OurBaseEntity {
...
@@ -110,6 +110,11 @@ public class SchoolTeacherVO extends OurBaseEntity {
private
Long
userId
;
private
Long
userId
;
private
String
ddUserId
;
private
String
unionId
;
/** 帐号状态(0正常 1停用) */
/** 帐号状态(0正常 1停用) */
//@Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
//@Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
private
String
status
;
private
String
status
;
...
...
smart-campus/src/main/java/yangtz/cs/liu/dingding/controller/DdAppLoginController.java
0 → 100644
View file @
272909d3
package
yangtz
.
cs
.
liu
.
dingding
.
controller
;
import
com.dingtalk.api.DefaultDingTalkClient
;
import
com.dingtalk.api.DingTalkClient
;
import
com.dingtalk.api.request.OapiUserGetuserinfoRequest
;
import
com.dingtalk.api.request.OapiV2UserGetRequest
;
import
com.dingtalk.api.response.OapiUserGetuserinfoResponse
;
import
com.dingtalk.api.response.OapiV2UserGetResponse
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.core.domain.AjaxResult
;
import
com.ruoyi.common.core.domain.entity.SysUser
;
import
com.ruoyi.common.core.domain.model.MpLoginUser
;
import
com.ruoyi.common.exception.ServiceException
;
import
com.ruoyi.common.utils.MessageUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.framework.manager.AsyncManager
;
import
com.ruoyi.framework.manager.factory.AsyncFactory
;
import
com.ruoyi.framework.web.service.MpTokenService
;
import
com.ruoyi.framework.web.service.SysLoginService
;
import
com.ruoyi.system.service.impl.SysUserServiceImpl
;
import
com.taobao.api.ApiException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
yangtz.cs.liu.campus.domain.student.SchoolStudent
;
import
yangtz.cs.liu.campus.domain.student.SchoolStudentEducational
;
import
yangtz.cs.liu.campus.mapper.student.SchoolStudentMapper
;
import
yangtz.cs.liu.campus.service.impl.teacher.SchoolTeacherServiceImpl
;
import
yangtz.cs.liu.campus.service.student.ISchoolStudentEducationalService
;
import
yangtz.cs.liu.dingding.utils.AccessTokenUtils
;
import
yangtz.cs.liu.wechat.domain.WxLoginBody
;
import
yangtz.cs.liu.wechat.service.api.IWxLoginService
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
static
yangtz
.
cs
.
liu
.
wechat
.
constant
.
LoginTypeConstant
.
TEACHER_LOGIN
;
/**
*
* 企业内部应用免登
* @author openapi@dingtalk
* 2020-11-3
*/
@RestController
@RequestMapping
(
"/dd/App/user"
)
public
class
DdAppLoginController
{
@Autowired
private
AccessTokenUtils
accessTokenUtils
;
@Autowired
private
SysUserServiceImpl
sysUserService
;
@Autowired
private
IWxLoginService
wxLoginService
;
@Autowired
private
SchoolStudentMapper
schoolStudentMapper
;
@Autowired
private
MpTokenService
mpTokenService
;
/**
*
* @param code
* @return
* ServiceResult
* 2020-11-3
*/
@RequestMapping
(
value
=
"/login"
,
method
=
RequestMethod
.
GET
)
public
AjaxResult
login
(
@RequestParam
(
"code"
)
String
code
,
@RequestParam
(
"roleType"
)
String
roleType
)
throws
Exception
{
// 获取access_token,注意正式代码要有异常流处理
String
access_token
=
accessTokenUtils
.
getToken
();
// 获取用户信息
DingTalkClient
client
=
new
DefaultDingTalkClient
(
"https://oapi.dingtalk.com/user/getuserinfo"
);
OapiUserGetuserinfoRequest
request
=
new
OapiUserGetuserinfoRequest
();
request
.
setCode
(
code
);
request
.
setHttpMethod
(
"GET"
);
OapiUserGetuserinfoResponse
response
;
try
{
response
=
client
.
execute
(
request
,
access_token
);
}
catch
(
ApiException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
return
null
;
}
Long
errcode
=
response
.
getErrcode
();
if
(
errcode
!=
0
){
return
AjaxResult
.
error
(
errcode
.
intValue
(),
response
.
getErrmsg
());
}
// 查询得到当前用户的userId
// 获得到userId之后应用应该处理应用自身的登录会话管理(session),避免后续的业务交互(前端到应用服务端)每次都要重新获取用户身份,提升用户体验
String
userId
=
response
.
getUserid
();
// 查询得到当前用户的userId
// 获得到userId之后应用应该处理应用自身的登录会话管理(session),避免后续的业务交互(前端到应用服务端)每次都要重新获取用户身份,提升用户体验
if
(
StringUtils
.
isEmpty
(
userId
)){
throw
new
ServiceException
(
"免登码已失效,请重新获取"
);
}
//获取用户详细信息
Map
<
String
,
Object
>
userInfo
=
getUserInfo
(
userId
,
access_token
);
String
unionId
=
(
String
)
userInfo
.
get
(
"unionId"
);
SysUser
sysUserVo
=
new
SysUser
();
sysUserVo
.
setUserLoginType
(
roleType
);
sysUserVo
.
setPhonenumber
(
userInfo
.
get
(
"phone"
).
toString
());
List
<
SysUser
>
sysUsers
=
sysUserService
.
selectUserListTypeLogin
(
sysUserVo
);
if
(
sysUsers
.
isEmpty
()){
throw
new
ServiceException
(
"未查询到该用户信息"
);
}
SysUser
sysUser
=
sysUsers
.
get
(
0
);
WxLoginBody
wxLoginBody
=
new
WxLoginBody
();
wxLoginBody
.
setPhonenumber
(
sysUser
.
getPhonenumber
());
wxLoginBody
.
setType
(
sysUser
.
getUserLoginType
());
wxLoginBody
.
setOpenId
(
unionId
);
wxLoginBody
.
setParentTelephone
(
sysUser
.
getPhonenumber
());
if
(
null
!=
sysUser
.
getStudentId
()){
SchoolStudent
schoolStudent
=
schoolStudentMapper
.
selectByIdCard
(
sysUser
.
getStudentId
().
toString
());
wxLoginBody
.
setStudentIdCard
(
schoolStudent
.
getIdCard
());
}
wxLoginBody
.
setParentName
(
sysUser
.
getUserName
());
wxLoginBody
.
setTeacherName
(
sysUser
.
getUserName
());
MpLoginUser
user
=
wxLoginService
.
ddApplogin
(
wxLoginBody
);
if
(
StringUtils
.
isNull
(
user
))
{
return
AjaxResult
.
error
(
"login error"
);
}
String
userName
=
TEACHER_LOGIN
.
equals
(
user
.
getType
())
?
user
.
getTeacherName
()
:
user
.
getParentName
();
AsyncManager
.
me
().
execute
(
AsyncFactory
.
recordLogininfor
(
userName
,
Constants
.
LOGIN_SUCCESS
,
MessageUtils
.
message
(
"user.login.success"
)));
String
token
=
mpTokenService
.
createToken
(
user
);
return
AjaxResult
.
success
().
put
(
Constants
.
TOKEN
,
token
);
}
/**
* 获取当前手机号有几个角色
*/
@GetMapping
(
"/getRole"
)
public
AjaxResult
getRole
(
@RequestParam
(
"code"
)
String
code
){
// 获取access_token,注意正式代码要有异常流处理
String
access_token
=
accessTokenUtils
.
getToken
();
// 获取用户信息
DingTalkClient
client
=
new
DefaultDingTalkClient
(
"https://oapi.dingtalk.com/user/getuserinfo"
);
OapiUserGetuserinfoRequest
request
=
new
OapiUserGetuserinfoRequest
();
request
.
setCode
(
code
);
request
.
setHttpMethod
(
"GET"
);
OapiUserGetuserinfoResponse
response
;
try
{
response
=
client
.
execute
(
request
,
access_token
);
}
catch
(
ApiException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
return
null
;
}
// 查询得到当前用户的userId
// 获得到userId之后应用应该处理应用自身的登录会话管理(session),避免后续的业务交互(前端到应用服务端)每次都要重新获取用户身份,提升用户体验
String
userId
=
response
.
getUserid
();
Map
<
String
,
Object
>
userInfo
=
getUserInfo
(
userId
,
access_token
);
SysUser
sysUser
=
new
SysUser
();
sysUser
.
setPhonenumber
(
userInfo
.
get
(
"phone"
).
toString
());
List
<
SysUser
>
sysUsers
=
sysUserService
.
selectUserListTypeLogin
(
sysUser
);
if
(
sysUsers
.
isEmpty
()){
return
AjaxResult
.
error
(
"没有相关角色"
);
}
else
if
(
sysUsers
.
size
()
==
1
){
List
<
Map
<
String
,
String
>>
mapList
=
new
ArrayList
<>();
Map
<
String
,
String
>
map
=
new
HashMap
<>();
if
(
null
==
sysUsers
.
get
(
0
).
getStudentId
()){
map
.
put
(
"name"
,
sysUsers
.
get
(
0
).
getUserName
());
map
.
put
(
"userLoginType"
,
sysUsers
.
get
(
0
).
getUserLoginType
());
}
else
{
SchoolStudent
schoolStudent
=
schoolStudentMapper
.
selectById
(
sysUsers
.
get
(
0
).
getStudentId
());
map
.
put
(
"name"
,
sysUsers
.
get
(
0
).
getUserName
());
map
.
put
(
"userLoginType"
,
sysUsers
.
get
(
0
).
getUserLoginType
());
map
.
put
(
"studentName"
,
schoolStudent
.
getStudentName
());
}
mapList
.
add
(
map
);
return
AjaxResult
.
success
(
mapList
);
}
else
if
(
sysUsers
.
size
()>
1
){
List
<
Map
<
String
,
String
>>
mapList
=
new
ArrayList
<>();
sysUsers
.
forEach
(
date
->{
Map
<
String
,
String
>
map
=
new
HashMap
<>();
if
(
null
==
date
.
getStudentId
()){
map
.
put
(
"name"
,
date
.
getUserName
());
map
.
put
(
"userLoginType"
,
date
.
getUserLoginType
());
}
else
{
SchoolStudent
schoolStudent
=
schoolStudentMapper
.
selectById
(
date
.
getStudentId
());
map
.
put
(
"name"
,
date
.
getUserName
());
map
.
put
(
"userLoginType"
,
date
.
getUserLoginType
());
map
.
put
(
"studentName"
,
schoolStudent
.
getStudentName
());
}
mapList
.
add
(
map
);
});
return
AjaxResult
.
success
(
mapList
);
}
return
AjaxResult
.
error
(
"未找到用户信息"
);
}
/**
*
* @param userId
* @param token
* @return
*/
public
Map
<
String
,
Object
>
getUserInfo
(
String
userId
,
String
token
){
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
try
{
DingTalkClient
client
=
new
DefaultDingTalkClient
(
"https://oapi.dingtalk.com/topapi/v2/user/get"
);
OapiV2UserGetRequest
req
=
new
OapiV2UserGetRequest
();
req
.
setUserid
(
userId
);
OapiV2UserGetResponse
rsp
=
client
.
execute
(
req
,
token
);
OapiV2UserGetResponse
.
UserGetResponse
result
=
rsp
.
getResult
();
String
name
=
result
.
getName
();
String
phone
=
result
.
getMobile
();
String
unionId
=
result
.
getUnionid
();
map
.
put
(
"userName"
,
name
);
map
.
put
(
"phone"
,
phone
);
map
.
put
(
"unionId"
,
unionId
);
}
catch
(
ApiException
e
)
{
e
.
printStackTrace
();
}
return
map
;
}
}
smart-campus/src/main/java/yangtz/cs/liu/wechat/service/api/IWxLoginService.java
View file @
272909d3
...
@@ -13,4 +13,5 @@ public interface IWxLoginService {
...
@@ -13,4 +13,5 @@ public interface IWxLoginService {
* 用户登录
* 用户登录
*/
*/
MpLoginUser
login
(
WxLoginBody
wxLoginBody
);
MpLoginUser
login
(
WxLoginBody
wxLoginBody
);
MpLoginUser
ddApplogin
(
WxLoginBody
wxLoginBody
);
}
}
smart-campus/src/main/java/yangtz/cs/liu/wechat/service/impl/api/WxLoginServiceImpl.java
View file @
272909d3
...
@@ -46,7 +46,61 @@ public class WxLoginServiceImpl implements IWxLoginService {
...
@@ -46,7 +46,61 @@ public class WxLoginServiceImpl implements IWxLoginService {
private
Logger
log
=
LoggerFactory
.
getLogger
(
WxLoginServiceImpl
.
class
);
private
Logger
log
=
LoggerFactory
.
getLogger
(
WxLoginServiceImpl
.
class
);
@Override
public
MpLoginUser
ddApplogin
(
WxLoginBody
wxLoginBody
)
{
MpLoginUser
mpLoginUser
=
null
;
if
(
TEACHER_LOGIN
.
equals
(
wxLoginBody
.
getType
()))
{
SysUser
sysUser
=
new
SysUser
();
sysUser
.
setUserLoginType
(
TEACHER_LOGIN
);
sysUser
.
setPhonenumber
(
wxLoginBody
.
getPhonenumber
());
SysUser
user
=
userMapper
.
getUser
(
sysUser
);
// 教职工登录
mpLoginUser
=
loadUserB
(
wxLoginBody
,
user
);
}
else
if
(
PARENT_LOGIN
.
equals
(
wxLoginBody
.
getType
()))
{
SchoolStudentParent
schoolStudentParent
=
schoolStudentParentMapper
.
selectUserByParentTel
(
wxLoginBody
.
getParentTelephone
(),
wxLoginBody
.
getStudentIdCard
());
if
(
StringUtils
.
isNull
(
schoolStudentParent
)){
throw
new
ServiceException
(
"学生身份证号或家长手机号输入有误,请检查后重试"
);
}
mpLoginUser
=
loadUserByParent
(
wxLoginBody
,
schoolStudentParent
);
}
return
mpLoginUser
;
}
public
MpLoginUser
loadUserB
(
WxLoginBody
wxLoginBody
,
SysUser
user
)
{
if
(
StringUtils
.
isNull
(
user
))
{
throw
new
ServiceException
(
"登录用户:"
+
wxLoginBody
.
getPhonenumber
()
+
" 不存在"
);
}
if
(
UserStatus
.
DISABLE
.
getCode
().
equals
(
user
.
getDelFlag
()))
{
throw
new
ServiceException
(
"对不起,登录用户:"
+
wxLoginBody
.
getPhonenumber
()
+
" 已被删除"
);
}
else
if
(
UserStatus
.
DISABLE
.
getCode
().
equals
(
user
.
getStatus
()))
{
throw
new
ServiceException
(
"对不起,登录用户:"
+
wxLoginBody
.
getPhonenumber
()
+
" 已停用"
);
}
LambdaQueryWrapper
<
SchoolTeacher
>
lqw
=
new
LambdaQueryWrapper
<>();
lqw
.
eq
(
SchoolTeacher:
:
getId
,
user
.
getUserId
());
SchoolTeacher
schoolTeacher
=
schoolTeacherMapper
.
selectOne
(
lqw
);
MpLoginUser
loginUser
=
new
MpLoginUser
();
loginUser
.
setOpenId
(
wxLoginBody
.
getOpenId
());
loginUser
.
setType
(
TEACHER_LOGIN
);
loginUser
.
setEmployeeType
(
user
.
getEmployeeType
());
loginUser
.
setUserId
(
user
.
getUserId
());
loginUser
.
setTeacherId
(
schoolTeacher
.
getId
());
loginUser
.
setTeacherName
(
schoolTeacher
.
getTeacherName
());
loginUser
.
setTeacherIdCard
(
schoolTeacher
.
getIdCard
());
loginUser
.
setTeacherPhonenumber
(
schoolTeacher
.
getTeacherTel
());
loginUser
.
setAvatar
(
user
.
getAvatar
());
/** 更新老师openId */
schoolTeacher
.
setOpenId
(
wxLoginBody
.
getOpenId
());
schoolTeacherMapper
.
updateById
(
schoolTeacher
);
/** 更新用户表openId */
SysUser
sysUser
=
new
SysUser
();
sysUser
.
setUserId
(
user
.
getUserId
());
sysUser
.
setOpenId
(
wxLoginBody
.
getOpenId
());
userMapper
.
updateUser
(
sysUser
);
return
loginUser
;
}
@Override
@Override
public
MpLoginUser
login
(
WxLoginBody
wxLoginBody
)
{
public
MpLoginUser
login
(
WxLoginBody
wxLoginBody
)
{
MpLoginUser
mpLoginUser
=
null
;
MpLoginUser
mpLoginUser
=
null
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment