员工添加部门名称、去掉一些非空验证,员工补贴生成

master 07
hshansha 7 months ago
parent c6a0a1ba3a
commit 896b60fbfd

@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.Db;
import com.ruoyi.common.utils.BeanCopyUtils;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory;
@ -188,5 +189,14 @@ public interface BaseMapperPlus<M, T, V> extends BaseMapper<T> {
voPage.setRecords(BeanCopyUtils.copyList(pageData.getRecords(), voClass));
return (P) voPage;
}
/**
*
*
* @return
*/
@Select("DELETE FROM pay_butie_emplyee WHERE date = #{thisMonth}")
void deleteSgrButieEmplyeeByDate(String month);
@Select("SELECT COUNT(*) FROM pay_butie_emplyee WHERE date = #{month}")
Integer getLatestDate(String month);
}

@ -1,9 +1,21 @@
package com.ruoyi.pay.controller;
import java.util.List;
import java.util.Arrays;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONObject;
import com.ruoyi.pay.domain.PayButie;
import com.ruoyi.pay.domain.PayEmployeeInfo;
import com.ruoyi.pay.domain.bo.PayButieBo;
import com.ruoyi.pay.domain.bo.PayEmployeeInfoBo;
import com.ruoyi.pay.domain.vo.ButieSummaryVo;
import com.ruoyi.pay.domain.vo.PayButieVo;
import com.ruoyi.pay.domain.vo.PayEmployeeInfoVo;
import com.ruoyi.pay.service.IPayButieService;
import com.ruoyi.pay.service.IPayEmployeeInfoService;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
@ -38,6 +50,8 @@ import com.ruoyi.common.core.page.TableDataInfo;
public class PayButieEmplyeeController extends BaseController {
private final IPayButieEmplyeeService iPayButieEmplyeeService;
private final IPayEmployeeInfoService employeeInfoService;
private final IPayButieService butieService;
/**
*
@ -105,4 +119,73 @@ public class PayButieEmplyeeController extends BaseController {
@PathVariable Long[] ids) {
return toAjax(iPayButieEmplyeeService.deleteWithValidByIds(Arrays.asList(ids), true));
}
/**
*
*
* @return EmployeeInfoVo
*/
@SaCheckPermission("pay:butieEmplyee:gen")
@Log(title = "月度补贴生成", businessType = BusinessType.INSERT)
@PostMapping("/gen")
public R<Void> generateBuTieEmpByMonth(@RequestBody JSONObject object) {
return iPayButieEmplyeeService.generateBuTieEmpByMonth(object.get("month", String.class), object.get("cover", Boolean.class));
}
@PostMapping("/check")
public R<Void> checkDataExist(@RequestBody JSONObject object) {
return iPayButieEmplyeeService.checkDataExist(object.get("month", String.class));
}
/**
*
*
*/
@SaCheckPermission("pay:butieEmplyee:list")
@DeleteMapping("/summary")
public TableDataInfo<ButieSummaryVo> summary(PayButieEmplyeeBo bo, PageQuery pageQuery) {
String date;
if (null==(bo.getDate())) { // 默认查询本月的数据
date = DateUtil.format(new Date(), "yyyy-MM");
} else {
date = bo.getDate();
}
PayEmployeeInfoBo employeeInfo = new PayEmployeeInfoBo();
employeeInfo.setId(bo.getEmployeeId());
TableDataInfo<PayEmployeeInfoVo> payEmployeeTableDataInfo = employeeInfoService.queryPageList(employeeInfo, pageQuery);
List<ButieSummaryVo> butieSummaryVos = this.buildEmployeeInfo(payEmployeeTableDataInfo.getRows(), date);
return TableDataInfo.build(butieSummaryVos);
}
private List<ButieSummaryVo> buildEmployeeInfo(List<PayEmployeeInfoVo> list, String date) {
List<PayButieVo> sgrButies = butieService.queryList(new PayButieBo());
ArrayList<ButieSummaryVo> summaryVos = new ArrayList<>();
list.parallelStream().forEachOrdered(emp -> {
ButieSummaryVo butieSummaryVo = new ButieSummaryVo();
butieSummaryVo.setEmpName(emp.getName());
butieSummaryVo.setDate(date);
HashMap<String, Object> map = new HashMap<>();
for (PayButieVo butie : sgrButies) {
PayButieEmplyeeBo query = new PayButieEmplyeeBo();
query.setEmployeeId(emp.getId());
query.setButieId(butie.getId());
query.setDate(date);
List<PayButieEmplyeeVo> butieEmplyeeVos = iPayButieEmplyeeService.queryList(query);
BigDecimal money =butieEmplyeeVos.get(0).getMoney();
HashMap<String, Object> inMap = new HashMap<>();
inMap.put("btid", butie.getId());
inMap.put("money",money);
map.put(butie.getName(), inMap);
}
butieSummaryVo.setButieMap(map);
butieSummaryVo.setEdit(false);
butieSummaryVo.setEmpId(emp.getId());
summaryVos.add(butieSummaryVo);
});
return summaryVos;
}
}

