Commit f5788527 authored by tanyang's avatar tanyang

Merge remote-tracking branch 'origin/zuhuduan' into zuhuduan

parents 6dbeaec5 da003db4
......@@ -41,7 +41,8 @@ public class SysDeptController extends BaseController {
List<SysDept> depts = deptService.selectDeptList(dept);
List<SysDeptVo> deptVos = BeanUtil.copyToList(depts, SysDeptVo.class);
deptVos.forEach(sysDeptVo -> {
sysDeptVo.setExistUsers(deptService.hasChildByDeptId(sysDeptVo.getDeptId()));
//查询该部门及其子部门是否存在用户
sysDeptVo.setExistUsers(deptService.checkAllDeptsAndUsers(sysDeptVo.getDeptId()));
});
return R.ok(deptVos);
}
......@@ -56,7 +57,7 @@ public class SysDeptController extends BaseController {
public R<List<SysDept>> excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) {
List<SysDept> depts = deptService.selectDeptList(new SysDept());
depts.removeIf(d -> d.getDeptId().equals(deptId)
|| StringUtils.splitList(d.getAncestors()).contains(Convert.toStr(deptId)));
|| StringUtils.splitList(d.getAncestors()).contains(Convert.toStr(deptId)));
return R.ok(depts);
}
......@@ -99,7 +100,7 @@ public class SysDeptController extends BaseController {
} else if (dept.getParentId().equals(deptId)) {
return R.fail("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
} else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())
&& deptService.selectNormalChildrenDeptById(deptId) > 0) {
&& deptService.selectNormalChildrenDeptById(deptId) > 0) {
return R.fail("该部门包含未停用的子部门!");
}
return toAjax(deptService.updateDept(dept));
......
package com.dsk.common.constant;
/**
* 租户套餐常量信息
*
* @author Lion Li
*/
public interface TenantPackageConstants {
/**
* 租户套餐正常状态
*/
String NORMAL = "0";
/**
* 租户套餐停用状态
*/
String DISABLE = "1";
}
package com.dsk.common.tenant.helper;
import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.spring.SpringMVCUtil;
import cn.hutool.core.convert.Convert;
import com.alibaba.ttl.TransmittableThreadLocal;
......@@ -9,10 +8,7 @@ import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper;
import com.dsk.common.constant.GlobalConstants;
import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.redis.RedisUtils;
import com.dsk.common.utils.spring.SpringUtils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
......
<template>
<div id="tags-view-container" class="tags-view-container">
<div class="alltags" v-if="visitedViews.length > 0">
<div class="" @click="closeall"><i class="el-icon-arrow-down" v-if="!showall"></i> <i class="el-icon-arrow-up" v-if="showall"></i></div>
<div class="imgs" @click="closeall">
<img src="@/assets/images/all.png" v-if="!showall"/>
<img src="@/assets/images/all_on.png" v-if="showall"/>
<!--<i class="el-icon-arrow-down" v-if="!showall"></i> <i class="el-icon-arrow-up" v-if="showall"></i>-->
</div>
<div class="tagslist" v-if="showall">
<!--<div v-for="(tag, index) in visitedViews"-->
<!--:key="tag.path"-->
......@@ -340,7 +344,7 @@ export default {
}
}
&:first-of-type {
margin-left: 24px;
margin-left: 64px;
}
&:hover {
.el-icon-close{
......@@ -384,63 +388,78 @@ export default {
}
}
.alltags{
position: fixed;
position: absolute;
align-items: center;
border-radius: 9px;
height: 17px;
justify-content: center;
width: 36px;
right: 10px;
top: 37px;
width: 24px;
height: 24px;
left: 24px;
top: 28px;
cursor: pointer;
text-align: center;
&:hover{
background: #EFEFEF;
z-index: 10;
&::after{
content: ' ';
position: absolute;
border-right: 1px solid #EFEFEF;
height: 18px;
width: 0;
top: 3px;
right: -8px;
}
.imgs>img{
width: 24px;
height: 24px;
}
.tagslist{
position: absolute;
right: 0;
top: 20px;
left: 0;
top: 32px;
background-color: #fcfcfc;
color: #141414;
font-size: 13px;
line-height: 1em;
margin-bottom: 0;
max-height: 450px;
overflow-y: auto;
/*overflow-y: auto;*/
overflow-y: overlay;
padding: 20px 0 10px;
padding: 8px 0 0;
width: 325px;
text-align: left;
border-radius: 4px;
box-shadow: 0 2px 9px 2px rgba(0,0,0,.09), 0 1px 2px -2px rgba(0,0,0,.16);
.tags-view-item{
display: block;
position: relative;
>div{
padding: 8px 24px;
padding: 8px 8px 8px 32px;
line-height: 20px;
}
&:hover{
color: #0081FF;
background: rgba(0, 0, 0, 0.04);
}
.el-icon-check{
display: none;
position: absolute;
left: 5px;
width: 13px;
left: 8px;
width: 16px;
font-size: 16px;
}
&.active{
color: #0081FF;
background: rgba(0, 129, 255, 0.04);
.el-icon-check{
display: block;
color: #0081FF;
}
}
}
.clasall{
border-top: 1px solid #EFEFEF;
padding: 10px 24px 0;
margin-top: 10px;
padding: 10px 32px;
line-height: 20px;
color: #FF3C3C;
&:hover{
color: #0081FF;
background: #FFECE8;
}
}
}
......
......@@ -181,7 +181,6 @@
:key="dict.packageId"
:label="dict.packageName"
:value="dict.packageId"
:disabled="dict.disabled"
/>
</el-select>
</el-form-item>
......@@ -301,13 +300,13 @@
selectTenant().then(res=>{
if(res.code = 200){
this.packageList = res.data
this.packageList.forEach(item=>{
if(item.status == '0'){
item.disabled = false
}else{
item.disabled = true
}
})
// this.packageList.forEach(item=>{
// if(item.status == '0'){
// item.disabled = false
// }else{
// item.disabled = true
// }
// })
}
})
},
......
......@@ -352,16 +352,24 @@
// return false
if (this.form.packageId != undefined) {
saveTenantPackage(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
if(response.code == 200){
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}else{
this.$message.error(response.msg)
}
});
} else {
// this.form.menuIds = this.getMenuAllCheckedKeys();
addTenantPackage(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
if(response.code == 200){
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}else{
this.$message.error(response.msg)
}
});
}
}
......
......@@ -5,8 +5,67 @@
<img class="logo" src="../assets/images/logo1.png" />
<img class="img" src="../assets/images/login/img.png" />
</div>
<el-form v-if="!islog && !islang" ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<h3 class="title"><img src="../assets/images/title_icon.png"/>欢迎登录系统</h3>
<!--快捷登录-->
<el-form v-if="!islog && !islang && isDXlogin" ref="dxform" :model="dxform" :rules="dxRules" class="login-form">
<div class="logintitle">
<div class="on" @click="isDXlogin = true">快捷登录</div>
<div @click="isDXlogin = false">密码登录</div>
</div>
<el-form-item prop="phonenumber">
<el-input
v-model="dxform.phonenumber"
type="text"
auto-complete="off"
placeholder="请输入手机号码"
>
<img class="img" slot="prefix" src="../assets/images/phone.png"/>
</el-input>
</el-form-item>
<el-form-item prop="captchaCode" v-if="captchaEnabled">
<el-input
v-model="dxform.captchaCode"
auto-complete="off"
placeholder="请输入图形验证码"
style="width: 196px;float: left;"
>
<img class="img" slot="prefix" src="../assets/images/txyzm.png"/>
</el-input>
<div class="login-code">
<img :src="codeUrl" @click="getCode" class="login-code-img"/>
</div>
</el-form-item>
<el-form-item prop="smsCode">
<el-input
v-model="dxform.smsCode"
auto-complete="off"
placeholder="请输入验证码"
style="width: 196px;float: left;"
@keyup.enter.native="dxLogin"
>
<img class="img" slot="prefix" src="../assets/images/validCode.png"/>
</el-input>
<div class="login-code">
<div class="hqyzm" @click="getsms">{{smstitle}}</div>
</div>
</el-form-item>
<el-form-item style="width:100%;margin-top: 42px">
<el-button
size="medium"
type="primary"
style="width:100%;height: 48px;border-radius: 4px;font-size: 16px;"
@click.native.prevent="dxLogin"
>
<span v-if="!loading">确认</span>
<span v-else>登 录 中...</span>
</el-button>
</el-form-item>
</el-form>
<!--密码登录-->
<el-form v-if="!islog && !islang && !isDXlogin" ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<div class="logintitle">
<div @click="isDXlogin = true">快捷登录</div>
<div class="on" @click="isDXlogin = false">密码登录</div>
</div>
<el-form-item prop="username">
<el-input
v-model="loginForm.username"
......@@ -32,18 +91,17 @@
<el-input
v-model="loginForm.code"
auto-complete="off"
placeholder="请输入验证码"
style="width: 56%;float: left;"
placeholder="请输入图形验证码"
style="width: 196px;float: left;"
@keyup.enter.native="handleLogin"
>
<img class="img" slot="prefix" src="../assets/images/validCode.png"/>
<img class="img" slot="prefix" src="../assets/images/txyzm.png"/>
</el-input>
<div class="login-code">
<img :src="codeUrl" @click="getCode" class="login-code-img"/>
</div>
</el-form-item>
<el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 48px;">记住密码</el-checkbox>
<el-form-item style="width:100%;">
<el-form-item style="width:100%;margin-top: 42px;">
<el-button
:loading="loading"
size="medium"
......@@ -51,25 +109,22 @@
style="width:100%;height: 48px;border-radius: 4px;font-size: 16px;"
@click.native.prevent="handleLogin"
>
<span v-if="!loading"> </span>
<span v-if="!loading">登录</span>
<span v-else>登 录 中...</span>
</el-button>
<!--<div style="float: right;" v-if="register">-->
<!--<router-link class="link-type" :to="'/register'">立即注册</router-link>-->
<!--</div>-->
</el-form-item>
</el-form>
<!--安全验证-->
<el-form v-if="!islog && islang" ref="dxform" :model="dxform" :rules="dxRules" class="login-form">
<h3 class="title"><img src="../assets/images/title_icon.png"/>欢迎登录系统</h3>
<h4>安全验证</h4>
<h3 class="title"><img src="../assets/images/safe.png"/>请完成安全验证</h3>
<el-form-item prop="phonenumber">
<el-input
v-model="dxform.phonenumber"
type="text"
auto-complete="off"
placeholder="请输入登录账号"
placeholder="请输入手机号码"
>
<img class="img" slot="prefix" src="../assets/images/user.png"/>
<img class="img" slot="prefix" src="../assets/images/phone.png"/>
</el-input>
</el-form-item>
<el-form-item prop="captchaCode" v-if="captchaEnabled && showcode">
......@@ -77,32 +132,40 @@
v-model="dxform.captchaCode"
auto-complete="off"
placeholder="请输入验证码"
style="width: 56%;float: left;"
style="width: 196px;float: left;"
>
<img class="img" slot="prefix" src="../assets/images/validCode.png"/>
<img class="img" slot="prefix" src="../assets/images/txyzm.png"/>
</el-input>
<div class="login-code">
<img :src="codeUrl" @click="getCode" class="login-code-img"/>
</div>
</el-form-item>
<el-form-item prop="captchaCode">
<div style="margin-top: 15px;">
<el-input placeholder="请输入短信验证码" v-model="dxform.smsCode" @keyup.enter.native="dxLogin">
<template slot="append"><div @click="getsms">{{smstitle}}</div></template>
</el-input>
<el-form-item prop="smsCode">
<el-input
v-model="dxform.smsCode"
auto-complete="off"
placeholder="请输入验证码"
style="width: 196px;float: left;"
@keyup.enter.native="dxLogin"
>
<img class="img" slot="prefix" src="../assets/images/validCode.png"/>
</el-input>
<div class="login-code">
<div class="hqyzm" @click="getsms">{{smstitle}}</div>
</div>
</el-form-item>
<el-form-item style="width:100%;">
<el-form-item style="width:100%;margin-top: 42px">
<el-button
size="medium"
type="primary"
style="width:100%;height: 48px;border-radius: 4px;font-size: 16px;"
@click.native.prevent="dxLogin"
>
<span></span>
<span></span>
</el-button>
</el-form-item>
</el-form>
<!--选择租户企业-->
<div v-if="islog" class="login-form choose-form">
<h3 class="title i"><img src="../assets/images/login/title_choose.png"/>请选择你想要登录的企业</h3>
<div class="enterpriselist">
......@@ -117,7 +180,6 @@
<script>
import store from '@/store'
import { changeTenants, defaultTenantid, getCodeImg, getTenants,userTenantList,logincaptchaSms,smsLogin} from '@/api/login'
import Cookies from 'js-cookie'
import { decrypt, encrypt } from '@/utils/jsencrypt'
import {Base64} from 'js-base64'
import { getTenantid, setTenantid,setToken } from '@/utils/auth'
......@@ -128,11 +190,11 @@
return {
tenantId:-1,
islog:false,
isDXlogin:true,
codeUrl: "",
loginForm: {
username: "",
password: "",
rememberMe: false,
code: "",
uuid: ""
},
......@@ -173,6 +235,7 @@
smstime:60,
smstitle:'获取验证码',
showcode:false,//是否展示验证码
};
},
watch: {
......@@ -181,11 +244,16 @@
this.redirect = route.query && route.query.redirect;
},
immediate: true
},
isDXlogin(){
this.resetForm('dxform')
this.resetForm('loginForm')
this.getCode()
}
},
created() {
this.getCode();
this.getCookie();
},
methods: {
getCode() {
......@@ -198,25 +266,13 @@
}
});
},
getCookie() {
const username = Cookies.get("username");
const password = Cookies.get("password");
const rememberMe = Cookies.get('rememberMe')
this.loginForm = {
username: username === undefined ? this.loginForm.username : username,
// password: password === undefined ? this.loginForm.password : decrypt(password),
password: password === undefined ? this.loginForm.password : Base64.encode(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
};
},
getsms(){
logincaptchaSms(this.dxform).then(res=>{
console.log(res)
if(res.code == 200){
this.$message.success('已发送短信!')
let _this = this
this.timers = setInterval(()=>{
_this.smstitle = '剩余' + _this.smstime +'S'
_this.smstitle = _this.smstime +'秒后重试'
_this.smstime--;
if(_this.smstime <= 0){
_this.smstitle = '发送验证码'
......@@ -224,7 +280,7 @@
}
},1000)
}else{
this.$message.error('短信发送失败!')
this.$message.error(res.msg)
this.getCode()
this.showcode = true
}
......@@ -236,16 +292,6 @@
this.$refs.loginForm.validate(valid => {
if (valid) {
this.loading = true;
if (this.loginForm.rememberMe) {
Cookies.set("username", this.loginForm.username, { expires: 30 });
// Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
Cookies.set("password", Base64.encode(this.loginForm.password), { expires: 30 });
Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
} else {
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove('rememberMe');
}
let froms = JSON.parse(JSON.stringify(this.loginForm))
froms.password = Base64.encode(this.loginForm.password)
//密码登录时根据手机号获取是否有多个租户
......@@ -267,20 +313,6 @@
});
}
})
// this.$store.dispatch("Login", froms).then(() => {
// defaultTenantid().then(res=>{
// if(res.data.tenantId == "" || res.data.tenantId == null){//无默认企业id
// this.goin()
// }else{
// this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
// }
// })
// }).catch(() => {
// this.loading = false;
// if (this.captchaEnabled) {
// this.getCode();
// }
// });
}
});
},
......@@ -292,16 +324,22 @@
froms.phonenumber = this.dxform.phonenumber
froms.smsCode = this.dxform.smsCode
smsLogin(JSON.stringify(froms)).then(res => {
defaultTenantid().then(res=>{
if(res.data.tenantId == "" || res.data.tenantId == null){//无默认企业id
this.goin()
}else{
setToken(res.data.accessToken)
store.commit('SET_TOKEN', res.data.accessToken)
setTenantid(res.data.tenantId)
this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
}
})
if(res.code == 200) {
setToken(res.data.token)
store.commit('SET_TOKEN', res.data.token)
setTenantid(res.data.tenantId)
defaultTenantid().then(res => {
if (res.data.tenantId == "" || res.data.tenantId == null) {//无默认企业id
this.goin()
} else {
this.$router.push({ path: this.redirect || "/" }).catch(() => {
});
}
})
}else{
this.getCode()
this.showcode = true
}
})
}
})
......@@ -367,15 +405,17 @@
}
}
.title {
padding: 46px 0 32px 48px;
padding: 40px 0 25px 48px;
border-bottom: 1px solid #F0F0F0;
font-size: 22px;
font-size: 18px;
line-height: 26px;
color: #232323;
margin: 0 0 32px 0;
img{
width: 17px;
height: 17px;
margin-bottom: 3px;
width: 24px;
height: 24px;
margin-right: 12px;
float: left;
}
&.i{
padding: 40px 0 40px 20px;
......@@ -394,11 +434,12 @@
}
.login-form {
border-radius: 6px;
border-radius: 10px;
background: #ffffff;
width: 420px;
float: right;
margin-top: 70px;
padding-bottom: 72px;
/*padding: 25px 25px 5px 25px;*/
.el-form-item{
padding: 0 48px;
......@@ -408,13 +449,14 @@
width: 324px;
height: 48px;
background: #F2F4F9;
border-radius: 4px;
input {
height: 48px;
background: #F2F4F9;
font-size: 14px;
}
.el-input__inner{
padding-left: 73px;
padding-left: 61px;
border: 0;
}
}
......@@ -422,11 +464,39 @@
border-right: 1px solid #D8D8D8;
height: 24px;
margin: 12px 0;
left: 0;
width: 48px;
}
.img {
height: 24px;
width: 24px;
margin: 0 14px 0 12px;
margin: 0 12px;
}
.logintitle{
border-bottom: 1px solid #F0F0F0;
margin-bottom: 48px;
padding: 50px 48px 14px;
box-sizing: border-box;
>div{
display: inline-block;
font-size: 18px;
line-height: 26px;
margin-right: 40px;
color: #81878F;
position: relative;
cursor: pointer;
&.on{
color: #232323;
&:after{
content: ' ';
width: 29px;
height: 3px;
background: #0081FF;
position: absolute;
margin: 37px -47px;
}
}
}
}
}
.login-tip {
......@@ -438,11 +508,22 @@
width: 33%;
height: 38px;
float: left;
margin-left: 16px;
margin-left: 14px;
img {
cursor: pointer;
vertical-align: middle;
}
.hqyzm{
width: 116px;
height: 48px;
border-radius: 4px;
border: 1px solid #EFEFEF;
text-align: center;
color: rgba(35, 35, 35, 0.40);
font-size: 14px;
cursor: pointer;
line-height: 48px;
}
}
.el-login-footer {
height: 40px;
......@@ -457,6 +538,7 @@
letter-spacing: 1px;
}
.login-code-img {
width: 116px;
height: 48px;
}
.enterpriselist{
......
......@@ -364,7 +364,7 @@
</template>
</el-table-column>
<el-table-column
prop="nickname"
prop="nickName"
label="用户昵称">
</el-table-column>
<el-table-column
......@@ -743,6 +743,7 @@ export default {
}
this.getList();
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
......
......@@ -2,8 +2,6 @@ package com.dsk.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.dsk.common.annotation.ExcelDictFormat;
import com.dsk.common.convert.ExcelDictConvert;
import com.dsk.system.domain.SysTenantPackage;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
......@@ -34,10 +32,4 @@ public class SysTenantPackageSelectVo implements Serializable {
@ExcelProperty(value = "套餐名称")
private String packageName;
/**
* 状态(0正常 1停用)
*/
@ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0=正常,1=停用")
private String status;
}
......@@ -71,18 +71,25 @@ public interface ISysDeptService {
* 是否存在部门子节点
*
* @param deptId 部门ID
* @return 结果
* @return 结果 true 存在 false 不存在
*/
boolean hasChildByDeptId(Long deptId);
/**
* 查询部门是否存在用户
* 查询部门是否存在用户
*
* @param deptId 部门ID
* @return 结果 true 存在 false 不存在
*/
boolean checkDeptExistUser(Long deptId);
/**
* 查询该部门及其子部门是否存在用户
* @param deptId 部门ID
* @return 结果 true 存在 false 不存在
*/
Boolean checkAllDeptsAndUsers(Long deptId);
/**
* 校验部门名称是否唯一
*
......
......@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsk.common.constant.TenantPackageConstants;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.exception.ServiceException;
......@@ -22,6 +23,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
......@@ -56,7 +58,9 @@ public class ISysTenantPackageServiceImpl implements ISysTenantPackageService {
*/
@Override
public List<SysTenantPackageSelectVo> selectList() {
List<SysTenantPackageVo> tenantPackageVo = baseMapper.selectVoList(null);
LambdaQueryWrapper<SysTenantPackage> wrapper = new LambdaQueryWrapper<SysTenantPackage>()
.eq(SysTenantPackage::getStatus, TenantPackageConstants.NORMAL);
List<SysTenantPackageVo> tenantPackageVo = baseMapper.selectVoList(wrapper);
return BeanUtil.copyToList(tenantPackageVo, SysTenantPackageSelectVo.class);
}
......@@ -113,6 +117,12 @@ public class ISysTenantPackageServiceImpl implements ISysTenantPackageService {
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(SysTenantPackageBo bo) {
SysTenantPackage update = BeanUtil.toBean(bo, SysTenantPackage.class);
List<Long> packageIds = new ArrayList<>();
packageIds.add(bo.getPackageId());
//校验该套餐是否正在被使用
if (TenantPackageConstants.DISABLE.equals(bo.getStatus())) {
checkPackageIsUsed(packageIds);
}
// 保存菜单id
List<Long> menuIds = Arrays.asList(bo.getMenuIds());
if (CollUtil.isNotEmpty(menuIds)) {
......@@ -123,6 +133,18 @@ public class ISysTenantPackageServiceImpl implements ISysTenantPackageService {
return baseMapper.updateById(update) > 0;
}
/**
* 校验套餐是否正在被租户使用
*
* @param ids 套餐ID数组
*/
private void checkPackageIsUsed(List<Long> ids) {
boolean exists = tenantMapper.exists(new LambdaQueryWrapper<SysTenant>().in(SysTenant::getPackageId, ids));
if (exists) {
throw new ServiceException("租户套餐已被使用");
}
}
// /**
// * 修改套餐状态
// */
......@@ -139,10 +161,7 @@ public class ISysTenantPackageServiceImpl implements ISysTenantPackageService {
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(List<Long> ids, boolean isValid) {
if (isValid) {
boolean exists = tenantMapper.exists(new LambdaQueryWrapper<SysTenant>().in(SysTenant::getPackageId, ids));
if (exists) {
throw new ServiceException("租户套餐已被使用");
}
checkPackageIsUsed(ids);
}
return baseMapper.deleteBatchIds(ids) > 0;
}
......
......@@ -16,7 +16,6 @@ import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.common.core.domain.entity.SysDictType;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.DingTalkUtil;
import com.dsk.common.utils.PasswordUtils;
import com.dsk.common.utils.StringUtils;
import com.dsk.system.domain.*;
......@@ -36,9 +35,10 @@ import java.util.Collection;
import java.util.List;
/**
* 企业Service业务层处理
*
* @author sxk
* @date 2023.08.22
* @description: 企业Service业务层处理
*/
@RequiredArgsConstructor
@Service
......@@ -233,7 +233,8 @@ public class ISysTenantServiceImpl implements ISysTenantService {
+ "您好,您已经成功注册央企数字经营管理系统,请使用手机号码登录,初始密码为"
+ password
+ "。友情提示:为了您的账号安全,请勿泄露密码。若需要修改密码,请联系管理员。";
DingTalkUtil.sendDingTalkMsg(content);
//DingTalkUtil.sendDingTalkMsg(content);
System.out.println("👉🏻:" + content);
return true;
}
......
......@@ -8,9 +8,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.dsk.common.constant.CacheNames;
import com.dsk.common.constant.UserConstants;
import com.dsk.system.domain.SysDept;
import com.dsk.system.domain.SysRole;
import com.dsk.system.domain.SysUser;
import com.dsk.common.core.service.DeptService;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.helper.DataBaseHelper;
......@@ -19,6 +16,9 @@ import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.TreeBuildUtils;
import com.dsk.common.utils.redis.CacheUtils;
import com.dsk.common.utils.spring.SpringUtils;
import com.dsk.system.domain.SysDept;
import com.dsk.system.domain.SysRole;
import com.dsk.system.domain.SysUser;
import com.dsk.system.mapper.SysDeptMapper;
import com.dsk.system.mapper.SysRoleMapper;
import com.dsk.system.mapper.SysUserMapper;
......@@ -183,7 +183,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
}
/**
* 查询部门是否存在用户
* 查询部门是否存在用户
*
* @param deptId 部门ID
* @return 结果 true 存在 false 不存在
......@@ -194,6 +194,26 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
.eq(SysUser::getDeptId, deptId));
}
/**
* 查询该部门及其子部门是否存在用户
*
* @param deptId 部门ID
* @return 结果 true 存在 false 不存在
*/
@Override
public Boolean checkAllDeptsAndUsers(Long deptId) {
List<SysDept> childDeptList = baseMapper.selectDeptList(new LambdaQueryWrapper<SysDept>()
.eq(SysDept::getParentId, deptId));
if (!childDeptList.isEmpty()) {
for (SysDept sysDept : childDeptList) {
if (checkDeptExistUser(sysDept.getDeptId())) {
return true;
}
}
}
return checkDeptExistUser(deptId);
}
/**
* 校验部门名称是否唯一
*
......
......@@ -149,19 +149,11 @@ public class SysMenuServiceImpl implements ISysMenuService {
*/
@Override
public List<SysMenu> selectMenuTreeByUserId(Long userId) {
List<SysMenu> menus = null;
List<SysMenu> menus;
if (LoginHelper.isSuperAdmin(userId)) {
//Sass超管
menus = baseMapper.selectMenuTreeAll();
}
// else if (LoginHelper.isTenantAdmin()) {
// //租户管理员
// SysTenantVo sysTenantVo = tenantMapper.selectVoOne(new LambdaQueryWrapper<SysTenant>().eq(SysTenant::getTenantId, LoginHelper.getTenantId()));
// SysTenantPackageVo sysTenantPackageVo = tenantPackageMapper.selectVoOne(new LambdaQueryWrapper<SysTenantPackage>().eq(SysTenantPackage::getPackageId, sysTenantVo.getPackageId()));
// List<Long> menuIds = StringUtils.splitTo(sysTenantPackageVo.getMenuIds(), Convert::toLong);
// menus = baseMapper.selectBatchIds(menuIds);
// }
else {
}else {
//租户下的员工
menus = baseMapper.selectMenuTreeByUserId(userId);
}
......
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