@@ -33,4 +33,7 @@ public interface RemoteLoginService { | |||
@GetMapping("/login/inner/loginByPhone/{phone}") | |||
R<LoginUser> getLoginInfoInnerByPhone(@PathVariable("phone") String phone, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); | |||
@GetMapping("/login/inner/loginByTenant/{tenantId}") | |||
R<LoginUser> getLoginInfoInnerByTenant(@PathVariable("tenantId") Long tenantId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); | |||
} |
@@ -29,6 +29,11 @@ public class RemoteLoginFallbackFactory implements FallbackFactory<RemoteLoginSe | |||
public R<LoginUser> getLoginInfoInnerByPhone(String phone, String source) { | |||
return R.fail("获取登录信息失败:" + throwable.getMessage()); | |||
} | |||
@Override | |||
public R<LoginUser> getLoginInfoInnerByTenant(Long tenantId, String source) { | |||
return R.fail("获取登录信息失败:" + throwable.getMessage()); | |||
} | |||
}; | |||
} | |||
} |
@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSONObject; | |||
import com.xueyi.common.core.constant.basic.SecurityConstants; | |||
import com.xueyi.common.core.constant.basic.ServiceConstants; | |||
import com.xueyi.common.core.web.result.R; | |||
import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto; | |||
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff; | |||
import com.xueyi.tenant.api.tenant.domain.po.TeTenantPo; | |||
@@ -41,6 +42,12 @@ public interface RemoteTenantService { | |||
@GetMapping("/tenant/one") | |||
R<TeTenantPo> tenant(@RequestParam ("phone") String phone, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); | |||
@GetMapping("/tenant/query-tenant-by-id") | |||
R<TeTenantPo> selectById(@RequestParam ("tenantId") Long tenantId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); | |||
@GetMapping("/tenant/query-tenant-source") | |||
DeviceTenantSourceMergeVo selectTenantSourceMerge(@RequestParam ("deviceId") String deviceId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); | |||
@GetMapping("/tenant/query-tenant-by-staff-phone") | |||
R<TeTenantPo> queryTenantByStaffPhone(@RequestParam ("phone") String phone, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); | |||
@@ -2,6 +2,7 @@ package com.xueyi.tenant.api.tenant.feign.factory; | |||
import com.alibaba.fastjson2.JSONObject; | |||
import com.xueyi.common.core.web.result.R; | |||
import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto; | |||
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff; | |||
import com.xueyi.tenant.api.tenant.domain.po.TeTenantPo; | |||
@@ -43,6 +44,16 @@ public class RemoteTenantFallbackFactory implements FallbackFactory<RemoteTenant | |||
return R.fail("获取租户失败:" + throwable.getMessage()); | |||
} | |||
@Override | |||
public R<TeTenantPo> selectById(Long tenantId, String source) { | |||
return R.fail("获取租户失败:" + throwable.getMessage()); | |||
} | |||
@Override | |||
public DeviceTenantSourceMergeVo selectTenantSourceMerge(String deviceId, String source) { | |||
return null; | |||
} | |||
@Override | |||
public R<TeTenantPo> queryTenantByStaffPhone(String phone, String source) { | |||
return null; | |||
@@ -1,5 +1,6 @@ | |||
package com.xueyi.auth.controller; | |||
import com.alibaba.csp.sentinel.util.StringUtil; | |||
import com.alibaba.fastjson2.JSONObject; | |||
import com.baomidou.mybatisplus.core.toolkit.StringUtils; | |||
import com.xueyi.auth.form.LoginBody; | |||
@@ -13,6 +14,7 @@ import com.xueyi.common.core.utils.core.ObjectUtil; | |||
import com.xueyi.common.core.utils.core.StrUtil; | |||
import com.xueyi.common.core.web.result.AjaxResult; | |||
import com.xueyi.common.core.web.result.R; | |||
import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
import com.xueyi.common.redis.service.RedisService; | |||
import com.xueyi.common.security.auth.AuthUtil; | |||
import com.xueyi.common.security.service.TokenService; | |||
@@ -99,6 +101,29 @@ public class TokenController { | |||
return AjaxResult.success(map); | |||
} | |||
@PostMapping("deviceLogin") | |||
public AjaxResult loginByDevice(@RequestBody Map<String, String> params) { | |||
String deviceId = params.get("deviceId"); | |||
if (StringUtil.isNotBlank(deviceId)) { | |||
DeviceTenantSourceMergeVo vo = tenantService.selectTenantSourceMerge(deviceId, SecurityConstants.INNER);// 查询设备与租户、来源的关联关系 | |||
if (null == vo || null == vo.getTenantId()) { | |||
return AjaxResult.error("设备不正确,清查验"); | |||
} | |||
LoginUser userInfo = sysLoginService.loginByTenant(vo.getTenantId()); | |||
if (null == userInfo) { | |||
return AjaxResult.error("手机号不正确,清查验"); | |||
} | |||
// 获取登录token | |||
Map<String, Object> map = tokenService.createToken(userInfo); | |||
map.put("deviceId", deviceId);//塞入对应staffId | |||
return AjaxResult.success(map); | |||
} | |||
return AjaxResult.error("设备号不正确,清查验"); | |||
} | |||
@DeleteMapping("logout") | |||
public AjaxResult logout(HttpServletRequest request) { | |||
String token = SecurityUtils.getToken(request); | |||
@@ -170,16 +170,28 @@ public class SysLoginService { | |||
remoteLogService.saveLoginInfo(loginInfo, enterpriseId, sourceName, SecurityConstants.INNER); | |||
} | |||
public LoginUser loginByPhone(String phone) { | |||
logger.info("phone:{}", phone); | |||
R<LoginUser> loginInfoResult = remoteLoginService.getLoginInfoInnerByPhone(phone, SecurityConstants.INNER); | |||
if (ObjectUtil.isNull(loginInfoResult.getData())) { | |||
AjaxResult.warn("手机号可能输错,请查证后重试!"); | |||
} | |||
return loginInfoResult.getData(); | |||
} | |||
public LoginUser loginByTenant(Long tenantId) { | |||
logger.info("tenantId:{}", tenantId); | |||
R<LoginUser> loginInfoResult = remoteLoginService.getLoginInfoInnerByTenant(tenantId, SecurityConstants.INNER); | |||
if (ObjectUtil.isNull(loginInfoResult.getData())) { | |||
AjaxResult.warn("租户号错误,请查证后重试!"); | |||
} | |||
return loginInfoResult.getData(); | |||
} | |||
} |
@@ -21,10 +21,10 @@ public class WebApiMvcConfig implements WebMvcConfigurer { | |||
@Override | |||
public void addInterceptors(InterceptorRegistry registry) { | |||
System.err.println("WebMvcConfig.addInterceptors======================hshshkbb"); | |||
System.err.println("===graphql======================addInterceptors==="); | |||
registry.addInterceptor(getApiInterceptor()) | |||
.addPathPatterns("/**/graphql/**") | |||
.addPathPatterns("/**/api/**") | |||
// .addPathPatterns("/**") | |||
.excludePathPatterns(excludeUrls) | |||
.order(1); | |||
@@ -1,6 +1,6 @@ | |||
package com.xueyi.common.web.entity.domain.provider; | |||
import org.apache.ibatis.annotations.Param; | |||
import java.util.Map; | |||
/** | |||
* @author yk | |||
@@ -8,7 +8,8 @@ import org.apache.ibatis.annotations.Param; | |||
* @date 2023-11-25 11:15 | |||
*/ | |||
public class DeviceTenantSqlProvider { | |||
public String selectDeviceTenant(@Param("deviceId") String deviceId) { | |||
return "SELECT ddtm.dev_id, ddtm.tenant_id, s.source_slave FROM dm_device_tenant_merge ddtm JOIN te_tenant t ON t.id=ddtm.tenant_id JOIN te_strategy s ON s.id=t.strategy_id AND dev_id= #{deviceId}"; | |||
public String selectDeviceTenant(Map<String, Object> param) { | |||
String deviceId = (String) param.get("deviceId"); | |||
return "SELECT ddtm.dev_id, ddtm.tenant_id, s.source_slave FROM dm_device_tenant_merge ddtm JOIN te_tenant t ON t.id=ddtm.tenant_id JOIN te_strategy s ON s.id=t.strategy_id AND dev_id= '"+deviceId+"'"; | |||
} | |||
} |
@@ -103,18 +103,8 @@ public class SysLoginController extends BasisController { | |||
@Autowired | |||
RemoteTenantService tenantService; | |||
/** | |||
* 获取登录信息 | 内部调用, 手机号登录 | |||
*/ | |||
@InnerAuth | |||
@GetMapping("/inner/loginByPhone/{phone}") | |||
public R<LoginUser> getLoginInfoByMobile(@PathVariable("phone") String phone) { | |||
log.info("获取登录信息 | 内部调用, 手机号登录 | phone: {}", phone); | |||
R<TeTenantPo> po = tenantService.tenant(phone, SecurityConstants.INNER); | |||
log.info("获取登录信息 | 内部调用, 手机号登录 | po:{}, {}, {}", po.getMsg(),po.getCode(),po.isFail()); | |||
if (po.getData() == null) | |||
return R.fail("指定手机号不存在记录"); | |||
SysEnterpriseDto enterprise = loginService.loginByEnterpriseName(po.getData().getName()); | |||
public R<LoginUser> getLoginInfo(String enterpriseName) { | |||
SysEnterpriseDto enterprise = loginService.loginByEnterpriseName(enterpriseName); | |||
// 不存在直接返回空数据 | 与网络调用错误区分 | |||
if (ObjectUtil.isNull(enterprise)) | |||
return R.ok(null, "企业账号不存在"); | |||
@@ -133,7 +123,7 @@ public class SysLoginController extends BasisController { | |||
loginUser.setIsLessor(enterprise.getIsLessor()); | |||
loginUser.setSource(source); | |||
loginUser.setSourceName(source.getMaster()); | |||
SysUserDto user = loginService.loginByStaff(phone); | |||
SysUserDto user = loginService.loginByTenantId(enterprise.getId()); | |||
if (ObjectUtil.isNull(user)) | |||
return R.ok(null, "用户账号不存在"); | |||
@@ -165,4 +155,28 @@ public class SysLoginController extends BasisController { | |||
loginUser.setRouteURL(routeMap); | |||
return R.ok(loginUser); | |||
} | |||
/** | |||
* 获取登录信息 | 内部调用, 手机号登录 | |||
*/ | |||
@InnerAuth | |||
@GetMapping("/inner/loginByPhone/{phone}") | |||
public R<LoginUser> getLoginInfoByMobile(@PathVariable("phone") String phone) { | |||
log.info("获取登录信息 | 内部调用, 手机号登录 | phone: {}", phone); | |||
R<TeTenantPo> po = tenantService.tenant(phone, SecurityConstants.INNER); | |||
log.info("获取登录信息 | 内部调用, 手机号登录 | po:{}, {}, {}", po.getMsg(),po.getCode(),po.isFail()); | |||
if (po.getData() == null) | |||
return R.fail("指定手机号不存在记录"); | |||
return this.getLoginInfo(po.getData().getName()); | |||
} | |||
@GetMapping("/inner/loginByTenant/{tenantId}") | |||
public R<LoginUser> getLoginInfoByTenant(@PathVariable("tenantId") Long tenantId) { | |||
R<TeTenantPo> po = tenantService.selectById(tenantId, SecurityConstants.INNER); | |||
log.info("获取登录信息 | 内部调用, 租户号登录 | po:{}, {}, {}", po.getMsg(),po.getCode(),po.isFail()); | |||
if (po.getData() == null) | |||
return R.fail("指定租户号不存在记录"); | |||
return this.getLoginInfo(po.getData().getName()); | |||
} | |||
} |
@@ -70,4 +70,6 @@ public interface ISysLoginService { | |||
Map<String, String> getMenuRouteMap(Set<Long> roleIds, String userType); | |||
SysUserDto loginByStaff(String phone); | |||
SysUserDto loginByTenantId(Long tenantId); | |||
} |
@@ -247,8 +247,13 @@ public class SysLoginServiceImpl implements ISysLoginService { | |||
if (po == null) { | |||
return null; | |||
} | |||
SqlField field = new SqlField(SqlConstants.OperateType.EQ, "tenant_id", po.getTenantId()); | |||
SysUserDto dto = sysUserConverter.mapperDto(userMapper.selectByField(field)) ; | |||
return dto; | |||
return loginByTenantId(po.getTenantId()); | |||
} | |||
@Override | |||
public SysUserDto loginByTenantId(Long tenantId) { | |||
SqlField field = new SqlField(SqlConstants.OperateType.EQ, "tenant_id", tenantId); | |||
return sysUserConverter.mapperDto(userMapper.selectByField(field)) ; | |||
} | |||
} |
@@ -146,7 +146,8 @@ public class DmRecognizedRecordsInnerApiController extends MyBaseApiController { | |||
String deviceId = recognizedMultiRecordsDto.getDevId(); | |||
BigDecimal timestamp = recognizedMultiRecordsDto.getTimestamp(); | |||
String sign = recognizedMultiRecordsDto.getSign(); | |||
logger.info("recognizedMultiRecordsDto :{}",recognizedMultiRecordsDto); | |||
//去掉recognizedMultiRecordsDto输出日志 | |||
// logger.info("recognizedMultiRecordsDto :{}",recognizedMultiRecordsDto); | |||
MyResponse myResponse = commonCheck(deviceId, timestamp.doubleValue(), sign); | |||
if (myResponse.getStatus() != 0) { | |||
@@ -1,6 +1,7 @@ | |||
package com.xueyi.tenant.tenant.controller; | |||
import cn.hutool.core.text.CharSequenceUtil; | |||
import com.alibaba.fastjson2.JSON; | |||
import com.xueyi.common.core.constant.basic.BaseConstants; | |||
import com.xueyi.common.core.constant.system.OrganizeConstants; | |||
import com.xueyi.common.core.utils.core.CollUtil; | |||
@@ -9,6 +10,7 @@ import com.xueyi.common.core.web.result.AjaxResult; | |||
import com.xueyi.common.core.web.result.R; | |||
import com.xueyi.common.core.web.validate.V_A; | |||
import com.xueyi.common.core.web.validate.V_E; | |||
import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
import com.xueyi.common.log.annotation.Log; | |||
import com.xueyi.common.log.enums.BusinessType; | |||
import com.xueyi.common.security.annotation.InnerAuth; | |||
@@ -17,6 +19,7 @@ import com.xueyi.common.security.annotation.RequiresPermissions; | |||
import com.xueyi.common.security.auth.Auth; | |||
import com.xueyi.common.web.annotation.TenantIgnore; | |||
import com.xueyi.common.web.entity.controller.BaseController; | |||
import com.xueyi.common.web.entity.domain.mapper.DeviceTenantMergeMapper; | |||
import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto; | |||
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff; | |||
import com.xueyi.tenant.api.tenant.domain.po.TeTenantPo; | |||
@@ -83,11 +86,30 @@ public class TeTenantController extends BaseController<TeTenantQuery, TeTenantDt | |||
@InnerAuth | |||
@GetMapping("/one") | |||
R<TeTenantPo> tenant(@RequestParam("phone") String phone) { | |||
log.info("tenant one方法,手机号查询SysEnterpriseStaff:{}", phone); | |||
log.info("tenant one方法,tenant phone:{}", phone); | |||
TeTenantPo po = enterpriseStaffMapper.selectTenantByPhone(phone); | |||
log.info("tenant one方法,手机号查询SysEnterpriseStaff:{}", JSON.toJSONString(po)); | |||
return R.ok(po); | |||
} | |||
@InnerAuth | |||
@GetMapping("/query-tenant-by-id") | |||
R<TeTenantPo> selectById(@RequestParam ("tenantId") Long tenantId) { | |||
log.info("selectById方法,查询TeTenantPo:{}", tenantId); | |||
TeTenantPo po = super.baseService.selectById(tenantId); | |||
return R.ok(po); | |||
} | |||
@Autowired | |||
private DeviceTenantMergeMapper mergeMapper; | |||
@InnerAuth | |||
@GetMapping("/query-tenant-source") | |||
DeviceTenantSourceMergeVo selectTenantSourceMerge(@RequestParam ("deviceId") String deviceId) { | |||
log.info("selectTenantSourceMerge方法,deviceId:{}", deviceId); | |||
return mergeMapper.selectByDeviceId(deviceId); | |||
} | |||
@InnerAuth | |||
@GetMapping("/query-tenant-by-staff-phone") | |||
R<TeTenantPo> queryTenantByStaffPhone(@RequestParam("phone") String phone) { | |||