diff --git a/ruoyi-pay/pom.xml b/ruoyi-pay/pom.xml index 78895e8..0a779f6 100644 --- a/ruoyi-pay/pom.xml +++ b/ruoyi-pay/pom.xml @@ -12,6 +12,12 @@ ruoyi-pay + + + com.alibaba.fastjson2 + fastjson2 + 2.0.9 + org.testng testng diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayDayWorkHoursController.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayDayWorkHoursController.java index da6338f..5598201 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayDayWorkHoursController.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayDayWorkHoursController.java @@ -49,7 +49,7 @@ public class PayDayWorkHoursController extends BaseController { */ @SaCheckPermission("pay:dayWorkHours:list") @GetMapping("/list") - public TableDataInfo list(PayDayWorkHoursBo bo, PageQuery pageQuery) { + public TableDataInfo 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 getInfo(@NotNull(message = "主键不能为空") + public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { return R.ok(iPayDayWorkHoursService.queryById(id)); } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayEmployeeInfoController.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayEmployeeInfoController.java index ddb5000..55dd67f 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayEmployeeInfoController.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayEmployeeInfoController.java @@ -49,7 +49,7 @@ public class PayEmployeeInfoController extends BaseController { return iPayEmployeeInfoService.queryPageList(bo, pageQuery); } /** - * 获取内外贸人员列表 + * 获取内外贸人员列表 业务员列表 */ @SaCheckPermission("pay:employeeInfo:list") @GetMapping("/salesman") @@ -122,7 +122,12 @@ public class PayEmployeeInfoController extends BaseController { @PutMapping("/edithour") public R edit(@RequestParam("oldHour") String oldHour, @RequestParam("newHour") String newHour,@RequestParam("tenantId") Long tenantId) { - return toAjax(iPayEmployeeInfoService.updateSgrEmployeeHour(oldHour,newHour,tenantId)); + int result = iPayEmployeeInfoService.updateSgrEmployeeHour(oldHour,newHour,tenantId); + if(result>0){ + return R.ok(); + }else{ + return R.fail("出勤小时:"+oldHour+" 不存在,系统没有做任何修改"); + } } /** diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PaySalaryReportController.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PaySalaryReportController.java index 33240c2..5dc49a8 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PaySalaryReportController.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PaySalaryReportController.java @@ -6,6 +6,8 @@ import java.util.concurrent.TimeUnit; import com.ruoyi.pay.domain.PaySalaryReport; import lombok.RequiredArgsConstructor; + +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; @@ -59,9 +61,10 @@ public class PaySalaryReportController extends BaseController { @SaCheckPermission("pay:salaryReport:export") @Log(title = "工资明细总", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(PaySalaryReportBo bo, HttpServletResponse response) { + public void export(PaySalaryReportBo bo, HttpServletRequest request, HttpServletResponse response) { List list = iPaySalaryReportService.queryList(bo); ExcelUtil.exportExcel(list, "工资明细总", PaySalaryReportVo.class, response); + iPaySalaryReportService.export(request, response, list); } /** @@ -86,6 +89,18 @@ public class PaySalaryReportController extends BaseController { public R 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 generateSalaryReport(@RequestParam(name = "date") String date, + @RequestParam(name = "updateSupport")boolean updateSupport, + @RequestParam(name = "tenantId")Long tenantId) { + return iPaySalaryReportService.generateSalaryReport(date,updateSupport,tenantId); + } /** * 修改工资明细总 diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/vo/ButieMoneyAndTypes.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/vo/ButieMoneyAndTypes.java new file mode 100644 index 0000000..4906752 --- /dev/null +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/vo/ButieMoneyAndTypes.java @@ -0,0 +1,45 @@ +package com.ruoyi.pay.domain.vo; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.math.BigDecimal; + +public class ButieMoneyAndTypes { + private String buTieName; + private BigDecimal money; + private String type; + + public String getBuTieName() { + return buTieName; + } + + public void setBuTieName(String buTieName) { + this.buTieName = buTieName; + } + + public BigDecimal getMoney() { + return money; + } + + public void setMoney(BigDecimal money) { + this.money = money; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("buTieName", getBuTieName()) + .append("money", getMoney()) + .append("type", getType()) + .toString(); + } +} + diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/vo/ExportBaohuoVo.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/vo/ExportBaohuoVo.java index 02c8d99..538c62c 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/vo/ExportBaohuoVo.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/vo/ExportBaohuoVo.java @@ -1,11 +1,12 @@ package com.ruoyi.pay.domain.vo; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.format.DateTimeFormat; import com.alibaba.excel.converters.localdate.LocalDateDateConverter; import com.fasterxml.jackson.annotation.JsonFormat; import java.math.BigDecimal; import java.util.Date; - +@ExcelIgnoreUnannotated public class ExportBaohuoVo { /** 入库时间 */ @JsonFormat(pattern = "yyyy-MM-dd") diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/enums/PayCalcType.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/enums/PayCalcType.java new file mode 100644 index 0000000..a9001ea --- /dev/null +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/enums/PayCalcType.java @@ -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; + } +} diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayBaohuoEmployeeMapper.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayBaohuoEmployeeMapper.java index 1b6df2f..202c7c1 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayBaohuoEmployeeMapper.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayBaohuoEmployeeMapper.java @@ -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 { + List selectSgrBaohuoEmployeeList1(PayBaohuoEmployeeBo bhEmployee); } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayButieEmplyeeMapper.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayButieEmplyeeMapper.java index c224746..274c196 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayButieEmplyeeMapper.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayButieEmplyeeMapper.java @@ -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 selectPayDayWorkHoursList2(PayDayWorkHoursQuery sgrDayWorkHoursQuery); - Page selectVoPage2(@Param("page") Page page, @Param(Constants.WRAPPER)LambdaQueryWrapper ew); + Page selectVoPage2(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper ew); - PayDayWorkHoursVo selectDetailById(Long id); + PayDayWorkHoursQuery selectDetailById(Long id); } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayEmployeeInfoMapper.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayEmployeeInfoMapper.java index 014865e..3c7b42e 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayEmployeeInfoMapper.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayEmployeeInfoMapper.java @@ -16,9 +16,14 @@ import java.util.List; * @date 2025-05-12 */ public interface PayEmployeeInfoMapper extends BaseMapperPlus { - @Update("update pay_employee_info e set e.hours_per_day = #{newHour} where e.hours_per_day = #{oldHour} and tenant_id = #{tenantId}") + @Update("update pay_employee_info e set e.hours_per_day = #{newHour} where e.hours_per_day = #{oldHour} and tenant_id = #{tenantId} and deleted = 0 ") int updateSgrEmployeeHour(@Param("oldHour") String oldHour, @Param("newHour")String newHour,@Param("tenantId") Long tenantId); @Select("select * from pay_employee_info e ,sys_dept d where e.dept_id=d.dept_id and deleted = 0 and (d.dept_name='外贸' or d.dept_name='内贸') and tenant_id = #{tenantId}") List getSalesmanList(@Param("tenantId") Long tenantId); + + PayEmployeeInfo selectSgrEmployeeInfoByIdHasDel(Long id); + + @Select("select dept_name from sys_dept where dept_id = #{deptId}") + String selectDeptNameByDeptNo(Long deptId); } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayWorkOrderEmployeeMapper.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayWorkOrderEmployeeMapper.java index 8631a9d..c138462 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayWorkOrderEmployeeMapper.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayWorkOrderEmployeeMapper.java @@ -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 { + List selectPayWorkOrderEmployeeList1(PayWorkOrderEmployeeBo woEmployee); } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPayDayWorkHoursService.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPayDayWorkHoursService.java index fa13d38..a1078f5 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPayDayWorkHoursService.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPayDayWorkHoursService.java @@ -23,7 +23,7 @@ public interface IPayDayWorkHoursService { /** * 查询日工工时 */ - PayDayWorkHoursVo queryById(Long id); + PayDayWorkHoursQuery queryById(Long id); /** * 查询日工工时列表 @@ -52,5 +52,5 @@ public interface IPayDayWorkHoursService { public List selectPayDayWorkHoursList2(PayDayWorkHoursQuery sgrDayWorkHoursQuery); - TableDataInfo queryPageList2(PayDayWorkHoursBo bo, PageQuery pageQuery); + TableDataInfo queryPageList2(PayDayWorkHoursBo bo, PageQuery pageQuery); } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPaySalaryReportService.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPaySalaryReportService.java index 7b3606d..b006a77 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPaySalaryReportService.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPaySalaryReportService.java @@ -1,11 +1,14 @@ 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; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.Collection; import java.util.List; @@ -51,4 +54,8 @@ public interface IPaySalaryReportService { TableDataInfo queryLastMonthReport(Long tenantId, PageQuery pageQuery); + + void export(HttpServletRequest request, HttpServletResponse response, List list); + + R generateSalaryReport(String date, boolean updateSupport, Long tenantId); } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayDayWorkHoursServiceImpl.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayDayWorkHoursServiceImpl.java index 47fa799..c70f081 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayDayWorkHoursServiceImpl.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayDayWorkHoursServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.pay.service.impl; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; @@ -49,7 +50,7 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService { * 查询日工工时 */ @Override - public PayDayWorkHoursVo queryById(Long id){ + public PayDayWorkHoursQuery queryById(Long id){ return baseMapper.selectDetailById(id); } @@ -66,9 +67,9 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService { * 查询日工工时列表 */ @Override - public TableDataInfo queryPageList2(PayDayWorkHoursBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage2(pageQuery.build(), lqw); + public TableDataInfo queryPageList2(PayDayWorkHoursBo bo, PageQuery pageQuery) { + QueryWrapper lqw = buildQueryWrapper2(bo); + Page result = baseMapper.selectVoPage2(pageQuery.build(), lqw); return TableDataInfo.build(result); } @@ -81,6 +82,19 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService { return baseMapper.selectVoList(lqw); } + private QueryWrapper buildQueryWrapper2(PayDayWorkHoursBo bo) { + Map params = bo.getParams(); + QueryWrapper lqw = Wrappers.query();; + lqw.eq(bo.getTenantId() != null, "d.tenant_id", bo.getTenantId()); + lqw.eq(bo.getDeptId() != null, "dept_id", bo.getDeptId()); + lqw.like(StringUtils.isNotBlank(bo.getDeptName()), "dept_name", bo.getDeptName()); + lqw.eq(bo.getEmployeeId() != null, "employee_id", bo.getEmployeeId()); + lqw.like(StringUtils.isNotBlank(bo.getEmpName()), "emp_name", bo.getEmpName()); + lqw.eq(bo.getDate() != null, "date", bo.getDate()); + lqw.eq(StringUtils.isNotBlank(bo.getDwYearMonth()), "year_month", bo.getDwYearMonth()); + lqw.eq(StringUtils.isNotBlank(bo.getNote()), "note", bo.getNote()); + return lqw; + } private LambdaQueryWrapper buildQueryWrapper(PayDayWorkHoursBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); @@ -103,7 +117,7 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService { public R insertByBo(PayDayWorkHoursQuery2 payDayWorkHoursQuery2) { //先拆分员工 然后每个员工信息存储到SgrDayWorkHoursQuery集合中 List 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()){ @@ -115,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); } //验证每个员工信息是否符合添加条件 不符合则提示退出 @@ -156,15 +171,17 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService { //存员工当日工作时间段 if (result > 0) { List sgrDwHoursContrasts = sgrDayWorkHoursQuery.getDwHoursContrasts(); - sgrDwHoursContrasts.parallelStream().forEachOrdered(sgrDwHoursContrast -> { + for(PayDwHoursContrast sgrDwHoursContrast:sgrDwHoursContrasts){ + sgrDwHoursContrast.setId(null); sgrDwHoursContrast.setDwHoursId(payDayWorkHour.getId()); + sgrDwHoursContrast.setTenantId(payDayWorkHoursQuery2.getTenantId()); if (sgrDwHoursContrast.getIsHelper() == 0) {//当不是帮工时 直接存员工的部门 sgrDwHoursContrast.setDeptId(sgrDayWorkHoursQuery.getDeptId()); sgrDwHoursContrast.setDeptName(sgrDayWorkHoursQuery.getDeptName()); } sgrDwHoursContrast.setHours(DateCompareUtil.getDatePoor(sgrDwHoursContrast.getStartTime(),sgrDwHoursContrast.getEndTime())); dwHoursContrastMapper.insert(sgrDwHoursContrast); - }); + }; }else{ return R.ok("系统存储数据库过程中出现故障!"); } @@ -206,7 +223,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) { //采用先删除对应的时间段,然后重新添加的方式 @@ -216,8 +234,10 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService { } //重新插入时间段 List sgrDwHoursContrasts = sgrDayWorkHoursQuery.getDwHoursContrasts(); - sgrDwHoursContrasts.parallelStream().forEachOrdered(sgrDwHoursContrast -> { + sgrDwHoursContrasts.stream().forEachOrdered(sgrDwHoursContrast -> { + sgrDwHoursContrast.setId(null); sgrDwHoursContrast.setDwHoursId(payDayWorkHour.getId()); + sgrDwHoursContrast.setTenantId(sgrDayWorkHoursQuery.getTenantId()); if (sgrDwHoursContrast.getIsHelper() == 0) {//当不是帮工时 直接存员工的部门 sgrDwHoursContrast.setDeptId(sgrDayWorkHoursQuery.getDeptId()); sgrDwHoursContrast.setDeptName(sgrDayWorkHoursQuery.getDeptName()); diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayEmployeeInfoServiceImpl.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayEmployeeInfoServiceImpl.java index 1b7101d..80eec9d 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayEmployeeInfoServiceImpl.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayEmployeeInfoServiceImpl.java @@ -98,6 +98,7 @@ public class PayEmployeeInfoServiceImpl implements IPayEmployeeInfoService { lqw.eq(bo.getHtstime() != null, PayEmployeeInfo::getHtstime, bo.getHtstime()); lqw.eq(bo.getHtetime() != null, PayEmployeeInfo::getHtetime, bo.getHtetime()); lqw.eq(bo.getDeleted() != null, PayEmployeeInfo::getDeleted, bo.getDeleted()); + lqw.eq(bo.getDeleted() == null, PayEmployeeInfo::getDeleted, 0); return lqw; } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PaySalaryReportServiceImpl.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PaySalaryReportServiceImpl.java index 041db49..a3addbc 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PaySalaryReportServiceImpl.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PaySalaryReportServiceImpl.java @@ -1,24 +1,37 @@ package com.ruoyi.pay.service.impl; 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.*; +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 java.util.List; -import java.util.Map; -import java.util.Collection; +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; /** * 工资明细总Service业务层处理 @@ -31,6 +44,41 @@ import java.util.Collection; 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; + /** * 查询工资明细总 @@ -158,4 +206,426 @@ public class PaySalaryReportServiceImpl implements IPaySalaryReportService { return baseMapper.deleteBatchIds(ids) > 0; } + @Override + public void export(HttpServletRequest request, HttpServletResponse response, List list) { + //创建excel表头 + List column = new ArrayList<>(); + column.add("年"); + column.add("月"); + column.add("部门名称"); + column.add("员工姓名"); + column.add("基本工资"); + column.add("实际出勤天数"); + column.add("实际出勤小时数"); + column.add("出勤工时"); + column.add("包活工时"); + column.add("加班工时"); + column.add("日工帮工工时"); + column.add("日工工资"); + column.add("包活工资"); + column.add("加班工资"); + column.add("帮工工资"); + + //解决导出不同月份数据 并且月份中补贴项不同的情况 + List allButie=new ArrayList<>(); + for(PaySalaryReportVo report : list){ + String jsonString = report.getAllButieData(); + List butieMoney = JSON.parseArray(jsonString, ButieMoneyAndTypes.class); + allButie.addAll(butieMoney); + } + List buties = allButie.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() + -> new TreeSet(Comparator.comparing(ButieMoneyAndTypes :: getBuTieName))), ArrayList::new)); + //获取type类型为1的补贴项 + List butie1 = buties.stream().filter(butieMoney -> "1".equals(butieMoney.getType())).collect(Collectors.toList()); + //获取type类型为0的补贴项 + List butie0 = buties.stream().filter(butieMoney -> "0".equals(butieMoney.getType())).collect(Collectors.toList()); + //循环遍历补贴项 + for (ButieMoneyAndTypes butie : butie1) { + column.add(butie.getBuTieName()); + } + column.add("应付工资"); + for (ButieMoneyAndTypes butie : butie0) { + column.add(butie.getBuTieName()); + } + //合并type补贴项 1的在前面 + butie1.addAll(butie0); + column.add("实发工资"); + column.add("开户行"); + column.add("银行卡号"); + column.add("备注说明"); //补贴项中有一项客户起名备注导致导出时被覆盖为真正的备注信息,这备注改名为备注说明避免上述情况 + + //表头对应的数据 + List> data = new ArrayList<>(); + + //遍历获取到的需要导出的数据,k要和表头一样 + for (int i = 0; i < list.size(); i++) { + Map dataMap = new HashMap<>(); + PaySalaryReportVo sr = list.get(i); + int j = 0; + dataMap.put(column.get(j), sr.getYear()); + dataMap.put(column.get(++j), sr.getMonth()); + dataMap.put(column.get(++j), sr.getDeptName()); + dataMap.put(column.get(++j), sr.getEmployeeName()); + dataMap.put(column.get(++j), new BigDecimal(sr.getBasicSalary().stripTrailingZeros().toPlainString())); + dataMap.put(column.get(++j), sr.getActuallyDays()); + dataMap.put(column.get(++j), sr.getActuallyHours()); + dataMap.put(column.get(++j), sr.getDayWorkHours()); + dataMap.put(column.get(++j), sr.getWorkOrderHours()); + dataMap.put(column.get(++j), sr.getOvertimeWorkHours()); + dataMap.put(column.get(++j), sr.getRigongHelpHours()); //客户要求添加日工帮工工时展示 + dataMap.put(column.get(++j), new BigDecimal(sr.getDayWorkPay().stripTrailingZeros().toPlainString())); + dataMap.put(column.get(++j), new BigDecimal(sr.getWorkOrderPay().stripTrailingZeros().toPlainString())); + dataMap.put(column.get(++j), new BigDecimal(sr.getOvertime().stripTrailingZeros().toPlainString())); + dataMap.put(column.get(++j), new BigDecimal(sr.getBanggongPay().stripTrailingZeros().toPlainString())); + boolean flag2 = false; + //循环遍历补贴项 + for (ButieMoneyAndTypes butie : butie1) { + // 获取该员工的补贴项 + List butieMoneyList = JSON.parseArray(sr.getAllButieData(), ButieMoneyAndTypes.class); + // 获取到循环列对应的补贴项 + List filterList = butieMoneyList.stream().filter(s -> s.getBuTieName().equals(butie.getBuTieName())).collect(Collectors.toList()); + //补贴项完毕 添加应付工资 后面继续添加扣减项 + if ("0".equals(butie.getType()) && !flag2) { // 扣减项 + flag2 = true; + dataMap.put(column.get(++j), new BigDecimal(sr.getShoudPayMoney().stripTrailingZeros().toPlainString())); + } + //判断是否存在该项补贴 不存在存0 + if(filterList!=null&&filterList.size()>0){ + // 获取对应的补贴金额并去掉金额末尾多余的0 + BigDecimal money = new BigDecimal(filterList.get(0).getMoney().stripTrailingZeros().toPlainString()); + + if (column.get(++j).equals(butie.getBuTieName())) { + dataMap.put(column.get(j), money); + } + }else{ + if (column.get(++j).equals(butie.getBuTieName())) { + dataMap.put(column.get(j), new BigDecimal("0").stripTrailingZeros().toPlainString()); + } + } + + } + dataMap.put(column.get(++j), new BigDecimal(sr.getActuallyPayMoney().stripTrailingZeros().toPlainString())); + PayEmployeeInfo empInfo = payEmployeeInfoMapper.selectSgrEmployeeInfoByIdHasDel(sr.getEmployeeId()); + if (ObjectUtil.isNotNull(empInfo)) { + dataMap.put(column.get(++j), empInfo.getOpeningBank()); + dataMap.put(column.get(++j), empInfo.getBankCardNumber()); + dataMap.put(column.get(++j), sr.getNote()); + data.add(dataMap); + } + } + + //调用导出工具类 + SalaryExportUtil.exportExcel("工资明细表", column, data, request, response); + + } + + @Override + @Transactional + public R 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 sgrSalaryReports = this.queryList(re); + if (sgrSalaryReports != null && sgrSalaryReports.size() > 0) { + if (updateSupport) { + //已有本月数据 做更新操作 + List collect = sgrSalaryReports.stream().map(PaySalaryReportVo::getId).collect(Collectors.toList()); + baseMapper.deleteBatchIds(collect); + } else { + return R.ok("如需更新生成报表,请勾选更新"); + } + } + + //1.拿到所有员工信息 + //测试单个员工 +/* SgrEmployeeInfo emp =new SgrEmployeeInfo(); + emp.setName("卢志伟"); + List employeeInfoList = sgrEmployeeInfoMapper.selectSgrEmployeeInfoList(emp);*/ + PayEmployeeInfoBo employeeInfoBo = new PayEmployeeInfoBo(); + employeeInfoBo.setTenantId(tenantId); + List employeeInfoList = employeeInfoService.queryList(employeeInfoBo); + + //获取所有补贴类型 + PayButieBo butiebo = new PayButieBo(); + butiebo.setTenantId(tenantId); + List sgrButies = butieService.queryList(butiebo); + for (PayEmployeeInfoVo employeeInfo : employeeInfoList) { + if (employeeInfo.getPayCalcType() == null) { + failedNums++; + failedMsg.append("
" + employeeInfo.getName() + ":的工资计算类型不能为空"); + continue; + } + if (employeeInfo.getBasicSalary() == null) { + failedNums++; + failedMsg.append("
" + employeeInfo.getName() + ":的基本工资信息不能为空"); + continue; + } + PaySalaryReport sgrSalaryReport = new PaySalaryReport(); + String empName = employeeInfo.getName(); + sgrSalaryReport.setTenantId(tenantId); + 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 attendanceReports = payRequireAttendanceReportService.queryList(attendanceReport1); + if (attendanceReports != null && attendanceReports.size() > 0) { + attendanceReport = attendanceReports.get(0); + if (attendanceReport.getRequireDays().equals(0L)) { + failedNums++; + failedMsg.append("
错误:" + 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("
未找到:" + 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 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 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 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); + woEmployee.setTenantId(tenantId); + List 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.setTenantId(tenantId); + bhEmployee.setEmpName(empName); + bhEmployee.setIntime(yearMonth); + List 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 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 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/17、17/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("
" + employeeInfo.getName() + "操作成功"); + } else { + failedNums++; + failedMsg.append("
" + 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()); + + } } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/util/SalaryExportUtil.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/util/SalaryExportUtil.java new file mode 100644 index 0000000..07127d9 --- /dev/null +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/util/SalaryExportUtil.java @@ -0,0 +1,81 @@ +package com.ruoyi.pay.util; + +import org.apache.poi.hssf.usermodel.HSSFFont; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.IndexedColors; +import sun.misc.BASE64Encoder; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.util.List; +import java.util.Map; + +public class SalaryExportUtil { + /** + * @param sheetName 工作表的名字 + * @param column 列名 + * @param data 需要导出的数据 ( map的键定义为列的名字 一定要和column中的列明保持一致 ) + * @param response + */ + public static void exportExcel(String sheetName, List column, List> data, HttpServletRequest request, HttpServletResponse response){ + //创建工作薄 + HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); + //创建sheet + HSSFSheet sheet = hssfWorkbook.createSheet(sheetName); + // 表头 + HSSFRow headRow = sheet.createRow(0); + //设置表头背景填充色 + CellStyle style = hssfWorkbook.createCellStyle(); + style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + //设置表头字体颜色 + HSSFFont font = hssfWorkbook.createFont(); + font.setColor(IndexedColors.WHITE.getIndex()); + font.setBold(true); + style.setFont(font); + + for (int i = 0; i < column.size(); i++){ + Cell titleCell =headRow.createCell(i); + titleCell.setCellStyle(style); + titleCell.setCellValue(column.get(i)); + } + + for (int i = 0; i < data.size(); i++) { + HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); + for (int x = 0; x < column.size(); x++) { + dataRow.createCell(x).setCellValue(data.get(i).get(column.get(x))==null?"":data.get(i).get(column.get(x)).toString()); + } + } + + response.setContentType("application/vnd.ms-excel"); + + try { + //获取浏览器名称 + String agent=request.getHeader("user-agent"); + String filename=sheetName+".xls"; + //不同浏览器需要对文件名做特殊处理 + if (agent.contains("Firefox")) { // 火狐浏览器 + filename = "=?UTF-8?B?" + + new BASE64Encoder().encode(filename.getBytes("utf-8")) + + "?="; + filename = filename.replaceAll("\r\n", ""); + } else { // IE及其他浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + filename = filename.replace("+"," "); + } + //推送浏览器 + response.setHeader("Content-Disposition","attachment;filename="+filename); + hssfWorkbook.write(response.getOutputStream()); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} + diff --git a/ruoyi-pay/src/main/resources/mapper/pay/PayBaohuoEmployeeMapper.xml b/ruoyi-pay/src/main/resources/mapper/pay/PayBaohuoEmployeeMapper.xml new file mode 100644 index 0000000..f8f575c --- /dev/null +++ b/ruoyi-pay/src/main/resources/mapper/pay/PayBaohuoEmployeeMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, wo_id, emp_id, dept_id, emp_name, amount, month, helper, intime from pay_baohuo_employee + + + + diff --git a/ruoyi-pay/src/main/resources/mapper/pay/PayButieEmplyeeMapper.xml b/ruoyi-pay/src/main/resources/mapper/pay/PayButieEmplyeeMapper.xml index 739fa85..feb5203 100644 --- a/ruoyi-pay/src/main/resources/mapper/pay/PayButieEmplyeeMapper.xml +++ b/ruoyi-pay/src/main/resources/mapper/pay/PayButieEmplyeeMapper.xml @@ -17,6 +17,4 @@ - - diff --git a/ruoyi-pay/src/main/resources/mapper/pay/PayDayWorkHoursMapper.xml b/ruoyi-pay/src/main/resources/mapper/pay/PayDayWorkHoursMapper.xml index a82cc39..7fba2df 100644 --- a/ruoyi-pay/src/main/resources/mapper/pay/PayDayWorkHoursMapper.xml +++ b/ruoyi-pay/src/main/resources/mapper/pay/PayDayWorkHoursMapper.xml @@ -53,12 +53,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and note = #{note} + + + where id = #{id} + diff --git a/ruoyi-pay/src/main/resources/mapper/pay/PayWorkOrderEmployeeMapper.xml b/ruoyi-pay/src/main/resources/mapper/pay/PayWorkOrderEmployeeMapper.xml new file mode 100644 index 0000000..729f299 --- /dev/null +++ b/ruoyi-pay/src/main/resources/mapper/pay/PayWorkOrderEmployeeMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select id, work_order_id, employee_id, dept_id, type, emp_name, start_time, end_time, valid_hours, date, month, processing_type, processing_price, processing_num, amount, helper,intime from pay_work_order_employee + + + +