Merge branch 'dev' of http://git.znkjfw.com/ak/zn-cloud into frx
This commit is contained in:
commit
4712f74476
@ -31,6 +31,7 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode ABNORMAL_ACCESS_TO_ATTENDANCE_RECORDS = new ErrorCode(1_009_001_016, "获取考勤记录异常");
|
ErrorCode ABNORMAL_ACCESS_TO_ATTENDANCE_RECORDS = new ErrorCode(1_009_001_016, "获取考勤记录异常");
|
||||||
ErrorCode OVERTIME_REQUESTS_ALREADY_EXIST_FOR_THE_SAME_TIME_PERIOD = new ErrorCode(1_009_001_018, "已存在相同时间段的加班申请");
|
ErrorCode OVERTIME_REQUESTS_ALREADY_EXIST_FOR_THE_SAME_TIME_PERIOD = new ErrorCode(1_009_001_018, "已存在相同时间段的加班申请");
|
||||||
ErrorCode THE_CURRENT_USERS_ATTENDANCE_GROUP_HAS_NOT_SET_OVERTIME_RULES = new ErrorCode(1_009_001_019, "当前用户所在考勤组未设置加班规则");
|
ErrorCode THE_CURRENT_USERS_ATTENDANCE_GROUP_HAS_NOT_SET_OVERTIME_RULES = new ErrorCode(1_009_001_019, "当前用户所在考勤组未设置加班规则");
|
||||||
|
ErrorCode THE_LEAVE_PROCESS_CANNOT_BE_USED_WITHOUT_SIGNING_THE_CONTRACT = new ErrorCode(1_009_001_020, "合同未签约不可使用请假流程,请悉知");
|
||||||
|
|
||||||
ErrorCode OA_REIMBURSEMENT_NOT_EXISTS = new ErrorCode(1_009_001_100, "报销申请不存在");
|
ErrorCode OA_REIMBURSEMENT_NOT_EXISTS = new ErrorCode(1_009_001_100, "报销申请不存在");
|
||||||
ErrorCode OA_EVECTION_NOT_EXISTS = new ErrorCode(1_009_001_101, "出差申请不存在");
|
ErrorCode OA_EVECTION_NOT_EXISTS = new ErrorCode(1_009_001_101, "出差申请不存在");
|
||||||
|
@ -27,4 +27,12 @@ public interface LaborContractMapper extends BaseMapperX<LaborContractDO> {
|
|||||||
|
|
||||||
@TenantIgnore
|
@TenantIgnore
|
||||||
List<FileRespVO> selectFileByUserId(@Param("mobile") String mobile);
|
List<FileRespVO> selectFileByUserId(@Param("mobile") String mobile);
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* 获取用户最早合同
|
||||||
|
*
|
||||||
|
* @param userId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
LaborContractDO getTheEarliestContract(@Param("userId") Long userId);
|
||||||
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.attendance.fixed;
|
package cn.iocoder.yudao.module.system.service.attendance.fixed;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
import cn.iocoder.yudao.framework.common.Constants;
|
import cn.iocoder.yudao.framework.common.Constants;
|
||||||
@ -210,6 +211,9 @@ public class AttendanceFixedServiceImpl implements AttendanceFixedService, Punch
|
|||||||
if (!fixedDOList.isEmpty()) {
|
if (!fixedDOList.isEmpty()) {
|
||||||
respVOS = BeanUtils.toBean(fixedDOList, AttendanceFixedRespVO.class);
|
respVOS = BeanUtils.toBean(fixedDOList, AttendanceFixedRespVO.class);
|
||||||
List<Long> attendanceGroupShiftIds = fixedDOList.stream().map(AttendanceFixedDO::getAttendanceGroupShiftId).filter(Objects::nonNull).collect(Collectors.toList());
|
List<Long> attendanceGroupShiftIds = fixedDOList.stream().map(AttendanceFixedDO::getAttendanceGroupShiftId).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
|
if (CollUtil.isEmpty(attendanceGroupShiftIds)) {
|
||||||
|
return respVOS;
|
||||||
|
}
|
||||||
List<AttendanceGroupShiftVO> vos = attendanceGroupShiftService.listByShiftIds(attendanceGroupShiftIds);
|
List<AttendanceGroupShiftVO> vos = attendanceGroupShiftService.listByShiftIds(attendanceGroupShiftIds);
|
||||||
Map<Long, AttendanceGroupShiftVO> map = vos.stream().collect(Collectors.toMap(AttendanceGroupShiftVO::getId, a -> a));
|
Map<Long, AttendanceGroupShiftVO> map = vos.stream().collect(Collectors.toMap(AttendanceGroupShiftVO::getId, a -> a));
|
||||||
for (AttendanceFixedRespVO respVO : respVOS) {
|
for (AttendanceFixedRespVO respVO : respVOS) {
|
||||||
@ -263,6 +267,9 @@ public class AttendanceFixedServiceImpl implements AttendanceFixedService, Punch
|
|||||||
List<AttendanceRulesVO.WorkRules> rules = new ArrayList<>();
|
List<AttendanceRulesVO.WorkRules> rules = new ArrayList<>();
|
||||||
List<AttendanceFixedDO> list = this.getByGroupId(attendanceGroupId);
|
List<AttendanceFixedDO> list = this.getByGroupId(attendanceGroupId);
|
||||||
List<Long> attendanceGroupShiftIds = list.stream().map(AttendanceFixedDO::getAttendanceGroupShiftId).filter(Objects::nonNull).collect(Collectors.toList());
|
List<Long> attendanceGroupShiftIds = list.stream().map(AttendanceFixedDO::getAttendanceGroupShiftId).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
|
if (CollUtil.isEmpty(attendanceGroupShiftIds)) {
|
||||||
|
return rules;
|
||||||
|
}
|
||||||
List<AttendanceGroupShiftVO> vos = attendanceGroupShiftService.listByShiftIds(attendanceGroupShiftIds);
|
List<AttendanceGroupShiftVO> vos = attendanceGroupShiftService.listByShiftIds(attendanceGroupShiftIds);
|
||||||
Map<Long, AttendanceGroupShiftVO> map = vos.stream().collect(Collectors.toMap(AttendanceGroupShiftVO::getId, a -> a));
|
Map<Long, AttendanceGroupShiftVO> map = vos.stream().collect(Collectors.toMap(AttendanceGroupShiftVO::getId, a -> a));
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.attendance.scheduling;
|
package cn.iocoder.yudao.module.system.service.attendance.scheduling;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
@ -202,7 +203,9 @@ public class AttendanceSchedulingServiceImpl implements AttendanceSchedulingServ
|
|||||||
if (!selectedList.isEmpty()) {
|
if (!selectedList.isEmpty()) {
|
||||||
respVOS = BeanUtils.toBean(selectedList, AttendanceSchedulingRespVO.class);
|
respVOS = BeanUtils.toBean(selectedList, AttendanceSchedulingRespVO.class);
|
||||||
List<Long> attendanceGroupShiftIds = selectedList.stream().map(AttendanceSchedulingDO::getAttendanceGroupShiftId).filter(Objects::nonNull).collect(Collectors.toList());
|
List<Long> attendanceGroupShiftIds = selectedList.stream().map(AttendanceSchedulingDO::getAttendanceGroupShiftId).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
|
if (CollUtil.isEmpty(attendanceGroupShiftIds)) {
|
||||||
|
return respVOS;
|
||||||
|
}
|
||||||
List<AttendanceGroupShiftVO> vos = attendanceGroupShiftService.listByShiftIds(attendanceGroupShiftIds);
|
List<AttendanceGroupShiftVO> vos = attendanceGroupShiftService.listByShiftIds(attendanceGroupShiftIds);
|
||||||
Map<Long, AttendanceGroupShiftVO> map = vos.stream().collect(Collectors.toMap(AttendanceGroupShiftVO::getId, a -> a));
|
Map<Long, AttendanceGroupShiftVO> map = vos.stream().collect(Collectors.toMap(AttendanceGroupShiftVO::getId, a -> a));
|
||||||
for (AttendanceSchedulingRespVO respVO : respVOS) {
|
for (AttendanceSchedulingRespVO respVO : respVOS) {
|
||||||
@ -264,6 +267,9 @@ public class AttendanceSchedulingServiceImpl implements AttendanceSchedulingServ
|
|||||||
|
|
||||||
List<AttendanceRulesVO.WorkRules> rules = new ArrayList<>();
|
List<AttendanceRulesVO.WorkRules> rules = new ArrayList<>();
|
||||||
List<Long> attendanceGroupShiftIds = list.stream().map(AttendanceSchedulingDO::getAttendanceGroupShiftId).filter(Objects::nonNull).collect(Collectors.toList());
|
List<Long> attendanceGroupShiftIds = list.stream().map(AttendanceSchedulingDO::getAttendanceGroupShiftId).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
|
if (CollUtil.isEmpty(attendanceGroupShiftIds)) {
|
||||||
|
return rules;
|
||||||
|
}
|
||||||
List<AttendanceGroupShiftVO> vos = attendanceGroupShiftService.listByShiftIds(attendanceGroupShiftIds);
|
List<AttendanceGroupShiftVO> vos = attendanceGroupShiftService.listByShiftIds(attendanceGroupShiftIds);
|
||||||
Map<Long, AttendanceGroupShiftVO> map = vos.stream().collect(Collectors.toMap(AttendanceGroupShiftVO::getId, a -> a));
|
Map<Long, AttendanceGroupShiftVO> map = vos.stream().collect(Collectors.toMap(AttendanceGroupShiftVO::getId, a -> a));
|
||||||
//获取到当天是第几天
|
//获取到当天是第几天
|
||||||
|
@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.holiday.holidaysetting.Holi
|
|||||||
import cn.iocoder.yudao.module.system.dal.dataobject.holiday.holidaysettingrange.HolidaySettingRangeDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.holiday.holidaysettingrange.HolidaySettingRangeDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.holiday.holidayuser.HolidayUserDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.holiday.holidayuser.HolidayUserDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.holiday.holidayworkingage.HolidayWorkingAgeDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.holiday.holidayworkingage.HolidayWorkingAgeDO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.laborcontract.LaborContractDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.holiday.holidaybalancesetting.HolidayBalanceSettingMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.holiday.holidaybalancesetting.HolidayBalanceSettingMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.holiday.holidaysetting.HolidaySettingMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.holiday.holidaysetting.HolidaySettingMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.holiday.holidaysettingrange.HolidaySettingRangeMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.holiday.holidaysettingrange.HolidaySettingRangeMapper;
|
||||||
@ -28,6 +29,7 @@ import cn.iocoder.yudao.module.system.service.holiday.holidaybalancesetting.Holi
|
|||||||
import cn.iocoder.yudao.module.system.service.holiday.holidaysettingrange.HolidaySettingRangeService;
|
import cn.iocoder.yudao.module.system.service.holiday.holidaysettingrange.HolidaySettingRangeService;
|
||||||
import cn.iocoder.yudao.module.system.service.holiday.holidayuserrecord.HolidayUserRecordService;
|
import cn.iocoder.yudao.module.system.service.holiday.holidayuserrecord.HolidayUserRecordService;
|
||||||
import cn.iocoder.yudao.module.system.service.holiday.holidayworkingage.HolidayWorkingAgeService;
|
import cn.iocoder.yudao.module.system.service.holiday.holidayworkingage.HolidayWorkingAgeService;
|
||||||
|
import cn.iocoder.yudao.module.system.service.laborcontract.LaborContractService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -42,6 +44,9 @@ import java.util.*;
|
|||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.THE_LEAVE_PROCESS_CANNOT_BE_USED_WITHOUT_SIGNING_THE_CONTRACT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 假期设置 Service 实现类
|
* 假期设置 Service 实现类
|
||||||
*
|
*
|
||||||
@ -70,6 +75,8 @@ public class HolidaySettingServiceImpl implements HolidaySettingService {
|
|||||||
private HolidayUserRecordService holidayUserRecordService;
|
private HolidayUserRecordService holidayUserRecordService;
|
||||||
@Resource
|
@Resource
|
||||||
private HolidayUserMapper holidayUserMapper;
|
private HolidayUserMapper holidayUserMapper;
|
||||||
|
@Resource
|
||||||
|
private LaborContractService laborContractService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createHolidaySetting(HolidaySettingSaveReqVO createReqVO) {
|
public Long createHolidaySetting(HolidaySettingSaveReqVO createReqVO) {
|
||||||
@ -242,9 +249,21 @@ public class HolidaySettingServiceImpl implements HolidaySettingService {
|
|||||||
List<HolidayBalanceSettingDO> holidayBalanceSettingDOS = holidayBalanceSettingService.getHolidayBalanceSettingByHolidaySettingIds(allList.stream().map(HolidaySettingDO::getId).collect(Collectors.toList()));
|
List<HolidayBalanceSettingDO> holidayBalanceSettingDOS = holidayBalanceSettingService.getHolidayBalanceSettingByHolidaySettingIds(allList.stream().map(HolidaySettingDO::getId).collect(Collectors.toList()));
|
||||||
List<HolidayBalanceSettingRespVO> holidayBalanceSettingRespVOS = BeanUtils.toBean(holidayBalanceSettingDOS, HolidayBalanceSettingRespVO.class);
|
List<HolidayBalanceSettingRespVO> holidayBalanceSettingRespVOS = BeanUtils.toBean(holidayBalanceSettingDOS, HolidayBalanceSettingRespVO.class);
|
||||||
Map<Long, HolidayBalanceSettingRespVO> holidayBalanceSettingRespVOMap = holidayBalanceSettingRespVOS.stream().collect(Collectors.toMap(HolidayBalanceSettingRespVO::getHolidaySettingId, Function.identity()));
|
Map<Long, HolidayBalanceSettingRespVO> holidayBalanceSettingRespVOMap = holidayBalanceSettingRespVOS.stream().collect(Collectors.toMap(HolidayBalanceSettingRespVO::getHolidaySettingId, Function.identity()));
|
||||||
|
//获取当前登录用户最早的合同 - 获取到
|
||||||
|
LaborContractDO laborContractDO = laborContractService.getTheEarliestContract(userId);
|
||||||
|
if (laborContractDO == null) {
|
||||||
|
throw exception(THE_LEAVE_PROCESS_CANNOT_BE_USED_WITHOUT_SIGNING_THE_CONTRACT);
|
||||||
|
}
|
||||||
for (HolidaySettingRespVO vo : vos) {
|
for (HolidaySettingRespVO vo : vos) {
|
||||||
HolidayBalanceSettingRespVO holidayBalanceSettingRespVO = holidayBalanceSettingRespVOMap.get(vo.getId());
|
HolidayBalanceSettingRespVO holidayBalanceSettingRespVO = holidayBalanceSettingRespVOMap.get(vo.getId());
|
||||||
HolidayUserDO holidayUserDO = HolidayUserMap.get(vo.getId());
|
HolidayUserDO holidayUserDO = HolidayUserMap.get(vo.getId());
|
||||||
|
// -- 如果是转正后才可以请假 - 判断用户是否已经转正 - 如果未转正则过滤掉
|
||||||
|
if (vo.getNewEmployeeLeaveType() == 2) {
|
||||||
|
LocalDateTime becomeARegularWorkerTime = laborContractDO.getSigningDate().atStartOfDay().plusMonths(laborContractDO.getProbationPeriodTime() == null ? 0 : laborContractDO.getProbationPeriodTime());
|
||||||
|
if (LocalDateTime.now().isBefore(becomeARegularWorkerTime)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
// -- 过滤掉不适用的
|
// -- 过滤掉不适用的
|
||||||
if ((holidayBalanceSettingRespVO != null && holidayBalanceSettingRespVO.getStatus() == 1) && holidayUserDO == null) {
|
if ((holidayBalanceSettingRespVO != null && holidayBalanceSettingRespVO.getStatus() == 1) && holidayUserDO == null) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -665,6 +665,10 @@ public class HolidayUserRecordServiceImpl implements HolidayUserRecordService {
|
|||||||
quotaMap.put(user.getId(), map);
|
quotaMap.put(user.getId(), map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (holidayBalanceSettingDO.getType() == 3) {
|
||||||
|
for (AdminUserDO user : users) {
|
||||||
|
quotaMap.put(user.getId(), Collections.singletonMap(now, new BigDecimal(holidayBalanceSettingDO.getQuota().toString())));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// --- 如果都不是都话 默认为0
|
// --- 如果都不是都话 默认为0
|
||||||
quotaMap = users.stream()
|
quotaMap = users.stream()
|
||||||
|
@ -34,7 +34,8 @@ public interface LaborContractService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量更新合同状态
|
* 批量更新合同状态
|
||||||
* @param ids 主键列表
|
*
|
||||||
|
* @param ids 主键列表
|
||||||
* @param status 状态
|
* @param status 状态
|
||||||
*/
|
*/
|
||||||
void updateLaborContractList(List<Long> ids, Integer status);
|
void updateLaborContractList(List<Long> ids, Integer status);
|
||||||
@ -64,6 +65,7 @@ public interface LaborContractService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得用户历史签约信息
|
* 获得用户历史签约信息
|
||||||
|
*
|
||||||
* @param userId 用户编号
|
* @param userId 用户编号
|
||||||
* @return 合同信息列表
|
* @return 合同信息列表
|
||||||
*/
|
*/
|
||||||
@ -71,6 +73,7 @@ public interface LaborContractService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得指定用户的签约信息列表
|
* 获得指定用户的签约信息列表
|
||||||
|
*
|
||||||
* @param userIds 用户编号列表
|
* @param userIds 用户编号列表
|
||||||
* @return 签约信息列表
|
* @return 签约信息列表
|
||||||
*/
|
*/
|
||||||
@ -78,6 +81,7 @@ public interface LaborContractService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 到期日期小于指定日期的合同列表
|
* 获得 到期日期小于指定日期的合同列表
|
||||||
|
*
|
||||||
* @param now 日期
|
* @param now 日期
|
||||||
* @return 合同列表
|
* @return 合同列表
|
||||||
*/
|
*/
|
||||||
@ -85,8 +89,17 @@ public interface LaborContractService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得当前登录用户的入职时间和转正时间
|
* 获得当前登录用户的入职时间和转正时间
|
||||||
|
*
|
||||||
* @param userId 用户编号
|
* @param userId 用户编号
|
||||||
* @return 日期
|
* @return 日期
|
||||||
*/
|
*/
|
||||||
LaborContractDO getSigningDate(Long userId);
|
LaborContractDO getSigningDate(Long userId);
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* 获取用户最早合同
|
||||||
|
*
|
||||||
|
* @param userId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
LaborContractDO getTheEarliestContract(Long userId);
|
||||||
|
}
|
||||||
|
@ -160,4 +160,9 @@ public class LaborContractServiceImpl implements LaborContractService {
|
|||||||
|
|
||||||
return CollectionUtil.isEmpty(list) ? null : list.get(0);
|
return CollectionUtil.isEmpty(list) ? null : list.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LaborContractDO getTheEarliestContract(Long userId) {
|
||||||
|
return laborContractMapper.getTheEarliestContract(userId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,4 +23,10 @@
|
|||||||
AND b.telephone = #{mobile}
|
AND b.telephone = #{mobile}
|
||||||
AND a.fileId = c.fileId
|
AND a.fileId = c.fileId
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
<select id="getTheEarliestContract"
|
||||||
|
resultType="cn.iocoder.yudao.module.system.dal.dataobject.laborcontract.LaborContractDO">
|
||||||
|
select *, MIN( signing_date ) from
|
||||||
|
system_labor_contract
|
||||||
|
where deleted = 0 and user_id = #{userId}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
|
@ -131,6 +131,7 @@
|
|||||||
<where>
|
<where>
|
||||||
a.deleted = 0
|
a.deleted = 0
|
||||||
and a.user_type = 1
|
and a.user_type = 1
|
||||||
|
and a.status = 0
|
||||||
<if test="vo.username != null and vo.username != ''">
|
<if test="vo.username != null and vo.username != ''">
|
||||||
and a.username like concat('%', #{vo.username}, '%')
|
and a.username like concat('%', #{vo.username}, '%')
|
||||||
</if>
|
</if>
|
||||||
|
Loading…
Reference in New Issue
Block a user