From c6a0a1ba3a7da6a7969ced45eef779daece98150 Mon Sep 17 00:00:00 2001 From: hshansha Date: Wed, 21 May 2025 11:49:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=94=E5=87=BA=E5=8B=A4=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PayRequireAttendanceReportController.java | 34 ++++++++ .../IPayRequireAttendanceReportService.java | 2 + ...PayRequireAttendanceReportServiceImpl.java | 87 ++++++++++++++++++- 3 files changed, 122 insertions(+), 1 deletion(-) diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayRequireAttendanceReportController.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayRequireAttendanceReportController.java index d05e3ec..bb744d3 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayRequireAttendanceReportController.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayRequireAttendanceReportController.java @@ -1,9 +1,11 @@ package com.ruoyi.pay.controller; +import java.util.ArrayList; import java.util.List; import java.util.Arrays; import java.util.concurrent.TimeUnit; +import com.ruoyi.pay.domain.PayRequireAttendanceReport; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; @@ -24,6 +26,7 @@ import com.ruoyi.pay.domain.vo.PayRequireAttendanceReportVo; import com.ruoyi.pay.domain.bo.PayRequireAttendanceReportBo; import com.ruoyi.pay.service.IPayRequireAttendanceReportService; import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; /** * 应出勤报 @@ -59,6 +62,37 @@ public class PayRequireAttendanceReportController extends BaseController { ExcelUtil.exportExcel(list, "应出勤报", PayRequireAttendanceReportVo.class, response); } + /** + * 导出应出勤报列表 + */ + @SaCheckPermission("pay:requireAttendanceReport:import") + @Log(title = "应出勤报", businessType = BusinessType.EXPORT) + @PostMapping("/import") + public R importData(MultipartFile file, boolean updateSupport, String date,Long tenantId) throws Exception { + PayRequireAttendanceReportBo report = new PayRequireAttendanceReportBo(); + report.setYear(date.split("-")[0]); + report.setMonth(date.split("-")[1]); + List occupaReports= iPayRequireAttendanceReportService.queryList(report); + if(occupaReports!=null&&occupaReports.size()>0){//判断是否有当月应出勤信息 + if(!updateSupport){ + return R.ok("已有当月应出勤信息,如需更新请勾选更新选项"); + }else{//更新则删除之前信息 + List ids = new ArrayList<>(); + for(PayRequireAttendanceReportVo re:occupaReports){ + ids.add(re.getId()) ; + } + iPayRequireAttendanceReportService.deleteWithValidByIds(ids,true); + } + } + + List requireAttendanceReports = ExcelUtil.importExcel(file.getInputStream(), PayRequireAttendanceReportVo.class); + String message = iPayRequireAttendanceReportService.importAttendanceReport(requireAttendanceReports, updateSupport, date,tenantId); + return R.ok(message); + + } + + + /** * 获取应出勤报详细信息 * diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPayRequireAttendanceReportService.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPayRequireAttendanceReportService.java index 709a2c1..a775ca2 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPayRequireAttendanceReportService.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPayRequireAttendanceReportService.java @@ -46,4 +46,6 @@ public interface IPayRequireAttendanceReportService { * 校验并批量删除应出勤报信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + String importAttendanceReport(List requireAttendanceReports, boolean updateSupport, String date,Long tenantId); } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayRequireAttendanceReportServiceImpl.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayRequireAttendanceReportServiceImpl.java index 27dca1e..f887dab 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayRequireAttendanceReportServiceImpl.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayRequireAttendanceReportServiceImpl.java @@ -1,12 +1,15 @@ package com.ruoyi.pay.service.impl; import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.exception.ServiceException; 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.PayAttendance; +import com.ruoyi.pay.mapper.PayAttendanceMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.ruoyi.pay.domain.bo.PayRequireAttendanceReportBo; @@ -15,6 +18,8 @@ import com.ruoyi.pay.domain.PayRequireAttendanceReport; import com.ruoyi.pay.mapper.PayRequireAttendanceReportMapper; import com.ruoyi.pay.service.IPayRequireAttendanceReportService; +import java.io.IOException; +import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.Collection; @@ -30,7 +35,7 @@ import java.util.Collection; public class PayRequireAttendanceReportServiceImpl implements IPayRequireAttendanceReportService { private final PayRequireAttendanceReportMapper baseMapper; - + private final PayAttendanceMapper attendanceMapper; /** * 查询应出勤报 */ @@ -119,4 +124,84 @@ public class PayRequireAttendanceReportServiceImpl implements IPayRequireAttenda } return baseMapper.deleteBatchIds(ids) > 0; } + + @Override + public String importAttendanceReport(List attendanceReportList, boolean updateSupport, String date,Long tenantId) { + if (null==attendanceReportList || attendanceReportList.size() == 0) + { + throw new ServiceException("导入数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + + for (PayRequireAttendanceReportVo attendanceReport : attendanceReportList) + { //如果导入数据没有姓名则进行下一条 + if(attendanceReport.getEmpName()==null||attendanceReport.getEmpName().trim().equals("")){ + continue; + } + //应出勤天数,实际出勤天数,出勤小时数,加班小时数为null 则赋值0 + if(attendanceReport.getRequireDays()==null){ + attendanceReport.setRequireDays(Long.parseLong("0")); + } + if(attendanceReport.getAvtiveDays()==null){ + attendanceReport.setAvtiveDays(Long.parseLong("0")); + } + if(attendanceReport.getAttendanceHours()==null){ + attendanceReport.setAttendanceHours(new BigDecimal("0")); + } + if(attendanceReport.getOvertimeHours()==null){ + attendanceReport.setOvertimeHours(new BigDecimal("0")); + } + try + { + attendanceReport.setYear(date.split("-")[0]); + attendanceReport.setMonth(date.split("-")[1]); + String name = attendanceReport.getEmpName(); + //根据员工name查询员工id、部门id、部门名称 + + PayAttendance info = attendanceMapper.selectEmpInfoByName(name); + if(info==null){ + throw new IOException("请先在员工表中添加员工:"+name); + } + attendanceReport.setEmployeeId(info.getEmployeeId()); + attendanceReport.setDeptName(info.getDeptName()); + attendanceReport.setTenantId(tenantId); + // 验证是否存在这个人的报告 + PayRequireAttendanceReportBo bo = BeanUtil.toBean(attendanceReport,PayRequireAttendanceReportBo.class); + List r = this.queryList(bo); + if (null==r||r.size()==0) + { + this.insertByBo(bo); + successNum++; + if(updateSupport){ + successMsg.append("
" + successNum + attendanceReport.getEmpName()+ " 更新成功"); + }else{ + successMsg.append("
" + successNum + attendanceReport.getEmpName()+ "导入成功"); + } + } else { + failureNum++; + failureMsg.append("
" + failureNum + attendanceReport.getEmpName() + " 已存在"); + } + } + catch (Exception e) + { + failureNum++; + String msg = "
" + failureNum + attendanceReport.getEmpName() + " 导入失败:"; + failureMsg.append(msg + e.getMessage()); + System.err.println(msg+ e); + } + } + if (failureNum > 0) + { + failureMsg.insert(0, "导入成功"+successNum+"条,导入失败" + failureNum + " 条,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } + else + { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } }