bug修复

This commit is contained in:
2025-03-18 11:52:24 +08:00
parent c0fe9c8885
commit dffce9e679
15 changed files with 125 additions and 55 deletions

View File

@@ -1,5 +1,3 @@
--- # 临时文件存储位置 避免临时文件被系统清理报错
spring.servlet.multipart.location: /javaroot/ruoyi/server/temp
--- # 监控中心配置
spring.boot.admin.client:

View File

@@ -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));
}
/**

View File

@@ -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();
}
/**
* 导出薪资管理列表
*/

View File

@@ -71,5 +71,7 @@ public class OaSalaryVo extends OaSalary {
private List<OaSalaryItemVo> itemList;
private Double punishSalary;
private Double laborCost;
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -62,7 +62,7 @@ public interface IOaSalaryService {
* 导入当月所有人的记录
* @return
*/
R<Void> importSalaryUser();
R<Void> importSalaryUser(Date payTime);
TableDataInfo<OaSalaryVo> listWorker(OaSalaryBo bo, PageQuery pageQuery);
}

View File

@@ -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);
}

View File

@@ -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);
});

View File

@@ -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;
}

View File

@@ -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");

View File

@@ -234,5 +234,15 @@ public class SysOaHolidayServiceImpl implements ISysOaHolidayService {
return list;
}
/**
* 查询这个月的工作日数量
* @param payTime
* @return
*/
@Override
public Long queryWorkDayNumByMonth(Date payTime) {
return baseMapper.queryWorkDayNumByMonth(payTime);
}
}

View File

@@ -73,6 +73,8 @@
LEFT JOIN sys_user su
ON su.user_id = eo.user_id
${ew.getCustomSqlSegment}
</select>

View File

@@ -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">

View File

@@ -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>