bug修复
This commit is contained in:
@@ -1,5 +1,3 @@
|
||||
--- # 临时文件存储位置 避免临时文件被系统清理报错
|
||||
spring.servlet.multipart.location: /javaroot/ruoyi/server/temp
|
||||
|
||||
--- # 监控中心配置
|
||||
spring.boot.admin.client:
|
||||
|
||||
@@ -55,7 +55,8 @@ public class EmployeeFilesController extends BaseController {
|
||||
@GetMapping("/{userId}")
|
||||
public R<UserFilesVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable("userId") Long userId) {
|
||||
return R.ok(iEmployeeFilesService.queryUserFilesVoByUserId(userId));
|
||||
return R.ok(iEmployeeFilesService.
|
||||
queryUserFilesVoByUserId(userId));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -55,14 +55,6 @@ public class OaSalaryController extends BaseController {
|
||||
return iOaSalaryService.listWorker(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量写入user到salary中
|
||||
*/
|
||||
@GetMapping("/import")
|
||||
public R<Void> importSalaryUser() {
|
||||
return iOaSalaryService.importSalaryUser();
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出薪资管理列表
|
||||
*/
|
||||
|
||||
@@ -71,5 +71,7 @@ public class OaSalaryVo extends OaSalary {
|
||||
|
||||
private List<OaSalaryItemVo> itemList;
|
||||
|
||||
private Double punishSalary;
|
||||
|
||||
private Double laborCost;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.ruoyi.oa.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.oa.domain.OaSalary;
|
||||
@@ -22,11 +21,12 @@ public interface OaSalaryMapper extends BaseMapperPlus<OaSalaryMapper, OaSalary,
|
||||
Page<OaSalaryVo> selectStaffVoPage(Page<Object> build,@Param(Constants.WRAPPER) Wrapper<OaSalary> lqw,@Param("payTime") Date payTime);
|
||||
|
||||
|
||||
OaSalary selectVoByUserId(Long userId);
|
||||
OaSalary selectVoByUserId(@Param("userId") Long userId,@Param("yearMonth") Date yearMonth);
|
||||
|
||||
OaSalaryVo selectVoAndItemVoById(@Param("salaryId")Long salaryId,@Param("payTime")Date payTime);
|
||||
|
||||
void delByPayTime(Date date);
|
||||
|
||||
|
||||
void delItemByPayYearMonth(Date yearMonth);
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.ruoyi.oa.domain.vo.SysHolidayVo;
|
||||
import com.ruoyi.oa.domain.vo.SysOaHolidayVo;
|
||||
import com.ruoyi.common.core.mapper.BaseMapperPlus;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -17,4 +18,7 @@ import java.util.List;
|
||||
public interface SysOaHolidayMapper extends BaseMapperPlus<SysOaHolidayMapper, SysOaHoliday, SysOaHolidayVo> {
|
||||
|
||||
List<SysHolidayVo> queryVoList(SysOaHolidayBo bo);
|
||||
|
||||
Long queryWorkDayNumByMonth(Date payTime);
|
||||
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ public interface IOaSalaryService {
|
||||
* 导入当月所有人的记录
|
||||
* @return
|
||||
*/
|
||||
R<Void> importSalaryUser();
|
||||
R<Void> importSalaryUser(Date payTime);
|
||||
|
||||
TableDataInfo<OaSalaryVo> listWorker(OaSalaryBo bo, PageQuery pageQuery);
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.ruoyi.oa.domain.vo.SysOaHolidayVo;
|
||||
import com.ruoyi.oa.domain.bo.SysOaHolidayBo;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
@@ -73,4 +74,11 @@ public interface ISysOaHolidayService {
|
||||
|
||||
|
||||
List<SysHolidayVo> queryVoList(SysOaHolidayBo bo);
|
||||
|
||||
/**
|
||||
* 查询当月的工作日
|
||||
* @param payTime
|
||||
* @return
|
||||
*/
|
||||
Long queryWorkDayNumByMonth(Date payTime);
|
||||
}
|
||||
|
||||
@@ -84,10 +84,11 @@ public class EmployeeFilesServiceImpl implements IEmployeeFilesService {
|
||||
@Override
|
||||
public Boolean insertByBo(UserFilesVo userFilesVo) {
|
||||
// 删除该用户所有的文件,重新填入
|
||||
baseMapper.deleteByUserId(userFilesVo.getUserId());
|
||||
// baseMapper.deleteByUserId(userFilesVo.getUserId()); 似乎不用删
|
||||
List<EmployeeFilesVo> fileList = userFilesVo.getFileList();
|
||||
fileList.forEach(file -> {
|
||||
EmployeeFiles employeeFiles = BeanUtil.toBean(file, EmployeeFiles.class);
|
||||
employeeFiles.setFilePath(file.getFilePath());
|
||||
employeeFiles.setUserId(userFilesVo.getUserId());
|
||||
baseMapper.insert(employeeFiles);
|
||||
});
|
||||
|
||||
@@ -80,7 +80,9 @@ public class EmployeeOnboardingServiceImpl implements IEmployeeOnboardingService
|
||||
QueryWrapper<EmployeeOnboarding> lqw =new QueryWrapper<EmployeeOnboarding>();
|
||||
lqw.eq(bo.getUserId() != null, "eo.user_id", bo.getUserId());
|
||||
lqw.eq(bo.getJoiningDate() != null, "eo.joining_date", bo.getJoiningDate());
|
||||
lqw.eq("eo.del_flag", 0L);
|
||||
lqw.like(bo.getNickName()!=null,"su.nick_name",bo.getNickName());
|
||||
|
||||
return lqw;
|
||||
}
|
||||
|
||||
|
||||
@@ -86,6 +86,9 @@ public class OaSalaryServiceImpl implements IOaSalaryService {
|
||||
@Autowired
|
||||
private ISysOaAttendanceService sysOaAttendanceService;
|
||||
|
||||
@Autowired
|
||||
private ISysOaHolidayService sysOaHolidayService;
|
||||
|
||||
/**
|
||||
* 查询薪资管理
|
||||
*/
|
||||
@@ -96,9 +99,11 @@ public class OaSalaryServiceImpl implements IOaSalaryService {
|
||||
|
||||
/**
|
||||
* 查询薪资管理列表
|
||||
* 职工为一个月的固定工资 所以不需要计算日薪乘以工作日数量 所以区别于车间工人
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<OaSalaryVo> queryPageList(OaSalaryBo bo, PageQuery pageQuery) {
|
||||
|
||||
List<Long> userIds = sysUserRoleMapper.selectUserIdsByNotRoleId(1852970465740505090L);
|
||||
QueryWrapper<OaSalary> lqw = new QueryWrapper<>();
|
||||
lqw.in("os.user_id",userIds);
|
||||
@@ -107,40 +112,53 @@ public class OaSalaryServiceImpl implements IOaSalaryService {
|
||||
Page<OaSalaryVo> result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,payTime);
|
||||
if (result.getRecords().isEmpty()){
|
||||
// 判断是否有当前月的记录 没有则进行创造新的记录
|
||||
this.importSalaryUser();
|
||||
this.importSalaryUser(payTime);
|
||||
result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,payTime);
|
||||
}
|
||||
|
||||
// 写入真实薪资 为日薪乘以工作日-罚金
|
||||
for (OaSalaryVo record : result.getRecords()) {
|
||||
record.setRealSalary(record.getBaseSalary()+record.getPunishSalary());
|
||||
}
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public TableDataInfo<OaSalaryVo> listWorker(OaSalaryBo bo, PageQuery pageQuery) {
|
||||
// 还得计算一下这个月的工作日
|
||||
Date payTime = bo.getPayTime()!=null?bo.getPayTime():new Date();
|
||||
Long dayNum = sysOaHolidayService.queryWorkDayNumByMonth(payTime);
|
||||
List<Long> userIds = sysUserRoleMapper.selectUserIdsByRoleId(1852970465740505090L);
|
||||
QueryWrapper<OaSalary> lqw = new QueryWrapper<>();
|
||||
lqw.in("os.user_id",userIds);
|
||||
Date payTime = bo.getPayTime()!=null?bo.getPayTime():new Date();
|
||||
Page<OaSalaryVo> result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,payTime);
|
||||
if (result.getRecords().isEmpty()){
|
||||
// 判断是否有当前月的记录 没有则进行创造新的记录
|
||||
this.importSalaryUser();
|
||||
this.importSalaryUser(payTime);
|
||||
result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,payTime);
|
||||
}
|
||||
|
||||
// 写入真实薪资 为日薪乘以工作日-罚金
|
||||
for (OaSalaryVo record : result.getRecords()) {
|
||||
record.setRealSalary(record.getBaseSalary()*dayNum+record.getPunishSalary());
|
||||
}
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<Void> importSalaryUser() {
|
||||
public R<Void> importSalaryUser(Date payTime) {
|
||||
List<SysUser> sysUsers = userService.selectUserList2();
|
||||
baseMapper.delByPayTime(new Date());
|
||||
baseMapper.delByPayTime(payTime);
|
||||
for (SysUser user : sysUsers) {
|
||||
if(Objects.nonNull(user)){
|
||||
OaSalary oaSalary = new OaSalary();
|
||||
oaSalary.setUserId(user.getUserId());
|
||||
oaSalary.setBaseSalary(Double.valueOf(user.getLaborCost()));
|
||||
oaSalary.setPayTime(new Date());
|
||||
oaSalary.setPayTime(payTime);
|
||||
baseMapper.insert(oaSalary);
|
||||
}
|
||||
|
||||
}
|
||||
return R.ok();
|
||||
}
|
||||
@@ -217,12 +235,13 @@ public class OaSalaryServiceImpl implements IOaSalaryService {
|
||||
// 2拿到所有的用户
|
||||
Date yearMonth = StringToDate(combineYearMonth(bo.getMonthStr()));
|
||||
// 添加去重思想 即拿到月份如果之前计算过,则将原来的全部删掉然后新增新的
|
||||
baseMapper.delByPayTime(yearMonth);
|
||||
// baseMapper.delByPayTime(yearMonth);
|
||||
baseMapper.delItemByPayYearMonth(yearMonth);
|
||||
|
||||
List<SysUser> sysUsers = userService.selectUserList2();
|
||||
// 3遍历user列表 拿出所有的nickName分别拿到他们的json 进行第二步分析
|
||||
for (SysUser user : sysUsers) {
|
||||
OaSalary salary = baseMapper.selectVoByUserId(user.getUserId());
|
||||
OaSalary salary = baseMapper.selectVoByUserId(user.getUserId(),yearMonth);
|
||||
if (salary == null) {
|
||||
return jsonPath;
|
||||
}
|
||||
@@ -379,10 +398,10 @@ public class OaSalaryServiceImpl implements IOaSalaryService {
|
||||
List<String> days = new ArrayList<>();
|
||||
for (String absentDate : res) {
|
||||
String dateString = combineYearMonthAndDay(bo.getMonthStr(), absentDate);
|
||||
Date date = StringToDate(dateString);
|
||||
Date date = StringToDate2(dateString);
|
||||
SysOaAttendanceBo sysOaAttendanceBo = new SysOaAttendanceBo();
|
||||
sysOaAttendanceBo.setCreateTime(date);
|
||||
SysOaAttendanceVo sysOaAttendanceVo = sysOaAttendanceService.queryList(sysOaAttendanceBo).get(0);
|
||||
SysOaAttendanceVo sysOaAttendanceVo = !sysOaAttendanceService.queryList(sysOaAttendanceBo).isEmpty() ?sysOaAttendanceService.queryList(sysOaAttendanceBo).get(0):null;
|
||||
if (sysOaAttendanceVo != null && sysOaAttendanceVo.getProjectId()!=0) {
|
||||
days.add(absentDate);
|
||||
}
|
||||
@@ -517,6 +536,21 @@ public class OaSalaryServiceImpl implements IOaSalaryService {
|
||||
return Date.from(instant);
|
||||
}
|
||||
|
||||
private Date StringToDate2(String dateStr) {
|
||||
System.out.println(dateStr);
|
||||
// 1. 解析字符串到 YearMonth(只包含年和月)
|
||||
YearMonth yearMonth = YearMonth.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
||||
|
||||
// 2. 在 YearMonth 基础上指定“日”为 1
|
||||
LocalDate localDate = yearMonth.atDay(1);
|
||||
|
||||
// 3. 转成 Instant
|
||||
Instant instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
|
||||
|
||||
// 4. 转成旧版本 Date
|
||||
return Date.from(instant);
|
||||
}
|
||||
|
||||
private String DateToString(Date date) {
|
||||
// 2. 构造解析器,指定格式。例如 "yyyy-MM-dd"
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||
|
||||
@@ -234,5 +234,15 @@ public class SysOaHolidayServiceImpl implements ISysOaHolidayService {
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询这个月的工作日数量
|
||||
* @param payTime
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Long queryWorkDayNumByMonth(Date payTime) {
|
||||
return baseMapper.queryWorkDayNumByMonth(payTime);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -73,6 +73,8 @@
|
||||
LEFT JOIN sys_user su
|
||||
ON su.user_id = eo.user_id
|
||||
${ew.getCustomSqlSegment}
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="nickName" column="nick_name"/>
|
||||
<result property="punishSalary" column="punish_salary"/>
|
||||
</resultMap>
|
||||
|
||||
|
||||
@@ -25,51 +26,56 @@
|
||||
WHERE YEAR(pay_time) = YEAR(#{payTime})
|
||||
AND MONTH(pay_time) = MONTH(#{payTime})
|
||||
</delete>
|
||||
<delete id="delItemByPayYearMonth" parameterType="Date">
|
||||
DELETE FROM oa_salary_item
|
||||
WHERE YEAR(sign_time) = YEAR(#{payTime})
|
||||
AND MONTH(sign_time) = MONTH(#{payTime})
|
||||
</delete>
|
||||
|
||||
|
||||
<select id="selectStaffVoPage" resultMap="OaSalaryResult">
|
||||
SELECT
|
||||
SELECT
|
||||
os.salary_id,
|
||||
os.user_id,
|
||||
os.pay_time,
|
||||
(
|
||||
COALESCE(SUM(
|
||||
CASE
|
||||
WHEN osi.flag = 1 THEN osi.price
|
||||
WHEN osi.flag = 0 THEN -osi.price
|
||||
ELSE 0
|
||||
END
|
||||
), 0)
|
||||
) AS real_salary,
|
||||
osi.salary_item_id,
|
||||
osi.sign_time,
|
||||
su.nick_name,
|
||||
labor_cost as base_salary
|
||||
FROM oa_salary os
|
||||
LEFT JOIN oa_salary_item osi
|
||||
ON osi.salary_id = os.salary_id
|
||||
AND YEAR(osi.sign_time) = YEAR(#{payTime})
|
||||
AND MONTH(osi.sign_time) = MONTH(#{payTime})
|
||||
LEFT JOIN sys_user su ON os.user_id = su.user_id
|
||||
os.base_salary,
|
||||
COALESCE(
|
||||
SUM(
|
||||
CASE
|
||||
WHEN osi.flag = 1 THEN osi.price
|
||||
WHEN osi.flag = 0 THEN -osi.price
|
||||
ELSE 0
|
||||
END
|
||||
),
|
||||
0
|
||||
) AS punish_salary
|
||||
FROM oa_salary os
|
||||
LEFT JOIN oa_salary_item osi
|
||||
ON osi.salary_id = os.salary_id
|
||||
AND YEAR(osi.sign_time) = YEAR(#{payTime})
|
||||
AND MONTH(osi.sign_time) = MONTH(#{payTime})
|
||||
AND osi.del_flag = '0'
|
||||
LEFT JOIN sys_user su
|
||||
ON os.user_id = su.user_id
|
||||
${ew.customSqlSegment}
|
||||
and
|
||||
YEAR(os.pay_time) = YEAR(#{payTime})
|
||||
AND MONTH(os.pay_time) = MONTH(#{payTime})
|
||||
GROUP BY
|
||||
AND YEAR(os.pay_time) = YEAR(#{payTime})
|
||||
AND MONTH(os.pay_time) = MONTH(#{payTime})
|
||||
GROUP BY
|
||||
os.salary_id,
|
||||
os.user_id,
|
||||
os.pay_time,
|
||||
os.base_salary,
|
||||
osi.salary_item_id,
|
||||
osi.type,
|
||||
osi.reason,
|
||||
osi.price,
|
||||
osi.sign_time
|
||||
su.nick_name,
|
||||
os.base_salary
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectVoByUserId" resultType="com.ruoyi.oa.domain.OaSalary">
|
||||
select * from oa_salary where user_id = #{userId}
|
||||
select * from oa_salary
|
||||
where user_id = #{userId}
|
||||
and YEAR(pay_time) = YEAR(#{yearMonth})
|
||||
and MONTH(pay_time) = MONTH(#{yearMonth})
|
||||
</select>
|
||||
|
||||
<select id="selectVoAndItemVoById" resultType="com.ruoyi.oa.domain.vo.OaSalaryVo">
|
||||
|
||||
@@ -38,4 +38,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</select>
|
||||
|
||||
|
||||
<select id="queryWorkDayNumByMonth" resultType="java.lang.Long">
|
||||
SELECT
|
||||
count(*)
|
||||
FROM sys_oa_holiday soh
|
||||
where (soh.type ='0' or soh.type ='3')
|
||||
and YEAR(#{payTime}) = YEAR(soh.holiday_time)
|
||||
and MONTH(#{payTime}) = MONTH(soh.holiday_time)
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user