提交 ace6ad4a 作者: zhenjie

后台用户相关接口

上级 dd11be86
package com.mmc.iuav.user.model.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月4日 下午2:38:36
* @explain 类说明
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BaseAccountDTO implements Serializable {
private static final long serialVersionUID = -2979712090903806216L;
private Integer id;
private String uid;
private String accountPhone;
private String accountNo;
private String accountName;
private String tokenPort;
// @ApiModelProperty(value = "角色ID")
// private Integer roleId;
// @ApiModelProperty(value = "是否为管理角色:0否 1是")
// private Integer admin;// 是否为管理角色
// @ApiModelProperty(value = "是否为运营角色:0否 1是")
// private Integer operate;
// @ApiModelProperty(value = "是否PMC发货专员:0否 1是")
// private Integer pmc;
// @ApiModelProperty(value = "单位信息")
// private CompanyCacheDTO companyInfo;// 单位信息
}
package com.mmc.iuav.user.model.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月31日 下午8:06:14
* @explain 类说明
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LoginSuccessDTO implements Serializable {
private static final long serialVersionUID = -1200834589953161925L;
private String token;
private Integer userAccountId;
private String accountNo;
// private RoleInfoDTO roleInfo;
}
......@@ -22,6 +22,8 @@ public class UserAccountSimpleDTO implements Serializable {
private Integer id;
@ApiModelProperty(value = "用户类型")
private Integer accountType;
@ApiModelProperty(value = "用户账号")
private String accountNo;
@ApiModelProperty(value = "用户uid")
private String uid;
@ApiModelProperty(value = "手机号")
......@@ -44,4 +46,6 @@ public class UserAccountSimpleDTO implements Serializable {
private Integer portType;
@ApiModelProperty(value = "企业认证状态, 0未通过,1通过")
private Integer companyAuthStatus;
@ApiModelProperty(value = "合作标签id")
private Integer cooperationTagId;
}
\ No newline at end of file
package com.mmc.iuav.user.model.qo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Page;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* @author: zj
* @Date: 2023/5/25 13:32
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BUserAccountQO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "关键字", required = false)
private String keyword;
@ApiModelProperty(value = "地区", required = false)
private String area;
@ApiModelProperty(value = "省份编码", required = false)
private Integer provinceCode;
@ApiModelProperty(value = "城市编码", required = false)
private Integer cityCode;
@ApiModelProperty(value = "县区编码", required = false)
private Integer districtCode;
@ApiModelProperty(value = "角色id", required = false)
private Integer roleId;
@ApiModelProperty(value = "账号状态:0禁用 1可用")
private Integer accountStatus;
@ApiModelProperty(value = "账号状态:0合伙人 1员工")
private Integer userType;
@ApiModelProperty(value = "用户id集合")
private List<Integer> userIds;
@ApiModelProperty(value = "推荐单位id")
private Integer rcdCompanyId;
@ApiModelProperty(value="单位集合", hidden = true)
private List<Integer> companys;
@ApiModelProperty(value = "页码", required = true)
@NotNull(message = "页码不能为空", groups = Page.class)
@Min(value = 1, groups = Page.class)
private Integer pageNo;
@ApiModelProperty(value = "每页显示数", required = true)
@NotNull(message = "每页显示数不能为空", groups = Page.class)
@Min(value = 1, groups = Page.class)
private Integer pageSize;
public void buildCurrentPage() {
this.pageNo = (pageNo - 1) * pageSize;
}
}
package com.mmc.iuav.user.model.qo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/5/25 10:39
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LoginUserQO implements Serializable {
private static final long serialVersionUID = -6148830939265702460L;
@ApiModelProperty(value = "登录账号")
@NotNull(message = "登录账号不能为空")
private String accountNo;
@ApiModelProperty(value = "登录密码")
@NotNull(message = "登录密码不能为空")
private String passWord;
}
package com.mmc.iuav.user.model.vo;
import com.mmc.iuav.group.Create;
import com.mmc.iuav.group.Update;
import com.mmc.iuav.group.UpdatePassword;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/5/25 11:15
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BUserAccountVO implements Serializable {
private static final long serialVersionUID = -5809674104674997410L;
@ApiModelProperty(value = "id")
@NotNull(message = "更新时ID不能为空", groups = {Update.class, UpdatePassword.class})
private Integer id;
@ApiModelProperty(value = "账号", example = "developer")
@NotEmpty(message = "账号不能为空", groups = {Create.class, Update.class})
private String accountNo;
@ApiModelProperty(value = "姓名", example = "张三丰")
@NotEmpty(message = "姓名不能为空", groups = {Create.class, Update.class})
private String userName;
@ApiModelProperty(value = "电话", example = "13700137000")
@NotEmpty(message = "创建,修改时电话不能为空", groups = {Create.class, Update.class})
private String phoneNum;
@ApiModelProperty(value = "密码", example = "123456")
@NotEmpty(message = "创建密码不能为空", groups = {Create.class, UpdatePassword.class})
private String passWord;
@ApiModelProperty(value = "确认密码", example = "123456")
@NotEmpty(message = "确认密码不能为空", groups = {Create.class, UpdatePassword.class})
private String alertPwd;
@ApiModelProperty(value = "备注", example = "一个备注")
private String remark;
@ApiModelProperty(value = "状态", example = "1")
@NotNull(message = "状态不能为空", groups = {Update.class})
private Integer accountStatus;
@ApiModelProperty(value = "角色", example = "1", hidden = true)
//@NotNull(message = "角色不能为空", groups = {Create.class, Update.class})
private Integer roleId;
@ApiModelProperty(value = "能控制的用户资源来源",hidden = true)
private Integer controlSource;
@ApiModelProperty(value = "电子邮箱", example = "220700100213@163.com")
@Email
private String email;
@ApiModelProperty(value = "所属公司ID",example = "1", hidden = true)
private Integer companyId;
@ApiModelProperty(value = "账号类型:0合伙人 1员工", example = "1", hidden = true)
private Integer userType;
@ApiModelProperty(value = "省份编码", required = false)
private Integer provinceCode;
@ApiModelProperty(value = "城市编码", required = false)
private Integer cityCode;
@ApiModelProperty(value = "县区编码", required = false)
private Integer districtCode;
}
......@@ -30,6 +30,8 @@ public class UserAccountVO implements Serializable {
private Integer accountType;
@ApiModelProperty(value = "用户uid")
private String uid;
@ApiModelProperty(value = "用户账号")
private String accountNo;
@ApiModelProperty(value = "手机号")
private String phoneNum;
@ApiModelProperty(value = "用户名称")
......@@ -53,5 +55,9 @@ public class UserAccountVO implements Serializable {
private Integer portType;
@ApiModelProperty(value = "注册时间")
private Date createTime;
@ApiModelProperty(value = "企业认证状态, 0未通过,1通过")
private Integer companyAuthStatus;
@ApiModelProperty(value = "合作标签id")
private Integer cooperationTagId;
}
package com.mmc.iuav.user.model.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/5/26 20:58
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserTagVO implements Serializable {
private static final long serialVersionUID = -2693784088480292773L;
private Integer id;
private Integer cooperationTagId;
private Integer userAccountId;
private Date createTime;
private Date updateTime;
}
package com.mmc.iuav.auth;
import com.mmc.iuav.general.CodeUtil;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.response.ResultEnum;
import io.jsonwebtoken.*;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
......
......@@ -25,4 +25,8 @@ public class CodeUtil {
public static String randomCode(int i) {
return CodeUtil.getRandomNum(i);
}
public static String removeUserAccount() {
return "DELETE" + CodeUtil.getRandomNum(15);
}
}
package com.mmc.iuav.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午5:37:44
* @explain 类说明
*/
public interface Create {
}
package com.mmc.iuav.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年9月18日 上午11:22:40
* @explain 类说明
*/
public interface Freeze {
}
package com.mmc.iuav.group;
/**
* author:zhenjie
* Date:2021/10/8
* time:16:26
*/
public interface UpdatePassword {
}
package com.mmc.iuav.http;
import com.mmc.iuav.response.BaseErrorInfoInterface;
import com.mmc.iuav.response.ResultEnum;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月13日 上午9:25:43
* @explain 类说明
*/
public class BizException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
* 错误码
*/
protected String errorCode;
/**
* 错误信息
*/
protected String errorMsg;
public BizException() {
super();
}
public BizException(BaseErrorInfoInterface errorInfoInterface) {
super(errorInfoInterface.getResultCode());
this.errorCode = errorInfoInterface.getResultCode();
this.errorMsg = errorInfoInterface.getResultMsg();
}
public BizException(BaseErrorInfoInterface errorInfoInterface, Throwable cause) {
super(errorInfoInterface.getResultCode(), cause);
this.errorCode = errorInfoInterface.getResultCode();
this.errorMsg = errorInfoInterface.getResultMsg();
}
public BizException(ResultEnum enums) {
super(enums.getResultCode());
this.errorCode = enums.getResultCode();
this.errorMsg = enums.getResultMsg();
}
public BizException(String errorMsg) {
super(errorMsg);
this.errorCode = "-1";
this.errorMsg = errorMsg;
}
public BizException(String errorCode, String errorMsg) {
super(errorCode);
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
public BizException(String errorCode, String errorMsg, Throwable cause) {
super(errorCode, cause);
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
@Override
public String getMessage() {
return errorMsg;
}
@Override
public Throwable fillInStackTrace() {
return this;
}
}
package com.mmc.iuav.page;
import com.mmc.iuav.group.Freeze;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Page;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BaseInfoQO {
@ApiModelProperty(value = "开始时间")
private String startTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
@ApiModelProperty(value = "页码")
@NotNull(message = "页码不能为空", groups = { Page.class, Freeze.class })
@Min(value = 1, groups = Page.class,message = "pageNo不能少于1")
private Integer pageNo;
@ApiModelProperty(value = "每页显示数")
@NotNull(message = "每页显示数不能为空", groups = { Page.class, Freeze.class })
@Min(value = 1, groups = Page.class,message = "pageSize不能少于1")
private Integer pageSize;
/**
* 初始化起始查询行并返回当前页
*/
public Integer buildCurrentPage() {
Integer pageNo = this.pageNo;
this.pageNo = (pageNo - 1) * pageSize;
return pageNo;
}
}
package com.mmc.iuav.page;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午3:18:21
* @explain 分页工具类
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult<T> implements Serializable{
private static final long serialVersionUID = -2848996493573325801L;
private int pageNo;// 分页起始页
private int pageSize;// 每页记录数
private T list;// 返回的记录集合
private long totalCount;// 总记录条数
private long totalPage;// 总页数
public static PageResult buildPage(int pageNo, int pageSize, int totalCount) {
PageResult page = new PageResult();
page.pageNo = pageNo;
page.pageSize = pageSize;
page.totalCount = totalCount;
page.totalPage = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize + 1);
return page;
}
public static <T> PageResult buildPage(int pageNo, int pageSize, int totalCount, T list) {
PageResult page = PageResult.buildPage(pageNo, pageSize, totalCount);
page.setList(list);
return page;
}
public static PageResult buildPage(BaseInfoQO qo, int totalCount) {
PageResult page = new PageResult();
page.pageNo = qo.getPageNo();
Integer pageSize = qo.getPageSize();
page.pageSize = pageSize;
page.totalCount = totalCount;
page.totalPage = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize + 1);
return page;
}
}
package com.mmc.iuav.page;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月10日 上午11:40:34
* @explain 类说明
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TimePage implements Serializable {
private static final long serialVersionUID = -2530498038870578257L;
private int pageNo;// 分页起始页
private int pageSize;// 每页记录数
private long totalCount;// 总记录条数
private long totalPage;// 总页数
private long ctime;
public static TimePage buildPage(int pageNo, int pageSize, int totalCount, long ctime) {
TimePage page = new TimePage();
page.pageNo = pageNo;
page.pageSize = pageSize;
page.totalCount = totalCount;
page.totalPage = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize + 1);
page.setCtime(ctime);
return page;
}
}
......@@ -14,12 +14,25 @@ public enum ResultEnum implements BaseErrorInfoInterface{
COMPANY_NOT_AUTH_ERROR("1001", "未进行企业认证"),
BUSINESS_LICENSE_CHECK_PARAMETER_ERROR("1002", "企业信息与营业执照信息不一致,请重新上传"),
LOGIN_ACCOUNT_NOT_EXIT_ERROR("5005", "账号不存在"),
LOGIN_PASSWORD_ERROR("5006", "密码错误"),
LOGIN_ACCOUNT_STATUS_ERROR("5008", "外部访问"),
//微信相关
PASSWORD_INCONSISTENT("5026", "新密码与确认密码不一致,请确认一致"),
WX_ACCESS_TOKEN_ERROR("5027", "获取微信AccessToken失败"),
APPLET_QR_CODE_CREATE_ERROR("5030", "生成小程序码错误:"),
PWD_CREATE_ERROR("6001", "创建密码失败"),
PWD_CONPARED_ERROR("6002", "密码错误"), PWD_ALERT_ERROR("6003", "密码不一致"),
PWD_REQUEST_AUTH_ERROR("6003", "密码请求验证"),
APPLET_PORT_TYPE_ERROR("7001", "小程序端口类型错误"),
APPLET_LOGIN_ERROR("7002", "获取小程序登录失败");
APPLET_LOGIN_ERROR("7002", "获取小程序登录失败"),
UPDATE_USER_ACCOUNT_REPEAT("7003", "修改后的账户名已存在"),
ADD_USER_ACCOUNT_NAME_EXISTS("7004", "新增账户名已经存在");
/**
* 错误码
......
package com.mmc.iuav.user.auth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.security.SecureRandom;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Implementation of PasswordEncoder that uses the BCrypt strong hashing function. Clients
* can optionally supply a "version" ($2a, $2b, $2y) and a "strength" (a.k.a. log rounds in BCrypt)
* and a SecureRandom instance. The larger the strength parameter the more work will have to be done
* (exponentially) to hash the passwords. The default value is 10.
*
*/
@Component
public class BCryptPasswordEncoder implements PasswordEncoder {
private Pattern BCRYPT_PATTERN = Pattern
.compile("\\A\\$2(a|y|b)?\\$(\\d\\d)\\$[./0-9A-Za-z]{53}");
private final Logger logger = LoggerFactory.getLogger(com.mmc.iuav.user.auth.BCryptPasswordEncoder.class);
private final int strength;
private final BCryptVersion version;
private final SecureRandom random;
public BCryptPasswordEncoder() {
this(-1);
}
/**
* @param strength the log rounds to use, between 4 and 31
*/
public BCryptPasswordEncoder(int strength) {
this(strength, null);
}
/**
* @param version the version of bcrypt, can be 2a,2b,2y
*/
public BCryptPasswordEncoder(BCryptVersion version) {
this(version, null);
}
/**
* @param version the version of bcrypt, can be 2a,2b,2y
* @param random the secure random instance to use
*/
public BCryptPasswordEncoder(BCryptVersion version, SecureRandom random) {
this(version, -1, random);
}
/**
* @param strength the log rounds to use, between 4 and 31
* @param random the secure random instance to use
*/
public BCryptPasswordEncoder(int strength, SecureRandom random) {
this(BCryptVersion.$2A, strength, random);
}
/**
* @param version the version of bcrypt, can be 2a,2b,2y
* @param strength the log rounds to use, between 4 and 31
*/
public BCryptPasswordEncoder(BCryptVersion version, int strength) {
this(version, strength, null);
}
/**
* @param version the version of bcrypt, can be 2a,2b,2y
* @param strength the log rounds to use, between 4 and 31
* @param random the secure random instance to use
*/
public BCryptPasswordEncoder(BCryptVersion version, int strength, SecureRandom random) {
if (strength != -1 && (strength < BCrypt.MIN_LOG_ROUNDS || strength > BCrypt.MAX_LOG_ROUNDS)) {
throw new IllegalArgumentException("Bad strength");
}
this.version = version;
this.strength = strength == -1 ? 10 : strength;
this.random = random;
}
public String encode(CharSequence rawPassword) {
if (rawPassword == null) {
throw new IllegalArgumentException("rawPassword cannot be null");
}
String salt;
if (random != null) {
salt = BCrypt.gensalt(version.getVersion(), strength, random);
} else {
salt = BCrypt.gensalt(version.getVersion(), strength);
}
return BCrypt.hashpw(rawPassword.toString(), salt);
}
public boolean matches(CharSequence rawPassword, String encodedPassword) {
if (rawPassword == null) {
throw new IllegalArgumentException("rawPassword cannot be null");
}
if (encodedPassword == null || encodedPassword.length() == 0) {
logger.warn("Empty encoded password");
return false;
}
if (!BCRYPT_PATTERN.matcher(encodedPassword).matches()) {
logger.warn("Encoded password does not look like BCrypt");
return false;
}
return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
}
@Override
public boolean upgradeEncoding(String encodedPassword) {
if (encodedPassword == null || encodedPassword.length() == 0) {
logger.warn("Empty encoded password");
return false;
}
Matcher matcher = BCRYPT_PATTERN.matcher(encodedPassword);
if (!matcher.matches()) {
throw new IllegalArgumentException("Encoded password does not look like BCrypt: " + encodedPassword);
}
else {
int strength = Integer.parseInt(matcher.group(2));
return strength < this.strength;
}
}
/**
* Stores the default bcrypt version for use in configuration.
*
* @author Lin Feng
*/
public enum BCryptVersion {
$2A("$2a"),
$2Y("$2y"),
$2B("$2b");
private final String version;
BCryptVersion(String version) {
this.version = version;
}
public String getVersion() {
return this.version;
}
}
}
package com.mmc.iuav.user.auth;
/**
* Service interface for encoding passwords.
*
* The preferred implementation is {@code BCryptPasswordEncoder}.
*
* @author Keith Donald
*/
public interface PasswordEncoder {
/**
* Encode the raw password. Generally, a good encoding algorithm applies a SHA-1 or
* greater hash combined with an 8-byte or greater randomly generated salt.
*/
String encode(CharSequence rawPassword);
/**
* Verify the encoded password obtained from storage matches the submitted raw
* password after it too is encoded. Returns true if the passwords match, false if
* they do not. The stored password itself is never decoded.
*
* @param rawPassword the raw password to encode and match
* @param encodedPassword the encoded password from storage to compare with
* @return true if the raw password, after encoding, matches the encoded password from
* storage
*/
boolean matches(CharSequence rawPassword, String encodedPassword);
/**
* Returns true if the encoded password should be encoded again for better security,
* else false. The default implementation always returns false.
* @param encodedPassword the encoded password to check
* @return true if the encoded password should be encoded again for better security,
* else false.
*/
default boolean upgradeEncoding(String encodedPassword) {
return false;
}
}
package com.mmc.iuav.user.auth;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月31日 下午4:39:06
* @explain 密码加密
*/
public class PwdUtil {
public static String securityPwd(String passWord) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(passWord.getBytes());
return new BigInteger(md.digest()).toString(32);
}
}
......@@ -2,6 +2,7 @@ package com.mmc.iuav.user.controller;
import com.mmc.iuav.group.Insert;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.qo.LoginUserQO;
import com.mmc.iuav.user.model.vo.AppUserSucVO;
import com.mmc.iuav.user.model.vo.WxLoginVO;
import com.mmc.iuav.user.service.AuthService;
......@@ -28,4 +29,19 @@ public class AuthController {
public ResultBody appletLogin(@Validated(value = {Insert.class})@RequestBody WxLoginVO wxLoginVO){
return authService.appletLogin(wxLoginVO);
}
@ApiOperation(value = "平台账号密码登录")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) })
@PostMapping("backEndLogin")
public ResultBody backEndLogin(
@ApiParam(value = "账号登录QO", required = true) @Validated @RequestBody LoginUserQO param) {
return authService.backEndLogin(param);
}
@ApiOperation(value = "测试-小程序unionId登录/注册")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = AppUserSucVO.class) })
@PostMapping("testAppletLogin")
public ResultBody testAppletLogin(@RequestParam String unionId){
return authService.testAppletLogin(unionId);
}
}
package com.mmc.iuav.user.controller;
import com.mmc.iuav.group.Create;
import com.mmc.iuav.group.Update;
import com.mmc.iuav.group.UpdatePassword;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.BaseAccountDTO;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
import com.mmc.iuav.user.model.qo.BUserAccountQO;
import com.mmc.iuav.user.model.vo.BUserAccountVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.service.UserAccountService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletRequest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
/**
* @author: zj
* @Date: 2023/5/25 11:22
*/
@Api(tags = "后台用户相关接口")
@RequestMapping("/back-user/")
@RestController
public class BackUserAccountController extends BaseController{
@Autowired
private UserAccountService userAccountService;
@ApiOperation(value = "账号-新增")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("insertBAccount")
public ResultBody insertBAccount(@Validated(value = {Create.class}) @RequestBody BUserAccountVO bUserAccountVO) {
return userAccountService.insertBAccount(bUserAccountVO);
}
@ApiOperation(value = "账号-修改")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("updateBAccount")
public ResultBody updateBAccount(@Validated(value = {Update.class}) @RequestBody BUserAccountVO bUserAccountVO) {
return userAccountService.updateBAccount(bUserAccountVO);
}
@ApiOperation(value = "账号-删除")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("removeBAccount")
public ResultBody removeBAccount(@RequestParam Integer userAccountId) {
return userAccountService.removeBAccount(userAccountId);
}
@ApiOperation(value = "账号-列表")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("listBAccountPage")
public ResultBody<UserAccountSimpleDTO> listBAccountPage(@ApiParam(value = "账号查询QO", required = true) @RequestBody BUserAccountQO bUserAccountQO) {
return userAccountService.listBAccountPage(bUserAccountQO);
}
@ApiOperation(value = "账号-用户列表-内部调用", hidden = true)
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = List.class)})
@PostMapping("feignListBAccountPage")
public List<UserAccountSimpleDTO> feignListBAccountPage(@ApiParam(value = "账号查询QO", required = true) @RequestBody BUserAccountQO bUserAccountQO) {
return userAccountService.feignListBAccountPage(bUserAccountQO);
}
@ApiOperation(value = "账号管理-修改密码")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("updatePassword")
public ResultBody updatePassword(@Validated(value = {UpdatePassword.class}) @RequestBody BUserAccountVO account)
throws NoSuchAlgorithmException {
return userAccountService.updatePassword(account);
}
@ApiOperation(value = "feign-验证用户密码")
@ApiIgnore
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("feignAuthUserPwd")
public ResultBody feignAuthUserPwd(@RequestParam(required = true) Integer id,
@RequestParam(required = true) String authPwd) {
return userAccountService.feignAuthUserPwd(id, authPwd);
}
@ApiOperation(value = "test")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("listTest")
public ResultBody listTest(HttpServletRequest request) {
return ResultBody.success(this.getUserLoginInfo(request));
}
}
package com.mmc.iuav.user.controller;
import com.mmc.iuav.auth.JwtConstant;
import com.mmc.iuav.auth.JwtUtil;
import com.mmc.iuav.http.BizException;
import com.mmc.iuav.user.model.dto.BaseAccountDTO;
import io.jsonwebtoken.Claims;
import javax.servlet.http.HttpServletRequest;
/**
* @author: zj
* @Date: 2023/5/25 18:11
*/
public abstract class BaseController {
/**
* 解析token,获取用户信息
* @param request
* @return
*/
public BaseAccountDTO getUserLoginInfo(HttpServletRequest request) {
String token = request.getHeader("token");
try {
Claims claims = JwtUtil.parseJwt(token);
String userId = claims.get(JwtConstant.USER_ACCOUNT_ID).toString();
// String roleId = claims.get("").toString();
String tokenType = claims.get(JwtConstant.TOKEN_TYPE).toString();
return BaseAccountDTO.builder().id(Integer.parseInt(userId)).tokenPort(tokenType).build();
}catch (Exception e){
throw new BizException("Invalid token");
}
}
}
......@@ -35,4 +35,11 @@ public class CooperationController {
public ResultBody apply(@Validated(value = {Insert.class})@RequestBody UserApplyTagVO userApplyTagVO){
return cooperationService.apply(userApplyTagVO);
}
@ApiOperation(value = "后台设置小程序用户标签")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) })
@GetMapping("changeUserTag")
public ResultBody changeUserTag(@RequestParam("userAccountId") Integer userAccountId, @RequestParam("cooperationTagId") Integer cooperationTagId) {
return cooperationService.changeUserTag(userAccountId, cooperationTagId);
}
}
package com.mmc.iuav.user.controller;
import com.mmc.iuav.group.Insert;
import com.mmc.iuav.group.Update;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
import com.mmc.iuav.user.model.vo.AppUserSucVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.model.vo.WxLoginVO;
import com.mmc.iuav.user.service.UserAccountService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -16,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
......@@ -25,7 +23,7 @@ import java.util.List;
@Api(tags = "账号相关接口")
@RequestMapping("/user-account/")
@RestController
public class UserAccountController {
public class UserAccountController extends BaseController{
@Autowired
private UserAccountService userAccountService;
......@@ -33,8 +31,8 @@ public class UserAccountController {
@ApiOperation(value = "获取用户信息")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = UserAccountVO.class) })
@GetMapping("info")
public ResultBody info(@RequestParam Integer userAccountId){
return ResultBody.success(userAccountService.getUserAccountById(userAccountId));
public ResultBody info(HttpServletRequest request) {
return ResultBody.success(userAccountService.getUserAccountById(this.getUserLoginInfo(request).getId()));
}
@ApiOperation(value = "修改用户信息")
......@@ -58,5 +56,4 @@ public class UserAccountController {
return userAccountService.feignListUserAccountIds(provinceCode, cityCode, districtCode);
}
}
......@@ -2,6 +2,7 @@ package com.mmc.iuav.user.dao;
import com.mmc.iuav.user.entity.CooperationTagDO;
import com.mmc.iuav.user.entity.UserApplyTagDO;
import com.mmc.iuav.user.entity.UserTagDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
......@@ -36,4 +37,23 @@ public interface CooperationDao {
* @param userApplyTagDO
*/
void updateUserApplyTag(UserApplyTagDO userApplyTagDO);
/**
* 根据用户id查询渠道登记
* @param userAccountId
* @return
*/
UserTagDO getUserTag(Integer userAccountId);
/**
* 用户设置渠道等级
* @param userTagDO
*/
void insertUserTag(UserTagDO userTagDO);
/**
* 修改用户渠道等级
* @param userTagDO
*/
void updateUserTag(UserTagDO userTagDO);
}
package com.mmc.iuav.user.dao;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.model.qo.BUserAccountQO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
......@@ -45,4 +46,62 @@ public interface UserServiceDao {
* @return
*/
List<Integer> listUserAccountIdsByDistrictCode(Integer provinceCode, Integer cityCode, Integer districtCode);
/**
* 登录账号密码查询用户信息
* @param accountNo
* @param passWord
* @return
*/
UserAccountDO getUserLoginInfo(String accountNo, String passWord);
/**
* 批量获取用户信息
* @param bUserAccountQO
* @return
*/
List<UserAccountDO> feignListBAccountPage(BUserAccountQO bUserAccountQO);
/**
* 删除用户
* @param removeNO
* @param userAccountId
*/
void removeUserAccount(String removeNO, Integer userAccountId);
/**
* 根据账号名称查询数量
* @param excludeId
* @param accountNo
* @return
*/
int countUserAccountNo(Integer excludeId, String accountNo);
/**
* 查询用户数量
* @param param
* @return
*/
int countListBAccountPage(BUserAccountQO param);
/**
* 查询用户信息
* @param param
* @return
*/
List<UserAccountDO> listBAccountPage(BUserAccountQO param);
/**
* 修改用户密码
* @param id
* @param passWord
*/
void updatePassword(Integer id, String passWord);
/**
* 获取用户密码
* @param id
* @return
*/
UserAccountDO getUserAuthPwdInfo(Integer id);
}
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
import com.mmc.iuav.user.model.vo.BUserAccountVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -19,7 +21,9 @@ import java.util.Date;
public class UserAccountDO implements Serializable {
private static final long serialVersionUID = 5007589179946146721L;
private Integer id;
private String accountNo;
private Integer accountType;
private String password;
private String uid;
private String phoneNum;
private String userName;
......@@ -36,6 +40,9 @@ public class UserAccountDO implements Serializable {
private Integer deleted;
private Date createTime;
private Date updateTime;
private Integer provinceCode;
private Integer cityCode;
private Integer districtCode;
public UserAccountDO(UserAccountVO userAccountVO) {
this.id = userAccountVO.getId();
......@@ -50,14 +57,27 @@ public class UserAccountDO implements Serializable {
this.portType = userAccountVO.getPortType();
}
public UserAccountDO(BUserAccountVO bUserAccountVO) {
this.id = bUserAccountVO.getId();
this.accountNo = bUserAccountVO.getAccountNo();
this.phoneNum = bUserAccountVO.getPhoneNum();
this.userName = bUserAccountVO.getUserName();
this.email = bUserAccountVO.getEmail();
this.accountStatus = bUserAccountVO.getAccountStatus();
this.remark = bUserAccountVO.getRemark();
this.provinceCode = bUserAccountVO.getProvinceCode();
this.cityCode = bUserAccountVO.getCityCode();
this.districtCode = bUserAccountVO.getDistrictCode();
}
public UserAccountVO buildUserAccountVO() {
return UserAccountVO.builder().id(this.id).uid(this.uid).accountType(this.accountType).phoneNum(this.phoneNum).userName(this.userName).nickName(this.nickName)
return UserAccountVO.builder().id(this.id).uid(this.uid).accountNo(this.accountNo).accountType(this.accountType).phoneNum(this.phoneNum).userName(this.userName).nickName(this.nickName)
.userImg(this.userImg).userSex(this.userSex).email(this.email).source(this.source).accountStatus(this.accountStatus).remark(this.remark).portType(this.portType)
.createTime(this.createTime).build();
}
public UserAccountSimpleDTO buildUserAccountSimpleDTO() {
return UserAccountSimpleDTO.builder().id(this.id).uid(this.uid).accountType(this.accountType).phoneNum(this.phoneNum).userName(this.userName).nickName(this.nickName)
return UserAccountSimpleDTO.builder().id(this.id).uid(this.uid).accountNo(this.accountNo).accountType(this.accountType).phoneNum(this.phoneNum).userName(this.userName).nickName(this.nickName)
.userImg(this.userImg).userSex(this.userSex).email(this.email).source(this.source).accountStatus(this.accountStatus).portType(this.portType)
.build();
}
......
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.vo.UserTagVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/5/26 20:55
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserTagDO implements Serializable {
private static final long serialVersionUID = -5355286947297870886L;
private Integer id;
private Integer cooperationTagId;
private Integer userAccountId;
private Integer deleted;
private Date createTime;
private Date updateTime;
public UserTagDO(UserTagVO userTagVO) {
this.id = userTagVO.getId();
this.userAccountId = userTagVO.getUserAccountId();
this.cooperationTagId = userTagVO.getCooperationTagId();
}
public UserTagVO buildUserTagVO() {
return UserTagVO.builder().id(this.id).cooperationTagId(this.cooperationTagId).userAccountId(this.userAccountId).build();
}
}
package com.mmc.iuav.user.enums;
/**
* @author 作者 geDuo
* @version 创建时间:2021年9月7日 下午3:06:26
* @explain 类说明
*/
public enum UserAccountStatus {
NORMAL(1, "正常可用"), DISABLE(0, "禁用");
UserAccountStatus(int accountStatus, String statusName) {
this.accountStatus = accountStatus;
this.statusName = statusName;
}
private Integer accountStatus;
private String statusName;
public Integer getAccountStatus() {
return accountStatus;
}
public void setAccountStatus(Integer accountStatus) {
this.accountStatus = accountStatus;
}
public String getStatusName() {
return statusName;
}
public void setStatusName(String statusName) {
this.statusName = statusName;
}
}
package com.mmc.iuav.user.service;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.qo.LoginUserQO;
import com.mmc.iuav.user.model.vo.WxLoginVO;
/**
......@@ -14,4 +15,18 @@ public interface AuthService {
* @return
*/
ResultBody appletLogin(WxLoginVO wxLoginVO);
/**
* 后台用户登录
* @param param
* @return
*/
ResultBody backEndLogin(LoginUserQO param);
/**
* 小程序用户登录
* @param unionId
* @return
*/
ResultBody testAppletLogin(String unionId);
}
......@@ -20,4 +20,12 @@ public interface CooperationService {
* @return
*/
ResultBody apply(UserApplyTagVO cooperationTagVO);
/**
* 后台用户设置小程序用户等级标签
* @param userAccountId
* @param cooperationTagId
* @return
*/
ResultBody changeUserTag(Integer userAccountId, Integer cooperationTagId);
}
......@@ -3,6 +3,9 @@ package com.mmc.iuav.user.service;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
import com.mmc.iuav.user.model.qo.BUserAccountQO;
import com.mmc.iuav.user.model.qo.LoginUserQO;
import com.mmc.iuav.user.model.vo.BUserAccountVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import java.util.List;
......@@ -54,4 +57,62 @@ public interface UserAccountService {
* @return
*/
List<Integer> feignListUserAccountIds(Integer provinceCode, Integer cityCode, Integer districtCode);
/**
* 添加后台用户
* @param bUserAccountVO
* @return
*/
ResultBody insertBAccount(BUserAccountVO bUserAccountVO);
/**
* 删除用户信
* @param userAccountId
* @return
*/
ResultBody removeBAccount(Integer userAccountId);
/**
* 后台用户列表
* @param bUserAccountQO
* @return
*/
ResultBody listBAccountPage(BUserAccountQO bUserAccountQO);
/**
* 登录账号密码查询用户信息
* @param accountNo
* @param passWord
* @return
*/
UserAccountDO getUserLoginInfo(String accountNo, String passWord);
/**
* 内部获取用户列表
* @param bUserAccountQO
* @return
*/
List<UserAccountSimpleDTO> feignListBAccountPage(BUserAccountQO bUserAccountQO);
/**
* 修改用户信息
* @param bUserAccountVO
* @return
*/
ResultBody updateBAccount(BUserAccountVO bUserAccountVO);
/**
* 修改用户密码
* @param account
* @return
*/
ResultBody updatePassword(BUserAccountVO account);
/**
* 验证用户密码
* @param id
* @param authPwd
* @return
*/
ResultBody feignAuthUserPwd(Integer id, String authPwd);
}
......@@ -7,8 +7,12 @@ import com.mmc.iuav.auth.JwtUtil;
import com.mmc.iuav.general.CodeUtil;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.response.ResultEnum;
import com.mmc.iuav.user.auth.PwdUtil;
import com.mmc.iuav.user.constant.WxConstant;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.enums.UserAccountStatus;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.qo.LoginUserQO;
import com.mmc.iuav.user.model.vo.AppUserSucVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.model.vo.WxLoginVO;
......@@ -16,9 +20,11 @@ import com.mmc.iuav.user.service.AuthService;
import com.mmc.iuav.user.service.UserAccountService;
import com.mmc.iuav.user.service.WxService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
......@@ -44,7 +50,7 @@ public class AuthServiceImpl implements AuthService {
if (wxLoginVO.getFromPort().toString().equals(WxConstant.APP.toString())) {
//调用小程序登录接口,里面包含unionId
String appWxJson = wxService.appLogin(wxLoginVO);
if (appWxJson == null) {
if (StringUtils.isBlank(appWxJson)) {
return ResultBody.error(ResultEnum.APPLET_PORT_TYPE_ERROR);
}
log.info("wx appLogin msg==>" + JSONObject.toJSONString(appWxJson));
......@@ -59,7 +65,7 @@ public class AuthServiceImpl implements AuthService {
}else if (wxLoginVO.getFromPort().equals(WxConstant.WEB)){
//获取access_token接口,里面包含unionId
String pcWxJson = wxService.pcLogin(wxLoginVO);
if (pcWxJson == null) {
if (StringUtils.isBlank(pcWxJson)) {
return ResultBody.error(ResultEnum.APPLET_PORT_TYPE_ERROR);
}
log.info("wx pcLogin msg==>" + JSONObject.toJSONString(pcWxJson));
......@@ -89,11 +95,55 @@ public class AuthServiceImpl implements AuthService {
}
Map<String, Object> map = new HashMap<String, Object>();
map.put(JwtConstant.USER_ACCOUNT_ID, userAccountVO.getId());
map.put(JwtConstant.ROLE_ID, 0);
//map.put(JwtConstant.ROLE_ID, 0);
map.put(JwtConstant.TOKEN_TYPE, JwtConstant.IUAV_TOKEN);
String token = JwtUtil.createJwt(map);
return ResultBody.success(AppUserSucVO.builder().token(token).uid(userAccountVO.getUid()).phoneNum(userAccountVO.getPhoneNum())
.nickName(userAccountVO.getNickName()).userAccountId(userAccountVO.getId()).sessionKey(sessionKey).build());
}
@Override
public ResultBody backEndLogin(LoginUserQO param) {
//查询用户信息
UserAccountDO user = userAccountService.getUserLoginInfo(param.getAccountNo(), param.getPassWord());
if (user == null) {
return ResultBody.error(ResultEnum.LOGIN_ACCOUNT_NOT_EXIT_ERROR);
}
if (user.getAccountStatus() .equals(UserAccountStatus.DISABLE.getAccountStatus()) ) {
return ResultBody.error(ResultEnum.LOGIN_ACCOUNT_STATUS_ERROR);
}
String loginPwd = "";
try {
loginPwd = PwdUtil.securityPwd(param.getPassWord());
} catch (NoSuchAlgorithmException e) {
return ResultBody.error(ResultEnum.PWD_CONPARED_ERROR);
}
if (!loginPwd.equals(user.getPassword())) {
return ResultBody.error(ResultEnum.LOGIN_PASSWORD_ERROR);
}
Map<String, Object> map = new HashMap<String, Object>();
map.put(JwtConstant.USER_ACCOUNT_ID, user.getId());
//map.put(JwtConstant.ROLE_ID, 0);
map.put(JwtConstant.TOKEN_TYPE, JwtConstant.M_TOKEN);
String token = JwtUtil.createJwt(map);
return ResultBody.success(LoginSuccessDTO.builder().token(token).userAccountId(user.getId()).accountNo(user.getAccountNo()).build());
}
@Override
public ResultBody testAppletLogin(String unionId) {
UserAccountVO userAccountVO = userAccountService.getUserAccountInfoByUnionId(unionId);
if (userAccountVO != null) {
Map<String, Object> map = new HashMap<String, Object>();
map.put(JwtConstant.USER_ACCOUNT_ID, userAccountVO.getId());
map.put(JwtConstant.TOKEN_TYPE, JwtConstant.IUAV_TOKEN);
String token = JwtUtil.createJwt(map);
return ResultBody.success(AppUserSucVO.builder().token(token).uid(userAccountVO.getUid()).phoneNum(userAccountVO.getPhoneNum())
.nickName(userAccountVO.getNickName()).userAccountId(userAccountVO.getId()).build());
}
return null;
}
}
......@@ -7,6 +7,7 @@ import com.mmc.iuav.user.dao.CooperationDao;
import com.mmc.iuav.user.entity.CompanyAuthDO;
import com.mmc.iuav.user.entity.CooperationTagDO;
import com.mmc.iuav.user.entity.UserApplyTagDO;
import com.mmc.iuav.user.entity.UserTagDO;
import com.mmc.iuav.user.model.vo.CooperationTagVO;
import com.mmc.iuav.user.model.vo.UserApplyTagVO;
import com.mmc.iuav.user.service.CooperationService;
......@@ -60,4 +61,20 @@ public class CooperationServiceImpl implements CooperationService {
cooperationDao.addApply(userApplyTagDO);
return ResultBody.success();
}
@Override
public ResultBody changeUserTag(Integer userAccountId, Integer cooperationTagId) {
UserTagDO userTagDO = cooperationDao.getUserTag(userAccountId);
if (userTagDO == null){
//直接插入
userTagDO = new UserTagDO();
userTagDO.setUserAccountId(userAccountId);
userTagDO.setCooperationTagId(cooperationTagId);
cooperationDao.insertUserTag(userTagDO);
}
//修改渠道等级
userTagDO.setCooperationTagId(cooperationTagId);
cooperationDao.updateUserTag(userTagDO);
return ResultBody.success();
}
}
package com.mmc.iuav.user.service.impl;
import com.mmc.iuav.auth.JwtConstant;
import com.mmc.iuav.general.CodeUtil;
import com.mmc.iuav.page.PageResult;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.response.ResultEnum;
import com.mmc.iuav.user.auth.PwdUtil;
import com.mmc.iuav.user.constant.UserSystemConstant;
import com.mmc.iuav.user.dao.CooperationDao;
import com.mmc.iuav.user.dao.UserServiceDao;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.entity.UserTagDO;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
import com.mmc.iuav.user.model.qo.BUserAccountQO;
import com.mmc.iuav.user.model.vo.BUserAccountVO;
import com.mmc.iuav.user.model.vo.CompanyAuthVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.service.CompanyAuthService;
import com.mmc.iuav.user.service.UserAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author: zj
......@@ -26,6 +39,9 @@ public class UserAccountServiceImpl implements UserAccountService {
@Autowired
private CompanyAuthService companyAuthService;
@Autowired
private CooperationDao cooperationDao;
@Override
public UserAccountVO getUserAccountInfoByUnionId(String unionId) {
UserAccountDO userAccountDO = userServiceDao.getUserAccountInfoByUnionId(unionId);
......@@ -43,7 +59,20 @@ public class UserAccountServiceImpl implements UserAccountService {
@Override
public UserAccountVO getUserAccountById(Integer userAccountId) {
UserAccountDO userAccountDO = userServiceDao.getUserAccountById(userAccountId);
if (userAccountDO == null) {
return null;
}
UserAccountVO userAccountVO = userAccountDO.buildUserAccountVO();
CompanyAuthVO companyAuthVO = companyAuthService.getCompanyAuthByUId(userAccountId);
if (companyAuthVO != null) {
userAccountVO.setCompanyAuthStatus(companyAuthVO.getAuthStatus());
}else {
userAccountVO.setCompanyAuthStatus(0);
}
UserTagDO userTag = cooperationDao.getUserTag(userAccountId);
if (userTag != null){
userAccountVO.setCooperationTagId(userTag.getCooperationTagId());
}
return userAccountVO;
}
......@@ -64,6 +93,10 @@ public class UserAccountServiceImpl implements UserAccountService {
}else {
userAccountSimpleDTO.setCompanyAuthStatus(0);
}
UserTagDO userTag = cooperationDao.getUserTag(userAccountId);
if (userTag != null){
userAccountSimpleDTO.setCooperationTagId(userTag.getCooperationTagId());
}
return userAccountSimpleDTO;
}
......@@ -72,4 +105,113 @@ public class UserAccountServiceImpl implements UserAccountService {
List<Integer> ids = userServiceDao.listUserAccountIdsByDistrictCode(provinceCode, cityCode, districtCode);
return ids;
}
@Override
public ResultBody insertBAccount(BUserAccountVO bUserAccountVO) {
if (!bUserAccountVO.getPassWord().equals(bUserAccountVO.getAlertPwd())) {
// 两次密码不一致
return ResultBody.error(ResultEnum.PWD_ALERT_ERROR);
}
// 获取新增的账户名是否已经存在
int count = userServiceDao.countUserAccountNo(null, bUserAccountVO.getAccountNo());
if (count > 0) {
return ResultBody.error(ResultEnum.ADD_USER_ACCOUNT_NAME_EXISTS);
}
UserAccountDO userAccountDO = new UserAccountDO(bUserAccountVO);
try {
userAccountDO.setPassword(PwdUtil.securityPwd(bUserAccountVO.getPassWord()));
} catch (NoSuchAlgorithmException e) {
return ResultBody.error(ResultEnum.PWD_CREATE_ERROR);
}
userAccountDO.setUid(CodeUtil.generateUserUID());
userAccountDO.setAccountType(0);
userAccountDO.setPortType(0);
userAccountDO.setOpenId(userAccountDO.getUid());
userAccountDO.setUnionId(userAccountDO.getUid());
userServiceDao.insertUserAccount(userAccountDO);
return ResultBody.success();
}
@Override
public ResultBody removeBAccount(Integer userAccountId) {
String removeNO = CodeUtil.removeUserAccount();
userServiceDao.removeUserAccount(removeNO, userAccountId);
return ResultBody.success();
}
@Override
public ResultBody listBAccountPage(BUserAccountQO param) {
int count = userServiceDao.countListBAccountPage(param);
if (count == 0) {
return ResultBody.success(PageResult.buildPage(param.getPageNo(), param.getPageSize(), count));
}
Integer pageNo = param.getPageNo();
param.buildCurrentPage();
List<UserAccountDO> users = userServiceDao.listBAccountPage(param);
List<UserAccountVO> collect = users.stream().map(UserAccountDO::buildUserAccountVO).collect(Collectors.toList());
return ResultBody.success(PageResult.buildPage(pageNo, param.getPageSize(), count, collect));
}
@Override
public UserAccountDO getUserLoginInfo(String accountNo, String passWord) {
UserAccountDO userAccountDO = userServiceDao.getUserLoginInfo(accountNo, passWord);
return userAccountDO;
}
@Override
public List<UserAccountSimpleDTO> feignListBAccountPage(BUserAccountQO bUserAccountQO) {
List<UserAccountDO> list = userServiceDao.feignListBAccountPage(bUserAccountQO);
List<UserAccountSimpleDTO> accountSimpleDTOS = list.stream().map(UserAccountDO::buildUserAccountSimpleDTO).collect(Collectors.toList());
return accountSimpleDTOS;
}
@Override
public ResultBody updateBAccount(BUserAccountVO bUserAccountVO) {
// 判断账号是否重复
if (!StringUtils.isEmpty(bUserAccountVO.getAccountNo())) {
// 如果传入的名字不为空,就查找数据库,看名字是否重复
int count = userServiceDao.countUserAccountNo(bUserAccountVO.getId(), bUserAccountVO.getAccountNo());
if (count > 0) {
return ResultBody.error(ResultEnum.UPDATE_USER_ACCOUNT_REPEAT);
}
}
UserAccountDO userAccountDO = new UserAccountDO(bUserAccountVO);
userServiceDao.update(userAccountDO);
return ResultBody.success();
}
@Override
public ResultBody updatePassword(BUserAccountVO account) {
if (!account.getPassWord().equals(account.getAlertPwd())) {
return ResultBody.error(ResultEnum.PASSWORD_INCONSISTENT);
}
try {
account.setPassWord(PwdUtil.securityPwd(account.getPassWord()));
userServiceDao.updatePassword(account.getId(), account.getPassWord());
} catch (NoSuchAlgorithmException e) {
return ResultBody.error(ResultEnum.PWD_CONPARED_ERROR);
}
// RoleInfoDO roleInfo = roleInfoDao.getRoleInfoByUser(account.getId());// 查询账号的角色信息
// this.disableOneToken(account.getId(), roleInfo.getId(), JwtConstant.SXTB_ACCOUNT_TOKEN);
return ResultBody.success();
}
@Override
public ResultBody feignAuthUserPwd(Integer id, String authPwd) {
UserAccountDO account = userServiceDao.getUserAuthPwdInfo(id);
if (account == null) {
return ResultBody.error(ResultEnum.LOGIN_ACCOUNT_NOT_EXIT_ERROR);
}
String pwd = "";
try {
pwd = PwdUtil.securityPwd(authPwd);
} catch (NoSuchAlgorithmException e) {
return ResultBody.error(ResultEnum.PWD_CREATE_ERROR);
}
if (!pwd.equals(account.getPassword())) {
return ResultBody.error(ResultEnum.PWD_CONPARED_ERROR);
}
return ResultBody.success();
}
}
......@@ -9,6 +9,11 @@
values(#{cooperationTagId}, #{userAccountId}, #{applyName}, #{applyPhone}, #{remark}, NOW())
</insert>
<insert id="insertUserTag" useGeneratedKeys="true" parameterType="com.mmc.iuav.user.entity.UserTagDO" keyProperty="id">
insert into user_tag(user_account_id, cooperation_tag_id, create_time)
values(#{userAccountId}, #{cooperationTagId}, NOW());
</insert>
<update id="updateUserApplyTag" parameterType="com.mmc.iuav.user.entity.UserApplyTagDO">
UPDATE user_apply_tag
<set>
......@@ -34,6 +39,10 @@
WHERE id = #{id};
</update>
<update id="updateUserTag">
update user_tag set cooperation_tag_id = #{cooperationTagId} where id = #{id}
</update>
<select id="listTags" resultType="com.mmc.iuav.user.entity.CooperationTagDO">
select id, tag_name, tag_img, tag_description, create_time from cooperation_tag
</select>
......@@ -43,4 +52,10 @@
from user_apply_tag
where user_account_id = #{userAccountId} and is_deleted = 0
</select>
<select id="getUserTag" resultType="com.mmc.iuav.user.entity.UserTagDO">
select id, user_account_id, cooperation_tag_id,is_deleted as deleted, create_time, update_time
from user_tag
where user_account_id = #{userAccountId} and is_deleted = 0
</select>
</mapper>
\ No newline at end of file
......@@ -27,13 +27,16 @@
<insert id="insertUserAccount" parameterType="com.mmc.iuav.user.entity.UserAccountDO"
useGeneratedKeys="true" keyProperty="id">
insert into user_account(account_type, uid, phone_num, user_name, nick_name, user_img, open_id, union_id, user_sex, email, source, remark, port_type, create_time)
values(#{accountType}, #{uid}, #{phoneNum}, #{userName}, #{nickName}, #{userImg}, #{openId}, #{unionId}, #{userSex}, #{email}, #{source}, #{remark}, #{portType}, NOW())
insert into user_account(account_type, uid, account_no, pass_word, phone_num, user_name, nick_name, user_img, open_id, union_id, user_sex, email, source,province_code, city_code, district_code, remark, port_type, create_time)
values(#{accountType}, #{uid}, #{accountNo}, #{password}, #{phoneNum}, #{userName}, #{nickName}, #{userImg}, #{openId}, #{unionId}, #{userSex}, #{email}, #{source}, #{provinceCode}, #{cityCode}, #{districtCode}, #{remark}, #{portType}, NOW())
</insert>
<update id="update" parameterType="com.mmc.iuav.user.entity.UserAccountDO">
update user_account
<set>
<if test="accountNo != null">
account_no = #{accountNo},
</if>
<if test="phoneNum != null">
phone_num = #{phoneNum},
</if>
......@@ -55,6 +58,15 @@
<if test="accountStatus != null">
account_status = #{accountStatus},
</if>
<if test="provinceCode != null">
province_code = #{provinceCode},
</if>
<if test="cityCode != null">
city_code = #{cityCode},
</if>
<if test="districtCode != null">
district_code = #{districtCode},
</if>
<if test="remark != null">
remark = #{remark},
</if>
......@@ -67,6 +79,16 @@
</where>
</update>
<update id="removeUserAccount">
update user_account set is_deleted = 1, union_id = #{removeNO} where id = #{userAccountId}
</update>
<update id="updatePassword">
update user_account
set pass_word=#{passWord}
where id = #{id}
</update>
<select id="getUserAccountInfoByUnionId" resultType="com.mmc.iuav.user.entity.UserAccountDO">
select id, account_type, uid, phone_num, user_name, nick_name, user_img, open_id, union_id, user_sex, email, source, account_status, remark,
port_type, is_deleted, create_time, update_time
......@@ -94,4 +116,99 @@
and district_code = #{districtCode}
</if>
</select>
<select id="getUserLoginInfo" resultType="com.mmc.iuav.user.entity.UserAccountDO">
select ua.id,
ua.account_no,
ua.pass_word,
ua.account_status,
ua.account_type,
ua.user_name
from user_account ua
where ua.is_deleted = 0
and BINARY ua.account_no = #{accountNo}
</select>
<select id="feignListBAccountPage" resultType="com.mmc.iuav.user.entity.UserAccountDO" parameterType="com.mmc.iuav.user.model.qo.BUserAccountQO">
select id, account_type, account_no, uid, phone_num, user_name, nick_name, user_img, open_id, union_id, user_sex, email, source, account_status, remark,
port_type, is_deleted as deleted, create_time, update_time
from user_account
where is_deleted = 0 and port_type = 0
<if test=" userIds != null ">
<foreach collection="userIds" item="id" open="and id in (" close=")" separator=",">
#{id}
</foreach>
</if>
<if test="provinceCode != null">
and province_code = #{provinceCode}
</if>
<if test="cityCode != null">
and city_code = #{cityCode}
</if>
<if test="districtCode != null">
and district_code = #{districtCode}
</if>
</select>
<select id="countUserAccountNo" resultType="java.lang.Integer">
select count(*) from user_account
where account_no = #{accountNo} and is_deleted = 0 and port_type = 0
<if test="excludeId != null">
and id != #{excludeId}
</if>
</select>
<select id="countListBAccountPage" resultType="java.lang.Integer" parameterType="com.mmc.iuav.user.model.qo.BUserAccountQO">
select count(*) from user_account
where is_deleted = 0 and port_type = 0
<if test=" keyword != null and keyword != '' ">
and ( account_no like CONCAT("%",#{keyword},"%") or
user_name like CONCAT("%",#{keyword},"%") )
</if>
<if test="provinceCode != null">
and province_code = #{provinceCode}
</if>
<if test="cityCode != null">
and city_code = #{cityCode}
</if>
<if test="districtCode != null">
and district_code = #{districtCode}
</if>
<if test="accountStatus != null">
and account_status = #{accountStatus}
</if>
</select>
<select id="listBAccountPage" resultType="com.mmc.iuav.user.entity.UserAccountDO" parameterType="com.mmc.iuav.user.model.qo.BUserAccountQO">
select id, account_type, account_no, uid, phone_num, user_name, nick_name, user_img, open_id, union_id, user_sex, email, source, account_status, remark,
port_type, is_deleted as deleted, create_time, update_time
from user_account
where is_deleted = 0 and port_type = 0
<if test=" keyword != null and keyword != '' ">
and ( account_no like CONCAT("%",#{keyword},"%") or
user_name like CONCAT("%",#{keyword},"%") )
</if>
<if test="provinceCode != null">
and province_code = #{provinceCode}
</if>
<if test="cityCode != null">
and city_code = #{cityCode}
</if>
<if test="districtCode != null">
and district_code = #{districtCode}
</if>
<if test="accountStatus != null">
and account_status = #{accountStatus}
</if>
</select>
<select id="getUserAuthPwdInfo" resultType="com.mmc.iuav.user.entity.UserAccountDO">
select id,
account_no,
pass_word
from user_account
where is_deleted = 0
and id =
#{id}
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论