package com.ruoyi.staff.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.mapper.AccountExpenseMapper; import com.ruoyi.account.pojo.AccountExpense; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.domain.SysUserDept; import com.ruoyi.project.system.mapper.SysUserDeptMapper; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.staff.dto.CalculateSalaryDto; import com.ruoyi.staff.mapper.StaffLeaveMapper; import com.ruoyi.staff.mapper.StaffOnJobMapper; import com.ruoyi.staff.mapper.StaffSalaryDetailMapper; import com.ruoyi.staff.pojo.*; import com.ruoyi.staff.mapper.StaffSalaryMainMapper; import com.ruoyi.staff.service.StaffSalaryDetailService; import com.ruoyi.staff.service.StaffSalaryMainService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** *

* 员工工资主表 服务实现类 *

* * @author 芯导软件(江苏)有限公司 * @since 2026-03-06 01:22:05 */ @Service public class StaffSalaryMainServiceImpl extends ServiceImpl implements StaffSalaryMainService { @Autowired private StaffSalaryMainMapper staffSalaryMainMapper; @Autowired private StaffSalaryDetailService staffSalaryDetailService; @Autowired private StaffSalaryDetailMapper staffSalaryDetailMapper; @Autowired private SchemeApplicableStaffServiceImpl schemeApplicableStaffService; @Autowired private SysUserDeptMapper sysUserDeptMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private StaffOnJobMapper staffOnJobMapper; @Autowired private StaffLeaveMapper staffLeaveMapper; @Autowired private AccountExpenseMapper accountExpenseMapper; @Override public AjaxResult listPage(Page page, StaffSalaryMain staffSalaryMain) { LambdaQueryWrapper staffSalaryMainLambdaQueryWrapper = new LambdaQueryWrapper<>(); if(staffSalaryMain != null){ if(StringUtils.isNotEmpty(staffSalaryMain.getSalaryTitle())){ staffSalaryMainLambdaQueryWrapper.like(StaffSalaryMain::getSalaryTitle, staffSalaryMain.getSalaryTitle()); } if(StringUtils.isNotEmpty(staffSalaryMain.getSalaryMonth())){ staffSalaryMainLambdaQueryWrapper.like(StaffSalaryMain::getSalaryMonth, staffSalaryMain.getSalaryMonth()); } if(staffSalaryMain.getStatus() != null){ staffSalaryMainLambdaQueryWrapper.eq(StaffSalaryMain::getStatus, staffSalaryMain.getStatus()); } } Page page1 = staffSalaryMainMapper.selectPage(page, staffSalaryMainLambdaQueryWrapper); page1.getRecords().forEach(main -> { List staffSalaryDetailList = staffSalaryDetailMapper.selectList(new LambdaQueryWrapper().eq(StaffSalaryDetail::getMainId, main.getId())); main.setStaffSalaryDetailList(staffSalaryDetailList); }); return AjaxResult.success(page1); } @Override public AjaxResult add(StaffSalaryMain staffSalaryMain) { staffSalaryMainMapper.insert(staffSalaryMain); staffSalaryMain.getStaffSalaryDetailList().forEach(detail -> { detail.setMainId(staffSalaryMain.getId()); }); staffSalaryDetailService.saveBatch(staffSalaryMain.getStaffSalaryDetailList()); return AjaxResult.success("新增成功"); } @Override public AjaxResult updateStaffSalaryMain(StaffSalaryMain staffSalaryMain) { if(staffSalaryMain == null){ return AjaxResult.error("参数错误"); } StaffSalaryMain staffSalaryMain1 = staffSalaryMainMapper.selectById(staffSalaryMain.getId()); if(staffSalaryMain1 == null){ return AjaxResult.error("参数错误"); } // 待审核不可编辑 // if(staffSalaryMain1.getStatus() > 3){ // return AjaxResult.error("待审核不可编辑"); // } staffSalaryMainMapper.updateById(staffSalaryMain); if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(staffSalaryMain.getStaffSalaryDetailList())){ staffSalaryDetailMapper.delete(new LambdaQueryWrapper().eq(StaffSalaryDetail::getMainId, staffSalaryMain.getId())); staffSalaryMain.getStaffSalaryDetailList().forEach(detail -> { detail.setMainId(staffSalaryMain.getId()); }); staffSalaryDetailService.saveBatch(staffSalaryMain.getStaffSalaryDetailList()); } // 和财务联动,新增支出 if(staffSalaryMain.getStatus().equals(5)){ AccountExpense accountExpense = new AccountExpense(); accountExpense.setBusinessType(3); accountExpense.setExpenseMoney(staffSalaryMain.getTotalSalary()); accountExpense.setBusinessId(staffSalaryMain.getId()); accountExpense.setExpenseDate(new Date()); accountExpense.setExpenseMethod("2"); accountExpense.setExpenseType("1"); accountExpense.setExpenseDescribed(staffSalaryMain.getSalaryTitle()); accountExpense.setNote(staffSalaryMain.getRemark()); accountExpense.setInputUser(SecurityUtils.getLoginUser().getNickName()); accountExpense.setInputTime(new Date()); accountExpenseMapper.insert(accountExpense); } return AjaxResult.success("修改成功"); } @Override public AjaxResult delete(List ids) { if(CollectionUtils.isEmpty(ids)){ return AjaxResult.error("参数错误"); } staffSalaryMainMapper.deleteBatchIds(ids); staffSalaryDetailMapper.delete(new LambdaQueryWrapper().in(StaffSalaryDetail::getMainId, ids)); return AjaxResult.success("删除成功"); } @Override public AjaxResult calculateSalary(CalculateSalaryDto calculateSalaryDto) { if(CollectionUtils.isEmpty(calculateSalaryDto.getIds())){ return AjaxResult.error("参数错误"); } List> longs = setSchemeApplicableStaffUserInfo(calculateSalaryDto.getIds()); // 通过部门ids获取用户信息 if(CollectionUtils.isEmpty(longs)){ return AjaxResult.error("无员工"); } List> mapList = new ArrayList<>(); for (Map id : longs) { // 判断员工是否为当月离职 if((Integer) id.get("staffState") == 0){ StaffLeave id1 = staffLeaveMapper.selectOne(new LambdaQueryWrapper() .eq(StaffLeave::getStaffOnJobId, id.get("id")) .like(StaffLeave::getCreateTime, calculateSalaryDto.getDate())); if(id1 == null){ continue; } } schemeApplicableStaffService.calculateByEmployeeId((Integer) id.get("id"),id,calculateSalaryDto.getDate()); mapList.add(id); } return AjaxResult.success(mapList); } public List> setSchemeApplicableStaffUserInfo(List ids) { if(CollectionUtils.isEmpty(ids)){ return new ArrayList<>(); } // 通过部门获取人员id return sysUserDeptMapper.setSchemeApplicableStaffUserInfo(ids); } }