controller层:
@Api(tags = "系统")
@RestController
@RequestMapping("/login")
public class LoginController extends BaseController{
@Autowired
private UplusUserService uplusUserService;
@ApiOperation(value = "登录")
@PostMapping(value = "/userLogin", name = "登录")
public Result<UserLoginVo> userLogin(HttpServletRequest request,@RequestBody LoginDto loginDto) {
return uplusUserService.userLogin(request,loginDto);
}
}
入参Dto层:
@Data
@ApiModel(value = "LoginDto",description = "登录入参实体")
public class LoginDto implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "手机号")
private String phone;
@ApiModelProperty(value = "密码")
private String password;
@ApiModelProperty(value = "验证码")
private String phoneCode;
@ApiModelProperty(value = "登录方式:1.验证码登录;2.密码登录")
private Integer loginWay;
}
出参Vo层:
@Data
@ApiModel(value = "UserLoginVo",description = "登录出参")
public class UserLoginVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("授权码")
private String authorization;
@ApiModelProperty("用户信息")
private UplusUser user;
}
@Table(name = "UPLUS_USER")
public class UplusUser implements Serializable {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "DEPOT_ID")
private Long depotId;
@Column(name = "USER_NAME")
private String userName;
@Column(name = "PASSWORD")
private String password;
@Column(name = "PROXY_NUMBER")
private String proxyNumber;
@Column(name = "NICK_NAME")
private String nickName;
@Column(name = "PHONE")
private String phone;
@Column(name = "TYPE_CD")
private String typeCd;
@Column(name = "TYPE")
private String type;
@Column(name = "SEX")
private String sex;
@Column(name = "COMPANY")
private String company;
@Column(name = "SECURITY_KEY")
private String securityKey;
@Column(name = "SUPER_USER_ID")
private Long superUserId;
@Column(name = "LOCK_USER")
private String lockUser;
@Column(name = "CREATE_DATE")
private Date createDate;
@Column(name = "CREATE_USER")
private Long createUser;
@Column(name = "UPDATE_DATE")
private Date updateDate;
@Column(name = "UPDATE_USER")
private Long updateUser;
@Column(name = "HEADER_URL")
private String headerUrl;
@Column(name = "DELETE_DATE")
private Date deleteDate;
@Column(name = "DELETE_USER")
private Long deleteUser;
@Column(name = "DELETE_FLAG")
private String deleteFlag;
@Column(name = "INVITE_CODE")
private String inviteCode;
@Column(name = "INVITE_END_DATE")
private Date inviteEndDate;
@Column(name = "PROFIT_DATE")
private Date profitDate;
@Column(name = "PROFIT")
private Integer profit;
}
Service层:
public interface UplusUserService{
/**
* 登录
* */
Result<UserLoginVo> userLogin(HttpServletRequest request,LoginDto loginDto);
}
Service层impl:
@Service
public class UplusUserServiceImpl implements UplusUserService {
@Autowired
private UplusUserDao uplusUserDao;
@Autowired
private UplusOrderDao uplusOrderDao;
@Autowired
private UplusMasterDao uplusMasterDao;
@Autowired
private UPlusWalletFlowDao uPlusWalletFlowDao;
@Autowired
private RedisUtil redisUtil;
@Autowired
UplusBrokerageRecordDao uplusBrokerageRecordDao;
@Override
public Result<UserLoginVo> userLogin(HttpServletRequest request, LoginDto ldto) {
if (null == ldto) {
return Result.failure(ResultCode.PARAM_IS_BLANK);
}
if (null == ldto.getPhone() || "".equals(ldto.getPhone())) {
return Result.failure(ResultCode.PARAM_IS_BLANK);
}
// 根据手机查询用户是否存在
UplusUser uu = new UplusUser();
uu.setPhone(ldto.getPhone());
UplusUser uplusUser = this.uplusUserDao.selectOne(uu);
if (uplusUser == null) {
return Result.failure(ResultCode.USER_OR_PSW_ERROR);
}
// 判断用户权限
if ((UserEnum.UserTypeEnum.FWS.getValue().equals(uplusUser.getType()))
|| (UserEnum.UserTypeEnum.GHS.getValue().equals(uplusUser.getType()))) {
return Result.failure(ResultCode.LOGIN_NO_ACCESS);
}
// 判断当前用户状态
if (uplusUser.getLockUser().equals(UserEnum.UserLockEnum.LOCK.getCode().toString())) {
return Result.failure(ResultCode.USER_LOCK);
}
// 验证码登录
if (ldto.getLoginWay() == UserEnum.UserLoginWayEnum.CODE.getCode()) {
// String phoneCode = (String) redisUtil.get(ldto.getPhone());
// if (null == phoneCode || "".equals(phoneCode)) {
// return Result.failure(ResultCode.USER_LOGIN_ERROR_NOTPHONEORCODE);
// }
if (!"123456".equals(ldto.getPhoneCode())) {
return Result.failure(ResultCode.USER_LOGIN_CODE_OFNOAVAIL);
}
} else {
// 判断用户密码是否正确
String pswMD5 = CommonUtil.Md5(ldto.getPassword() + uplusUser.getSecurityKey());
if (!pswMD5.equals(uplusUser.getPassword())) {
return Result.failure(ResultCode.USER_OR_PSW_ERROR);
}
}
String authorization = JwtUtil.sign(uplusUser.getId(), uplusUser.getSecurityKey());
UserLoginVo userLoginVo = new UserLoginVo();
userLoginVo.setAuthorization(authorization);
userLoginVo.setUser(uplusUser);
request.getSession().setAttribute(CommonUtil.Md5(uplusUser.getId().toString()), uplusUser);
// 销毁redis验证码
redisUtil.delete(ldto.getPhone());
return Result.success(userLoginVo);
}
}
mapper层:
public interface UplusUserDao extends Mapper<UplusUser> {
/**
* 查询我的团队总人数
*/
int selectCountById(Long id);
Page<UserExpand> queryMember(TeamListDto td);
Page<UserExpand> queryHeadUserSales(TeamListDto td);
UserExpand findUserExpandById(Long id);
/**
* 根据Phone 查询用户
*/
UserLoginVo findByPhone(String phone);
/**
* 根据用户id查询用户业绩
*/
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.uplus.api.dao.UplusUserDao">
<!--加入缓存-->
<!-- <cache type="com.uplus.api.cache.MybatisRedisCache" />-->
<resultMap id="BaseResultMap" type="com.uplus.api.bean.UplusUser">
<id column="ID" jdbcType="BIGINT" property="id" />
<result column="DEPOT_ID" jdbcType="BIGINT" property="depotId" />
<result column="USER_NAME" jdbcType="VARCHAR" property="userName" />
<result column="PASSWORD" jdbcType="VARCHAR" property="password" />
<result column="PROXY_NUMBER" jdbcType="VARCHAR" property="proxyNumber" />
<result column="NICK_NAME" jdbcType="VARCHAR" property="nickName" />
<result column="PHONE" jdbcType="VARCHAR" property="phone" />
<result column="TYPE" jdbcType="VARCHAR" property="type" />
<result column="SEX" jdbcType="VARCHAR" property="sex" />
<result column="COMPANY" jdbcType="VARCHAR" property="company" />
<result column="SECURITY_KEY" jdbcType="VARCHAR" property="securityKey" />
<result column="SUPER_USER_ID" jdbcType="BIGINT" property="superUserId" />
<result column="LOCK_USER" jdbcType="VARCHAR" property="lockUser" />
<result column="CREATE_DATE" jdbcType="TIMESTAMP" property="createDate" />
<result column="CREATE_USER" jdbcType="BIGINT" property="createUser" />
<result column="UPDATE_DATE" jdbcType="TIMESTAMP" property="updateDate" />
<result column="UPDATE_USER" jdbcType="BIGINT" property="updateUser" />
<result column="HEADER_URL" jdbcType="VARCHAR" property="headerUrl" />
<result column="DELETE_DATE" jdbcType="TIMESTAMP" property="deleteDate" />
<result column="DELETE_USER" jdbcType="BIGINT" property="deleteUser" />
<result column="DELETE_FLAG" jdbcType="VARCHAR" property="deleteFlag" />
<result column="INVITE_CODE" jdbcType="VARCHAR" property="inviteCode" />
<result column="INVITE_END_DATE" jdbcType="TIMESTAMP" property="inviteEndDate" />
<result column="PROFIT" jdbcType="INTEGER" property="profit" />
<result column="PROFIT_DATE" jdbcType="TIMESTAMP" property="profitDate" />
</resultMap>
<resultMap id="userModelMap" type="com.uplus.api.vo.address.UserLoginVo" extends="BaseResultMap">
<result column="CREATE_DATE_TEXT" jdbcType="VARCHAR" property="createDateText"/>
<result column="CREATE_USER_NAME" jdbcType="VARCHAR" property="createUserName"/>
<result column="UPDATE_USER_NAME" jdbcType="VARCHAR" property="updateUserName"/>
<result column="UPDATE_DATE_TEXT" jdbcType="VARCHAR" property="updateDateText"/>
<result column="SUPER_USER_NAME" jdbcType="VARCHAR" property="superUserName"/>
<result column="SUPER_USER_PHONE" jdbcType="VARCHAR" property="superUserPhone"/>
<result column="TYPE_NAME" jdbcType="VARCHAR" property="typeName"/>
<result column="depotName" jdbcType="VARCHAR" property="depotName"/>
<result column="USER_TYPE" jdbcType="VARCHAR" property="userType"/>
<result column="MASTER_NAME" jdbcType="VARCHAR" property="masterName"/>
</resultMap>
<!--根据phone查询-->
<select id="findByPhone" parameterType="String" resultMap="userModelMap">
SELECT uu1.*,ud.`NAME` AS depotName, date_format(uu1.CREATE_DATE, '%Y-%c-%d %k:%i:%s' ) AS CREATE_DATE_TEXT,
date_format(uu1.UPDATE_DATE, '%Y-%c-%d %k:%i:%s' ) AS UPDATE_DATE_TEXT,
uu2.USER_NAME AS SUPER_USER_NAME,uu2.PHONE AS SUPER_USER_PHONE ,uu3.USER_NAME AS CREATE_USER_NAME,
uu4.USER_NAME AS UPDATE_USER_NAME,um3.`NAME` AS TYPE_NAME
FROM UPLUS_USER uu1
LEFT OUTER JOIN UPLUS_USER uu2 on uu1.SUPER_USER_ID=uu2.ID AND uu1.SUPER_USER_ID IS NOT NULL
AND uu2.DELETE_FLAG='0'
LEFT OUTER JOIN UPLUS_DEPOT ud ON ud.id = uu1.DEPOT_ID
LEFT OUTER JOIN UPLUS_USER uu3 ON uu1.CREATE_USER =uu3.ID AND uu1.CREATE_USER IS NOT NULL
LEFT OUTER JOIN UPLUS_USER uu4 ON uu1.UPDATE_USER =uu4.ID AND uu1.UPDATE_USER IS NOT NULL
LEFT OUTER JOIN UPLUS_MASTER um3 ON uu1.TYPE = um3.code and um3.master_gp= '01'
WHERE uu1.DELETE_FLAG='0'
AND uu1.PHONE = #{phone}
</select>
<resultMap id="UserMap"
type="com.uplus.api.bean.UplusUser">
<!-- WARNING - @mbg.generated -->
<id column="ID" jdbcType="BIGINT" property="id" />
<result column="DEPOT_ID" jdbcType="BIGINT" property="depotId" />
<result column="USER_NAME" jdbcType="VARCHAR"
property="userName" />
<result column="PASSWORD" jdbcType="VARCHAR"
property="password" />
<result column="PROXY_NUMBER" jdbcType="VARCHAR"
property="proxyNumber" />
<result column="NICK_NAME" jdbcType="VARCHAR"
property="nickName" />
<result column="PHONE" jdbcType="VARCHAR" property="phone" />
<result column="TYPE" jdbcType="VARCHAR" property="type" />
<result column="SEX" jdbcType="VARCHAR" property="sex" />
<result column="COMPANY" jdbcType="VARCHAR" property="company" />
<result column="SECURITY_KEY" jdbcType="VARCHAR"
property="securityKey" />
<result column="SUPER_USER_ID" jdbcType="BIGINT"
property="superUserId" />
<result column="LOCK_USER" jdbcType="VARCHAR"
property="lockUser" />
<result column="CREATE_DATE" jdbcType="TIMESTAMP"
property="createDate" />
<result column="CREATE_USER" jdbcType="BIGINT"
property="createUser" />
<result column="UPDATE_DATE" jdbcType="TIMESTAMP"
property="updateDate" />
<result column="UPDATE_USER" jdbcType="BIGINT"
property="updateUser" />
<result column="HEADER_URL" jdbcType="VARCHAR"
property="headerUrl" />
<result column="DELETE_DATE" jdbcType="TIMESTAMP"
property="deleteDate" />
<result column="DELETE_USER" jdbcType="BIGINT"
property="deleteUser" />
<result column="DELETE_FLAG" jdbcType="VARCHAR"
property="deleteFlag" />
<result column="INVITE_CODE" jdbcType="VARCHAR"
property="inviteCode" />
<result column="INVITE_END_DATE" jdbcType="TIMESTAMP"
property="inviteEndDate" />
<result column="PROFIT" jdbcType="INTEGER" property="profit" />
<result column="PROFIT_DATE" jdbcType="TIMESTAMP"
property="profitDate" />
</resultMap>
<resultMap id="UserExpandMap"
type="com.uplus.api.bean.userexpand.UserExpand" extends="UserMap">
<result column="NAME" jdbcType="VARCHAR" property="masterName" />
</resultMap>
<!-- 查询团队下一级成员数 -->
<select id="selectCountById" resultType="Integer">
SELECT
count( 1 )
FROM
UPLUS_USER uu
WHERE
uu.SUPER_USER_ID = #{userId}
AND uu.DELETE_FLAG = '0'
AND uu.ID != #{userId}
</select>
<!-- 查询团队下一级成员数 -->
<select id="queryMember"
parameterType="com.github.pagehelper.Page"
resultType="com.uplus.api.bean.userexpand.UserExpand">
SELECT
tb.ID AS id,
tb.TYPE AS type,
tb.NICK_NAME AS nickName,
tb.PHONE AS phone,
tb.HEADER_URL AS headerUrl,
tb.LOCK_USER AS lockUser,
tb.NAME AS masterName,
SUM( tb.totlaSale ) AS totlaSales
FROM
( SELECT uu.ID,uu.TYPE,uu.USER_NAME,uu.NICK_NAME,uu.PHONE,uu.HEADER_URL,uu.LOCK_USER,um.NAME,
IFNULL( SUM( uo.PAY_PRICE ), 0 ) - IFNULL( SUM( uo.POSTAGE ), 0 ) AS totlaSale
FROM
UPLUS_USER uu
LEFT JOIN UPLUS_ORDER uo ON uo.USER_ID = uu.ID
AND uo.STATE = 1
AND uo.IS_PAY = 1
<if test="startDate != '' and startDate != null">
and DATE_FORMAT(uo.PAY_TIME,'%Y-%m-%d') >= #{startDate}
</if>
<if test="endDate != '' and endDate != null">
and DATE_FORMAT(uo.PAY_TIME,'%Y-%m-%d') <= #{endDate}
</if>
LEFT JOIN UPLUS_MASTER um ON uu.TYPE = um.CODE
WHERE
uu.SUPER_USER_ID = #{userId}
AND uu.DELETE_FLAG = '0'
AND uu.ID != #{userId}
GROUP BY
uu.ID,
um.NAME
UNION ALL
SELECT
uu.ID,
uu.TYPE,
uu.USER_NAME,
uu.NICK_NAME,
uu.PHONE,
uu.HEADER_URL,
uu.LOCK_USER,
um.NAME,
IFNULL( SUM( uo.PAY_PRICE ), 0 ) - IFNULL( SUM( uo.POSTAGE ), 0 ) AS
totlaSale
FROM
UPLUS_USER uu
LEFT JOIN UPLUS_USER uu1 ON uu1.DELETE_FLAG = '0'
AND uu1.LOCK_USER = 1
AND uu1.SUPER_USER_ID = uu.ID
LEFT JOIN UPLUS_ORDER uo ON uo.USER_ID = uu1.ID
AND uo.STATE = 1
AND uo.IS_PAY = 1
<if test="startDate != '' and startDate != null">
and DATE_FORMAT(uo.PAY_TIME,'%Y-%m-%d') >= #{startDate}
</if>
<if test="endDate != '' and endDate != null">
and DATE_FORMAT(uo.PAY_TIME,'%Y-%m-%d') <= #{endDate}
</if>
LEFT JOIN UPLUS_MASTER um ON uu.TYPE = um.CODE
WHERE
uu.SUPER_USER_ID = #{userId}
AND uu.DELETE_FLAG = '0'
AND uu.ID != #{userId}
GROUP BY
uu.ID,
um.NAME
) tb
<where>
<if test="searchName != null and searchName != ''">
AND (
tb.USER_NAME like concat( '%', #{searchName}, '%')
OR tb.NICK_NAME like concat( '%', #{searchName}, '%')
OR tb.PHONE like concat( '%', #{searchName}, '%')
)
</if>
</where>
GROUP BY
ID,
TYPE,
NICK_NAME,
PHONE,
HEADER_URL,
LOCK_USER,
NAME
ORDER BY
totlaSales DESC
</select>
<select id="queryHeadUserSales"
parameterType="com.github.pagehelper.Page"
resultType="com.uplus.api.bean.userexpand.UserExpand">
SELECT
uu.ID as id,
uu.TYPE as type,
uu.NICK_NAME as nickName,
uu.PHONE as
phone,
uu.HEADER_URL as headerUrl,
uu.LOCK_USER as lockUser,
um.NAME AS
masterName,
IFNULL( SUM( uo.PAY_PRICE ), 0 ) - IFNULL( SUM(
uo.POSTAGE
), 0 ) AS
totlaSales
FROM
UPLUS_USER uu
INNER JOIN UPLUS_MASTER
um ON
um.MASTER_GP = '01'
LEFT JOIN UPLUS_ORDER uo ON uo.USER_ID =
uu.ID
AND
uo.STATE = 1
AND uo.IS_PAY = 1
<if test="startDate != '' and startDate != null">
and DATE_FORMAT(uo.PAY_TIME,'%Y-%m-%d') >= #{startDate}
</if>
<if test="endDate != '' and endDate != null">
and DATE_FORMAT(uo.PAY_TIME,'%Y-%m-%d') <= #{endDate}
</if>
WHERE
uu.SUPER_USER_ID = #{userId}
AND um.`CODE` = uu.TYPE
AND uu.TYPE =
'XSY'
AND uu.DELETE_FLAG = '0'
<if test="searchName != null and searchName != ''">
AND (
uu.USER_NAME like "%"#{searchName}"%"
OR uu.NICK_NAME
like "%"#{searchName}"%"
OR uu.PHONE like "%"#{searchName}"%"
)
</if>
GROUP BY
uu.ID,
uu.NICK_NAME,
uu.HEADER_URL,
uu.PHONE,
uu.LOCK_USER,
um.NAME
ORDER BY
totlaSales DESC
</select>
<!-- TODO * 后期根据需求更换 -->
<select id="findUserExpandById" resultMap="UserExpandMap">
SELECT
um.NAME,
uu.*
FROM
UPLUS_USER uu
LEFT JOIN UPLUS_MASTER um
ON uu.TYPE = um.CODE
AND um.MASTER_GP = '01'
WHERE
uu.ID = #{id}
AND uu.DELETE_FLAG = '0'
</select>
</mapper>