备份
This commit is contained in:
@@ -47,6 +47,14 @@ public class OaSalaryController extends BaseController {
|
|||||||
public TableDataInfo<OaSalaryVo> list(OaSalaryBo bo, PageQuery pageQuery) {
|
public TableDataInfo<OaSalaryVo> list(OaSalaryBo bo, PageQuery pageQuery) {
|
||||||
return iOaSalaryService.queryPageList(bo, pageQuery);
|
return iOaSalaryService.queryPageList(bo, pageQuery);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 查询薪资管理列表
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("oa:salary:list")
|
||||||
|
@GetMapping("/list-worker")
|
||||||
|
public TableDataInfo<OaSalaryVo> listWorker(OaSalaryBo bo, PageQuery pageQuery) {
|
||||||
|
return iOaSalaryService.queryPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量写入user到salary中
|
* 批量写入user到salary中
|
||||||
@@ -116,7 +124,7 @@ public class OaSalaryController extends BaseController {
|
|||||||
|
|
||||||
|
|
||||||
@PostMapping("/calc")
|
@PostMapping("/calc")
|
||||||
public void calc(@RequestBody OaSalaryBo bo) {
|
public R<Void> calc(@RequestBody OaSalaryBo bo) {
|
||||||
iOaSalaryService.calcSalary(bo);
|
return R.ok(iOaSalaryService.calcSalary(bo));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.ruoyi.oa.service;
|
package com.ruoyi.oa.service;
|
||||||
|
|
||||||
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.domain.R;
|
||||||
import com.ruoyi.oa.domain.OaSalary;
|
|
||||||
import com.ruoyi.oa.domain.vo.OaSalaryVo;
|
import com.ruoyi.oa.domain.vo.OaSalaryVo;
|
||||||
import com.ruoyi.oa.domain.bo.OaSalaryBo;
|
import com.ruoyi.oa.domain.bo.OaSalaryBo;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
@@ -51,9 +50,11 @@ public interface IOaSalaryService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算工资
|
* 计算工资
|
||||||
|
*
|
||||||
* @param bo
|
* @param bo
|
||||||
|
* @return
|
||||||
*/
|
*/
|
||||||
void calcSalary(OaSalaryBo bo);
|
String calcSalary(OaSalaryBo bo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导入当月所有人的记录
|
* 导入当月所有人的记录
|
||||||
|
|||||||
@@ -3,29 +3,21 @@ package com.ruoyi.oa.service.impl;
|
|||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.domain.R;
|
||||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||||
import com.ruoyi.common.core.service.UserService;
|
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.ruoyi.flowable.utils.TaskUtils;
|
|
||||||
import com.ruoyi.oa.domain.OaSalaryItem;
|
import com.ruoyi.oa.domain.OaSalaryItem;
|
||||||
import com.ruoyi.oa.domain.vo.CalcResultVo;
|
import com.ruoyi.oa.domain.vo.CalcResultVo;
|
||||||
import com.ruoyi.oa.domain.vo.SysOaHolidayVo;
|
import com.ruoyi.oa.domain.vo.SysOaHolidayVo;
|
||||||
import com.ruoyi.oa.mapper.OaSalaryItemMapper;
|
import com.ruoyi.oa.mapper.OaSalaryItemMapper;
|
||||||
import com.ruoyi.oa.service.IOaSalaryItemService;
|
|
||||||
import com.ruoyi.oa.service.ISysOaHolidayService;
|
import com.ruoyi.oa.service.ISysOaHolidayService;
|
||||||
import com.ruoyi.oa.utils.OwnHttpUtils;
|
import com.ruoyi.oa.utils.OwnHttpUtils;
|
||||||
import com.ruoyi.system.service.ISysDeptService;
|
|
||||||
import com.ruoyi.system.service.ISysRoleService;
|
|
||||||
import com.ruoyi.system.service.ISysUserService;
|
import com.ruoyi.system.service.ISysUserService;
|
||||||
import com.ruoyi.workflow.mapper.WfDeployFormMapper;
|
import com.ruoyi.workflow.mapper.WfDeployFormMapper;
|
||||||
import com.ruoyi.workflow.service.IWfTaskService;
|
import com.ruoyi.workflow.service.IWfTaskService;
|
||||||
import liquibase.pro.packaged.A;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.apache.catalina.User;
|
|
||||||
import org.flowable.engine.HistoryService;
|
import org.flowable.engine.HistoryService;
|
||||||
import org.flowable.engine.RepositoryService;
|
import org.flowable.engine.RepositoryService;
|
||||||
import org.flowable.engine.TaskService;
|
import org.flowable.engine.TaskService;
|
||||||
@@ -43,10 +35,7 @@ import com.ruoyi.oa.service.IOaSalaryService;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.Instant;
|
import java.time.*;
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.ZoneId;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.format.DateTimeParseException;
|
import java.time.format.DateTimeParseException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -106,15 +95,16 @@ public class OaSalaryServiceImpl implements IOaSalaryService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public R<Void> importSalaryUser() {
|
public R<Void> importSalaryUser() {
|
||||||
SysUser sysUser = new SysUser();
|
List<SysUser> sysUsers = userService.selectUserList2();
|
||||||
List<SysUser> sysUsers = userService.selectUserList(sysUser);
|
|
||||||
for (SysUser user : sysUsers) {
|
for (SysUser user : sysUsers) {
|
||||||
|
if(Objects.nonNull(user)){
|
||||||
OaSalary oaSalary = new OaSalary();
|
OaSalary oaSalary = new OaSalary();
|
||||||
oaSalary.setUserId(user.getUserId());
|
oaSalary.setUserId(user.getUserId());
|
||||||
oaSalary.setBaseSalary(Double.valueOf(user.getLaborCost()));
|
oaSalary.setBaseSalary(Double.valueOf(user.getLaborCost()));
|
||||||
oaSalary.setPayTime(new Date());
|
oaSalary.setPayTime(new Date());
|
||||||
baseMapper.insert(oaSalary);
|
baseMapper.insert(oaSalary);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return R.ok();
|
return R.ok();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -180,21 +170,22 @@ public class OaSalaryServiceImpl implements IOaSalaryService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算薪资
|
* 计算薪资
|
||||||
|
*
|
||||||
* @param bo
|
* @param bo
|
||||||
|
* @return
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void calcSalary(OaSalaryBo bo) {
|
public String calcSalary(OaSalaryBo bo) {
|
||||||
// 1先获取对应的json路径 "/home/ubuntu/lyq/fad_oa_kqdeal/202411.json"
|
// 1先获取对应的json路径 "/home/ubuntu/lyq/fad_oa_kqdeal/202411.json"
|
||||||
String jsonPath = OwnHttpUtils.getJsonName(bo.getMonthStr(), bo.getFilePath());
|
String jsonPath = OwnHttpUtils.getJsonName(bo.getMonthStr(), bo.getFilePath());
|
||||||
// 2拿到所有的用户
|
// 2拿到所有的用户
|
||||||
SysUser sysUser = new SysUser();
|
|
||||||
Date yearMonth = StringToDate(combineYearMonth(bo.getMonthStr()));
|
Date yearMonth = StringToDate(combineYearMonth(bo.getMonthStr()));
|
||||||
List<SysUser> sysUsers = userService.selectUserList(sysUser);
|
List<SysUser> sysUsers = userService.selectUserList2();
|
||||||
// 3遍历user列表 拿出所有的nickName分别拿到他们的json 进行第二步分析
|
// 3遍历user列表 拿出所有的nickName分别拿到他们的json 进行第二步分析
|
||||||
for (SysUser user : sysUsers) {
|
for (SysUser user : sysUsers) {
|
||||||
OaSalary salary = baseMapper.selectVoByUserId(user.getUserId());
|
OaSalary salary = baseMapper.selectVoByUserId(user.getUserId());
|
||||||
if (salary == null) {
|
if (salary == null) {
|
||||||
return;
|
return jsonPath;
|
||||||
}
|
}
|
||||||
// 3.1 拿到一个人打卡机的记录
|
// 3.1 拿到一个人打卡机的记录
|
||||||
CalcResultVo res = OwnHttpUtils.getBaseCalc(jsonPath,user.getNickName());
|
CalcResultVo res = OwnHttpUtils.getBaseCalc(jsonPath,user.getNickName());
|
||||||
@@ -319,6 +310,7 @@ public class OaSalaryServiceImpl implements IOaSalaryService {
|
|||||||
salaryItemMapper.insert(oaSalaryItem);
|
salaryItemMapper.insert(oaSalaryItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return "计算成功";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -432,17 +424,17 @@ public class OaSalaryServiceImpl implements IOaSalaryService {
|
|||||||
|
|
||||||
private Date StringToDate(String dateStr) {
|
private Date StringToDate(String dateStr) {
|
||||||
|
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
// 1. 解析字符串到 YearMonth(只包含年和月)
|
||||||
|
YearMonth yearMonth = YearMonth.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM"));
|
||||||
|
|
||||||
// 1. 先解析成 LocalDateTime
|
// 2. 在 YearMonth 基础上指定“日”为 1
|
||||||
LocalDateTime localDateTime = LocalDateTime.parse(dateStr, formatter);
|
LocalDate localDate = yearMonth.atDay(1);
|
||||||
|
|
||||||
// 2. 转换为 Instant(指定时区)
|
// 3. 转成 Instant
|
||||||
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
|
Instant instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
|
||||||
|
|
||||||
// 3. 转换成旧版 Date
|
// 4. 转成旧版本 Date
|
||||||
return Date.from(instant);
|
return Date.from(instant);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String DateToString(Date date) {
|
private String DateToString(Date date) {
|
||||||
|
|||||||
@@ -45,18 +45,13 @@
|
|||||||
AND YEAR(osi.sign_time) = YEAR(#{payTime})
|
AND YEAR(osi.sign_time) = YEAR(#{payTime})
|
||||||
AND MONTH(osi.sign_time) = MONTH(#{payTime})
|
AND MONTH(osi.sign_time) = MONTH(#{payTime})
|
||||||
LEFT JOIN sys_user su ON os.user_id = su.user_id
|
LEFT JOIN sys_user su ON os.user_id = su.user_id
|
||||||
|
|
||||||
<!-- 这里使用 <where> 标签统一管理条件 -->
|
|
||||||
<where>
|
<where>
|
||||||
YEAR(os.pay_time) = YEAR(#{payTime})
|
YEAR(os.pay_time) = YEAR(#{payTime})
|
||||||
AND MONTH(os.pay_time) = MONTH(#{payTime})
|
AND MONTH(os.pay_time) = MONTH(#{payTime})
|
||||||
|
|
||||||
<!-- 如果 ew 中带了自定义条件,就在这里追加 -->
|
|
||||||
<if test="ew != null and ew.customSqlSegment != null and ew.customSqlSegment != ''">
|
<if test="ew != null and ew.customSqlSegment != null and ew.customSqlSegment != ''">
|
||||||
AND ${ew.customSqlSegment}
|
AND ${ew.customSqlSegment}
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
|
|
||||||
GROUP BY
|
GROUP BY
|
||||||
os.salary_id,
|
os.salary_id,
|
||||||
os.user_id,
|
os.user_id,
|
||||||
|
|||||||
@@ -99,4 +99,11 @@ public interface SysUserMapper extends BaseMapperPlus<SysUserMapper, SysUser, Sy
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
SysUser selectUserByIdAndNotDelFlag(Long userId);
|
SysUser selectUserByIdAndNotDelFlag(Long userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询基本数据
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<SysUser> selectListAndNotDel();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -227,4 +227,10 @@ public interface ISysUserService {
|
|||||||
*/
|
*/
|
||||||
int deleteUserByIds(Long[] userIds);
|
int deleteUserByIds(Long[] userIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查找所有没有被删除的用户的基本信息
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<SysUser> selectUserList2();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -487,6 +488,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
|||||||
return baseMapper.deleteBatchIds(ids);
|
return baseMapper.deleteBatchIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SysUser> selectUserList2() {
|
||||||
|
|
||||||
|
return baseMapper.selectListAndNotDel();
|
||||||
|
}
|
||||||
|
|
||||||
@Cacheable(cacheNames = CacheNames.SYS_USER_NAME, key = "#userId")
|
@Cacheable(cacheNames = CacheNames.SYS_USER_NAME, key = "#userId")
|
||||||
@Override
|
@Override
|
||||||
public String selectUserNameById(Long userId) {
|
public String selectUserNameById(Long userId) {
|
||||||
|
|||||||
@@ -50,6 +50,17 @@
|
|||||||
<result property="status" column="role_status"/>
|
<result property="status" column="role_status"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap type="com.ruoyi.common.core.domain.entity.SysUser" id="ClearUser">
|
||||||
|
<id property="userId" column="user_id"/>
|
||||||
|
<result property="userName" column="user_name"/>
|
||||||
|
<result property="nickName" column="nick_name"/>
|
||||||
|
<result property="userType" column="user_type"/>
|
||||||
|
<result property="delFlag" column="del_flag"/>
|
||||||
|
<result property="idCard" column="id_card"/>
|
||||||
|
<result property="bankCard" column="bank_card"/>
|
||||||
|
<result property="laborCost" column="labor_cost"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectUserVo">
|
<sql id="selectUserVo">
|
||||||
select u.user_id,
|
select u.user_id,
|
||||||
u.dept_id,
|
u.dept_id,
|
||||||
@@ -151,4 +162,9 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="selectListAndNotDel" resultMap="ClearUser">
|
||||||
|
select user_id,user_name,nick_name,labor_cost from sys_user where del_flag ='0'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
<div class="home">
|
<div class="home">
|
||||||
<div>
|
<div>
|
||||||
<el-container style="height: 100vh;">
|
<el-container style="height: 100vh;">
|
||||||
|
|
||||||
<el-main>
|
<el-main>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<!-- 右侧展示区域 -->
|
<!-- 右侧展示区域 -->
|
||||||
@@ -32,6 +33,7 @@ import Inventory from "../components/Inventory/index.vue";
|
|||||||
import Announcements from "../components/Announcements/index.vue";
|
import Announcements from "../components/Announcements/index.vue";
|
||||||
import ProjectManagement from "../components/ProjectManagement/index.vue";
|
import ProjectManagement from "../components/ProjectManagement/index.vue";
|
||||||
import FinancialCharts from "../components/FinancialCharts/index.vue";
|
import FinancialCharts from "../components/FinancialCharts/index.vue";
|
||||||
|
import {importUser} from "@/api/oa/salary";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Index",
|
name: "Index",
|
||||||
@@ -62,6 +64,7 @@ export default {
|
|||||||
this.getListNotice();
|
this.getListNotice();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
||||||
getList() {
|
getList() {
|
||||||
getCache().then((response) => {
|
getCache().then((response) => {
|
||||||
this.cache = response.data;
|
this.cache = response.data;
|
||||||
|
|||||||
Reference in New Issue
Block a user