Commit 0e651e38 authored by danfuman's avatar danfuman

Merge branch 'V20230915' of http://192.168.60.201/root/dsk-operate-sys into V20230915

parents 0dbd8f7e 5dd4842d
......@@ -12,8 +12,11 @@ import cn.hutool.core.util.ReUtil;
import com.dsk.common.constant.Constants;
import com.dsk.common.constant.GlobalConstants;
import com.dsk.common.core.domain.R;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.tenant.helper.TenantHelper;
import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.redis.RedisUtils;
import com.dsk.jsk.util.IpUtil;
import com.dsk.system.domain.SysMenu;
import com.dsk.system.domain.SysUser;
import com.dsk.common.core.domain.model.EmailLoginBody;
......@@ -64,23 +67,18 @@ public class SysLoginController {
@SaIgnore
@PostMapping("/login")
public R<LoginVo> login(@Validated @RequestBody LoginBody loginBody, HttpServletRequest request) {
// Map<String, Object> ajax = new HashMap<>();
// 生成令牌
// LoginVo loginVo = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
// loginBody.getUuid());
// ajax.put(Constants.TOKEN, token);
// return R.ok(ajax);
LoginVo loginVo=loginService.passwordLogin(loginBody);
String ipAddr = IpUtil.getIpAddr(request);
LoginVo loginVo = loginService.passwordLogin(loginBody, ipAddr);
return R.ok(loginVo);
}
// /**
// * 发送短信验证码
// *
......@@ -107,20 +105,18 @@ public class SysLoginController {
@PostMapping("/smsLogin")
public R<LoginVo> smsLogin(@Validated @RequestBody SmsLoginBody smsLoginBody) {
// 生成令牌
LoginVo loginVo=loginService.smsLogin(smsLoginBody.getPhonenumber(), smsLoginBody.getSmsCode());
LoginVo loginVo = loginService.smsLogin(smsLoginBody.getPhonenumber(), smsLoginBody.getSmsCode());
return R.ok(loginVo);
}
/**
* 动态切换租户
*
*/
@SaCheckLogin
@PostMapping("/switch/tenant")
public R<LoginVo> switchTenant(String tenantId) {
LoginVo loginVo=loginService.switchTenant(tenantId);
LoginVo loginVo = loginService.switchTenant(tenantId);
return R.ok(loginVo);
}
......@@ -134,7 +130,7 @@ public class SysLoginController {
@PostMapping("/user/tenants")
public R<List<SysTenantVo>> userTenants() {
LoginUser loginUser = LoginHelper.getLoginUser();
List<SysTenantVo> tenantList=loginService.tenantListByAccount(loginUser.getUserPhone());
List<SysTenantVo> tenantList = loginService.tenantListByAccount(loginUser.getUserPhone());
return R.ok(tenantList);
}
......@@ -146,12 +142,12 @@ public class SysLoginController {
*/
@SaIgnore
@PostMapping("/user/tenant/list")
public R<List<SysTenantVo>> userTenantList (String phone) {
if(!ReUtil.isMatch(RegexPool.MOBILE, phone)) {
public R<List<SysTenantVo>> userTenantList(String phone) {
if (!ReUtil.isMatch(RegexPool.MOBILE, phone)) {
return R.ok(new ArrayList<>());
}
List<SysTenantVo> tenantList=loginService.tenantListByAccount(phone);
if(CollectionUtil.isNotEmpty(tenantList)){
List<SysTenantVo> tenantList = loginService.tenantListByAccount(phone);
if (CollectionUtil.isNotEmpty(tenantList)) {
for (SysTenantVo sysTenantVo : tenantList) {
sysTenantVo.setCompanyName("");
}
......@@ -161,21 +157,23 @@ public class SysLoginController {
/**
* 获取当前用户默认租户
*
* @return
*/
@SaCheckLogin
@PostMapping("/user/default/tenant")
public R<Map> userDefaultTenant() {
LoginUser loginUser = LoginHelper.getLoginUser();
Assert.notNull(loginUser,"用户信息不存在!");
Assert.notNull(loginUser, "用户信息不存在!");
String defaultTenantKey = GlobalConstants.PHONE_DEFAULT_TENANT + loginUser.getUserPhone();
String defaultTenant = RedisUtils.getCacheObject(defaultTenantKey);
return R.ok(MapUtil.of("tenantId",defaultTenant));
return R.ok(MapUtil.of("tenantId", defaultTenant));
}
/**
* 获取当前用户默认租户
*
* @return
*/
@SaIgnore
......@@ -185,7 +183,7 @@ public class SysLoginController {
// Assert.notNull(loginUser,"用户信息不存在!");
String defaultTenantKey = GlobalConstants.PHONE_DEFAULT_TENANT + phone;
String defaultTenant = RedisUtils.getCacheObject(defaultTenantKey);
return R.ok(MapUtil.of("tenantId",defaultTenant));
return R.ok(MapUtil.of("tenantId", defaultTenant));
}
/**
......@@ -235,8 +233,13 @@ public class SysLoginController {
* @return 用户信息
*/
@GetMapping("getInfo")
public R<Map<String, Object>> getInfo() {
public R<Map<String, Object>> getInfo(HttpServletRequest request) {
LoginUser loginUser = LoginHelper.getLoginUser();
//校验当前发请求的IP与登录账号的IP是否相同
String loginUserIpaddr = loginUser.getIpaddr();
if (StringUtils.isNotBlank(loginUserIpaddr) && !Objects.equals(IpUtil.getIpAddr(request), loginUserIpaddr)) {
throw new ServiceException("该账号已在其他地方登录,请求失败!", 401);
}
SysUser user = userService.selectUserById(loginUser.getUserId());
Map<String, Object> ajax = new HashMap<>();
ajax.put("user", user);
......
......@@ -49,9 +49,9 @@ spring:
driverClassName: com.mysql.cj.jdbc.Driver
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
url: jdbc:mysql://47.104.91.229:3306/dsk_operate?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: dev
password: zfTFIJjaN#6xB83r
url: jdbc:mysql://120.46.64.239:3306/dsk_operate?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: dskdev
password: encPHwi8dbKeL8ZX
# 从库数据源
# slave:
# lazy: true
......@@ -101,7 +101,7 @@ spring:
--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
spring:
redis:
host: 139.9.157.49
host: 120.46.64.239
# 端口,默认为6379
port: 6379
# 数据库索引
......
......@@ -108,7 +108,7 @@ spring:
# 端口,默认为6379
port: 6379
# 数据库索引
database: 6
database: 13
# 密码
password: Xi8$r*@d7zn5FaP2
# 密码(如没有密码请注释掉)
......
......@@ -105,7 +105,7 @@ spring:
# 端口,默认为6379
port: 6379
# 数据库索引
database: 10
database: 13
# 密码
password: zfTFIJjaN#6xB83r
# 密码(如没有密码请注释掉)
......
......@@ -30,7 +30,7 @@ public class LoginBody {
* 用户密码
*/
@NotBlank(message = "{user.password.not.blank}")
@Length(min = UserConstants.PASSWORD_MIN_LENGTH, max = UserConstants.PASSWORD_MAX_LENGTH, message = "{user.password.length.valid}")
//@Length(min = UserConstants.PASSWORD_MIN_LENGTH, max = UserConstants.PASSWORD_MAX_LENGTH, message = "{user.password.length.valid}")
private String password;
/**
......
package com.dsk.common.core.domain.model;
import com.dsk.common.constant.UserConstants;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
* 用户注册对象
......@@ -11,7 +15,16 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class RegisterBody extends LoginBody {
/**
* 用户密码
*/
@NotBlank(message = "{user.password.not.blank}")
@Length(min = UserConstants.PASSWORD_MIN_LENGTH, max = UserConstants.PASSWORD_MAX_LENGTH, message = "{user.password.length.valid}")
private String password;
/**
* 用户类型
*/
private String userType;
}
......@@ -116,7 +116,8 @@ public class FileUploadUtils
// String fileName = extractFilename(file);
// String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath();
String absPath = getAbsoluteFile(baseDir, file.getOriginalFilename()).getAbsolutePath();
String fileName = new String(file.getOriginalFilename().getBytes("ISO-8859-1"), "UTF-8");
String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath();
file.transferTo(Paths.get(absPath));
// return getPathFileName(baseDir, fileName);
return baseDir+file.getOriginalFilename();
......
......@@ -78,7 +78,7 @@ public class BusinessFileController extends BaseController {
public AjaxResult uploadFolder(@RequestPart("file") MultipartFile file, HttpServletRequest request) {
try {
//获取文件名
String filename = file.getOriginalFilename();
String filename = new String(file.getOriginalFilename().getBytes("ISO-8859-1"),"UTF-8");
String businessFileName = request.getHeader("FilePath");
// 上传文件路径
String filePath = FileUploadUtils.getDefaultBaseDir() + businessFileName + "/";
......
......@@ -78,6 +78,7 @@ public class RegionalEconomicDataController {
@PostMapping(value = "location")
public AjaxResult location(@RequestBody OpRegionalLocalDto vo, HttpServletRequest request){
String ip = IpUtil.getIpAddr(request);
log.info("location=====================================================>" +ip);
vo.setIp(ip);
return economicService.location(vo);
}
......
......@@ -27,6 +27,10 @@ public class JskCombineSearchDto implements Serializable {
* 筛选参数
*/
private String searchValue;
/**
* 筛选参数
*/
private String keys;
/**
* 集团层级
*/
......@@ -59,6 +63,10 @@ public class JskCombineSearchDto implements Serializable {
* 科技型企业类型
*/
private List<String> companyTypes;
/**
* 招标采购分类
*/
private List<String> subjectMatters;
/**
* 企业类型
*/
......
......@@ -158,7 +158,9 @@ public class ExportService {
Map<String, Object> dataMap = CommonUtils.assertAsMap(obj);
vo.setId(i++);
vo.setCompanyName(MapUtil.getStr(dataMap, "companyName"));
if (null!=pageDto.getKeys()){
vo.setCompanyName(MapUtil.getStr(dataMap, "companyName"));
}
StringBuilder domicile = new StringBuilder();
if (null != dataMap.get("province")) {
domicile.append(MapUtil.getStr(dataMap,"province"));
......
......@@ -41,162 +41,165 @@ import java.util.Map;
@RequiredArgsConstructor
@RequestMapping("/api/goview/project")
public class GoViewProjectAPIController extends BaseController {
private final GoviewProjectDataMapper projectDataMapper;
private final GoviewProjectMapper projectMapper;
private final GoviewProperties goviewProperties;
@GetMapping("/list")
public ResultTable list(Tablepar tablepar, GoviewProject goviewProject) {
Page page = new Page(tablepar.getPage(), tablepar.getLimit());
Page result = projectMapper.selectPage(page, Wrappers.query(goviewProject));
ResultTable resultTable = pageTable(result.getRecords(), result.getTotal());
resultTable.setCode(200);
return resultTable;
}
/**
* 新增保存
* @param
* @return
*/
@PostMapping("/create")
public AjaxResult add(@RequestBody GoviewProject goviewProject) {
projectMapper.insert(goviewProject);
return AjaxResult.successData(200, goviewProject).put("msg", "创建成功");
}
/**
* 项目表删除
* @param ids
* @return
*/
@DeleteMapping("/delete")
public AjaxResult delete(String ids) {
projectMapper.deleteById(ids);
return success();
}
@PostMapping("/edit")
public AjaxResult editSave(@RequestBody GoviewProject goviewProject) {
projectMapper.updateById(goviewProject);
return success();
}
@PostMapping("/rename")
public AjaxResult rename(@RequestBody GoviewProject goviewProject) {
projectMapper.updateById(goviewProject);
return success();
}
// 发布/取消项目状态
@PutMapping("/publish")
@ResponseBody
public AjaxResult updateVisible(@RequestBody GoviewProject goviewProject) {
projectMapper.updateById(goviewProject);
return success();
}
/**
* 获取项目存储数据
* @param id 项目id
* @param mmap
* @return
*/
@GetMapping("/getData")
public AjaxResult getData(String projectId, ModelMap map) {
InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
GoviewProject goviewProject = projectMapper.selectById(projectId);
if (goviewProject == null) {
return AjaxResult.successData(200, null).put("msg", "无数据");
}
List<GoviewProjectData> goviewProjectDataList = projectDataMapper
.selectList(Wrappers.<GoviewProjectData>lambdaQuery().eq(GoviewProjectData::getProjectId, projectId));
if (CollUtil.isNotEmpty(goviewProjectDataList)) {
goviewProject.setContent(goviewProjectDataList.get(0).getContent());
return AjaxResult.successData(200, goviewProject).put("msg", "获取成功");
}
return AjaxResult.successData(200, null).put("msg", "无数据");
}
@PostMapping("/save/data")
public AjaxResult saveData(GoviewProjectData data) {
boolean exists = projectDataMapper
.exists(Wrappers.<GoviewProjectData>lambdaQuery().eq(GoviewProjectData::getProjectId, data.getProjectId()));
if (exists) {
projectDataMapper.update(data,
Wrappers.<GoviewProjectData>lambdaQuery().eq(GoviewProjectData::getProjectId, data.getProjectId()));
}
else {
projectDataMapper.insert(data);
}
return AjaxResult.success("操作成功");
}
/**
* 模拟请求
* @return
*/
@PostMapping("/magicHttp")
public AjaxResult magicHttp(@RequestBody MagicHttp magicHttp) {
return AjaxResult.successNullData("参数异常为null");
}
/**
* 上传文件
* @param file 文件流对象
* @return
* @throws Exception
*/
@PostMapping("/upload")
@ResponseBody
public AjaxResult upload(@RequestBody MultipartFile object) throws IOException {
File dest = new File(goviewProperties.getImgPath() + object.getOriginalFilename());
object.transferTo(dest);
Map<String, String> map = new HashMap(4);
String url;
if (StrUtil.isNotBlank(goviewProperties.getHost())) {
url = goviewProperties.getHost() + goviewProperties.getGatewayPrefix() + "/api/project/get-file/"
+ object.getOriginalFilename();
}
else {
url = goviewProperties.getGatewayPrefix() + "/api/project/get-file/" + object.getOriginalFilename();
}
map.put("link", url);
return AjaxResult.successData(200, map);
}
/**
* 文件获取
* @param fileName 文件名
*/
@GetMapping("/get-file/{fileName}")
public ResponseEntity<byte[]> getFile(@PathVariable String fileName) {
HttpHeaders headers = new HttpHeaders();
// 通知浏览器以下载文件方式打开
ContentDisposition contentDisposition = ContentDisposition.builder("attachment").filename(fileName).build();
headers.setContentDisposition(contentDisposition);
try {
return new ResponseEntity<>(
FileCopyUtils.copyToByteArray(new File(goviewProperties.getImgPath() + fileName)), headers,
HttpStatus.OK);
}
catch (IOException e) {
log.warn(e.getLocalizedMessage());
}
return null;
}
private final GoviewProjectDataMapper projectDataMapper;
private final GoviewProjectMapper projectMapper;
private final GoviewProperties goviewProperties;
@GetMapping("/list")
public ResultTable list(Tablepar tablepar, GoviewProject goviewProject) {
Page page = new Page(tablepar.getPage(), tablepar.getLimit());
Page result = projectMapper.selectPage(page, Wrappers.query(goviewProject));
ResultTable resultTable = pageTable(result.getRecords(), result.getTotal());
resultTable.setCode(200);
return resultTable;
}
/**
* 新增保存
*
* @param
* @return
*/
@PostMapping("/create")
public AjaxResult add(@RequestBody GoviewProject goviewProject) {
projectMapper.insert(goviewProject);
return AjaxResult.successData(200, goviewProject).put("msg", "创建成功");
}
/**
* 项目表删除
*
* @param ids
* @return
*/
@DeleteMapping("/delete")
public AjaxResult delete(String ids) {
projectMapper.deleteById(ids);
return success();
}
@PostMapping("/edit")
public AjaxResult editSave(@RequestBody GoviewProject goviewProject) {
projectMapper.updateById(goviewProject);
return success();
}
@PostMapping("/rename")
public AjaxResult rename(@RequestBody GoviewProject goviewProject) {
projectMapper.updateById(goviewProject);
return success();
}
// 发布/取消项目状态
@PutMapping("/publish")
@ResponseBody
public AjaxResult updateVisible(@RequestBody GoviewProject goviewProject) {
projectMapper.updateById(goviewProject);
return success();
}
/**
* 获取项目存储数据
*
* @param id 项目id
* @param mmap
* @return
*/
@GetMapping("/getData")
public AjaxResult getData(String projectId, ModelMap map) {
InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
GoviewProject goviewProject = projectMapper.selectById(projectId);
if (goviewProject == null) {
return AjaxResult.successData(200, null).put("msg", "无数据");
}
List<GoviewProjectData> goviewProjectDataList = projectDataMapper
.selectList(Wrappers.<GoviewProjectData>lambdaQuery().eq(GoviewProjectData::getProjectId, projectId));
if (CollUtil.isNotEmpty(goviewProjectDataList)) {
goviewProject.setContent(goviewProjectDataList.get(0).getContent());
return AjaxResult.successData(200, goviewProject).put("msg", "获取成功");
}
return AjaxResult.successData(200, null).put("msg", "无数据");
}
@PostMapping("/save/data")
public AjaxResult saveData(@RequestBody GoviewProjectData data) {
boolean exists = projectDataMapper
.exists(Wrappers.<GoviewProjectData>lambdaQuery().eq(GoviewProjectData::getProjectId, data.getProjectId()));
if (exists) {
projectDataMapper.update(data,
Wrappers.<GoviewProjectData>lambdaQuery().eq(GoviewProjectData::getProjectId, data.getProjectId()));
}
else {
projectDataMapper.insert(data);
}
return AjaxResult.success("操作成功");
}
/**
* 模拟请求
*
* @return
*/
@PostMapping("/magicHttp")
public AjaxResult magicHttp(@RequestBody MagicHttp magicHttp) {
return AjaxResult.successNullData("参数异常为null");
}
/**
* 上传文件
*
* @param file 文件流对象
* @return
* @throws Exception
*/
@PostMapping("/upload")
@ResponseBody
public AjaxResult upload(@RequestBody MultipartFile object) throws IOException {
File dest = new File(goviewProperties.getImgPath() + object.getOriginalFilename());
object.transferTo(dest);
Map<String, String> map = new HashMap(4);
String url;
if (StrUtil.isNotBlank(goviewProperties.getHost())) {
url = goviewProperties.getHost() + goviewProperties.getGatewayPrefix() + "/api/project/get-file/"
+ object.getOriginalFilename();
} else {
url = goviewProperties.getGatewayPrefix() + "/api/project/get-file/" + object.getOriginalFilename();
}
map.put("link", url);
return AjaxResult.successData(200, map);
}
/**
* 文件获取
*
* @param fileName 文件名
*/
@GetMapping("/get-file/{fileName}")
public ResponseEntity<byte[]> getFile(@PathVariable String fileName) {
HttpHeaders headers = new HttpHeaders();
// 通知浏览器以下载文件方式打开
ContentDisposition contentDisposition = ContentDisposition.builder("attachment").filename(fileName).build();
headers.setContentDisposition(contentDisposition);
try {
return new ResponseEntity<>(
FileCopyUtils.copyToByteArray(new File(goviewProperties.getImgPath() + fileName)), headers,
HttpStatus.OK);
} catch (IOException e) {
log.warn(e.getLocalizedMessage());
}
return null;
}
}
......@@ -13,4 +13,7 @@ VUE_CLI_BABEL_TRANSPILE_MODULES = true
# 子系统地址
# VUE_APP_SUB_SYSTEM_ADDRESS = "https://pre-plug.jiansheku.com"
VUE_APP_SUB_SYSTEM_ADDRESS = "http://192.168.60.104:3400"
\ No newline at end of file
VUE_APP_SUB_SYSTEM_ADDRESS = "http://192.168.60.104:3400"
# Bi大屏系统地址
VUE_APP_BI_SYSTEM_ADDRESS = "https://192.168.60.104:8001"
\ No newline at end of file
......@@ -9,3 +9,6 @@ VUE_APP_BASE_API = 'https://szhapi.jiansheku.com'
# 子系统地址
VUE_APP_SUB_SYSTEM_ADDRESS = "https://plug.jiansheku.com"
# Bi大屏系统地址
VUE_APP_BI_SYSTEM_ADDRESS = "https://192.168.60.104:8001"
......@@ -12,4 +12,7 @@ ENV = 'test'
VUE_APP_BASE_API = '/prod-api'
# 子系统地址
VUE_APP_SUB_SYSTEM_ADDRESS = "https://pre-plug.jiansheku.com"
\ No newline at end of file
VUE_APP_SUB_SYSTEM_ADDRESS = "https://pre-plug.jiansheku.com"
# Bi大屏系统地址
VUE_APP_BI_SYSTEM_ADDRESS = "https://192.168.60.104:8001"
\ No newline at end of file
import request from '@/utils/request'
import request from '@/utils/request';
// 查询参数列表
export function listConfig(query) {
......@@ -6,7 +6,7 @@ export function listConfig(query) {
url: '/system/config/list',
method: 'get',
params: query
})
});
}
// 查询参数详细
......@@ -14,7 +14,7 @@ export function getConfig(configId) {
return request({
url: '/system/config/' + configId,
method: 'get'
})
});
}
// 根据参数键名查询参数值
......@@ -22,7 +22,7 @@ export function getConfigKey(configKey) {
return request({
url: '/system/config/configKey/' + configKey,
method: 'get'
})
});
}
// 新增参数配置
......@@ -31,7 +31,7 @@ export function addConfig(data) {
url: '/system/config',
method: 'post',
data: data
})
});
}
// 修改参数配置
......@@ -40,9 +40,23 @@ export function updateConfig(data) {
url: '/system/config',
method: 'put',
data: data
})
});
}
// 新增租户参数配置
export const addTenantConfig = (data) => request({
url: "/system/config/tenant/add",
method: "post",
data
});
// 修改租户参数配置
export const updateTenantConfig = (data) => request({
url: "/system/config/tenant/add",
method: "put",
data
});
// 修改参数配置
export function updateConfigByKey(key, value) {
return request({
......@@ -52,7 +66,7 @@ export function updateConfigByKey(key, value) {
configKey: key,
configValue: value
}
})
});
}
// 删除参数配置
......@@ -60,7 +74,7 @@ export function delConfig(configId) {
return request({
url: '/system/config/' + configId,
method: 'delete'
})
});
}
// 刷新参数缓存
......@@ -68,6 +82,6 @@ export function refreshCache() {
return request({
url: '/system/config/refreshCache',
method: 'delete'
})
});
}
import Cookies from 'js-cookie'
import Cookies from 'js-cookie';
const TokenKey = 'Admin-Token'
const Tenantid = 'Tenantid'
const TokenKey = 'Admin-Token';
const Tenantid = 'Tenantid';
export function getToken() {
return Cookies.get(TokenKey)
return Cookies.get(TokenKey);
}
export function getTenantid() {
return Cookies.get(Tenantid)
return Cookies.get(Tenantid);
}
export function setToken(token) {
return Cookies.set(TokenKey, token)
return Cookies.set(TokenKey, token);
}
export function setTenantid(id) {
return Cookies.set(Tenantid, id)
return Cookies.set(Tenantid, id);
}
export function removeToken() {
return Cookies.remove(TokenKey)
return Cookies.remove(TokenKey);
}
export function removeTenantid() {
return Cookies.remove(Tenantid)
return Cookies.remove(Tenantid);
}
export function setBiAuth(token) {
if (!token) return false;
sessionStorage.setItem("DSK_SYSTEM_AUTH_TOKEN", token);
return true;
}
<script>
import { getToken } from "@/utils/auth";
export default {
name: "bi",
data() {
return {
};
},
//可访问data属性
created() {
},
//计算集
computed: {
},
//方法集
methods: {
async closeOuterTab() {
await this.$nextTick();
this.$tab.closePage();
}
},
render(h) {
const token = getToken();
if (!token) {
this.$message.warning("获取auth令牌失败");
this.closeOuterTab();
return;
}
window.open(`${process.env.VUE_APP_BI_SYSTEM_ADDRESS}?DSK_SYSTEM_AUTH_TOKEN=${token}`, "DSK_BI_SYSTEM");
this.closeOuterTab();
},
}
</script>
<style lang="scss" scoped>
</style>
<template>
<div>
<div class="details-of-cooperation">
<template v-if="!isDetailId">
<div class="cooperate">
......@@ -62,8 +62,8 @@
<div class="addhzqk_from">
<el-form :model="addParam" :rules="rules" ref="addParam" size="small" label-width="70px">
<el-form-item label="项目名称:" prop="projectName" label-width="120px">
<el-input v-model="addParam.projectName" placeholder="请输入项目名称" @input="getCompany1"></el-input>
<div class="resultlist" v-if="showlist1">
<el-input v-model="addParam.projectName" placeholder="请输入项目名称" @input="resetProjectSearch();getCompany1()"></el-input>
<div class="resultlist" v-infinite-scroll="load" v-if="showlist1">
<div v-for="(item,index) in companData1" @click="selCompany1(item.projectName)"><span v-html="item.projectName"></span></div>
</div>
</el-form-item>
......@@ -219,6 +219,9 @@ export default {
//
detailId: null,
isDetailId: false,
projectpage : 1,
isscroll : false,
threshold : false,
}
},
watch:{
......@@ -253,6 +256,12 @@ export default {
},
methods: {
load(){
if(this.threshold) return;
if(this.isscroll){
this.getCompany1()
}
},
handleQuery(params) {
this.list(params)
},
......@@ -309,18 +318,33 @@ export default {
}
});
},
resetProjectSearch() {
this.companData1 = []
this.projectpage = 1
console.log(this.companData1);
},
//获取项目名称
getCompany1(value){
if (value.length>=2){
getCompany1(){
if (this.addParam?.projectName?.length>=2){
this.threshold = true;
let param = {
projectName:value,
projectName:this.addParam?.projectName,
pageSize:20,
pageNum:this.projectpage
}
queryProject(JSON.stringify(param)).then(result=>{
if(result.code != 200)
return
this.showlist1 = true
this.companData1 = result.data
})
if(result.code != 200){
return false
}
if(result.data && result.data?.length) {
this.showlist1 = true;
this.isscroll = true
this.companData1 = [...this.companData,...result.data]
this.projectpage ++;
return;
}
this.isscroll = false;
}).finally(() => this.threshold = false)
}
},
selCompany1(item){
......@@ -632,9 +656,16 @@ export default {
}
::v-deep .cooperate-detail{
width: 100%;
height: 100%;
.miantitle, .app-container{
//margin: 12px 0;
}
}
.details-of-cooperation {
width: 100%;
height: 100%;
}
</style>
......@@ -7,7 +7,7 @@
:partBoxHeight="partBoxHeight" :customerId="customerId" :isCompany="isCompany" :isCustomer="isCustomer" />
</div>
<div class="part-right">
<div id="partBox" v-if="companyId">
<div id="partBox" v-if="companyId" class="part-common-container-style">
<template v-if="isCompany">
<!-- 企业概览 -->
<Overview v-if="currentPath.pathName=='overview'" :company-id="companyId" :isSkeleton="isSkeleton" :companyInfo="companyInfo" />
......@@ -433,5 +433,10 @@ export default {
overflow: auto;
}
}
.part-common-container-style {
width: 100%;
height: 100%;
}
}
</style>
......@@ -476,7 +476,7 @@
import CustomTimeSelect from './component/CustomTimeSelect'
import CustomMoneySelect from './component/CustomMoneySelect'
import skeleton from './component/skeleton'
import { countByCompany,bidRank,bigWinningBidsPage,bigBidPage,getInfo } from '@/api/index'
import { countByCompany,bidRank,bigWinningBidsPage,bigBidPage } from '@/api/index'
import { getUipIdByCid } from '@/api/macro/macro'
import api from '@/api/radar/radar.js';
import { v4 } from "uuid";
......@@ -716,6 +716,11 @@ export default {
inputID11:this.getUid(),
};
},
watch : {
user(newValue) {
this.getPlaceholder();
}
},
created() {
this.getPlaceholder();
this.searchDic()
......@@ -736,11 +741,8 @@ export default {
}).catch(error=>{});
},
getInfo(){
getInfo().then(res=>{
console.log(res)
this.permissions=res.data.permissions;
this.nickName=res.data.user.nickName
}).catch(error=>{});
this.permissions= this.$store.state.user.permissions;
this.nickName= this.$store.state.user.name
},
getCountByCompany(){
let params={};
......
......@@ -2,44 +2,19 @@
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="参数名称" prop="configName">
<el-input
v-model="queryParams.configName"
placeholder="请输入参数名称"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
<el-input v-model="queryParams.configName" placeholder="请输入参数名称" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="参数键名" prop="configKey">
<el-input
v-model="queryParams.configKey"
placeholder="请输入参数键名"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
<el-input v-model="queryParams.configKey" placeholder="请输入参数键名" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="系统内置" prop="configType">
<el-select v-model="queryParams.configType" placeholder="系统内置" clearable>
<el-option
v-for="dict in dict.type.sys_yes_no"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<el-option v-for="dict in dict.type.sys_yes_no" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker>
<el-date-picker v-model="dateRange" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange" range-separator="-"
start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']"></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
......@@ -49,56 +24,26 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:config:add']"
>新增</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['system:config:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:config:edit']"
>修改</el-button>
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['system:config:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:config:remove']"
>删除</el-button>
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['system:config:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:config:export']"
>导出</el-button>
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['system:config:export']">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-refresh"
size="mini"
@click="handleRefreshCache"
v-hasPermi="['system:config:remove']"
>刷新缓存</el-button>
<el-button type="danger" plain icon="el-icon-refresh" size="mini" @click="handleRefreshCache"
v-hasPermi="['system:config:remove']">刷新缓存</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddTenantParameters"
v-hasPermi="['system:config:tenant:add']">新增租户参数</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
......@@ -111,7 +56,7 @@
<el-table-column label="参数键值" align="center" prop="configValue" :show-overflow-tooltip="true" />
<el-table-column label="系统内置" align="center" prop="configType">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_yes_no" :value="scope.row.configType"/>
<dict-tag :options="dict.type.sys_yes_no" :value="scope.row.configType" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
......@@ -122,31 +67,14 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:config:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:config:remove']"
>删除</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:config:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:config:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
......@@ -162,11 +90,7 @@
</el-form-item>
<el-form-item label="系统内置" prop="configType">
<el-radio-group v-model="form.configType">
<el-radio
v-for="dict in dict.type.sys_yes_no"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
<el-radio v-for="dict in dict.type.sys_yes_no" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
......@@ -178,15 +102,51 @@
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<!-- 添加或修改租户参数配置对话框 -->
<el-dialog :title="addTenantTitle" :visible.sync="addTenantDialog" width="500px" append-to-body>
<el-form ref="addTenantForm" :model="addTenantForm" :rules="rules" label-width="80px">
<el-form-item label="参数名称" prop="configName">
<el-input v-model="addTenantForm.configName" placeholder="请输入参数名称" />
</el-form-item>
<el-form-item label="参数键名" prop="configKey">
<el-input v-model="addTenantForm.configKey" placeholder="请输入参数键名" />
</el-form-item>
<el-form-item label="参数键值" prop="configValue">
<el-input v-model="addTenantForm.configValue" placeholder="请输入参数键值" />
</el-form-item>
<el-form-item label="系统内置" prop="configType">
<el-radio-group v-model="addTenantForm.configType">
<el-radio v-for="dict in dict.type.sys_yes_no" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="addTenantForm.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitTenantForm">确 定</el-button>
<el-button @click="cancelTenantDialog">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listConfig, getConfig, delConfig, addConfig, updateConfig, refreshCache } from "@/api/system/config";
import {
listConfig,
getConfig,
delConfig,
addConfig,
updateConfig,
refreshCache,
addTenantConfig,
updateTenantConfig,
} from "@/api/system/config";
export default {
name: "Config",
dicts: ['sys_yes_no'],
dicts: ["sys_yes_no"],
data() {
return {
// 遮罩层
......@@ -215,22 +175,35 @@ export default {
pageSize: 10,
configName: undefined,
configKey: undefined,
configType: undefined
configType: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
configName: [
{ required: true, message: "参数名称不能为空", trigger: "blur" }
{ required: true, message: "参数名称不能为空", trigger: "blur" },
],
configKey: [
{ required: true, message: "参数键名不能为空", trigger: "blur" }
{ required: true, message: "参数键名不能为空", trigger: "blur" },
],
configValue: [
{ required: true, message: "参数键值不能为空", trigger: "blur" }
]
}
{ required: true, message: "参数键值不能为空", trigger: "blur" },
],
},
// 新增租户参数表单
addTenantForm: {
configId: "",
configName: "",
configKey: "",
configValue: "",
configType: "Y",
remark: "",
},
// 新增租户参数弹窗
addTenantDialog: false,
// 新增租户参数弹窗标题
addTenantTitle: "",
};
},
created() {
......@@ -240,7 +213,8 @@ export default {
/** 查询参数列表 */
getList() {
this.loading = true;
listConfig(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
listConfig(this.addDateRange(this.queryParams, this.dateRange)).then(
(response) => {
this.configList = response.rows;
this.total = response.total;
this.loading = false;
......@@ -260,7 +234,7 @@ export default {
configKey: undefined,
configValue: undefined,
configType: "Y",
remark: undefined
remark: undefined,
};
this.resetForm("form");
},
......@@ -281,34 +255,44 @@ export default {
this.open = true;
this.title = "添加参数";
},
// 重置租户参数表单
resetTenantParameters() {
this.addTenantForm = this.$options.data.call(this).addTenantForm;
},
// 新增租户参数
handleAddTenantParameters() {
this.resetTenantParameters();
this.addTenantDialog = true;
this.addTenantTitle = "添加租户参数";
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.configId)
this.single = selection.length!=1
this.multiple = !selection.length
this.ids = selection.map((item) => item.configId);
this.single = selection.length != 1;
this.multiple = !selection.length;
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const configId = row.configId || this.ids
getConfig(configId).then(response => {
const configId = row.configId || this.ids;
getConfig(configId).then((response) => {
this.form = response.data;
this.open = true;
this.title = "修改参数";
});
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
submitForm: function () {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.configId != undefined) {
updateConfig(this.form).then(response => {
updateConfig(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addConfig(this.form).then(response => {
addConfig(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
......@@ -317,28 +301,65 @@ export default {
}
});
},
// 提交租户参数表单
submitTenantForm() {
this.$refs["addTenantForm"].validate((valid) => {
if (valid) {
if (this.addTenantForm.configId) {
updateTenantConfig(this.addTenantForm).then((res) => {
if (res.code == 200) {
this.$modal.msgSuccess("修改成功");
this.addTenantDialog = false;
this.getList();
}
});
} else {
addTenantConfig(this.addTenantForm).then((res) => {
if (res.code == 200) {
this.$modal.msgSuccess("新增成功");
this.addTenantDialog = false;
this.getList();
}
});
}
}
});
},
// 取消提交租户表单
cancelTenantDialog() {
this.addTenantDialog = false;
this.resetTenantParameters();
},
/** 删除按钮操作 */
handleDelete(row) {
const configIds = row.configId || this.ids;
this.$modal.confirm('是否确认删除参数编号为"' + configIds + '"的数据项?').then(function() {
this.$modal
.confirm('是否确认删除参数编号为"' + configIds + '"的数据项?')
.then(function () {
return delConfig(configIds);
}).then(() => {
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
})
.catch(() => { });
},
/** 导出按钮操作 */
handleExport() {
this.download('system/config/export', {
...this.queryParams
}, `config_${new Date().getTime()}.xlsx`)
this.download(
"system/config/export",
{
...this.queryParams,
},
`config_${new Date().getTime()}.xlsx`
);
},
/** 刷新缓存按钮操作 */
handleRefreshCache() {
refreshCache().then(() => {
this.$modal.msgSuccess("刷新成功");
});
}
}
},
},
};
</script>
......@@ -226,8 +226,8 @@
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="用户称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户称" maxlength="30" />
<el-form-item label="用户称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户称" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -373,7 +373,7 @@
</el-table-column>
<el-table-column
prop="nickName"
label="用户称">
label="用户称">
</el-table-column>
<el-table-column
prop="phonenumber"
......@@ -477,7 +477,7 @@ export default {
columns: [
{ key: 0, label: `用户编号`, visible: true },
{ key: 1, label: `用户名称`, visible: true },
{ key: 2, label: `用户称`, visible: true },
{ key: 2, label: `用户称`, visible: true },
{ key: 3, label: `组织`, visible: true },
{ key: 4, label: `手机号码`, visible: true },
{ key: 5, label: `状态`, visible: true },
......@@ -486,7 +486,7 @@ export default {
// 表单校验
rules: {
nickName: [
{ required: true, message: "用户称不能为空", trigger: "blur" }
{ required: true, message: "用户称不能为空", trigger: "blur" }
],
deptId: [
{ required: true, message: "组织不能为空", trigger: "blur" }
......
......@@ -83,9 +83,10 @@ public class SysLoginService {
* 登录验证
*
* @param loginBody 唯一标识
* @param ipAddr IP地址
* @return 结果
*/
public LoginVo passwordLogin(LoginBody loginBody) {
public LoginVo passwordLogin(LoginBody loginBody, String ipAddr) {
String tenantId = loginBody.getTenantId();
String username = loginBody.getUsername();
String password = SaBase64Util.decode(loginBody.getPassword());
......@@ -96,12 +97,12 @@ public class SysLoginService {
validateCaptcha(username, code, uuid);
}
if(ReUtil.isMatch(RegexPool.MOBILE, username)) {
String defaultTenantId = RedisUtils.getCacheObject(GlobalConstants.PHONE_DEFAULT_TENANT + username);
log.info("登录用户:{} 获取缓存默认租户:"+tenantId, username);
if(StrUtil.isEmpty(tenantId)&&StrUtil.isNotBlank(defaultTenantId)){
defaultTenantId= checkDefaultTenant(defaultTenantId,username);
tenantId=defaultTenantId;
if (ReUtil.isMatch(RegexPool.MOBILE, username)) {
String defaultTenantId = RedisUtils.getCacheObject(GlobalConstants.PHONE_DEFAULT_TENANT + username);
log.info("登录用户:{} 获取缓存默认租户:" + tenantId, username);
if (StrUtil.isEmpty(tenantId) && StrUtil.isNotBlank(defaultTenantId)) {
defaultTenantId = checkDefaultTenant(defaultTenantId, username);
tenantId = defaultTenantId;
}
}
......@@ -119,7 +120,7 @@ public class SysLoginService {
throw new UserException("user.not.exists", username);
}
tenantId = sysUser.getTenantId();
}else {
} else {
SysUser sysUser = sysUsers.get(0);
tenantId = sysUser.getTenantId();
}
......@@ -143,6 +144,7 @@ public class SysLoginService {
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
LoginUser loginUser = buildLoginUser(user);
// 生成token
loginUser.setIpaddr(ipAddr);
LoginHelper.loginByDevice(loginUser, DeviceType.PC);
recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
......@@ -189,13 +191,13 @@ public class SysLoginService {
}
public LoginVo smsLogin(String username, String smsCode) {
String tenantId=null;
if(ReUtil.isMatch(RegexPool.MOBILE, username)) {
String defaultTenantId = RedisUtils.getCacheObject(GlobalConstants.PHONE_DEFAULT_TENANT + username);
log.info("登录用户:{} 获取缓存默认租户:"+tenantId, username);
if(StrUtil.isNotBlank(defaultTenantId)){
defaultTenantId= checkDefaultTenant(defaultTenantId,username);
tenantId=defaultTenantId;
String tenantId = null;
if (ReUtil.isMatch(RegexPool.MOBILE, username)) {
String defaultTenantId = RedisUtils.getCacheObject(GlobalConstants.PHONE_DEFAULT_TENANT + username);
log.info("登录用户:{} 获取缓存默认租户:" + tenantId, username);
if (StrUtil.isNotBlank(defaultTenantId)) {
defaultTenantId = checkDefaultTenant(defaultTenantId, username);
tenantId = defaultTenantId;
}
}
......@@ -213,7 +215,7 @@ public class SysLoginService {
throw new UserException("user.not.exists", username);
}
tenantId = sysUser.getTenantId();
}else {
} else {
SysUser sysUser = sysUsers.get(0);
tenantId = sysUser.getTenantId();
}
......@@ -370,9 +372,9 @@ public class SysLoginService {
private SysUser loadUserByUsername(String username) {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserName, SysUser::getStatus)
.eq(SysUser::getUserName, username)
.or().eq(SysUser::getPhonenumber, username));
.select(SysUser::getUserName, SysUser::getStatus)
.eq(SysUser::getUserName, username)
.or().eq(SysUser::getPhonenumber, username));
if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", username);
throw new UserException("user.not.exists", username);
......@@ -385,8 +387,8 @@ public class SysLoginService {
private SysUser loadUserByPhonenumber(String phonenumber) {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getPhonenumber, SysUser::getStatus)
.eq(SysUser::getPhonenumber, phonenumber));
.select(SysUser::getPhonenumber, SysUser::getStatus)
.eq(SysUser::getPhonenumber, phonenumber));
if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", phonenumber);
throw new UserException("user.not.exists", phonenumber);
......@@ -399,8 +401,8 @@ public class SysLoginService {
private SysUser loadUserByEmail(String email) {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getPhonenumber, SysUser::getStatus)
.eq(SysUser::getEmail, email));
.select(SysUser::getPhonenumber, SysUser::getStatus)
.eq(SysUser::getEmail, email));
if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", email);
throw new UserException("user.not.exists", email);
......@@ -509,14 +511,14 @@ public class SysLoginService {
log.info("登录企业:{} 已被停用.", tenant.getCompanyName());
throw new TenantException("company.blocked");
} else if (ObjectUtil.isNotNull(tenant.getExpireTime())
&& new Date().after(tenant.getExpireTime())) {
&& new Date().after(tenant.getExpireTime())) {
log.info("登录企业:{} 已超过有效期.", tenant.getCompanyName());
throw new TenantException("company.expired");
}
}
public String checkDefaultTenant(String tenantId,String phoneNumber) {
public String checkDefaultTenant(String tenantId, String phoneNumber) {
if (!TenantHelper.isEnable()) {
return null;
}
......@@ -557,16 +559,16 @@ public class SysLoginService {
if (ReUtil.isMatch(RegexPool.MOBILE, username)) {
LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserName, SysUser::getStatus, SysUser::getTenantId,SysUser::getDelFlag)
.eq(SysUser::getPhonenumber, username)
.orderByDesc(SysUser::getUserId);
.select(SysUser::getUserName, SysUser::getStatus, SysUser::getTenantId, SysUser::getDelFlag)
.eq(SysUser::getPhonenumber, username)
.orderByDesc(SysUser::getUserId);
// sysUsers = userMapper.selectUserByTenantPhone(username);
sysUsers = userMapper.selectList(lqw);
} else {
LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserName, SysUser::getStatus, SysUser::getTenantId)
.eq(SysUser::getUserName, username)
.orderByDesc(SysUser::getUserId);
.select(SysUser::getUserName, SysUser::getStatus, SysUser::getTenantId)
.eq(SysUser::getUserName, username)
.orderByDesc(SysUser::getUserId);
// sysUsers = userMapper.selectUserByTenantUsername(username);
sysUsers = userMapper.selectList(lqw);
}
......@@ -582,10 +584,10 @@ public class SysLoginService {
Assert.notNull(userId, "企业切换失败!");
// 如果 切换租户和当前登录租户一致,仅保存默认租户
LoginUser loginUserVo = LoginHelper.getLoginUser();
if(tenantId.equals(loginUserVo.getTenantId())){
if (tenantId.equals(loginUserVo.getTenantId())) {
//保存当前账号的默认租户
String defaultTenantKey = GlobalConstants.PHONE_DEFAULT_TENANT + loginUserVo.getUserPhone();
RedisUtils.setCacheObject(defaultTenantKey,tenantId, Duration.ofDays(90));
RedisUtils.setCacheObject(defaultTenantKey, tenantId, Duration.ofDays(90));
LoginVo loginVo = new LoginVo();
loginVo.setTenantId(TenantHelper.getTenantId());
loginVo.setAccessToken(StpUtil.getTokenValue());
......@@ -618,10 +620,10 @@ public class SysLoginService {
LoginHelper.loginByDevice(loginUser, DeviceType.PC);
log.info("当前租户由"+sysUser.getTenantId()+"切换为"+tenantId);
log.info("当前租户由" + sysUser.getTenantId() + "切换为" + tenantId);
//保存当前账号的默认租户
String defaultTenantKey = GlobalConstants.PHONE_DEFAULT_TENANT + loginUser.getUserPhone();
RedisUtils.setCacheObject(defaultTenantKey,tenantId, Duration.ofDays(90));
RedisUtils.setCacheObject(defaultTenantKey, tenantId, Duration.ofDays(90));
recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
recordLoginInfo(user.getUserId(), username);
......
......@@ -21,6 +21,7 @@ import com.dsk.common.core.service.UserService;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.helper.DataBaseHelper;
import com.dsk.common.helper.LoginHelper;
import com.dsk.common.tenant.helper.TenantHelper;
import com.dsk.common.utils.PasswordUtils;
import com.dsk.common.utils.StreamUtils;
import com.dsk.common.utils.StringUtils;
......@@ -465,7 +466,6 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
SysRole adminRole = roleMapper.selectOne(new LambdaQueryWrapper<SysRole>()
.select(SysRole::getRoleId)
.eq(SysRole::getStatus, UserConstants.USER_NORMAL)
.eq(SysRole::getDelFlag, UserConstants.USER_NORMAL)
.eq(SysRole::getRoleKey, TenantConstants.TENANT_SUPER_ADMIN_ROLE_KEY));
//如果目前企业管理员角色下仅有1个账号
List<Long> userIds = userRoleMapper.selectUserIdsByRoleId(adminRole.getRoleId());
......@@ -650,8 +650,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
for (Long userId : userIds) {
checkUserAllowed(new SysUser(userId));
checkUserDataScope(userId);
//校验企业管理员角色下是否至少有一个账号
checkAdminHasUsers(baseMapper.selectUserById(userId));
if (LoginHelper.isTenantAdmin()) {
checkAdminHasUsers(baseMapper.selectUserById(userId));
}
}
List<Long> ids = Arrays.asList(userIds);
......
......@@ -11,6 +11,7 @@ import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.tenant.helper.TenantHelper;
import com.dsk.system.domain.SysConfig;
import com.dsk.system.mapper.SysConfigMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
......@@ -19,6 +20,7 @@ import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Slf4j
@Component
public class DskOpenApiUtil {
......@@ -72,6 +74,7 @@ public class DskOpenApiUtil {
try {
if (ObjectUtils.isEmpty(config)) initApiConfig();
AccClient.init(config);
log.error(">>>>>>config:"+JSONUtil.toJsonStr(config));
Map<String, ?> res = AccClient.request(reqBodyType, path, bodyMap);
if (!res.containsKey("headers") || !res.containsKey("body")) {
throw new RuntimeException(String.format("请求无返回:path=%s", path));
......@@ -127,6 +130,7 @@ public class DskOpenApiUtil {
SysConfig accessKeyId = sysConfigMapper.selectOne(Wrappers.<SysConfig>lambdaQuery().eq(SysConfig::getTenantId, TenantConstants.DEFAULT_TENANT_ID).eq(SysConfig::getConfigKey, "dsk-Appkey"));
SysConfig accessKeySecret = sysConfigMapper.selectOne(Wrappers.<SysConfig>lambdaQuery().eq(SysConfig::getTenantId, TenantConstants.DEFAULT_TENANT_ID).eq(SysConfig::getConfigKey, "dsk-AppSecret"));
SysConfig endPoint = sysConfigMapper.selectOne(Wrappers.<SysConfig>lambdaQuery().eq(SysConfig::getTenantId, TenantConstants.DEFAULT_TENANT_ID).eq(SysConfig::getConfigKey, "dsk-Domain"));
log.error(">>>>>>config:"+JSONUtil.toJsonStr(config));
config = new Config(accessKeyId.getConfigValue(), accessKeySecret.getConfigValue())
.setEndpoint(endPoint.getConfigValue());
});
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment