localizer
lzq 2025-09-25 18:12:00 +08:00
parent 8000a4bd3e
commit 44e0c71ce5
39 changed files with 1880 additions and 449 deletions

View File

@ -23,7 +23,11 @@
<artifactId>njzscloud-common-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.njzscloud</groupId>
<artifactId>njzscloud-common-wechat</artifactId>
<scope>provided</scope>
</dependency>
<!-- <dependency>
<groupId>com.njzscloud</groupId>
<artifactId>njzscloud-common-redis</artifactId>

View File

@ -9,6 +9,8 @@ import com.njzscloud.common.security.module.code.CodeAuthenticationProvider;
import com.njzscloud.common.security.module.code.CodeLoginPreparer;
import com.njzscloud.common.security.module.password.PasswordAuthenticationProvider;
import com.njzscloud.common.security.module.password.PasswordLoginPreparer;
import com.njzscloud.common.security.module.wechat.mini.WechatMiniAuthenticationProvider;
import com.njzscloud.common.security.module.wechat.mini.WechatMiniLoginPreparer;
import com.njzscloud.common.security.permission.DefaultPermissionManager;
import com.njzscloud.common.security.permission.PermissionManager;
import com.njzscloud.common.security.permission.PermissionSecurityMetaDataSource;
@ -58,32 +60,44 @@ public class WebSecurityAutoConfiguration {
}
@Bean
@ConditionalOnMissingBean({IUserService.class, IRoleService.class, IResourceService.class})
@ConditionalOnMissingBean({IUserService.class, IRoleService.class})
public DefaultAuthenticationProvider defaultAuthenticationProvider() {
return new DefaultAuthenticationProvider();
}
@Bean
@ConditionalOnBean({IUserService.class, IRoleService.class, IResourceService.class})
public PasswordAuthenticationProvider passwordAuthenticationProvider(IUserService iUserService, IRoleService iRoleService, IResourceService iResourceService) {
return new PasswordAuthenticationProvider(iUserService, iRoleService, iResourceService);
@ConditionalOnBean({IUserService.class, IRoleService.class})
public PasswordAuthenticationProvider passwordAuthenticationProvider(IUserService iUserService, IRoleService iRoleService) {
return new PasswordAuthenticationProvider(iUserService, iRoleService);
}
@Bean
@ConditionalOnBean({IUserService.class, IRoleService.class, IResourceService.class})
@ConditionalOnBean({IUserService.class, IRoleService.class})
public PasswordLoginPreparer passwordLoginPreparer() {
return new PasswordLoginPreparer();
}
@Bean
@ConditionalOnBean({IUserService.class, IRoleService.class})
public WechatMiniAuthenticationProvider wechatMiniAuthenticationProvider(IUserService iUserService, IRoleService iRoleService) {
return new WechatMiniAuthenticationProvider(iUserService, iRoleService);
}
@Bean
@ConditionalOnBean({IUserService.class, IRoleService.class})
public WechatMiniLoginPreparer wechatMiniLoginPreparer() {
return new WechatMiniLoginPreparer();
}
@Bean
public VerificationCodeService verificationCodeService() {
return new VerificationCodeService(true);
}
@Bean
@ConditionalOnBean({IUserService.class, IRoleService.class, IResourceService.class, VerificationCodeService.class})
public CodeAuthenticationProvider codeAuthenticationProvider(IUserService iUserService, IRoleService iRoleService, IResourceService iResourceService, VerificationCodeService verificationCodeService) {
return new CodeAuthenticationProvider(iUserService, iRoleService, iResourceService, verificationCodeService);
@ConditionalOnBean({IUserService.class, IRoleService.class, VerificationCodeService.class})
public CodeAuthenticationProvider codeAuthenticationProvider(IUserService iUserService, IRoleService iRoleService, VerificationCodeService verificationCodeService) {
return new CodeAuthenticationProvider(iUserService, iRoleService, verificationCodeService);
}
@Bean

View File

@ -17,7 +17,6 @@ import java.util.Set;
public class CodeAuthenticationProvider extends AbstractAuthenticationProvider {
private final IUserService iUserService;
private final IRoleService iRoleService;
private final IResourceService iResourceService;
private final VerificationCodeService verificationCodeService;
/**
@ -30,15 +29,13 @@ public class CodeAuthenticationProvider extends AbstractAuthenticationProvider {
protected UserDetail retrieveUser(LoginForm loginForm) throws UserLoginException {
CodeLoginForm codeLoginForm = (CodeLoginForm) loginForm;
String phone = codeLoginForm.getPhone();
UserDetail userDetail = iUserService.selectUser(phone, codeLoginForm.getAuthWay());
UserDetail userDetail = iUserService.selectUser(codeLoginForm);
if (userDetail == null) throw new UserLoginException(ExceptionMsg.CLI_ERR_MSG, "账号不存在");
Long userId = userDetail.getUserId();
Set<String> roles = iRoleService.selectRoleByUserId(userId);
Resource resource = iResourceService.selectResourceByUserId(userId);
return userDetail
.setAuthWay(AuthWay.PASSWORD)
.setRoles(roles)
.setResource(resource)
;
}

View File

@ -2,6 +2,7 @@ package com.njzscloud.common.security.module.password;
import cn.hutool.core.lang.Assert;
import com.njzscloud.common.core.ex.ExceptionMsg;
import com.njzscloud.common.core.ex.SysThrowable;
import com.njzscloud.common.security.contant.AuthWay;
import com.njzscloud.common.security.ex.UserLoginException;
import com.njzscloud.common.security.support.*;
@ -17,7 +18,6 @@ import java.util.Set;
public class PasswordAuthenticationProvider extends AbstractAuthenticationProvider {
private final IUserService iUserService;
private final IRoleService iRoleService;
private final IResourceService iResourceService;
/**
*
@ -28,16 +28,18 @@ public class PasswordAuthenticationProvider extends AbstractAuthenticationProvid
@Override
protected UserDetail retrieveUser(LoginForm loginForm) throws UserLoginException {
PasswordLoginForm passwordLoginForm = (PasswordLoginForm) loginForm;
String account = passwordLoginForm.getAccount();
UserDetail userDetail = iUserService.selectUser(account, passwordLoginForm.getAuthWay());
UserDetail userDetail;
try {
userDetail = iUserService.selectUser(passwordLoginForm);
} catch (SysThrowable e) {
throw new UserLoginException(e.msg, e.message.toString());
}
if (userDetail == null) throw new UserLoginException(ExceptionMsg.CLI_ERR_MSG, "账号或密码错误");
Long userId = userDetail.getUserId();
Set<String> roles = iRoleService.selectRoleByUserId(userId);
Resource resource = iResourceService.selectResourceByUserId(userId);
return userDetail
.setAuthWay(AuthWay.PASSWORD)
.setRoles(roles)
.setResource(resource)
;
}

View File

@ -5,6 +5,7 @@ import com.njzscloud.common.core.jackson.Jackson;
import com.njzscloud.common.security.ex.UserLoginException;
import com.njzscloud.common.security.support.LoginForm;
import com.njzscloud.common.security.support.LoginPreparer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import javax.servlet.ServletInputStream;
@ -15,6 +16,7 @@ import static com.njzscloud.common.security.contant.Constants.LOGIN_URL;
/**
*
*/
@Slf4j
public class PasswordLoginPreparer implements LoginPreparer {
private static final AntPathRequestMatcher matcher = new AntPathRequestMatcher(LOGIN_URL, "POST");
@ -27,7 +29,9 @@ public class PasswordLoginPreparer implements LoginPreparer {
@Override
public LoginForm createLoginForm(HttpServletRequest request) {
try (ServletInputStream inputStream = request.getInputStream()) {
return Jackson.toBean(inputStream, PasswordLoginForm.class);
LoginForm loginForm = Jackson.toBean(inputStream, PasswordLoginForm.class);
log.info("账号密码登录表单:{}", Jackson.toJsonStr(loginForm));
return loginForm;
} catch (Exception e) {
throw new UserLoginException(e, ExceptionMsg.SYS_ERR_MSG, "登录表单解析失败");
}

View File

@ -1,9 +1,9 @@
package com.njzscloud.common.security.module.wechat.mini;
import com.njzscloud.common.core.ex.ExceptionMsg;
import com.njzscloud.common.core.ex.SysThrowable;
import com.njzscloud.common.security.contant.AuthWay;
import com.njzscloud.common.security.ex.UserLoginException;
import com.njzscloud.common.security.module.code.CodeLoginForm;
import com.njzscloud.common.security.module.password.PasswordLoginForm;
import com.njzscloud.common.security.support.*;
import lombok.RequiredArgsConstructor;
@ -17,7 +17,6 @@ import java.util.Set;
public class WechatMiniAuthenticationProvider extends AbstractAuthenticationProvider {
private final IUserService iUserService;
private final IRoleService iRoleService;
private final IResourceService iResourceService;
/**
*
@ -28,17 +27,18 @@ public class WechatMiniAuthenticationProvider extends AbstractAuthenticationProv
@Override
protected UserDetail retrieveUser(LoginForm loginForm) throws UserLoginException {
WechatMiniLoginForm wechatMiniLoginForm = (WechatMiniLoginForm) loginForm;
String code = wechatMiniLoginForm.getCode();
AuthWay authWay = wechatMiniLoginForm.getAuthWay();
UserDetail userDetail = iUserService.selectUser(code, authWay);
if (userDetail == null) throw new UserLoginException(ExceptionMsg.CLI_ERR_MSG, "账号不存在");
UserDetail userDetail;
try {
userDetail = iUserService.selectUser(wechatMiniLoginForm);
} catch (SysThrowable e) {
throw new UserLoginException(e.msg, e.message.toString());
}
if (userDetail == null) throw new UserLoginException(ExceptionMsg.CLI_ERR_MSG, "微信登录失败");
Long userId = userDetail.getUserId();
Set<String> roles = iRoleService.selectRoleByUserId(userId);
Resource resource = iResourceService.selectResourceByUserId(userId);
return userDetail
.setAuthWay(authWay)
.setAuthWay(AuthWay.WECHAT_MINI)
.setRoles(roles)
.setResource(resource)
;
}
@ -50,6 +50,6 @@ public class WechatMiniAuthenticationProvider extends AbstractAuthenticationProv
*/
@Override
protected Class<?> getLoginFormClazz() {
return CodeLoginForm.class;
return WechatMiniLoginForm.class;
}
}

View File

@ -4,12 +4,13 @@ import com.njzscloud.common.security.contant.AuthWay;
import com.njzscloud.common.security.support.LoginForm;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
/**
*
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class WechatMiniLoginForm extends LoginForm {
/**
*

View File

@ -1,11 +1,16 @@
package com.njzscloud.common.security.module.wechat.mini;
import cn.hutool.core.util.StrUtil;
import com.njzscloud.common.core.ex.ExceptionMsg;
import com.njzscloud.common.core.jackson.Jackson;
import com.njzscloud.common.security.ex.UserLoginException;
import com.njzscloud.common.security.module.password.PasswordLoginForm;
import com.njzscloud.common.security.support.LoginForm;
import com.njzscloud.common.security.support.LoginPreparer;
import com.njzscloud.common.wechat.WechatUtil;
import com.njzscloud.common.wechat.param.Code2SessionParam;
import com.njzscloud.common.wechat.result.Code2SessionResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import javax.servlet.ServletInputStream;
@ -16,6 +21,7 @@ import static com.njzscloud.common.security.contant.Constants.LOGIN_WECHAT_URL;
/**
*
*/
@Slf4j
public class WechatMiniLoginPreparer implements LoginPreparer {
private static final AntPathRequestMatcher matcher = new AntPathRequestMatcher(LOGIN_WECHAT_URL, "POST");
@ -28,7 +34,22 @@ public class WechatMiniLoginPreparer implements LoginPreparer {
@Override
public LoginForm createLoginForm(HttpServletRequest request) {
try (ServletInputStream inputStream = request.getInputStream()) {
return Jackson.toBean(inputStream, WechatMiniLoginForm.class);
WechatMiniLoginForm loginForm = Jackson.toBean(inputStream, WechatMiniLoginForm.class);
log.info("微信小程序登录表单:{}", Jackson.toJsonStr(loginForm));
String code = loginForm.getCode();
if (StrUtil.isBlank(code)) {
throw new UserLoginException(ExceptionMsg.CLI_ERR_MSG, "微信验证码不能为空");
}
Code2SessionResult code2SessionResult = WechatUtil.code2Session(new Code2SessionParam().setJs_code(code));
Integer errcode = code2SessionResult.getErrcode();
if (errcode != null && errcode != 0) {
log.error("微信登录失败, errcode: {}, errmsg: {}", errcode, code2SessionResult.getErrmsg());
throw new UserLoginException(ExceptionMsg.CLI_ERR_MSG, "微信登录失败");
}
String openid = code2SessionResult.getOpenid();
String unionid = code2SessionResult.getUnionid();
return loginForm.setOpenid(openid)
.setUnionid(unionid);
} catch (Exception e) {
throw new UserLoginException(e, ExceptionMsg.SYS_ERR_MSG, "登录表单解析失败");
}

View File

@ -1,11 +1,13 @@
package com.njzscloud.common.security.support;
import com.njzscloud.common.security.contant.AuthWay;
import com.njzscloud.common.security.module.code.CodeLoginForm;
import com.njzscloud.common.security.module.password.PasswordLoginForm;
import com.njzscloud.common.security.module.wechat.mini.WechatMiniLoginForm;
public interface IUserService {
UserDetail selectUser(String phone, AuthWay authWay);
default UserDetail selectUser(CodeLoginForm form) {
return null;
}
default UserDetail selectUser(PasswordLoginForm form) {
return null;
@ -15,7 +17,7 @@ public interface IUserService {
return null;
}
default UserDetail my(WechatMiniLoginForm form) {
default UserDetail my() {
return null;
}
}

View File

@ -1,13 +1,13 @@
package com.njzscloud.common.security.support;
import com.alibaba.fastjson2.JSONObject;
import com.njzscloud.common.security.contant.AuthWay;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import java.security.Principal;
import java.util.Map;
@Getter
@Setter
@ -19,7 +19,7 @@ public abstract class LoginForm implements Principal {
private final AuthWay authWay;
/**
*
*
*/
private Map<String, Object> extra;
private JSONObject registerData;
}

View File

@ -1,8 +1,8 @@
package com.njzscloud.common.security.support;
import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.njzscloud.common.core.fastjson.Fastjson;
import com.njzscloud.common.core.fastjson.serializer.DictObjectDeserializer;
import com.njzscloud.common.core.fastjson.serializer.DictObjectSerializer;
import com.njzscloud.common.security.contant.AuthWay;
@ -35,6 +35,7 @@ public class UserDetail implements CredentialsContainer, Principal {
/**
*
*/
@JsonIgnore
private String secret;
/**
@ -57,11 +58,6 @@ public class UserDetail implements CredentialsContainer, Principal {
*/
private Set<String> roles;
/**
*
*/
private Resource resource;
@JsonSerialize(using = TokenSerializer.class)
private Token token;
@ -70,8 +66,6 @@ public class UserDetail implements CredentialsContainer, Principal {
*/
private Boolean disabled;
private String bizObj;
/**
*
*/
@ -91,12 +85,9 @@ public class UserDetail implements CredentialsContainer, Principal {
*
*/
// private boolean disable = false;
@Override
public String toString() {
return Fastjson.toJsonStr(this);
}
@Override
@JsonIgnore
public String getName() {
return userId.toString();
}

View File

@ -1,15 +1,13 @@
package com.njzscloud.common.security.util;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.njzscloud.common.security.contant.AuthWay;
import com.njzscloud.common.security.contant.Constants;
import com.njzscloud.common.security.support.*;
import com.njzscloud.common.security.support.ITokenService;
import com.njzscloud.common.security.support.Token;
import com.njzscloud.common.security.support.UserDetail;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import java.util.Set;
/**
*
*/
@ -19,11 +17,12 @@ public class SecurityUtil {
*
* @return UserAuthPrincipal
*/
public static UserDetail loginUser() {
@SuppressWarnings("unchecked")
public static <T extends UserDetail> T loginUser() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
UserDetail userDetail = null;
if (authentication != null) userDetail = (UserDetail) authentication.getPrincipal();
return userDetail == null ? Constants.ANONYMOUS_USER : userDetail;
T userDetail = null;
if (authentication != null) userDetail = (T) authentication.getPrincipal();
return userDetail == null ? (T) Constants.ANONYMOUS_USER : userDetail;
}
/**
@ -80,24 +79,4 @@ public class SecurityUtil {
public static void removeToken(Long userId) {
SpringUtil.getBean(ITokenService.class).removeToken(userId);
}
public static String registrationToken(String account, AuthWay authWay) {
IUserService userService = SpringUtil.getBean(IUserService.class);
UserDetail userDetail = userService.selectUser(account, authWay);
Long userId = userDetail.getUserId();
Set<String> roles = SpringUtil.getBean(IRoleService.class).selectRoleByUserId(userId);
if (CollUtil.isEmpty(roles)) {
roles.add(Constants.ROLE_ANONYMOUS);
roles.add(Constants.ROLE_AUTHENTICATED);
}
Resource resource = SpringUtil.getBean(IResourceService.class).selectResourceByUserId(userId);
Token token = Token.create(userDetail.getUserId(), userDetail.getAccountId(), authWay);
userDetail.setAuthWay(authWay)
.setRoles(roles)
.setResource(resource)
.setToken(token);
SecurityUtil.registrationToken(userDetail);
return token.toString();
}
}

View File

@ -12,16 +12,19 @@ import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public enum BizObj implements DictStr {
// 产废方
GeRen("GeRen", "个人"),
WuYe("WuYe", "物业"),
ShiGongDanWei("ShiGongDanWei", "施工单位"),
ChaiQian("ChaiQian", "拆迁公司"),
SheQu("SheQu", "社区/村/街道"),
// 清运方
QiYe("QiYe", "企业"),
GeTi("GeTi", "个体工商户"),
SiJi("SiJi", "司机"),
JianGuan("JianGuan", "监管"),
SiBang("SiBang", "司磅"),
@ -35,32 +38,28 @@ public enum BizObj implements DictStr {
/**
*
*/
public static boolean isTrans(String bizObjStr) {
BizObj bizObj = Dict.parse(bizObjStr, BizObj.values());
public static boolean isTrans(BizObj bizObj) {
return bizObj != null && bizObj.isTrans();
}
/**
*
*/
public static boolean isDriver(String bizObjStr) {
BizObj bizObj = Dict.parse(bizObjStr, BizObj.values());
public static boolean isDriver(BizObj bizObj) {
return bizObj != null && bizObj.isDriver();
}
/**
*
*/
public static boolean isWaste(String bizObjStr) {
BizObj bizObj = Dict.parse(bizObjStr, BizObj.values());
public static boolean isWaste(BizObj bizObj) {
return bizObj != null && (bizObj.isWastePersonal() || bizObj.isWasteCompany());
}
/**
*
*/
public static boolean isWastePersonal(String bizObjStr) {
BizObj bizObj = Dict.parse(bizObjStr, BizObj.values());
public static boolean isWastePersonal(BizObj bizObj) {
return bizObj != null && bizObj.isWastePersonal();
}
@ -75,8 +74,7 @@ public enum BizObj implements DictStr {
/**
*
*/
public static boolean isSiBang(String bizObjStr) {
BizObj bizObj = Dict.parse(bizObjStr, BizObj.values());
public static boolean isSiBang(BizObj bizObj) {
return bizObj != null && bizObj.isSiBang();
}

View File

@ -6,11 +6,9 @@ import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.base.Strings;
import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.security.support.UserDetail;
import com.njzscloud.common.security.util.SecurityUtil;
import com.njzscloud.supervisory.biz.constant.AuditStatus;
import com.njzscloud.supervisory.biz.constant.BizObj;
@ -22,6 +20,7 @@ import com.njzscloud.supervisory.biz.pojo.param.SearchCompanyParam;
import com.njzscloud.supervisory.biz.pojo.result.SearchCompanyResult;
import com.njzscloud.supervisory.biz.pojo.result.StationResult;
import com.njzscloud.supervisory.config.AppProperties;
import com.njzscloud.supervisory.sys.auth.pojo.result.MyResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -120,11 +119,11 @@ public class BizCompanyService extends ServiceImpl<BizCompanyMapper, BizCompanyE
* @return SearchCompanyResult
*/
public SearchCompanyResult detail(Long id) {
UserDetail userDetail = SecurityUtil.loginUser();
MyResult userDetail = SecurityUtil.loginUser();
Long userId = userDetail.getUserId();
String bizObjValue = userDetail.getBizObj();
BizObj bizObj = userDetail.getBizObj();
BizCompanyEntity bizCompanyEntity;
if (Strings.isNullOrEmpty(bizObjValue)) {
if (bizObj == null) {
// 使用联表查询获取企业信息和用户的bizObj
bizCompanyEntity = baseMapper.selectDetailWithBizObj(id);
if (bizCompanyEntity == null) {
@ -132,7 +131,6 @@ public class BizCompanyService extends ServiceImpl<BizCompanyMapper, BizCompanyE
}
return BeanUtil.copyProperties(bizCompanyEntity, SearchCompanyResult.class);
}
BizObj bizObj = BizObj.valueOf(bizObjValue);
switch (bizObj) {
case ShiGongDanWei:
case QingYunGongSi:

View File

@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.core.ienum.Dict;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.security.support.UserDetail;
@ -20,6 +19,9 @@ import com.njzscloud.supervisory.biz.pojo.entity.BizDriverEntity;
import com.njzscloud.supervisory.biz.pojo.param.AddDriverParam;
import com.njzscloud.supervisory.biz.pojo.param.AuditDriverParam;
import com.njzscloud.supervisory.biz.pojo.result.SearchCompanyResult;
import com.njzscloud.supervisory.sys.auth.pojo.result.MyResult;
import com.njzscloud.supervisory.sys.user.pojo.param.AddUserAccountParam;
import com.njzscloud.supervisory.sys.user.pojo.param.AddUserParam;
import com.njzscloud.supervisory.sys.user.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -47,9 +49,13 @@ public class BizDriverService extends ServiceImpl<BizDriverMapper, BizDriverEnti
UserDetail userDetail = SecurityUtil.loginUser();
SearchCompanyResult searchCompanyResult = baseMapper.selectCompanyByUserId(userDetail.getUserId());
Long driverUserId = sysUserService.add(addDriverParam.getUser()
.setBizObj(BizObj.SiJi)
);
AddUserParam user = addDriverParam.getUser();
AddUserAccountParam account = user.getAccount();
user.setPhone(account.getPhone())
.setBizObj(BizObj.SiJi);
account.setPhone(null);
Long driverUserId = sysUserService.add(user);
BizDriverEntity bizDriverEntity = BeanUtil.copyProperties(addDriverParam, BizDriverEntity.class)
.setAuditStatus(AuditStatus.DaiShenHe)
.setUserId(driverUserId)
@ -114,8 +120,8 @@ public class BizDriverService extends ServiceImpl<BizDriverMapper, BizDriverEnti
.like(StrUtil.isNotBlank(phone), "d.phone", phone)
.eq(StrUtil.isNotBlank(aStatus), "d.audit_status", aStatus);
UserDetail userDetail = SecurityUtil.loginUser();
BizObj parse = Dict.parse(userDetail.getBizObj(), BizObj.values());
MyResult userDetail = SecurityUtil.loginUser();
BizObj parse = userDetail.getBizObj();
if (parse == BizObj.QiYe
|| parse == BizObj.GeTi
) {

View File

@ -7,16 +7,15 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.core.ienum.Dict;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.security.support.UserDetail;
import com.njzscloud.common.security.util.SecurityUtil;
import com.njzscloud.supervisory.biz.constant.AuditStatus;
import com.njzscloud.supervisory.biz.constant.BizObj;
import com.njzscloud.supervisory.biz.mapper.BizProjectMapper;
import com.njzscloud.supervisory.biz.pojo.entity.BizProjectEntity;
import com.njzscloud.supervisory.biz.pojo.result.SearchBizProjectResult;
import com.njzscloud.supervisory.sys.auth.pojo.result.MyResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -68,8 +67,8 @@ public class BizProjectService extends ServiceImpl<BizProjectMapper, BizProjectE
if (null != auditStatus) {
aStatus = auditStatus.getVal();
}
UserDetail userDetail = SecurityUtil.loginUser();
BizObj bizObj = Dict.parse(userDetail.getBizObj(), BizObj.values());
MyResult userDetail = SecurityUtil.loginUser();
BizObj bizObj = userDetail.getBizObj();
QueryWrapper<BizProjectEntity> ew = Wrappers.<BizProjectEntity>query()
.like(StrUtil.isNotBlank(bizProjectEntity.getProjectName()), "a.project_name", bizProjectEntity.getProjectName())
.eq(StrUtil.isNotBlank(aStatus), "a.audit_status", aStatus).eq("a.deleted", 0);
@ -105,8 +104,8 @@ public class BizProjectService extends ServiceImpl<BizProjectMapper, BizProjectE
}
public PageResult<SearchBizProjectResult> pagingTrans(PageParam pageParam, BizProjectEntity bizProjectEntity) {
UserDetail userDetail = SecurityUtil.loginUser();
BizObj bizObj = Dict.parse(userDetail.getBizObj(), BizObj.values());
MyResult userDetail = SecurityUtil.loginUser();
BizObj bizObj = userDetail.getBizObj();
Assert.isTrue(bizObj != null && bizObj.isWaste(), () -> Exceptions.exception("非产废单位或个人,不能查询合作的清运公司"));
Long userId = userDetail.getUserId();

View File

@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.core.ienum.Dict;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.security.support.UserDetail;
@ -20,6 +19,7 @@ import com.njzscloud.supervisory.biz.pojo.entity.BizTruckEntity;
import com.njzscloud.supervisory.biz.pojo.param.SearchTruckParam;
import com.njzscloud.supervisory.biz.pojo.result.SearchCompanyResult;
import com.njzscloud.supervisory.biz.pojo.result.SearchTruckResult;
import com.njzscloud.supervisory.sys.auth.pojo.result.MyResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -94,10 +94,10 @@ public class BizTruckService extends ServiceImpl<BizTruckMapper, BizTruckEntity>
.eq(StrUtil.isNotBlank(aStatus), "a.audit_status", aStatus)
.like(StrUtil.isNotBlank(companyName), "b.company_name", companyName)
.like(StrUtil.isNotBlank(licensePlate), "a.license_plate", licensePlate);
UserDetail userDetail = SecurityUtil.loginUser();
BizObj parse = Dict.parse(userDetail.getBizObj(), BizObj.values());
if (parse == BizObj.QiYe
|| parse == BizObj.GeTi
MyResult userDetail = SecurityUtil.loginUser();
BizObj bizObj = userDetail.getBizObj();
if (bizObj == BizObj.QiYe
|| bizObj == BizObj.GeTi
) {
ew.eq("b.user_id", userDetail.getUserId());
}

View File

@ -0,0 +1,21 @@
package com.njzscloud.supervisory.expense.contant;
import com.njzscloud.common.core.ienum.DictStr;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* expense_item_category
*
*/
@Getter
@RequiredArgsConstructor
public enum ExpenseItemCategory implements DictStr {
QiTa("QiTa", "其他"),
ChanPin("ChanPin", "产品"),
QingYunFuWuFei("QingYunFuWuFei", "清运服务费"),
YunFei("YunFei", "运费"),
;
private final String val;
private final String txt;
}

View File

@ -0,0 +1,68 @@
package com.njzscloud.supervisory.expense.controller;
import com.njzscloud.common.core.utils.R;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.supervisory.expense.pojo.entity.ExpenseItemsConfigEntity;
import com.njzscloud.supervisory.expense.service.ExpenseItemsConfigService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
*
*/
@Slf4j
@RestController
@RequestMapping("/expense_items_config")
@RequiredArgsConstructor
public class ExpenseItemsConfigController {
private final ExpenseItemsConfigService expenseItemsConfigService;
/**
*
*/
@PostMapping("/add")
public R<?> add(@RequestBody ExpenseItemsConfigEntity expenseItemsConfigEntity) {
expenseItemsConfigService.add(expenseItemsConfigEntity);
return R.success();
}
/**
*
*/
@PostMapping("/modify")
public R<?> modify(@RequestBody ExpenseItemsConfigEntity expenseItemsConfigEntity) {
expenseItemsConfigService.modify(expenseItemsConfigEntity);
return R.success();
}
/**
*
*/
@PostMapping("/del")
public R<?> del(@RequestBody List<Long> ids) {
expenseItemsConfigService.del(ids);
return R.success();
}
/**
*
*/
@GetMapping("/detail")
public R<ExpenseItemsConfigEntity> detail(@RequestParam Long id) {
return R.success(expenseItemsConfigService.detail(id));
}
/**
*
*/
@GetMapping("/paging")
public R<PageResult<ExpenseItemsConfigEntity>> paging(PageParam pageParam, ExpenseItemsConfigEntity expenseItemsConfigEntity) {
return R.success(expenseItemsConfigService.paging(pageParam, expenseItemsConfigEntity));
}
}

View File

@ -0,0 +1,13 @@
package com.njzscloud.supervisory.expense.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njzscloud.supervisory.expense.pojo.entity.ExpenseItemsConfigEntity;
import org.apache.ibatis.annotations.Mapper;
/**
*
*/
@Mapper
public interface ExpenseItemsConfigMapper extends BaseMapper<ExpenseItemsConfigEntity> {
}

View File

@ -0,0 +1,103 @@
package com.njzscloud.supervisory.expense.pojo.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
*
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("expense_items_config")
public class ExpenseItemsConfigEntity {
/**
* Id
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* ; expense_item_category
*/
private String expenseItemCategory;
/**
* ; expense_item_category
*/
private String expenseItemName;
/**
* ;
*/
private BigDecimal unitPrice;
/**
* ; unit
*/
private String unit;
/**
* ; money_strategy
*/
private String moneyStrategy;
/**
* Id
*/
private Long moneyConfigId;
/**
* ; 0-->1-->
*/
private Boolean canuse;
/**
* ; json
*/
private String scope;
/**
*
*/
private BigDecimal taxRate;
/**
* Id; sys_user.id
*/
@TableField(fill = FieldFill.INSERT)
private Long creatorId;
/**
* Id; sys_user.id
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long modifierId;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
*
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime modifyTime;
/**
* ; 0-->1-->
*/
@TableLogic
private Boolean deleted;
}

View File

@ -0,0 +1,59 @@
package com.njzscloud.supervisory.expense.service;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.supervisory.expense.mapper.ExpenseItemsConfigMapper;
import com.njzscloud.supervisory.expense.pojo.entity.ExpenseItemsConfigEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
*/
@Slf4j
@Service
public class ExpenseItemsConfigService extends ServiceImpl<ExpenseItemsConfigMapper, ExpenseItemsConfigEntity> implements IService<ExpenseItemsConfigEntity> {
/**
*
*/
public void add(ExpenseItemsConfigEntity expenseItemsConfigEntity) {
this.save(expenseItemsConfigEntity);
}
/**
*
*/
public void modify(ExpenseItemsConfigEntity expenseItemsConfigEntity) {
this.updateById(expenseItemsConfigEntity);
}
/**
*
*/
@Transactional(rollbackFor = Exception.class)
public void del(List<Long> ids) {
this.removeBatchByIds(ids);
}
/**
*
*/
public ExpenseItemsConfigEntity detail(Long id) {
return this.getById(id);
}
/**
*
*/
public PageResult<ExpenseItemsConfigEntity> paging(PageParam pageParam, ExpenseItemsConfigEntity expenseItemsConfigEntity) {
return PageResult.of(this.page(pageParam.toPage(), Wrappers.<ExpenseItemsConfigEntity>query(expenseItemsConfigEntity)));
}
}

View File

@ -18,7 +18,7 @@ import java.math.BigDecimal;
@Setter
@ToString
@Accessors(chain = true)
@TableName("order_goods")
@TableName(value = "order_goods", autoResultMap = true)
public class OrderGoodsEntity {
/**
@ -72,14 +72,4 @@ public class OrderGoodsEntity {
*/
private BigDecimal taxRate;
/**
*
*/
private Integer quantity;
/**
* ;
*/
private BigDecimal totalMoney;
}

View File

@ -3,7 +3,10 @@ package com.njzscloud.supervisory.order.pojo.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.njzscloud.common.mp.support.handler.j.JsonTypeHandler;
import com.njzscloud.supervisory.biz.constant.AuditStatus;
import com.njzscloud.supervisory.order.contant.*;
import com.njzscloud.supervisory.order.contant.CheckStatus;
import com.njzscloud.supervisory.order.contant.OrderCategory;
import com.njzscloud.supervisory.order.contant.OrderStatus;
import com.njzscloud.supervisory.order.contant.PaymentStatus;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@ -28,18 +31,6 @@ public class OrderInfoEntity {
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
*
*/
private String contacts;
/**
* ; 0-->1-->2-->3-->
*/
private Integer autoOrder;
/**
*
*/
private String phone;
/**
*
@ -50,6 +41,27 @@ public class OrderInfoEntity {
*
*/
private String certificateSn;
/**
* ; 0-->1-->2-->3-->
*/
private Integer autoOrder;
/**
* Id
*/
private Long stationId;
/**
*
*/
private String lane;
/**
* Id
*/
private Long projectId;
/**
* Id
*/
@ -64,33 +76,37 @@ public class OrderInfoEntity {
*
*/
private LocalDateTime transTime;
/**
* Id
*/
private Long stationId;
/**
*
*/
private String lane;
/**
* Id; sys_user.id
*/
private Long userId;
/**
*
*/
private String contacts;
/**
*
*/
private String phone;
/**
* ; audit_status
*/
private AuditStatus auditStatus;
/**
*
*/
private LocalDateTime auditTime;
/**
*
*/
private String auditMemo;
/**
*
*/
private LocalDateTime auditTime;
/**
*
*/
@ -100,15 +116,17 @@ public class OrderInfoEntity {
*
*/
private Long shiAuditUserId;
/**
* Id
* Id;
*/
private Long targetStationId;
/**
* Id
* Id;
*/
private Long targetOrderId;
/**
* ; order_category
*/
@ -160,14 +178,9 @@ public class OrderInfoEntity {
private BigDecimal settleMoney;
/**
* Id
* ;
*/
private Long payer;
/**
* ; payer_category
*/
private PayerCategory payerCategory;
private BigDecimal totalMoney;
/**
* ; payment_status
@ -175,9 +188,9 @@ public class OrderInfoEntity {
private PaymentStatus paymentStatus;
/**
*
*
*/
private LocalDateTime paymentTime;
private LocalDateTime finishTime;
/**
*
@ -200,15 +213,18 @@ public class OrderInfoEntity {
*/
@TableField(typeHandler = JsonTypeHandler.class)
private List<String> checkPhoto;
/**
*
*/
private Long carInOutId;
/**
*
*/
@TableField(typeHandler = JsonTypeHandler.class)
private List<String> sitePhotos;
/**
*
*/
private Long carInOutId;
/**
*
*/
@ -218,6 +234,7 @@ public class OrderInfoEntity {
*
*/
private String estimatedQuantity;
/**
* Id; sys_user.id
*/
@ -248,10 +265,4 @@ public class OrderInfoEntity {
@TableLogic
private Boolean deleted;
/**
* Id
*/
private Long projectId;
}

View File

@ -14,7 +14,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.core.ienum.Dict;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.security.support.UserDetail;
@ -37,6 +36,7 @@ import com.njzscloud.supervisory.order.pojo.param.*;
import com.njzscloud.supervisory.order.pojo.result.OrderCertificateResult;
import com.njzscloud.supervisory.order.pojo.result.OrderPagingResult;
import com.njzscloud.supervisory.order.pojo.result.TrainBillResult;
import com.njzscloud.supervisory.sys.auth.pojo.result.MyResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -174,16 +174,16 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
}
private void dispatchEW(OrderPagingSearchParam orderPagingSearchParam, QueryWrapper<OrderPagingResult> ew) {
UserDetail userDetail = SecurityUtil.loginUser();
MyResult userDetail = SecurityUtil.loginUser();
Long userId = SecurityUtil.currentUserId();
String bizObjStr = userDetail.getBizObj();
if (BizObj.isTrans(bizObjStr)) {
BizObj bizObj = userDetail.getBizObj();
if (BizObj.isTrans(bizObj)) {
ew
.in("a.order_status", OrderStatus.DaiPaiDan, OrderStatus.DaiJieDan)
.eq("g.user_id", userId);
return;
}
if (BizObj.isDriver(bizObjStr)) {
if (BizObj.isDriver(bizObj)) {
ew
.eq("a.order_status", OrderStatus.DaiJieDan)
.eq("f.user_id", userId);
@ -203,11 +203,11 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
}
private void bookingEW(OrderPagingSearchParam orderPagingSearchParam, QueryWrapper<OrderPagingResult> ew) {
UserDetail userDetail = SecurityUtil.loginUser();
MyResult userDetail = SecurityUtil.loginUser();
Long userId = SecurityUtil.currentUserId();
String bizObjStr = userDetail.getBizObj();
BizObj bizObj = userDetail.getBizObj();
if (BizObj.isWaste(bizObjStr)) {
if (BizObj.isWaste(bizObj)) {
ew
.in("a.order_status", OrderStatus.YiYuYue, OrderStatus.DaiPaiDan, OrderStatus.DaiJieDan, OrderStatus.YiJieDan)
.eq("a.user_id", userId)
@ -228,25 +228,25 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
}
private void realtimeEW(OrderPagingSearchParam orderPagingSearchParam, QueryWrapper<OrderPagingResult> ew) {
UserDetail userDetail = SecurityUtil.loginUser();
MyResult userDetail = SecurityUtil.loginUser();
Long userId = SecurityUtil.currentUserId();
String bizObjStr = userDetail.getBizObj();
BizObj bizObj = userDetail.getBizObj();
if (BizObj.isWaste(bizObjStr)) {
if (BizObj.isWaste(bizObj)) {
ew
.in("a.order_status", OrderStatus.QingYunZhong, OrderStatus.YiJinChang, OrderStatus.YiChuChang)
.eq("a.user_id", userId)
;
return;
}
if (BizObj.isTrans(bizObjStr)) {
if (BizObj.isTrans(bizObj)) {
ew
.in("a.order_status", OrderStatus.YiJieDan, OrderStatus.QingYunZhong, OrderStatus.YiJinChang, OrderStatus.YiChuChang)
.eq("g.user_id", userId)
;
return;
}
if (BizObj.isDriver(bizObjStr)) {
if (BizObj.isDriver(bizObj)) {
ew
.eq("f.user_id", userId)
.in("a.order_status", OrderStatus.YiJieDan, OrderStatus.QingYunZhong, OrderStatus.YiJinChang, OrderStatus.YiChuChang)
@ -267,18 +267,18 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
}
private void historyEW(OrderPagingSearchParam orderPagingSearchParam, QueryWrapper<OrderPagingResult> ew) {
UserDetail userDetail = SecurityUtil.loginUser();
MyResult userDetail = SecurityUtil.loginUser();
Long userId = SecurityUtil.currentUserId();
String bizObjStr = userDetail.getBizObj();
BizObj bizObj = userDetail.getBizObj();
if (BizObj.isWaste(bizObjStr)) {
if (BizObj.isWaste(bizObj)) {
ew
.eq("a.order_status", OrderStatus.YiWanCheng)
.eq("a.user_id", userId)
;
return;
}
if (BizObj.isTrans(bizObjStr)) {
if (BizObj.isTrans(bizObj)) {
ew
.eq("a.order_status", OrderStatus.YiWanCheng)
.eq("g.user_id", userId)
@ -286,7 +286,7 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
return;
}
if (BizObj.isDriver(bizObjStr)) {
if (BizObj.isDriver(bizObj)) {
ew
.eq("a.order_status", OrderStatus.YiWanCheng)
.eq("f.user_id", userId)
@ -307,11 +307,11 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
}
private void cancelEW(OrderPagingSearchParam orderPagingSearchParam, QueryWrapper<OrderPagingResult> ew) {
UserDetail userDetail = SecurityUtil.loginUser();
MyResult userDetail = SecurityUtil.loginUser();
Long userId = SecurityUtil.currentUserId();
String bizObjStr = userDetail.getBizObj();
BizObj bizObj = userDetail.getBizObj();
if (BizObj.isWaste(bizObjStr)) {
if (BizObj.isWaste(bizObj)) {
ew
.eq("a.order_status", OrderStatus.YiQuXiao)
.eq("a.user_id", userId)
@ -346,9 +346,9 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
}
private void checkEW(OrderPagingSearchParam orderPagingSearchParam, QueryWrapper<OrderPagingResult> ew) {
UserDetail userDetail = SecurityUtil.loginUser();
String bizObjStr = userDetail.getBizObj();
if (BizObj.isSiBang(bizObjStr)) {
MyResult userDetail = SecurityUtil.loginUser();
BizObj bizObj = userDetail.getBizObj();
if (BizObj.isSiBang(bizObj)) {
CheckStatus checkStatus = orderPagingSearchParam.getCheckStatus();
if (checkStatus == CheckStatus.YiKanLiao) {
ew
@ -679,14 +679,14 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
this.updateById(new OrderInfoEntity()
.setAutoOrder(3 ^ (i << 1))
.setId(orderInfoEntity.getId())
.setOrderStatus(OrderStatus.YiWanCheng)
.setOrderStatus(OrderStatus.YiChuChang)
);
OrderCategory orderCategory = orderInfoEntity.getOrderCategory();
Long truckId = orderInfoEntity.getTruckId();
Integer settleWeight = orderCarInOutService.truckOut(orderInfoEntity.getCarInOutId(), truckLeavingOrderParam, orderCategory, truckId);
orderGoodsService.updateById(new OrderGoodsEntity()
.setId(orderInfoEntity.getGoodsId())
.setQuantity(settleWeight));
// TODO 结算
// settleWeight 重量
// TODO 关闭 GPS
}
@ -727,8 +727,8 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
.eq(checkStatus != null, "a.check_status", checkStatus)
.ge(startTime != null, "a.create_time", startTime)
.le(endTime != null, "a.create_time", endTime);
UserDetail userDetail = SecurityUtil.loginUser();
BizObj bizObj = Dict.parse(userDetail.getBizObj(), BizObj.values());
MyResult userDetail = SecurityUtil.loginUser();
BizObj bizObj = userDetail.getBizObj();
if (bizObj != null) {
if (bizObj.isTrans()) {
ew.eq("a.order_status", OrderStatus.DaiPaiDan)

View File

@ -1,7 +1,7 @@
package com.njzscloud.supervisory.sys.auth.controller;
import com.njzscloud.common.core.utils.R;
import com.njzscloud.supervisory.sys.auth.pojo.result.MyResult;
import com.njzscloud.common.security.support.UserDetail;
import com.njzscloud.supervisory.sys.auth.service.AuthService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -23,7 +23,7 @@ public class AuthController {
*
*/
@GetMapping("/my")
public R<MyResult> my() {
public R<UserDetail> my() {
return R.success(authService.my());
}
}

View File

@ -3,8 +3,8 @@ package com.njzscloud.supervisory.sys.auth.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njzscloud.common.security.support.EndpointResource;
import com.njzscloud.common.security.support.MenuResource;
import com.njzscloud.common.security.support.UserDetail;
import com.njzscloud.supervisory.biz.pojo.result.SearchCompanyResult;
import com.njzscloud.supervisory.sys.auth.pojo.result.MyResult;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -19,7 +19,7 @@ public interface AuthMapper {
Set<String> selectRoleByUserId(@Param("userId") Long userId);
UserDetail selectUser(@Param("ew") QueryWrapper<Object> ew);
MyResult selectUser(@Param("ew") QueryWrapper<Object> ew);
SearchCompanyResult selectCompanyInfo(@Param("userId") Long userId);
}

View File

@ -2,12 +2,11 @@ package com.njzscloud.supervisory.sys.auth.pojo.result;
import com.njzscloud.common.security.support.EndpointResource;
import com.njzscloud.common.security.support.MenuResource;
import com.njzscloud.common.security.support.UserDetail;
import com.njzscloud.supervisory.biz.constant.BizObj;
import com.njzscloud.supervisory.biz.pojo.result.SearchCompanyResult;
import com.njzscloud.supervisory.sys.user.contant.Gender;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.util.List;
@ -16,9 +15,8 @@ import java.util.Set;
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class MyResult {
public class MyResult extends UserDetail {
private List<MenuResource> menus;
private Set<String> roles;
@ -32,22 +30,10 @@ public class MyResult {
* Id
*/
private Long id;
/**
*
*/
private String nickname;
/**
*
*/
private String avatar;
/**
* ; gender
*/
private Gender gender;
/**
*
*/
private String email;
/**
*
*/

View File

@ -2,8 +2,8 @@ package com.njzscloud.supervisory.sys.auth.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.njzscloud.common.security.contant.AuthWay;
import com.njzscloud.common.security.module.password.PasswordLoginForm;
import com.njzscloud.common.security.module.wechat.mini.WechatMiniLoginForm;
import com.njzscloud.common.security.support.*;
@ -12,10 +12,12 @@ import com.njzscloud.supervisory.biz.pojo.result.SearchCompanyResult;
import com.njzscloud.supervisory.sys.auth.mapper.AuthMapper;
import com.njzscloud.supervisory.sys.auth.pojo.result.MyResult;
import com.njzscloud.supervisory.sys.user.pojo.entity.UserEntity;
import com.njzscloud.supervisory.sys.user.pojo.param.UserRegisterParam;
import com.njzscloud.supervisory.sys.user.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Set;
@ -23,50 +25,49 @@ import java.util.Set;
@Slf4j
@Service
@RequiredArgsConstructor
public class AuthService implements IUserService, IResourceService, IRoleService {
public class AuthService implements IUserService, IRoleService {
private final AuthMapper authMapper;
private final UserService userService;
@Override
public UserDetail selectUser(String account, AuthWay authWay) {
switch (authWay) {
case PASSWORD:
return authMapper.selectUser(Wrappers.query().eq("a.username", account).eq("a.deleted", 0));
case PHONE:
return authMapper.selectUser(Wrappers.query().eq("a.phone", account).eq("a.deleted", 0));
case WECHAT_MINI:
return authMapper.selectUser(Wrappers.query().eq("a.wechat_openid", account).eq("a.deleted", 0));
case WECHAT:
default:
return null;
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public UserDetail selectUser(PasswordLoginForm form) {
String account = form.getAccount();
return authMapper.selectUser(Wrappers.query().eq("a.username", account).eq("a.deleted", 0));
JSONObject registerData = form.getRegisterData();
if (registerData != null) {
UserRegisterParam userRegisterParam = registerData.toJavaObject(UserRegisterParam.class);
UserRegisterParam.Account account = userRegisterParam.getAccount();
if (StrUtil.isBlank(userRegisterParam.getPhone())) {
userRegisterParam.setPhone(account.getPhone());
account.setPhone(null);
}
userService.register(userRegisterParam);
}
return authMapper.selectUser(Wrappers.query().eq("a.username", form.getAccount()).eq("a.deleted", 0));
}
@Override
@Transactional(rollbackFor = Exception.class)
public UserDetail selectUser(WechatMiniLoginForm form) {
String openid = form.getOpenid();
String unionid = form.getUnionid();
JSONObject registerData = form.getRegisterData();
if (registerData != null) {
UserRegisterParam userRegisterParam = registerData.toJavaObject(UserRegisterParam.class);
UserRegisterParam.Account account = userRegisterParam.getAccount();
account.setWechatOpenid(openid)
.setWechatUnionid(unionid);
if (StrUtil.isBlank(userRegisterParam.getPhone())) {
userRegisterParam.setPhone(account.getPhone());
}
userService.register(userRegisterParam);
}
return authMapper.selectUser(Wrappers.query().eq("a.wechat_openid", openid)
.eq(StrUtil.isNotBlank(unionid), "a.wechat_unionid", unionid)
.eq("a.deleted", 0));
}
@Override
public Resource selectResourceByUserId(Long userId) {
List<MenuResource> menuResources = authMapper.selectUserMenu(userId);
List<EndpointResource> endpointResource = authMapper.selectUserEndpoint(userId);
return new Resource()
.setMenu(menuResources)
.setEndpoint(endpointResource);
}
@Override
public Set<String> selectRoleByUserId(Long userId) {
return authMapper.selectRoleByUserId(userId);
@ -75,7 +76,7 @@ public class AuthService implements IUserService, IResourceService, IRoleService
/**
*
*/
public MyResult my() {
public UserDetail my() {
Long userId = SecurityUtil.currentUserId();
UserEntity userEntity = userService.getById(userId);
List<MenuResource> menuResources = authMapper.selectUserMenu(userId);

View File

@ -43,7 +43,7 @@ public class TokenService implements ITokenService {
.setTid(tid)
.setTkey(key)
.setTval(token.toString())
.setUserDetail(userDetail.toString())
.setUserDetail(Fastjson.toJsonStr(userDetail))
);
TOKEN_CACHE.put(key, userDetail);
} finally {

View File

@ -7,7 +7,10 @@ import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.security.util.SecurityUtil;
import com.njzscloud.supervisory.sys.user.pojo.entity.UserEntity;
import com.njzscloud.supervisory.sys.user.pojo.param.*;
import com.njzscloud.supervisory.sys.user.pojo.param.AddUserParam;
import com.njzscloud.supervisory.sys.user.pojo.param.ModifyPasswdParam;
import com.njzscloud.supervisory.sys.user.pojo.param.UserModifyParam;
import com.njzscloud.supervisory.sys.user.pojo.param.UserQueryParam;
import com.njzscloud.supervisory.sys.user.pojo.result.UserDetailResult;
import com.njzscloud.supervisory.sys.user.service.UserService;
import lombok.RequiredArgsConstructor;
@ -88,11 +91,11 @@ public class UserController {
*
* @param userRegisterParam
*/
@PostMapping("/register")
/* @PostMapping("/register")
public R<?> register(@RequestBody @Validated UserRegisterParam userRegisterParam) {
String token = userService.register(userRegisterParam);
return R.success(token);
}
} */
/**
*

View File

@ -27,7 +27,10 @@ public class AddUserParam implements Constrained {
*
*/
private String nickname;
/**
*
*/
private String phone;
/**
*
*/

View File

@ -1,10 +1,6 @@
package com.njzscloud.supervisory.sys.user.pojo.param;
import cn.hutool.core.util.StrUtil;
import com.njzscloud.common.mvc.validator.Constrained;
import com.njzscloud.common.mvc.validator.ValidRule;
import com.njzscloud.supervisory.biz.constant.BizObj;
import com.njzscloud.supervisory.sys.user.contant.Gender;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@ -16,7 +12,7 @@ import java.time.LocalDate;
@Setter
@ToString
@Accessors(chain = true)
public class UserRegisterParam implements Constrained {
public class UserRegisterParam {
/**
* ; biz_obj
@ -29,15 +25,9 @@ public class UserRegisterParam implements Constrained {
private String nickname;
/**
*
*
*/
private String avatar;
/**
* ; gender
*/
private Gender gender;
private String phone;
/**
*
*/
@ -48,42 +38,11 @@ public class UserRegisterParam implements Constrained {
*/
private Company company;
@Override
public ValidRule[] rules() {
return new ValidRule[]{
ValidRule.of(() -> StrUtil.isNotBlank(nickname), "用户昵称不能为空"),
ValidRule.of(() -> account != null, "账号信息不能为空"),
ValidRule.of(() -> {
switch (bizObj) {
case GeRen:
return StrUtil.isNotBlank(account.getPhone()) && StrUtil.isNotBlank(account.getCode()) && StrUtil.isNotBlank(account.getCodeId());
case QingYunGongSi:
case WuYe:
return StrUtil.isNotBlank(account.getUsername()) && StrUtil.isNotBlank(account.getSecret());
default:
return false;
}
}, "账号信息错误"),
ValidRule.of(() -> {
switch (bizObj) {
case GeRen:
return true;
case QingYunGongSi:
case WuYe:
return company != null;
default:
return false;
}
}, "公司信息不能为空"),
};
}
@Getter
@Setter
@ToString
@Accessors(chain = true)
public static class Account implements Constrained {
public static class Account {
/**
*
*/
@ -104,6 +63,15 @@ public class UserRegisterParam implements Constrained {
*/
private String secret;
/**
* openid
*/
private String wechatOpenid;
/**
* unionid
*/
private String wechatUnionid;
/**
*
*/
@ -113,18 +81,13 @@ public class UserRegisterParam implements Constrained {
* 使 uid
*/
private String codeId;
@Override
public ValidRule[] rules() {
return new ValidRule[]{};
}
}
@Getter
@Setter
@ToString
@Accessors(chain = true)
public static class Company implements Constrained {
public static class Company {
/**
*
*/
@ -144,6 +107,7 @@ public class UserRegisterParam implements Constrained {
* ; []
*/
private LocalDate licenseStartTime;
private LocalDate licenseEndTime;
/**
@ -215,11 +179,5 @@ public class UserRegisterParam implements Constrained {
*
*/
private String phone;
@Override
public ValidRule[] rules() {
return new ValidRule[]{};
}
}
}

View File

@ -34,17 +34,38 @@ public class UserAccountService extends ServiceImpl<UserAccountMapper, UserAccou
String email = addUserAccountParam.getEmail();
String phone = addUserAccountParam.getPhone();
String wechatOpenid = addUserAccountParam.getWechatOpenid();
// String wechatUnionid = addUserAccountParam.getWechatUnionid();
String wechatUnionid = addUserAccountParam.getWechatUnionid();
Assert.isTrue(StrUtil.isNotBlank(username)
|| StrUtil.isNotBlank(email)
|| StrUtil.isNotBlank(phone)
|| StrUtil.isNotBlank(wechatOpenid), () -> Exceptions.exception("用户名、邮箱、手机号、微信账号不能全部为空"));
List<UserAccountEntity> oldSysUserList = this.list(Wrappers.<UserAccountEntity>lambdaQuery()
.eq(StrUtil.isNotBlank(username), UserAccountEntity::getUsername, username)
// .or().eq(StrUtil.isNotBlank(email), UserAccountEntity::getEmail, email)
// .or().eq(StrUtil.isNotBlank(phone), UserAccountEntity::getPhone, phone)
.or(StrUtil.isNotBlank(wechatOpenid) /* && StrUtil.isNotBlank(wechatUnionid) */, it -> it.eq(UserAccountEntity::getWechatOpenid, wechatOpenid))
.or().eq(StrUtil.isNotBlank(email), UserAccountEntity::getEmail, email)
.or().eq(StrUtil.isNotBlank(phone), UserAccountEntity::getPhone, phone)
.or(StrUtil.isNotBlank(wechatOpenid), it -> it
.eq(UserAccountEntity::getWechatOpenid, wechatOpenid)
.eq(StrUtil.isNotBlank(wechatUnionid), UserAccountEntity::getWechatUnionid, wechatUnionid)
)
);
if (StrUtil.isNotBlank(username)) {
Assert.isTrue(oldSysUserList.stream().noneMatch(it -> username.equals(it.getUsername())), () -> Exceptions.exception("用户名【{}】已被使用", username));
Assert.isTrue(StrUtil.isBlank(email) || oldSysUserList.stream().noneMatch(it -> email.equals(it.getEmail())), () -> Exceptions.exception("邮箱【{}】已被使用", email));
Assert.isTrue(StrUtil.isBlank(phone) || oldSysUserList.stream().noneMatch(it -> phone.equals(it.getPhone())), () -> Exceptions.exception("手机号【{}】已被使用", phone));
Assert.isTrue(StrUtil.isBlank(wechatOpenid) /* || StrUtil.isBlank(wechatUnionid) */ || oldSysUserList.stream().noneMatch(it -> wechatOpenid.equals(it.getWechatOpenid())), () -> Exceptions.exception("该微信账号已被使用"));
}
if (StrUtil.isNotBlank(email)) {
Assert.isTrue(oldSysUserList.stream().noneMatch(it -> email.equals(it.getEmail())), () -> Exceptions.exception("邮箱【{}】已被使用", email));
}
if (StrUtil.isNotBlank(phone)) {
Assert.isTrue(oldSysUserList.stream().noneMatch(it -> phone.equals(it.getPhone())), () -> Exceptions.exception("手机号【{}】已被使用", phone));
}
if (StrUtil.isNotBlank(wechatOpenid)) {
Assert.isTrue(oldSysUserList.stream().noneMatch(it -> {
String unionid = it.getWechatUnionid();
return wechatOpenid.equals(it.getWechatOpenid()) && (StrUtil.isBlank(wechatUnionid) || wechatUnionid.equals(unionid));
}), () -> Exceptions.exception("该微信账号已被使用"));
}
UserAccountEntity userAccountEntity = BeanUtil.copyProperties(addUserAccountParam, UserAccountEntity.class)
.setSecret(EncryptUtil.encrypt(addUserAccountParam.getSecret()))

View File

@ -11,11 +11,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.security.contant.AuthWay;
import com.njzscloud.common.security.util.SecurityUtil;
import com.njzscloud.common.wechat.WechatUtil;
import com.njzscloud.common.wechat.param.Code2SessionParam;
import com.njzscloud.common.wechat.result.Code2SessionResult;
import com.njzscloud.supervisory.biz.constant.BizObj;
import com.njzscloud.supervisory.biz.pojo.param.AddBizCompanyParam;
import com.njzscloud.supervisory.biz.service.BizCompanyService;
@ -53,13 +49,13 @@ public class UserService extends ServiceImpl<UserMapper, UserEntity> implements
*/
@Transactional(rollbackFor = Exception.class)
public Long add(AddUserParam addUserParam) {
String phone = addUserParam.getPhone();
String nickname = addUserParam.getNickname();
Assert.notBlank(phone, () -> Exceptions.clierr("手机号不能为空"));
Assert.notBlank(nickname, () -> Exceptions.clierr("用户姓名不能为空"));
AddUserAccountParam addUserAccountParam = addUserParam.getAccount();
String email = addUserAccountParam.getEmail();
String phone = addUserAccountParam.getPhone();
UserEntity userEntity = BeanUtil.copyProperties(addUserParam, UserEntity.class);
if (StrUtil.isNotBlank(email)) userEntity.setEmail(email);
if (StrUtil.isNotBlank(phone)) userEntity.setPhone(phone);
this.save(userEntity);
Long userEntityId = userEntity.getId();
@ -148,41 +144,46 @@ public class UserService extends ServiceImpl<UserMapper, UserEntity> implements
* @param userRegisterParam
*/
@Transactional(rollbackFor = Exception.class)
public String register(UserRegisterParam userRegisterParam) {
public void register(UserRegisterParam userRegisterParam) {
UserRegisterParam.Account account = userRegisterParam.getAccount();
Assert.notNull(account, () -> Exceptions.clierr("账号信息不能为空"));
BizObj bizObj = userRegisterParam.getBizObj();
if (bizObj == BizObj.GeRen) {
String code = userRegisterParam.getAccount().getCode();
String phone = userRegisterParam.getAccount().getPhone();
Code2SessionResult code2SessionResult = WechatUtil.code2Session(new Code2SessionParam().setJs_code(code));
String openid = code2SessionResult.getOpenid();
Assert.notBlank(openid, () -> Exceptions.error("微信登录失败"));
// String unionid = code2SessionResult.getUnionid();
UserAccountEntity one = userAccountService.getOne(Wrappers.<UserAccountEntity>lambdaQuery()
// .eq(UserAccountEntity::getPhone, phone)
// .eq(UserAccountEntity::getWechatUnionid, unionid)
.eq(UserAccountEntity::getWechatOpenid, openid)
);
if (one != null) {
String phone1 = one.getPhone();
if (phone.equals(phone1)) {
return SecurityUtil.registrationToken(openid, AuthWay.WECHAT_MINI);
Assert.notBlank(account.getPhone(), () -> Exceptions.clierr("手机号不能为空"));
Assert.notBlank(account.getWechatOpenid(), () -> Exceptions.clierr("微信号不能为空"));
} else if (bizObj == BizObj.ShiGongDanWei
|| bizObj == BizObj.WuYe
|| bizObj == BizObj.ChaiQian
|| bizObj == BizObj.SheQu
|| bizObj == BizObj.QiYe
|| bizObj == BizObj.GeTi
) {
Assert.notBlank(account.getUsername(), () -> Exceptions.clierr("用户名不能为空"));
Assert.notBlank(account.getSecret(), () -> Exceptions.clierr("密码不能为空"));
} else {
throw Exceptions.clierr("手机号错误");
throw Exceptions.clierr("业务对象错误");
}
} else {
AddUserParam addUserParam = BeanUtil.copyProperties(userRegisterParam, AddUserParam.class);
addUserParam.setAccount(BeanUtil.copyProperties(userRegisterParam.getAccount(), AddUserAccountParam.class)
.setWechatOpenid(openid)
// .setWechatUnionid(unionid)
);
this.add(addUserParam);
return SecurityUtil.registrationToken(openid, AuthWay.WECHAT_MINI);
String nickname = userRegisterParam.getNickname();
Assert.notBlank(nickname, () -> Exceptions.clierr("用户姓名不能为空"));
if (bizObj.isWastePersonal()) {
String wechatOpenid = account.getWechatOpenid();
String wechatUnionid = account.getWechatUnionid();
UserAccountEntity oldAccount = userAccountService.getOne(Wrappers.<UserAccountEntity>lambdaQuery()
.eq(StrUtil.isNotBlank(wechatUnionid), UserAccountEntity::getWechatUnionid, wechatUnionid)
.eq(UserAccountEntity::getWechatOpenid, wechatOpenid));
if (oldAccount != null) {
String oldUserPhone = oldAccount.getPhone();
Assert.isTrue(oldUserPhone.equals(account.getPhone()), () -> Exceptions.clierr("手机号错误"));
return;
}
}
AddUserParam addUserParam = BeanUtil.copyProperties(userRegisterParam, AddUserParam.class);
addUserParam.setAccount(BeanUtil.copyProperties(userRegisterParam.getAccount(), AddUserAccountParam.class));
addUserParam.setAccount(BeanUtil.copyProperties(account, AddUserAccountParam.class));
Long userId = this.add(addUserParam);
UserRegisterParam.Company company = userRegisterParam.getCompany();
@ -192,7 +193,6 @@ public class UserService extends ServiceImpl<UserMapper, UserEntity> implements
.copyProperties(company, AddBizCompanyParam.class)
.setUserId(userId);
bizCompanyService.add(addBizCompanyParam);
return SecurityUtil.registrationToken(userRegisterParam.getAccount().getUsername(), AuthWay.PASSWORD);
}
/**

View File

@ -2,11 +2,24 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njzscloud.supervisory.sys.auth.mapper.AuthMapper">
<select id="selectUser" resultType="com.njzscloud.common.security.support.UserDetail">
<resultMap id="selectUserMap" autoMapping="true" type="com.njzscloud.supervisory.sys.auth.pojo.result.MyResult">
<result property="accountId" column="account_id"/>
<result property="userId" column="user_id"/>
<result property="secret" column="secret"/>
<result property="nickname" column="nickname"/>
<result property="tenantId" column="tenant_id"/>
<result property="bizObj" column="biz_obj" typeHandler="com.njzscloud.common.mp.support.handler.e.EnumTypeHandlerDealer"/>
<result property="tenantName" column="tenant_name"/>
<result property="disabled" column="disabled"/>
</resultMap>
<select id="selectUser" resultMap="selectUserMap">
SELECT a.id account_id,
a.user_id,
a.user_id id,
a.secret,
b.nickname,
b.avatar,
b.phone,
b.tenant_id,
b.biz_obj,
c.tenant_name,

File diff suppressed because it is too large Load Diff