薪资生成接口修改

master
hshansha 7 months ago
parent 52029b0685
commit f23c489eeb

@ -49,7 +49,7 @@ public class PayDayWorkHoursController extends BaseController {
*/
@SaCheckPermission("pay:dayWorkHours:list")
@GetMapping("/list")
public TableDataInfo<PayDayWorkHoursVo> list(PayDayWorkHoursBo bo, PageQuery pageQuery) {
public TableDataInfo<PayDayWorkHoursQuery> list(PayDayWorkHoursBo bo, PageQuery pageQuery) {
return iPayDayWorkHoursService.queryPageList2(bo, pageQuery);
}
@ -101,7 +101,7 @@ public class PayDayWorkHoursController extends BaseController {
*/
@SaCheckPermission("pay:dayWorkHours:query")
@GetMapping("/{id}")
public R<PayDayWorkHoursVo> getInfo(@NotNull(message = "主键不能为空")
public R<PayDayWorkHoursQuery> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(iPayDayWorkHoursService.queryById(id));
}

@ -89,6 +89,18 @@ public class PaySalaryReportController extends BaseController {
public R<Void> add(@Validated(AddGroup.class) @RequestBody PaySalaryReportBo bo) {
return toAjax(iPaySalaryReportService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("pay:salaryReport:add")
@Log(title = "工资明细总", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/generate")
public R<Void> generateSalaryReport(@RequestParam(name = "date") String date,
@RequestParam(name = "updateSupport")boolean updateSupport,
@RequestParam(name = "tenantId")Long tenantId) {
return iPaySalaryReportService.generateSalaryReport(date,updateSupport,tenantId);
}
/**
*

@ -0,0 +1,27 @@
package com.ruoyi.pay.enums;
/**
*
*/
public enum PayCalcType {
TYPE1("0", "日薪"), TYPE2("1", "月薪"),TYPE3("2", "喷涂按小时数"), TYPE4("3", "外贸按小时数"), TYPE5("4", "包月");
PayCalcType(String value, String text){
this.value = value;
this.text = text;
}
private String value;
private String text;
public String getValue() {
return value;
}
public String getText() {
return text;
}
}

@ -1,9 +1,12 @@
package com.ruoyi.pay.mapper;
import com.ruoyi.pay.domain.PayBaohuoEmployee;
import com.ruoyi.pay.domain.bo.PayBaohuoEmployeeBo;
import com.ruoyi.pay.domain.vo.PayBaohuoEmployeeVo;
import com.ruoyi.common.core.mapper.BaseMapperPlus;
import java.util.List;
/**
* Mapper
*
@ -12,4 +15,5 @@ import com.ruoyi.common.core.mapper.BaseMapperPlus;
*/
public interface PayBaohuoEmployeeMapper extends BaseMapperPlus<PayBaohuoEmployeeMapper, PayBaohuoEmployee, PayBaohuoEmployeeVo> {
List<PayBaohuoEmployee> selectSgrBaohuoEmployeeList1(PayBaohuoEmployeeBo bhEmployee);
}

@ -4,6 +4,7 @@ import com.ruoyi.pay.domain.PayButieEmplyee;
import com.ruoyi.pay.domain.vo.PayButieEmplyeeVo;
import com.ruoyi.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.math.BigDecimal;
@ -18,4 +19,6 @@ public interface PayButieEmplyeeMapper extends BaseMapperPlus<PayButieEmplyeeMap
@Update("UPDATE pay_butie_emplyee SET money = #{money} WHERE butie_id = #{btid} AND employee_id = #{empId} AND date = #{date} ")
Integer updateButieEmplyeeByDate(@Param("btid") Long btid, @Param("empId") Long empId, @Param("date") String date, @Param("money") BigDecimal money);
@Select("SELECT IFNULL(SUM(money),0) AS money FROM pay_butie_emplyee WHERE employee_id = #{empId} AND butie_id = #{butieId} AND date = #{date}")
BigDecimal getMoneyByInfo(Long id, Long id1, String date);
}

@ -22,7 +22,7 @@ public interface PayDayWorkHoursMapper extends BaseMapperPlus<PayDayWorkHoursMap
List<PayDayWorkHoursQuery> selectPayDayWorkHoursList2(PayDayWorkHoursQuery sgrDayWorkHoursQuery);
Page<PayDayWorkHoursVo> selectVoPage2(@Param("page") Page<Object> page, @Param(Constants.WRAPPER) QueryWrapper<PayDayWorkHours> ew);
Page<PayDayWorkHoursQuery> selectVoPage2(@Param("page") Page<Object> page, @Param(Constants.WRAPPER) QueryWrapper<PayDayWorkHours> ew);
PayDayWorkHoursVo selectDetailById(Long id);
PayDayWorkHoursQuery selectDetailById(Long id);
}

@ -23,4 +23,7 @@ public interface PayEmployeeInfoMapper extends BaseMapperPlus<PayEmployeeInfoMap
List<PayEmployeeInfoVo> getSalesmanList(@Param("tenantId") Long tenantId);
PayEmployeeInfo selectSgrEmployeeInfoByIdHasDel(Long id);
@Select("select dept_name from sys_dept where dept_id = #{deptId}")
String selectDeptNameByDeptNo(Long deptId);
}

@ -1,9 +1,12 @@
package com.ruoyi.pay.mapper;
import com.ruoyi.pay.domain.PayWorkOrderEmployee;
import com.ruoyi.pay.domain.bo.PayWorkOrderEmployeeBo;
import com.ruoyi.pay.domain.vo.PayWorkOrderEmployeeVo;
import com.ruoyi.common.core.mapper.BaseMapperPlus;
import java.util.List;
/**
* Mapper
*
@ -12,4 +15,5 @@ import com.ruoyi.common.core.mapper.BaseMapperPlus;
*/
public interface PayWorkOrderEmployeeMapper extends BaseMapperPlus<PayWorkOrderEmployeeMapper, PayWorkOrderEmployee, PayWorkOrderEmployeeVo> {
List<PayWorkOrderEmployee> selectPayWorkOrderEmployeeList1(PayWorkOrderEmployeeBo woEmployee);
}

@ -23,7 +23,7 @@ public interface IPayDayWorkHoursService {
/**
*
*/
PayDayWorkHoursVo queryById(Long id);
PayDayWorkHoursQuery queryById(Long id);
/**
*
@ -52,5 +52,5 @@ public interface IPayDayWorkHoursService {
public List<PayDayWorkHoursQuery> selectPayDayWorkHoursList2(PayDayWorkHoursQuery sgrDayWorkHoursQuery);
TableDataInfo<PayDayWorkHoursVo> queryPageList2(PayDayWorkHoursBo bo, PageQuery pageQuery);
TableDataInfo<PayDayWorkHoursQuery> queryPageList2(PayDayWorkHoursBo bo, PageQuery pageQuery);
}

@ -1,5 +1,6 @@
package com.ruoyi.pay.service;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.pay.domain.PaySalaryReport;
import com.ruoyi.pay.domain.vo.PaySalaryReportVo;
import com.ruoyi.pay.domain.bo.PaySalaryReportBo;
@ -55,4 +56,6 @@ public interface IPaySalaryReportService {
TableDataInfo<PaySalaryReportVo> queryLastMonthReport(Long tenantId, PageQuery pageQuery);
void export(HttpServletRequest request, HttpServletResponse response, List<PaySalaryReportVo> list);
R<Void> generateSalaryReport(String date, boolean updateSupport, Long tenantId);
}

@ -50,7 +50,7 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService {
*
*/
@Override
public PayDayWorkHoursVo queryById(Long id){
public PayDayWorkHoursQuery queryById(Long id){
return baseMapper.selectDetailById(id);
}
@ -67,9 +67,9 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService {
*
*/
@Override
public TableDataInfo<PayDayWorkHoursVo> queryPageList2(PayDayWorkHoursBo bo, PageQuery pageQuery) {
public TableDataInfo<PayDayWorkHoursQuery> queryPageList2(PayDayWorkHoursBo bo, PageQuery pageQuery) {
QueryWrapper<PayDayWorkHours> lqw = buildQueryWrapper2(bo);
Page<PayDayWorkHoursVo> result = baseMapper.selectVoPage2(pageQuery.build(), lqw);
Page<PayDayWorkHoursQuery> result = baseMapper.selectVoPage2(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
@ -117,7 +117,7 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService {
public R<Void> insertByBo(PayDayWorkHoursQuery2 payDayWorkHoursQuery2) {
//先拆分员工 然后每个员工信息存储到SgrDayWorkHoursQuery集合中
List<PayDayWorkHoursQuery> querys = new ArrayList<>();
if(payDayWorkHoursQuery2.getEmpInfos()!=null&&payDayWorkHoursQuery2.getEmpInfos().size()>0){
if(payDayWorkHoursQuery2.getEmpInfos()==null||payDayWorkHoursQuery2.getEmpInfos().size()<=0){
return R.fail("添加工时的员工为空!");
}
for(PayDayWorkEmps emp :payDayWorkHoursQuery2.getEmpInfos()){
@ -129,6 +129,7 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService {
payDayWorkHoursQuery.setDwHoursContrasts(payDayWorkHoursQuery2.getDwHoursContrasts());
payDayWorkHoursQuery.setDwYearMonth(payDayWorkHoursQuery2.getDwYearMonth());
payDayWorkHoursQuery.setDate(payDayWorkHoursQuery2.getDate());
payDayWorkHoursQuery.setTenantId(payDayWorkHoursQuery2.getTenantId());
querys.add(payDayWorkHoursQuery);
}
//验证每个员工信息是否符合添加条件 不符合则提示退出
@ -172,6 +173,7 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService {
List<PayDwHoursContrast> sgrDwHoursContrasts = sgrDayWorkHoursQuery.getDwHoursContrasts();
sgrDwHoursContrasts.parallelStream().forEachOrdered(sgrDwHoursContrast -> {
sgrDwHoursContrast.setDwHoursId(payDayWorkHour.getId());
sgrDwHoursContrast.setTenantId(payDayWorkHoursQuery2.getTenantId());
if (sgrDwHoursContrast.getIsHelper() == 0) {//当不是帮工时 直接存员工的部门
sgrDwHoursContrast.setDeptId(sgrDayWorkHoursQuery.getDeptId());
sgrDwHoursContrast.setDeptName(sgrDayWorkHoursQuery.getDeptName());
@ -220,7 +222,8 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService {
//保存工时信息
sgrDayWorkHoursQuery.setDwYearMonth(getYearMonth(sgrDayWorkHoursQuery));
PayDayWorkHours payDayWorkHour = BeanUtil.toBean(sgrDayWorkHoursQuery, PayDayWorkHours.class);
int result = baseMapper.insert(payDayWorkHour);
// int result = baseMapper.insert(payDayWorkHour);
int result = baseMapper.updateById(payDayWorkHour);
//存员工当日工作时间段
if (result > 0) {
//采用先删除对应的时间段,然后重新添加的方式
@ -232,6 +235,7 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService {
List<PayDwHoursContrast> sgrDwHoursContrasts = sgrDayWorkHoursQuery.getDwHoursContrasts();
sgrDwHoursContrasts.parallelStream().forEachOrdered(sgrDwHoursContrast -> {
sgrDwHoursContrast.setDwHoursId(payDayWorkHour.getId());
sgrDwHoursContrast.setTenantId(sgrDayWorkHoursQuery.getTenantId());
if (sgrDwHoursContrast.getIsHelper() == 0) {//当不是帮工时 直接存员工的部门
sgrDwHoursContrast.setDeptId(sgrDayWorkHoursQuery.getDeptId());
sgrDwHoursContrast.setDeptName(sgrDayWorkHoursQuery.getDeptName());

@ -4,27 +4,32 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.service.DictService;
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.PayEmployeeInfo;
import com.ruoyi.pay.domain.vo.ButieMoneyAndTypes;
import com.ruoyi.pay.mapper.PayEmployeeInfoMapper;
import com.ruoyi.pay.domain.*;
import com.ruoyi.pay.domain.bo.*;
import com.ruoyi.pay.domain.vo.*;
import com.ruoyi.pay.enums.PayCalcType;
import com.ruoyi.pay.mapper.*;
import com.ruoyi.pay.util.SalaryExportUtil;
import com.ruoyi.system.service.ISysDictDataService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.ruoyi.pay.domain.bo.PaySalaryReportBo;
import com.ruoyi.pay.domain.vo.PaySalaryReportVo;
import com.ruoyi.pay.domain.PaySalaryReport;
import com.ruoyi.pay.mapper.PaySalaryReportMapper;
import com.ruoyi.pay.service.IPaySalaryReportService;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -40,6 +45,40 @@ public class PaySalaryReportServiceImpl implements IPaySalaryReportService {
private final PaySalaryReportMapper baseMapper;
private final PayEmployeeInfoMapper payEmployeeInfoMapper;
private final DictService dictService;
@Resource
private PayBaohuoWorktimeMapper payBaohuoWorktimeMapper;
@Resource
private PayBaohuoWorktimeServiceImpl payBaohuoWorktimeService;
@Resource
private PayBaohuoEmployeeMapper sgrBaohuoEmployeeMapper;
@Resource
private PayButieEmplyeeMapper sgrButieEmplyeeMapper;
@Resource
private PayButieServiceImpl butieService;
@Resource
private PayWorkOrderEmployeeMapper sgrWorkOrderEmployeeMapper;
@Resource
private PayWorkTimeMapper sgrWorkTimeMapper;
@Resource
private PayWorkTimeServiceImpl payWorkTimeService;
@Resource
private PayRequireAttendanceReportMapper sgrRequireAttendanceReportMapper;
@Resource
private PayRequireAttendanceReportServiceImpl payRequireAttendanceReportService;
@Resource
private PayDayWorkHoursMapper sgrDayWorkHoursMapper;
@Resource
private PayDayWorkHoursServiceImpl payDayWorkHoursService;
@Resource
private PayDwHoursContrastMapper sgrDwHoursContrastMapper;
@Resource
private PayEmployeeInfoServiceImpl employeeInfoService;
@Resource
private PayEmployeeInfoMapper employeeInfoMapper;
@Resource
private PaySalaryReportMapper sgrSalaryReportMapper;
/**
*
@ -279,4 +318,310 @@ public class PaySalaryReportServiceImpl implements IPaySalaryReportService {
SalaryExportUtil.exportExcel("工资明细表", column, data, request, response);
}
@Override
@Transactional
public R<Void> generateSalaryReport(String date, boolean updateSupport, Long tenantId) {
Integer successNums = 0;
Integer failedNums = 0;
StringBuffer successMsg = new StringBuffer();
StringBuffer failedMsg = new StringBuffer();
String year = date.split("-")[0];
String month = date.split("-")[1];
Date yearMonth;
try {
yearMonth = new SimpleDateFormat("yyyy-MM").parse(date);
} catch (ParseException e) {
e.printStackTrace();
return R.fail("系统日期格式转换错误");
}
PaySalaryReportBo re = new PaySalaryReportBo();
re.setTenantId(tenantId);
re.setYear(year);
re.setMonth(month);
List<PaySalaryReportVo> sgrSalaryReports = this.queryList(re);
if (sgrSalaryReports != null && sgrSalaryReports.size() > 0) {
if (updateSupport) {
//已有本月数据 做更新操作
List<Long> collect = sgrSalaryReports.stream().map(PaySalaryReportVo::getId).collect(Collectors.toList());
baseMapper.deleteBatchIds(collect);
} else {
return R.ok("如需更新生成报表,请勾选更新");
}
}
//1.拿到所有员工信息
//测试单个员工
/* SgrEmployeeInfo emp =new SgrEmployeeInfo();
emp.setName("卢志伟");
List<SgrEmployeeInfo> employeeInfoList = sgrEmployeeInfoMapper.selectSgrEmployeeInfoList(emp);*/
PayEmployeeInfoBo employeeInfoBo = new PayEmployeeInfoBo();
employeeInfoBo.setTenantId(tenantId);
List<PayEmployeeInfoVo> employeeInfoList = employeeInfoService.queryList(employeeInfoBo);
//获取所有补贴类型
PayButieBo butiebo = new PayButieBo();
List<PayButieVo> sgrButies = butieService.queryList(butiebo);
for (PayEmployeeInfoVo employeeInfo : employeeInfoList) {
if (employeeInfo.getPayCalcType() == null) {
failedNums++;
failedMsg.append("<br/>" + employeeInfo.getName() + ":的工资计算类型不能为空");
continue;
}
if (employeeInfo.getBasicSalary() == null) {
failedNums++;
failedMsg.append("<br/>" + employeeInfo.getName() + ":的基本工资信息不能为空");
continue;
}
PaySalaryReport sgrSalaryReport = new PaySalaryReport();
String empName = employeeInfo.getName();
sgrSalaryReport.setEmployeeId(employeeInfo.getId());
sgrSalaryReport.setEmployeeName(employeeInfo.getName());
sgrSalaryReport.setYear(year);
sgrSalaryReport.setMonth(month);
sgrSalaryReport.setBasicSalary(employeeInfo.getBasicSalary());
sgrSalaryReport.setDeptId(employeeInfo.getDeptId());
//当type类型为包月时只能在此保存部门名称
String DeptName = employeeInfoMapper.selectDeptNameByDeptNo(employeeInfo.getDeptId());
sgrSalaryReport.setDeptName(DeptName);
//1.根据员工信息获取应出勤信息、包活及流程卡信息、补贴信息
//1.1获取应出勤信息
PayRequireAttendanceReportBo attendanceReport1 = new PayRequireAttendanceReportBo();
attendanceReport1.setTenantId(tenantId);
attendanceReport1.setEmpName(empName);
attendanceReport1.setYear(year);
attendanceReport1.setMonth(month);
PayRequireAttendanceReportVo attendanceReport =BeanUtil.toBean(attendanceReport1,PayRequireAttendanceReportVo.class);
BigDecimal yingchuqintianshu = BigDecimal.ZERO;
List<PayRequireAttendanceReportVo> attendanceReports = payRequireAttendanceReportService.queryList(attendanceReport1);
if (attendanceReports != null && attendanceReports.size() > 0) {
attendanceReport = attendanceReports.get(0);
if (attendanceReport.getRequireDays().equals(0L)) {
failedNums++;
failedMsg.append("<br/>错误:" + employeeInfo.getName() + "的应出勤天数为0");
continue;
}
if (attendanceReport.getLeaveDays() == null) {
attendanceReport.setLeaveDays(new BigDecimal("0"));
}
yingchuqintianshu = new BigDecimal(attendanceReport.getRequireDays());
sgrSalaryReport.setActuallyDays(attendanceReport.getAvtiveDays());
sgrSalaryReport.setActuallyHours(attendanceReport.getAttendanceHours());
sgrSalaryReport.setOvertimeWorkHours(attendanceReport.getOvertimeHours());
sgrSalaryReport.setNote(attendanceReport.getRemark());
} else if (!employeeInfo.getPayCalcType().equals(PayCalcType.TYPE5.getValue())) {
failedNums++;
failedMsg.append("<br/>未找到:" + employeeInfo.getName() + "的应出勤信息");
continue;
// return AjaxResult.error("未找到"+employeeInfo.getName()+"的应出勤信息");
}
//1.2获取员工日工工时信息
PayDayWorkHoursQuery sgrdayworkHoursQuery = new PayDayWorkHoursQuery();
BigDecimal rigongbanggong = BigDecimal.ZERO; //日工帮工小时数
sgrdayworkHoursQuery.setDwYearMonth(date);
sgrdayworkHoursQuery.setEmpName(employeeInfo.getName());
List<PayDayWorkHoursQuery> sgrDayWorkHoursQueryList = payDayWorkHoursService.selectPayDayWorkHoursList2(sgrdayworkHoursQuery);
if (sgrDayWorkHoursQueryList != null && sgrDayWorkHoursQueryList.size() > 0) {
for (PayDayWorkHoursQuery dayWorkHour : sgrDayWorkHoursQueryList) {
for (PayDwHoursContrast dwHoursContrast : dayWorkHour.getDwHoursContrasts()) {
if (dwHoursContrast.getIsHelper() == 1) {
BigDecimal datePoor = dwHoursContrast.getHours();
rigongbanggong = rigongbanggong.add(datePoor);
}
}
}
}
/*if(employeeInfo.getName().equals("赵向进")){ //测试使用的
System.out.println(".....");
}*/
sgrSalaryReport.setRigongHelpHours(rigongbanggong);//2023-10-16 客户要求展示日工帮工工时
//1.3获取员工包活及流程卡信息
//流程卡工时
PayWorkTimeBo workTime = new PayWorkTimeBo();
workTime.setEmpId(employeeInfo.getId());
workTime.setDate(yearMonth);
List<PayWorkTimeVo> sgrWorkTimes = payWorkTimeService.queryList(workTime);
BigDecimal baohuogongshi = BigDecimal.ZERO; //包活工时
if (sgrWorkTimes != null && sgrWorkTimes.size() > 0) {
for (PayWorkTimeVo time : sgrWorkTimes) {
baohuogongshi = baohuogongshi.add(time.getValidHours());
}
}
//包活工时
PayBaohuoWorktime bhtime = new PayBaohuoWorktime();
bhtime.setEmpId(employeeInfo.getId());
bhtime.setDate(yearMonth);
List<PayBaohuoWorktime> bhtimes = payBaohuoWorktimeMapper.selectBaohuoWorktimeList(bhtime);
if (bhtimes != null && bhtimes.size() > 0) {
for (PayBaohuoWorktime btime : bhtimes) {
baohuogongshi = baohuogongshi.add(btime.getValidHours());
}
}
//流程卡工资
BigDecimal baohuogongzi = BigDecimal.ZERO; //包活工资
BigDecimal baohuobanggongGZ = BigDecimal.ZERO;//包活帮工工资
PayWorkOrderEmployeeBo woEmployee = new PayWorkOrderEmployeeBo();
woEmployee.setEmpName(empName);
woEmployee.setIntime(yearMonth);
List<PayWorkOrderEmployee> woEmployees = sgrWorkOrderEmployeeMapper.selectPayWorkOrderEmployeeList1(woEmployee);
for (PayWorkOrderEmployee woe : woEmployees) {
if (woe.getHelper() == 0) {
baohuogongzi = baohuogongzi.add(woe.getAmount());
} else {
baohuobanggongGZ = baohuobanggongGZ.add(woe.getAmount());
}
}
//包活工资
PayBaohuoEmployeeBo bhEmployee = new PayBaohuoEmployeeBo();
bhEmployee.setEmpName(empName);
bhEmployee.setIntime(yearMonth);
List<PayBaohuoEmployee> bhEmployees = sgrBaohuoEmployeeMapper.selectSgrBaohuoEmployeeList1(bhEmployee);
for (PayBaohuoEmployee bhe : bhEmployees) {
if (bhe.getHelper() == 0) {
baohuogongzi = baohuogongzi.add(bhe.getAmount());
} else {
baohuobanggongGZ = baohuobanggongGZ.add(bhe.getAmount());
}
}
sgrSalaryReport.setWorkOrderHours(baohuogongshi);
sgrSalaryReport.setWorkOrderPay(baohuogongzi.setScale(2, BigDecimal.ROUND_HALF_UP));
//1.4获取补贴信息
List<ButieMoneyAndTypes> butieMoneyAndTypesList = new ArrayList<>();
for (PayButieVo butie : sgrButies) {
ButieMoneyAndTypes butieMoneyAndType = new ButieMoneyAndTypes();
BigDecimal money = sgrButieEmplyeeMapper.getMoneyByInfo(employeeInfo.getId(), butie.getId(), date);
butieMoneyAndType.setBuTieName(butie.getName());
//补贴扣减全勤和津贴需要按比例发放
/* if(money.compareTo(BigDecimal.ZERO)!=0){
if((butie.getName().equals("全勤奖")||butie.getName().equals("岗位津贴"))&&!employeeInfo.getPayCalcType().equals(PayCalcType.TYPE5.getValue())
&&attendanceReport.getRequireDays().longValue()>attendanceReport.getAvtiveDays().longValue()){
BigDecimal moneyPerHour = money.divide(new BigDecimal(attendanceReport.getRequireDays()),4,BigDecimal.ROUND_HALF_UP)
.divide(employeeInfo.getHoursPerDay(),4,BigDecimal.ROUND_HALF_UP);
money =moneyPerHour.multiply(new BigDecimal(attendanceReport.getAvtiveDays()).multiply(employeeInfo.getHoursPerDay()).add(attendanceReport.getAttendanceHours()));
}
}*/
butieMoneyAndType.setMoney(money.setScale(2, BigDecimal.ROUND_HALF_UP));
butieMoneyAndType.setType(butie.getType());
butieMoneyAndTypesList.add(butieMoneyAndType);
}
sgrSalaryReport.setAllButieData(JSON.toJSONString(butieMoneyAndTypesList));
/* SgrButieEmplyee butieEmplyee = new SgrButieEmplyee();
butieEmplyee.setButieId(employeeInfo.getId());
butieEmplyee.setDate(date);
List<SgrButieEmplyee> butieEmplyeeList=sgrButieEmplyeeMapper.selectSgrButieEmplyeeList(butieEmplyee);
if(butieEmplyeeList!=null&&butieEmplyeeList.size()>0){
hasBuTie=true;
sgrSalaryReport.setAllBieteiData(JSON.toJSONString(butieEmplyeeList.get(0)));
}else{
sgrSalaryReport.setAllBieteiData(JSON.toJSONString(new SgrButieEmplyee()));
}*/
//根据不同计算类型计算
String payCalcType = employeeInfo.getPayCalcType();
BigDecimal yingfagongzi;
BigDecimal shifagongzi;
BigDecimal chuqingongshi = BigDecimal.ZERO;
BigDecimal jiabangongzi = BigDecimal.ZERO;
BigDecimal rigongbanggongGZ = BigDecimal.ZERO;
BigDecimal payPerHour;
if (!payCalcType.equals(PayCalcType.TYPE5.getValue())) {
//出勤工时=实际出勤天数*每日小时数+实际出勤小时数
chuqingongshi = new BigDecimal(sgrSalaryReport.getActuallyDays()).multiply(employeeInfo.getHoursPerDay()).add(sgrSalaryReport.getActuallyHours());
}
sgrSalaryReport.setDayWorkHours(chuqingongshi);
BigDecimal rigonggongzi = BigDecimal.ZERO;
//日工工时=出勤工时-包活工时-日工帮工
BigDecimal rigonghours = chuqingongshi.subtract(baohuogongshi).subtract(rigongbanggong);//日工工时数
/*0:(+)
1:(+)
2:(16/1717/18)
3.(17/21)
4.*/
switch (payCalcType) {
case "0": //工资计算类型:日薪(日工工资+包活工资)
//日工工资=基本工资/每日应出勤工时*日工工时
payPerHour = sgrSalaryReport.getBasicSalary().divide(employeeInfo.getHoursPerDay(), 4, BigDecimal.ROUND_HALF_UP);
rigonggongzi = payPerHour.multiply(rigonghours);
jiabangongzi = payPerHour.multiply(new BigDecimal("1.3")).multiply(sgrSalaryReport.getOvertimeWorkHours());
rigongbanggongGZ = payPerHour.multiply(rigongbanggong);
break;
case "1": //工资计算类型:月薪(日工工资+包活工资)
//小时工资=基本工资/应出勤天数/员工每日应出勤小时数
// 日工工资==小时工资 *(实际出勤天数 *员工每日应出勤小时数 +实际出勤小时数)
payPerHour = sgrSalaryReport.getBasicSalary().divide(yingchuqintianshu, 4, BigDecimal.ROUND_HALF_UP).
divide(employeeInfo.getHoursPerDay(), 4, BigDecimal.ROUND_HALF_UP);
rigonggongzi = payPerHour.multiply(rigonghours);
jiabangongzi = payPerHour.multiply(new BigDecimal("1.3")).multiply(sgrSalaryReport.getOvertimeWorkHours());
rigongbanggongGZ = payPerHour.multiply(rigongbanggong);
break;
case "2": //工资计算类型:喷涂按小时
//出勤工时需要达到234并且本月请假天数不能超过4天 工时工资按高工资计算
//客户需求修改去掉234小时的判断
//客户需求修改:喷涂计算时薪,符合条件原来+1元 现在改为+2元 将这个值2存储到字典中 hourpayDiff
//2024-8-15客户需求修改请假天数<=4天 原来+字典值+2元 改为不加钱, 将字典hourpayDiff值改为0--已修改 (并且新增如果请假大于4天扣200元——未修改客户自己加减)
// if (chuqingongshi.compareTo(new BigDecimal("234")) >= 0 && attendanceReport.getLeaveDays().compareTo(new BigDecimal("4")) <= 0) { //>=234小时 时薪+1元
if (attendanceReport.getLeaveDays().compareTo(new BigDecimal("4")) <= 0) { //符合条件: 时薪 +字典设定值 元
String diff = dictService.getDictValue("pay_hourpay_diff","diff");
payPerHour = sgrSalaryReport.getBasicSalary().add(new BigDecimal(diff));
} else {
payPerHour = sgrSalaryReport.getBasicSalary();
}
rigonggongzi = payPerHour.multiply(rigonghours);
rigongbanggongGZ = payPerHour.multiply(rigongbanggong);
break;
case "3": //工资计算类型:外贸按小时
rigonggongzi = sgrSalaryReport.getBasicSalary().multiply(rigonghours);
rigongbanggongGZ = sgrSalaryReport.getBasicSalary().multiply(rigongbanggong);
break;
case "4": //工资计算类型:包月
rigonggongzi = sgrSalaryReport.getBasicSalary();
break;
}
sgrSalaryReport.setDayWorkPay(rigonggongzi.setScale(2, BigDecimal.ROUND_HALF_UP));
sgrSalaryReport.setWorkOrderPay(baohuogongzi.setScale(2, BigDecimal.ROUND_HALF_UP));
sgrSalaryReport.setOvertime(jiabangongzi.setScale(2, BigDecimal.ROUND_HALF_UP));
//帮贡工资计算
BigDecimal banggonggongzi = baohuobanggongGZ.add(rigongbanggongGZ);
sgrSalaryReport.setBanggongPay(banggonggongzi.setScale(2, BigDecimal.ROUND_HALF_UP));
//应付工资=日工工资+包活工资+加班工资+帮工工资+增补项 值班、拉货工资 节假日工资 岗位津贴 补贴(话费及其他) 合同补助 全勤奖 帮工工资 上月差异
yingfagongzi = rigonggongzi.add(baohuogongzi).add(jiabangongzi).add(banggonggongzi);
//遍历补贴扣减项
BigDecimal koujianxiang = BigDecimal.ZERO;
for (ButieMoneyAndTypes butieMoney : butieMoneyAndTypesList) {
if (butieMoney.getType().equals("1")) {
yingfagongzi = yingfagongzi.add(butieMoney.getMoney());
} else {
koujianxiang = koujianxiang.add(butieMoney.getMoney());
}
}
//实发工资=应付工资-扣减项 迟到-党费
shifagongzi = yingfagongzi.subtract(koujianxiang);
sgrSalaryReport.setShoudPayMoney(yingfagongzi.setScale(2, BigDecimal.ROUND_HALF_UP));
sgrSalaryReport.setActuallyPayMoney(shifagongzi.setScale(0, BigDecimal.ROUND_HALF_UP));
int result = baseMapper.insert(sgrSalaryReport);
if (result > 0) {
successNums++;
successMsg.append("<br/>" + employeeInfo.getName() + "操作成功");
} else {
failedNums++;
failedMsg.append("<br/>" + employeeInfo.getName() + "添加到数据库时服务器异常");
}
}
if (failedNums > 0) {
failedMsg.insert(0, "生成成功:" + successNums + "条,生成失败:" + failedNums + "条,错误如下:");
return R.fail(failedMsg.toString());
} else {
successMsg.insert(0, "恭喜您,数据已全部生成成功!共 " + successNums + " 条,数据如下:");
}
return R.ok(successMsg.toString());
}
}

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.pay.mapper.PayBaohuoEmployeeMapper">
<resultMap type="com.ruoyi.pay.domain.PayBaohuoEmployee" id="PayBaohuoEmployeeResult">
<result property="id" column="id"/>
<result property="tenantId" column="tenant_id"/>
<result property="woId" column="wo_id"/>
<result property="empId" column="emp_id"/>
<result property="deptId" column="dept_id"/>
<result property="empName" column="emp_name"/>
<result property="amount" column="amount"/>
<result property="month" column="month"/>
<result property="helper" column="helper"/>
<result property="intime" column="intime"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
</resultMap>
<select id="selectSgrBaohuoEmployeeList1" resultMap="PayBaohuoEmployeeResult">
<include refid="selectSgrBaohuoEmployeeVo"/>
<where>
<if test="woId != null "> and wo_id = #{woId}</if>
<if test="tenantId != null "> and tenant_id = #{tenantId}</if>
<if test="empId != null "> and emp_id = #{empId}</if>
<if test="deptId != null "> and dept_id = #{deptId}</if>
<if test="empName != null and empName != ''"> and emp_name like concat('%', #{empName}, '%')</if>
<if test="amount != null "> and amount = #{amount}</if>
<if test="month != null and month != ''"> and month = #{month}</if>
<if test="helper != null "> and helper = #{helper}</if>
<if test="intime != null ">
<![CDATA[AND (DATE_FORMAT(`intime`, '%Y-%m') = DATE_FORMAT( #{intime}, '%Y-%m'))]]>
</if>
</where>
</select>
</mapper>

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.pay.mapper.PayWorkOrderEmployeeMapper">
<resultMap type="com.ruoyi.pay.domain.PayWorkOrderEmployee" id="PayWorkOrderEmployeeResult">
<result property="id" column="id"/>
<result property="tenantId" column="tenant_id"/>
<result property="workOrderId" column="work_order_id"/>
<result property="employeeId" column="employee_id"/>
<result property="deptId" column="dept_id"/>
<result property="type" column="type"/>
<result property="empName" column="emp_name"/>
<result property="startTime" column="start_time"/>
<result property="endTime" column="end_time"/>
<result property="validHours" column="valid_hours"/>
<result property="date" column="date"/>
<result property="month" column="month"/>
<result property="processingType" column="processing_type"/>
<result property="processingPrice" column="processing_price"/>
<result property="processingNum" column="processing_num"/>
<result property="amount" column="amount"/>
<result property="helper" column="helper"/>
<result property="intime" column="intime"/>
</resultMap>
<select id="selectSgrWorkOrderEmployeeList1" resultMap="PayWorkOrderEmployeeResult">
<include refid="selectSgrWorkOrderEmployeeVo"/>
<where>
<if test="workOrderId != null "> and work_order_id = #{workOrderId}</if>
<if test="tenantId != null "> and tenant_id = #{tenantId}</if>
<if test="employeeId != null "> and employee_id = #{employeeId}</if>
<if test="deptId != null "> and dept_id = #{deptId}</if>
<if test="type != null and type != ''"> and type = #{type}</if>
<if test="empName != null and empName != ''"> and emp_name like concat('%', #{empName}, '%')</if>
<if test="startTime != null "> and start_time = #{startTime}</if>
<if test="endTime != null "> and end_time = #{endTime}</if>
<if test="validHours != null "> and valid_hours = #{validHours}</if>
<if test="date != null "> and date = #{date}</if>
<if test="month != null and month != ''"> and month = #{month}</if>
<if test="processingType != null and processingType != ''"> and processing_type = #{processingType}</if>
<if test="processingPrice != null "> and processing_price = #{processingPrice}</if>
<if test="processingNum != null "> and processing_num = #{processingNum}</if>
<if test="amount != null "> and amount = #{amount}</if>
<if test="helper != null "> and helper = #{helper}</if>
<if test="intime != null ">
<![CDATA[AND (DATE_FORMAT(`intime`, '%Y-%m') = DATE_FORMAT( #{intime}, '%Y-%m'))]]>
</if>
</where>
</select>
</mapper>
Loading…
Cancel
Save