@ -42,6 +42,10 @@ public class PayEmployeeInfo extends BaseEntity {
*
*/
private Long deptId;
/**
*
*/
private String deptName;
/**
*
*/

@ -39,7 +39,7 @@ public class PayEmployeeInfoBo extends BaseEntity {
/**
* id
*/
@NotNull(message = "登录用户id不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "登录用户id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
@ -48,6 +48,12 @@ public class PayEmployeeInfoBo extends BaseEntity {
@NotNull(message = "员工所属部门不能为空", groups = { AddGroup.class, EditGroup.class })
private Long deptId;
/**
*
*/
@NotBlank(message = "部门名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String deptName;
/**
*
*/
@ -57,13 +63,13 @@ public class PayEmployeeInfoBo extends BaseEntity {
/**
* 0 1)
*/
@NotBlank(message = "性别0男 1女)不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "性别0男 1女)不能为空", groups = { AddGroup.class, EditGroup.class })
private String sex;
/**
*
*/
@NotNull(message = "年龄不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "年龄不能为空", groups = { AddGroup.class, EditGroup.class })
private Long age;
/**
@ -75,19 +81,19 @@ public class PayEmployeeInfoBo extends BaseEntity {
/**
*
*/
@NotBlank(message = "身份证号不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "身份证号不能为空", groups = { AddGroup.class, EditGroup.class })
private String idcard;
/**
*
*/
@NotBlank(message = "银行卡号不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "银行卡号不能为空", groups = { AddGroup.class, EditGroup.class })
private String bankCardNumber;
/**
*
*/
@NotBlank(message = "开户行不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "开户行不能为空", groups = { AddGroup.class, EditGroup.class })
private String openingBank;
/**
@ -99,19 +105,19 @@ public class PayEmployeeInfoBo extends BaseEntity {
/**
*
*/
@NotNull(message = "日薪不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "日薪不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal daySalary;
/**
*
*/
@NotNull(message = "时薪不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "时薪不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal hourSalary;
/**
* (0 : 1: 2 3 4 5)
*/
@NotBlank(message = "休息类型(0 :周休 1:非周休 2天休 3小时 4包月 5周二天)不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "休息类型(0 :周休 1:非周休 2天休 3小时 4包月 5周二天)不能为空", groups = { AddGroup.class, EditGroup.class })
private String restType;
/**
@ -135,61 +141,61 @@ public class PayEmployeeInfoBo extends BaseEntity {
/**
*
*/
@NotBlank(message = "学历不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "学历不能为空", groups = { AddGroup.class, EditGroup.class })
private String education;
/**
*
*/
@NotBlank(message = "家庭住址不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "家庭住址不能为空", groups = { AddGroup.class, EditGroup.class })
private String address;
/**
*
*/
@NotBlank(message = "紧急联系人不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "紧急联系人不能为空", groups = { AddGroup.class, EditGroup.class })
private String contact;
/**
*
*/
@NotBlank(message = "紧急联系人电话不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "紧急联系人电话不能为空", groups = { AddGroup.class, EditGroup.class })
private String contactPhone;
/**
* (1- 0-)
*/
@NotNull(message = "质检(1-是 0-否)不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "质检(1-是 0-否)不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer zhijian;
/**
* (1- 0-)
*/
@NotNull(message = "业务员(1-是 0-否)不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "业务员(1-是 0-否)不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer yewu;
/**
*
*/
@NotNull(message = "合同补助开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "合同补助开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date htstime;
/**
*
*/
@NotNull(message = "合同补助结束时间不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "合同补助结束时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date htetime;
/**
* 1: 0:
*/
@NotNull(message = "删除标志1:删除 0:未删除)不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "删除标志1:删除 0:未删除)不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer deleted;
/**
*
*/
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
private String remark;

@ -0,0 +1,70 @@
package com.ruoyi.pay.domain.vo;
import java.util.Map;
public class ButieSummaryVo {
/** 员工名称 */
private String empName;
/** 员工ID */
private Long empId;
/** 日期 */
private String date;
/** 补贴金额map */
private Map<String, Object> butieMap;
/** 是否可编辑 */
private boolean edit;
public Long getEmpId() {
return empId;
}
public void setEmpId(Long empId) {
this.empId = empId;
}
public boolean isEdit() {
return edit;
}
public void setEdit(boolean edit) {
this.edit = edit;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public Map<String, Object> getButieMap() {
return butieMap;
}
public void setButieMap(Map<String, Object> butieMap) {
this.butieMap = butieMap;
}
@Override
public String toString() {
return "ButieSummaryVo{" +
"empName='" + empName + '\'' +
", date='" + date + '\'' +
", butieMap=" + butieMap +
", edit=" + edit +
'}';
}
}

@ -48,6 +48,12 @@ public class PayEmployeeInfoVo {
@ExcelProperty(value = "员工所属部门")
private Long deptId;
/**
*
*/
@ExcelProperty(value = "部门名称")
private String deptName;
/**
*
*/

@ -1,5 +1,6 @@
package com.ruoyi.pay.service;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.pay.domain.PayButieEmplyee;
import com.ruoyi.pay.domain.vo.PayButieEmplyeeVo;
import com.ruoyi.pay.domain.bo.PayButieEmplyeeBo;
@ -46,4 +47,8 @@ public interface IPayButieEmplyeeService {
*
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
R<Void> generateBuTieEmpByMonth(String month, Boolean cover);
R<Void> checkDataExist(String month);
}

@ -1,12 +1,21 @@
package com.ruoyi.pay.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.pay.domain.PayButie;
import com.ruoyi.pay.domain.PayEmployeeInfo;
import com.ruoyi.pay.domain.bo.PayButieBo;
import com.ruoyi.pay.domain.vo.PayButieVo;
import com.ruoyi.pay.domain.vo.PayEmployeeInfoVo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.ruoyi.pay.domain.bo.PayButieEmplyeeBo;
@ -15,9 +24,11 @@ import com.ruoyi.pay.domain.PayButieEmplyee;
import com.ruoyi.pay.mapper.PayButieEmplyeeMapper;
import com.ruoyi.pay.service.IPayButieEmplyeeService;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Optional;
/**
* Service
@ -30,6 +41,8 @@ import java.util.Collection;
public class PayButieEmplyeeServiceImpl implements IPayButieEmplyeeService {
private final PayButieEmplyeeMapper baseMapper;
private final PayButieServiceImpl butieService;
private final PayEmployeeInfoServiceImpl employeeInfoService;
/**
*
@ -110,4 +123,81 @@ public class PayButieEmplyeeServiceImpl implements IPayButieEmplyeeService {
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public R<Void> generateBuTieEmpByMonth(String month, Boolean cover) {
if (ObjectUtil.isNull(month)) {
throw new SecurityException("请完善月份信息");
}
String lastMonth = DateUtil.format(DateUtil.offset(DateUtil.parse(month, "yyyy-MM"), DateField.MONTH, -1).toJdkDate(), "yyyy-MM");
// 先删除本月数据
baseMapper.deleteSgrButieEmplyeeByDate(month);
List<PayButieVo> butieList = butieService.queryList(null); // 获取补贴列表
List<PayEmployeeInfoVo> employeeInfoList = employeeInfoService.queryList(null);// 获取员工列表
employeeInfoList.forEach(emp -> {
// 首先获取用户上个月份的补贴信息
PayButieEmplyeeBo butieEmplyee = new PayButieEmplyeeBo();
butieEmplyee.setDate(lastMonth);
butieEmplyee.setEmployeeId(emp.getId());
List<PayButieEmplyeeVo> butieEmplyeeList = this.queryList(butieEmplyee);
if (ObjectUtil.isNotNull(butieEmplyeeList) && butieEmplyeeList.size() > 0) { // 具有某员工的上个月数据
// 固定项继承, 非固定相为0
for (PayButieVo butie : butieList) {
Optional<PayButieEmplyeeVo> first = butieEmplyeeList.stream().filter(btemp -> btemp.getButieId().equals(butie.getId())).findFirst();
PayButieEmplyee payButieEmplyee = new PayButieEmplyee();
// PayEmployeeInfo employeeInfo = employeeInfoService.selectSgrEmployeeInfoById(payButieEmplyee.getEmployeeId());
if (first.isPresent()) { // 如果找到和补贴类型ID相同的项
payButieEmplyee = BeanUtil.toBean(first.get(),PayButieEmplyee.class);
payButieEmplyee.setId(null); // ID 设置为null
payButieEmplyee.setDate(month); // 本月的年月
payButieEmplyee.setCreateBy("system");
payButieEmplyee.setCreateTime(null);
payButieEmplyee.setUpdateBy(null);
payButieEmplyee.setUpdateTime(null);
payButieEmplyee.setRemark(null);
if ("0".equals(butie.getFixed())) { //非固定项金额不继承
payButieEmplyee.setMoney(BigDecimal.ZERO);
}
// 此处应该在上面是否非固定的判断中进行再判断
//// 判断是否是合同补助项如果合同补助项不在时间范围内继承的金额也设置为0
//if ("合同补助".equals(sgrButie.getName())) {
// Date date = new Date();
// if (ObjectUtil.isNull(employeeInfo.getHtstime()) || date.before(employeeInfo.getHtstime()) || date.after(employeeInfo.getHtstime())) {
// sgrButieEmplyee.setMoney(BigDecimal.ZERO);
// }
//}
} else { // 未找到相同项
payButieEmplyee.setButieId(butie.getId());
payButieEmplyee.setEmployeeId(emp.getId());
payButieEmplyee.setDate(month);
payButieEmplyee.setCreateBy("system");
payButieEmplyee.setMoney(BigDecimal.ZERO);
}
baseMapper.insert(payButieEmplyee);
}
} else { // 没有某员工的上个月数据
for (PayButieVo butie : butieList) { // 对应生成某员工所有补贴类型的数据项
PayButieEmplyee PaybutieEmplyee = new PayButieEmplyee();
PaybutieEmplyee.setButieId(butie.getId());
PaybutieEmplyee.setEmployeeId(emp.getId());
PaybutieEmplyee.setMoney(BigDecimal.ZERO);
PaybutieEmplyee.setDate(month);
PaybutieEmplyee.setCreateBy("system");
baseMapper.insert(PaybutieEmplyee);
}
}
});
return R.ok(month+"月份数据已生成");
}
@Override
public R<Void> checkDataExist(String month) {
Integer count = baseMapper.getLatestDate(month);
if (count > 0) {
return R.ok("数据已经存在,是否覆盖?");
} else {
return this.generateBuTieEmpByMonth(month, true);
}
}
}

@ -64,6 +64,7 @@ public class PayEmployeeInfoServiceImpl implements IPayEmployeeInfoService {
lqw.eq(bo.getTenantId() != null, PayEmployeeInfo::getTenantId, bo.getTenantId());
lqw.eq(bo.getUserId() != null, PayEmployeeInfo::getUserId, bo.getUserId());
lqw.eq(bo.getDeptId() != null, PayEmployeeInfo::getDeptId, bo.getDeptId());
lqw.like(StringUtils.isNotBlank(bo.getDeptName()), PayEmployeeInfo::getDeptName, bo.getDeptName());
lqw.like(StringUtils.isNotBlank(bo.getName()), PayEmployeeInfo::getName, bo.getName());
lqw.eq(StringUtils.isNotBlank(bo.getSex()), PayEmployeeInfo::getSex, bo.getSex());
lqw.eq(bo.getAge() != null, PayEmployeeInfo::getAge, bo.getAge());

@ -9,6 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="tenantId" column="tenant_id"/>
<result property="userId" column="user_id"/>
<result property="deptId" column="dept_id"/>
<result property="deptName" column="deptName"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="age" column="age"/>

Loading…
Cancel
Save