This commit is contained in:
andy 2025-06-09 13:07:05 +08:00
parent c5ea125790
commit 2e09ba2ec6
19 changed files with 600 additions and 351 deletions

View File

@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 考勤统计Mapper接口
@ -61,4 +62,6 @@ public interface RzAttendanceStatisticalMapper extends BaseMapper<RzAttendanceSt
*/
public List<RzAttendanceStatistical> queryStatisticalByMonth(Date month);
}

View File

@ -188,7 +188,7 @@ public class RzAttendanceStatisticalServiceImpl extends ServiceImpl<RzAttendance
rzAttendanceStatistical.setStaffId(sysStaff.getUserId());
rzAttendanceStatistical.setName(sysStaff.getName());
rzAttendanceStatistical.setMonth(date);
rzAttendanceStatistical.setShouldAttendance(new BigDecimal(ParamUtils.getMonthWorkDayNum(DateUtils.getYear(date), DateUtils.getMonth(date))).multiply(new BigDecimal("8.00")));
rzAttendanceStatistical.setShouldAttendance(new BigDecimal(ParamUtils.getMonthWorkDayNum(DateUtils.getYear(date), DateUtils.getMonth(date))).multiply(Constants.DAY_WORK_HOUR));
rzAttendanceStatistical.setDeptId(sysStaff.getDeptId());
rzAttendanceStatistical.setAbsenteeism(new BigDecimal(0));
getBaseMapper().insert(rzAttendanceStatistical);

View File

@ -1,6 +1,7 @@
package com.evo.common.utils;
import java.lang.management.ManagementFactory;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
@ -195,16 +196,28 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
}
public static Integer getBetweenYear(Date start, Date end){
Calendar currentDate = Calendar.getInstance();
currentDate.setTime(start);
int startYear = currentDate.get(Calendar.YEAR);
public static Integer getBetweenYear(Date start, Date end, Integer offsetDay){
Calendar cal1 = Calendar.getInstance();
cal1.setTime(start);
Long days = new BigDecimal(getBetweenDays(start, end)).add(new BigDecimal(offsetDay)).longValue();
int yearsDiff = 0;
long remainingDays = days;
while (remainingDays >= 365) {
int year = cal1.get(Calendar.YEAR) + yearsDiff;
int daysInYear = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 366 : 365;
if (remainingDays >= daysInYear) {
remainingDays -= daysInYear;
yearsDiff++;
} else {
break;
}
}
// 将输入的Date转换为Calendar以便获取年月信息
Calendar inputCalendar = Calendar.getInstance();
inputCalendar.setTime(end);
int endYear = inputCalendar.get(Calendar.YEAR);
return endYear-startYear;
return yearsDiff;
}
public static Integer getBetweenYearByDays(Date start, Date end){
return getBetweenYear(start, end, 0);
}
public static Integer getBetweenMonth(Date start, Date end){
@ -223,6 +236,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
return monthsDiff;
}
public static Date getMonthFirst(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

View File

@ -46,12 +46,30 @@ public class ParamUtils {
this.rzHolidayService = rzHolidayService;
}
/***
* 不住宿的实习生人员
* @return
*/
public static List<String> getInternNotAccommodation(){
RzSysParam param= paramService.getRzSysParam("不住宿的实习生人员名单", "intern_not_accommodation","王习,乔克俭","不住宿的实习生人员名单");
return Collections.asList(param.getParamValue().split(","));
}
/***
* 不住宿的实习生人员
* @return
*/
public static List<String> getInternDailyWage(){
RzSysParam param= paramService.getRzSysParam("实习生不住宿的日薪人员名单", "intern_not_accommodation","乔克俭","实习生不住宿的日薪人员名单");
return Collections.asList(param.getParamValue().split(","));
}
/***
* 获取全局静态文件地址
* @return
*/
public static String getGlobalStaticUrl(){
RzSysParam param= paramService.getRzSysParam("静态地址URL", "static_url","http://192.168.16.1:8081","静态文件的url地址");
RzSysParam param= paramService.getRzSysParam("静态地址URL", "static_url","http://192.168.5.12:8088","静态文件的url地址");
return param.getParamValue();
}

View File

@ -310,18 +310,17 @@ public class ExcelUtilSs<T>{
// 取出一共有多少个sheet.
double sheetNo = 0;
sheetNo = sheetNameList.size();
List<Object[]> fields2 = new ArrayList<>();
fields2.addAll(fields);
for (int index = 0; index <= sheetNo; index++){
createSheet(sheetNo, index);
//sheet1和后边的sheet表头不一致所以需要分开处理
// 产生一行
Row row = sheet.createRow(0);
sheet.addMergedRegion(new CellRangeAddress(0,0,0,25));
for(int i = 0; i<26; i++){
Cell cell = row.createCell(i);
cell.setCellStyle(styles.get("title"));
}
Row row2 = sheet.getRow(0);
Cell cell = row2.getCell(0);
sheet.addMergedRegion(new CellRangeAddress(0,0,0,fields2.size()-1));
Cell cell = row.createCell(0);
cell.setCellStyle(styles.get("title"));
if(index == 0){
cell.setCellValue(this.title+"("+this.sheetName+")");
}else{
@ -332,22 +331,17 @@ public class ExcelUtilSs<T>{
row = sheet.createRow(1);
// 写入各个字段的列头名称
//当index为0时,默认是第一个sheet,需要把list[1]姓名列删掉
List<Object[]> fields2 = new ArrayList<>();
fields2.addAll(fields);
for (int i = 0; i < fields2.size();i++){
Object[] os = fields2.get(i);
Excel excel = (Excel) os[1];
this.createCell(excel, row, column++,index);
}
// 产生一行
Row rows = sheet.createRow(list.size()+3);
sheet.addMergedRegion(new CellRangeAddress(list.size()+3,list.size()+3,0,25));
for(int i = 0; i<26; i++){
Cell cells = rows.createCell(i);
cells.setCellStyle(styles.get("footer"));
}
Row rows2 = sheet.getRow(list.size()+3);
Cell cells = rows2.getCell(0);
Integer lastIndex = (index == 0 ? list.size() :this.lists.get(index-1).size())+5;
Row rows = sheet.createRow( lastIndex);
sheet.addMergedRegion(new CellRangeAddress(lastIndex,lastIndex,0,fields2.size()-1));
Cell cells = rows.createCell(0);
cells.setCellStyle(styles.get("footer"));
cells.setCellValue(this.footer);
if (Type.EXPORT.equals(type)){
@ -398,11 +392,13 @@ public class ExcelUtilSs<T>{
public void fillExcelData(int index, Row row){
int startNo = 0;
int endNo = 0;
List<T> list = this.list;
if(index == 0){
startNo = index * sheetSize;
endNo = Math.min(startNo + sheetSize, list.size());
} else{
endNo = Math.min(startNo + sheetSize, lists.get(index-1).size());
list = this.lists.get(index-1);
}
for (int i = startNo; i < endNo; i++){
row = sheet.createRow(i + 2 - startNo);

View File

@ -1,44 +1,32 @@
package com.evo.finance.controller;
import com.evo.common.annotation.Log;
import com.evo.common.constant.Constants;
import com.evo.common.core.controller.BaseController;
import com.evo.common.core.domain.AjaxResult;
import com.evo.common.core.domain.entity.SysDept;
import com.evo.common.core.domain.entity.SysDictData;
import com.evo.common.core.page.TableDataInfo;
import com.evo.common.enums.BusinessType;
import com.evo.common.utils.DataUtils;
import com.evo.common.utils.StringUtils;
import com.evo.common.utils.poi.ExcelUtilSs;
import com.evo.finance.domain.RzSalaryDetail;
import com.evo.finance.domain.vo.SalaryVo;
import com.evo.finance.service.IRzSalaryDetailService;
import com.evo.system.mapper.SysDictDataMapper;
import com.evo.system.service.ISysDeptService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import com.evo.attendance.domain.vo.RzAttendanceDetailVO;
import com.evo.attendance.domain.vo.RzSalaryVo;
import com.evo.common.constant.Constants;
import com.evo.common.core.domain.entity.SysDept;
import com.evo.common.core.domain.entity.SysDictData;
import com.evo.common.utils.DataUtils;
import com.evo.common.utils.StringUtils;
import com.evo.common.utils.poi.ExcelUtil;
import com.evo.common.utils.poi.ExcelUtilSs;
import com.evo.finance.domain.vo.SalaryVo;
import com.evo.system.mapper.SysDictDataMapper;
import com.evo.system.service.ISysDeptService;
import org.springframework.beans.BeanUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.evo.common.annotation.Log;
import com.evo.common.core.controller.BaseController;
import com.evo.common.core.domain.AjaxResult;
import com.evo.common.enums.BusinessType;
import com.evo.finance.domain.RzSalaryDetail;
import com.evo.finance.service.IRzSalaryDetailService;
import com.evo.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
/**
* 工资详情Controller
*
@ -138,20 +126,20 @@ public class RzSalaryDetailController extends BaseController
sheetNameList.add(sysDept.getDeptName());
//部门小计
SalaryVo xj_salaryVo = new SalaryVo();
xj_salaryVo.setBasicSalary(new BigDecimal("0.00"));
// xj_salaryVo.setBasicSalary(new BigDecimal("0.00"));
xj_salaryVo.setName("小计:");
//查询部门下的数据
List<RzSalaryDetail> pay_list = rzSalaryDetailService.selectSalaryDetailByDeptId(sysDept.getDeptId(),rzSalaryDetail.getMonth());
for (RzSalaryDetail salaryDetail : pay_list) {
salaryVo = new SalaryVo();
xj_salaryVo.setBasicSalary(xj_salaryVo.getBasicSalary().add(salaryDetail.getBasicSalary()));
if(StringUtils.isNull(xj_salaryVo.getOvertimeSalary())){
xj_salaryVo.setOvertimeSalary(new BigDecimal("0.00"));
}
xj_salaryVo.setOvertimeSalary(xj_salaryVo.getOvertimeSalary().add(salaryDetail.getOvertimeSalary()));
if(StringUtils.isNull(xj_salaryVo.getLevelSubsidies())){
xj_salaryVo.setLevelSubsidies(new BigDecimal("0.00"));
}
// xj_salaryVo.setBasicSalary(xj_salaryVo.getBasicSalary().add(salaryDetail.getBasicSalary()));
// if(StringUtils.isNull(xj_salaryVo.getOvertimeSalary())){
// xj_salaryVo.setOvertimeSalary(new BigDecimal("0.00"));
// }
// xj_salaryVo.setOvertimeSalary(xj_salaryVo.getOvertimeSalary().add(salaryDetail.getOvertimeSalary()));
// if(StringUtils.isNull(xj_salaryVo.getLevelSubsidies())){
// xj_salaryVo.setLevelSubsidies(new BigDecimal("0.00"));
// }
xj_salaryVo.setLevelSubsidies(xj_salaryVo.getLevelSubsidies().add(salaryDetail.getLevelSubsidies()));
if(StringUtils.isNull(xj_salaryVo.getContractSubsidies())){
xj_salaryVo.setContractSubsidies(new BigDecimal("0.00"));
@ -164,14 +152,14 @@ public class RzSalaryDetailController extends BaseController
if(StringUtils.isNull(xj_salaryVo.getSocialSubsidies())){
xj_salaryVo.setSocialSubsidies(new BigDecimal("0.00"));
}
xj_salaryVo.setSocialSubsidies(xj_salaryVo.getSocialSubsidies().add(salaryDetail.getSocialSubsidies()));
if(StringUtils.isNull(xj_salaryVo.getFullSubsidies())){
xj_salaryVo.setFullSubsidies(new BigDecimal("0.00"));
}
xj_salaryVo.setFullSubsidies(xj_salaryVo.getFullSubsidies().add(salaryDetail.getFullSubsidies()));
if(StringUtils.isNull(xj_salaryVo.getNightSubsidies())){
xj_salaryVo.setNightSubsidies(new BigDecimal("0.00"));
}
// xj_salaryVo.setSocialSubsidies(xj_salaryVo.getSocialSubsidies().add(salaryDetail.getSocialSubsidies()));
// if(StringUtils.isNull(xj_salaryVo.getFullSubsidies())){
// xj_salaryVo.setFullSubsidies(new BigDecimal("0.00"));
// }
// xj_salaryVo.setFullSubsidies(xj_salaryVo.getFullSubsidies().add(salaryDetail.getFullSubsidies()));
// if(StringUtils.isNull(xj_salaryVo.getNightSubsidies())){
// xj_salaryVo.setNightSubsidies(new BigDecimal("0.00"));
// }
xj_salaryVo.setNightSubsidies(xj_salaryVo.getNightSubsidies().add(salaryDetail.getNightSubsidies()));
if(StringUtils.isNull(xj_salaryVo.getDinnerSubsidies())){
xj_salaryVo.setDinnerSubsidies(new BigDecimal("0.00"));
@ -248,17 +236,17 @@ public class RzSalaryDetailController extends BaseController
//计算伊特总计数据
SalaryVo gj_salaryVo = new SalaryVo();
for (SalaryVo salaryVoz : list) {
if(StringUtils.isNull(gj_salaryVo.getBasicSalary())){
gj_salaryVo.setBasicSalary(new BigDecimal("0.00"));
}
gj_salaryVo.setBasicSalary(gj_salaryVo.getBasicSalary().add(salaryVoz.getBasicSalary()));
if(StringUtils.isNull(gj_salaryVo.getOvertimeSalary())){
gj_salaryVo.setOvertimeSalary(new BigDecimal("0.00"));
}
gj_salaryVo.setOvertimeSalary(gj_salaryVo.getOvertimeSalary().add(DataUtils.findDefaultValue(salaryVoz.getOvertimeSalary(), DataUtils.DEFAULT_VALUE)));
if(StringUtils.isNull(gj_salaryVo.getLevelSubsidies())){
gj_salaryVo.setLevelSubsidies(new BigDecimal("0.00"));
}
// if(StringUtils.isNull(gj_salaryVo.getBasicSalary())){
// gj_salaryVo.setBasicSalary(new BigDecimal("0.00"));
// }
// gj_salaryVo.setBasicSalary(gj_salaryVo.getBasicSalary().add(salaryVoz.getBasicSalary()));
// if(StringUtils.isNull(gj_salaryVo.getOvertimeSalary())){
// gj_salaryVo.setOvertimeSalary(new BigDecimal("0.00"));
// }
// gj_salaryVo.setOvertimeSalary(gj_salaryVo.getOvertimeSalary().add(DataUtils.findDefaultValue(salaryVoz.getOvertimeSalary(), DataUtils.DEFAULT_VALUE)));
// if(StringUtils.isNull(gj_salaryVo.getLevelSubsidies())){
// gj_salaryVo.setLevelSubsidies(new BigDecimal("0.00"));
// }
gj_salaryVo.setLevelSubsidies(gj_salaryVo.getLevelSubsidies().add(DataUtils.findDefaultValue(salaryVoz.getLevelSubsidies(), DataUtils.DEFAULT_VALUE)));
if(StringUtils.isNull(gj_salaryVo.getContractSubsidies())){
gj_salaryVo.setContractSubsidies(new BigDecimal("0.00"));
@ -271,14 +259,14 @@ public class RzSalaryDetailController extends BaseController
if(StringUtils.isNull(gj_salaryVo.getSocialSubsidies())){
gj_salaryVo.setSocialSubsidies(new BigDecimal("0.00"));
}
gj_salaryVo.setSocialSubsidies(gj_salaryVo.getSocialSubsidies().add(DataUtils.findDefaultValue(salaryVoz.getSocialSubsidies(), DataUtils.DEFAULT_VALUE)));
if(StringUtils.isNull(gj_salaryVo.getFullSubsidies())){
gj_salaryVo.setFullSubsidies(new BigDecimal("0.00"));
}
gj_salaryVo.setFullSubsidies(gj_salaryVo.getFullSubsidies().add(DataUtils.findDefaultValue(salaryVoz.getFullSubsidies(), DataUtils.DEFAULT_VALUE)));
if(StringUtils.isNull(gj_salaryVo.getNightSubsidies())){
gj_salaryVo.setNightSubsidies(new BigDecimal("0.00"));
}
// gj_salaryVo.setSocialSubsidies(gj_salaryVo.getSocialSubsidies().add(DataUtils.findDefaultValue(salaryVoz.getSocialSubsidies(), DataUtils.DEFAULT_VALUE)));
// if(StringUtils.isNull(gj_salaryVo.getFullSubsidies())){
// gj_salaryVo.setFullSubsidies(new BigDecimal("0.00"));
// }
// gj_salaryVo.setFullSubsidies(gj_salaryVo.getFullSubsidies().add(DataUtils.findDefaultValue(salaryVoz.getFullSubsidies(), DataUtils.DEFAULT_VALUE)));
// if(StringUtils.isNull(gj_salaryVo.getNightSubsidies())){
// gj_salaryVo.setNightSubsidies(new BigDecimal("0.00"));
// }
gj_salaryVo.setNightSubsidies(gj_salaryVo.getNightSubsidies().add(DataUtils.findDefaultValue(salaryVoz.getNightSubsidies(), DataUtils.DEFAULT_VALUE)));
if(StringUtils.isNull(gj_salaryVo.getDinnerSubsidies())){
gj_salaryVo.setDinnerSubsidies(new BigDecimal("0.00"));
@ -364,17 +352,17 @@ public class RzSalaryDetailController extends BaseController
List<RzSalaryDetail> f_list = rzSalaryDetailService.selectSalaryDetailByWbFlag(sysDictData.getDictValue(),rzSalaryDetail.getMonth());
for (RzSalaryDetail salaryDetail : f_list) {
salaryVo = new SalaryVo();
if(StringUtils.isNull(xj_salaryVo.getBasicSalary())){
xj_salaryVo.setBasicSalary(new BigDecimal("0.00"));
}
xj_salaryVo.setBasicSalary(xj_salaryVo.getBasicSalary().add(salaryDetail.getBasicSalary()));
if(StringUtils.isNull(xj_salaryVo.getOvertimeSalary())){
xj_salaryVo.setOvertimeSalary(new BigDecimal("0.00"));
}
xj_salaryVo.setOvertimeSalary(xj_salaryVo.getOvertimeSalary().add(salaryDetail.getOvertimeSalary()));
if(StringUtils.isNull(xj_salaryVo.getLevelSubsidies())){
xj_salaryVo.setLevelSubsidies(new BigDecimal("0.00"));
}
// if(StringUtils.isNull(xj_salaryVo.getBasicSalary())){
// xj_salaryVo.setBasicSalary(new BigDecimal("0.00"));
// }
// xj_salaryVo.setBasicSalary(xj_salaryVo.getBasicSalary().add(salaryDetail.getBasicSalary()));
// if(StringUtils.isNull(xj_salaryVo.getOvertimeSalary())){
// xj_salaryVo.setOvertimeSalary(new BigDecimal("0.00"));
// }
// xj_salaryVo.setOvertimeSalary(xj_salaryVo.getOvertimeSalary().add(salaryDetail.getOvertimeSalary()));
// if(StringUtils.isNull(xj_salaryVo.getLevelSubsidies())){
// xj_salaryVo.setLevelSubsidies(new BigDecimal("0.00"));
// }
xj_salaryVo.setLevelSubsidies(xj_salaryVo.getLevelSubsidies().add(salaryDetail.getLevelSubsidies()));
if(StringUtils.isNull(xj_salaryVo.getContractSubsidies())){
xj_salaryVo.setContractSubsidies(new BigDecimal("0.00"));
@ -387,14 +375,14 @@ public class RzSalaryDetailController extends BaseController
if(StringUtils.isNull(xj_salaryVo.getSocialSubsidies())){
xj_salaryVo.setSocialSubsidies(new BigDecimal("0.00"));
}
xj_salaryVo.setSocialSubsidies(xj_salaryVo.getSocialSubsidies().add(salaryDetail.getSocialSubsidies()));
if(StringUtils.isNull(xj_salaryVo.getFullSubsidies())){
xj_salaryVo.setFullSubsidies(new BigDecimal("0.00"));
}
xj_salaryVo.setFullSubsidies(xj_salaryVo.getFullSubsidies().add(salaryDetail.getFullSubsidies()));
if(StringUtils.isNull(xj_salaryVo.getNightSubsidies())){
xj_salaryVo.setNightSubsidies(new BigDecimal("0.00"));
}
// xj_salaryVo.setSocialSubsidies(xj_salaryVo.getSocialSubsidies().add(salaryDetail.getSocialSubsidies()));
// if(StringUtils.isNull(xj_salaryVo.getFullSubsidies())){
// xj_salaryVo.setFullSubsidies(new BigDecimal("0.00"));
// }
// xj_salaryVo.setFullSubsidies(xj_salaryVo.getFullSubsidies().add(salaryDetail.getFullSubsidies()));
// if(StringUtils.isNull(xj_salaryVo.getNightSubsidies())){
// xj_salaryVo.setNightSubsidies(new BigDecimal("0.00"));
// }
xj_salaryVo.setNightSubsidies(xj_salaryVo.getNightSubsidies().add(salaryDetail.getNightSubsidies()));
if(StringUtils.isNull(xj_salaryVo.getDinnerSubsidies())){
xj_salaryVo.setDinnerSubsidies(new BigDecimal("0.00"));
@ -465,13 +453,13 @@ public class RzSalaryDetailController extends BaseController
list0.add(salaryVo);
}
list.add(xj_salaryVo);
payRollZong.setBasicSalary(DataUtils.findDefaultValue(xj_salaryVo.getBasicSalary(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getBasicSalary(), DataUtils.DEFAULT_VALUE)));
payRollZong.setOvertimeSalary(DataUtils.findDefaultValue(xj_salaryVo.getOvertimeSalary(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getOvertimeSalary(), DataUtils.DEFAULT_VALUE)));
// payRollZong.setBasicSalary(DataUtils.findDefaultValue(xj_salaryVo.getBasicSalary(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getBasicSalary(), DataUtils.DEFAULT_VALUE)));
// payRollZong.setOvertimeSalary(DataUtils.findDefaultValue(xj_salaryVo.getOvertimeSalary(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getOvertimeSalary(), DataUtils.DEFAULT_VALUE)));
payRollZong.setLevelSubsidies(DataUtils.findDefaultValue(xj_salaryVo.getLevelSubsidies(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getLevelSubsidies(), DataUtils.DEFAULT_VALUE)));
payRollZong.setContractSubsidies(DataUtils.findDefaultValue(xj_salaryVo.getContractSubsidies(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getContractSubsidies(), DataUtils.DEFAULT_VALUE)));
payRollZong.setSenioritySalary(DataUtils.findDefaultValue(xj_salaryVo.getSenioritySalary(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getSenioritySalary(), DataUtils.DEFAULT_VALUE)));
payRollZong.setSocialSubsidies(DataUtils.findDefaultValue(xj_salaryVo.getSocialSubsidies(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getSocialSubsidies(), DataUtils.DEFAULT_VALUE)));
payRollZong.setFullSubsidies(DataUtils.findDefaultValue(xj_salaryVo.getFullSubsidies(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getFullSubsidies(), DataUtils.DEFAULT_VALUE)));
// payRollZong.setFullSubsidies(DataUtils.findDefaultValue(xj_salaryVo.getFullSubsidies(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getFullSubsidies(), DataUtils.DEFAULT_VALUE)));
payRollZong.setNightSubsidies(DataUtils.findDefaultValue(xj_salaryVo.getNightSubsidies(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getNightSubsidies(), DataUtils.DEFAULT_VALUE)));
payRollZong.setDinnerSubsidies(DataUtils.findDefaultValue(xj_salaryVo.getDinnerSubsidies(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getDinnerSubsidies(), DataUtils.DEFAULT_VALUE)));
payRollZong.setSubsidyOrBonus(DataUtils.findDefaultValue(xj_salaryVo.getSubsidyOrBonus(), DataUtils.DEFAULT_VALUE).add(DataUtils.findDefaultValue(payRollZong.getSubsidyOrBonus(), DataUtils.DEFAULT_VALUE)));
@ -499,15 +487,15 @@ public class RzSalaryDetailController extends BaseController
/**
* 导入销售提成
*/
@PreAuthorize("@ss.hasPermi('finance:financeDetail:importSalesCommissions')")
@Log(title = "导入销售提成", businessType = BusinessType.IMPORT)
@PostMapping("/importSalesCommissions")
public AjaxResult importSalesCommissions(MultipartFile file) throws Exception
{
ExcelUtil<RzSalaryVo> util = new ExcelUtil<>(RzSalaryVo.class);
List<RzSalaryVo> attendanceList = util.importExcel(file.getInputStream());
return success(rzSalaryDetailService.importSalesCommissions(attendanceList));
}
// @PreAuthorize("@ss.hasPermi('finance:financeDetail:importSalesCommissions')")
// @Log(title = "导入销售提成", businessType = BusinessType.IMPORT)
// @PostMapping("/importSalesCommissions")
// public AjaxResult importSalesCommissions(MultipartFile file) throws Exception
// {
// ExcelUtil<RzSalaryVo> util = new ExcelUtil<>(RzSalaryVo.class);
// List<RzSalaryVo> attendanceList = util.importExcel(file.getInputStream());
// return success(rzSalaryDetailService.importSalesCommissions(attendanceList));
// }
/*
* 导出工资详情列表
*/

View File

@ -12,14 +12,29 @@ public class SalaryVo {
/** 员工姓名 */
@Excel(name = "员工姓名")
private String name;
@Excel(name = "工资月份")
private String month;
/** 员工姓名 */
@Excel(name = "公司名称")
private String companyName;
// @Excel(name = "工资月份")
// private String month;
/** 基本工资 */
@Excel(name = "月工资")
private BigDecimal basicSalary;
/** 加班工资 */
@Excel(name = "加班工资")
private BigDecimal overtimeSalary;
private BigDecimal monthSalary;
/** 应出勤(小时) */
@Excel(name = "应出勤(小时)")
private BigDecimal shouldAttendance;
/** 实出勤(小时) */
@Excel(name = "实出勤(小时)")
private BigDecimal realAttendance;
// /** 基本工资 */
// @Excel(name = "基本工资")
// private BigDecimal basicSalary;
// /** 岗位工资 */
// @Excel(name = "岗位工资")
// private BigDecimal jobSalary;
// /** 加班工资 */
// @Excel(name = "加班工资")
// private BigDecimal overtimeSalary;
/** 学历补助 */
@Excel(name = "学历补助")
private BigDecimal levelSubsidies;
@ -32,15 +47,17 @@ public class SalaryVo {
/** 社保补助 */
@Excel(name = "社保补助")
private BigDecimal socialSubsidies;
/** 全勤奖 */
@Excel(name = "全勤奖")
private BigDecimal fullSubsidies;
// /** 全勤奖 */
// @Excel(name = "全勤奖")
// private BigDecimal fullSubsidies;
/** 夜班补助 */
@Excel(name = "夜班补助")
private BigDecimal nightSubsidies;
/** 夜餐补助 */
@Excel(name = "夜餐补助")
private BigDecimal dinnerSubsidies;
@Excel(name = "销售提成")
private BigDecimal salesCommission;
/** 其他补助 */
@Excel(name = "其他补助")
private BigDecimal subsidyOrBonus;
@ -87,4 +104,37 @@ public class SalaryVo {
@Excel(name = "实发工资")
private BigDecimal netPayroll;
public SalaryVo() {
}
// public SalaryVo(BigDecimal monthSalary, BigDecimal basicSalary, BigDecimal jobSalary, BigDecimal overtimeSalary, BigDecimal levelSubsidies, BigDecimal contractSubsidies, BigDecimal senioritySalary, BigDecimal socialSubsidies, BigDecimal fullSubsidies, BigDecimal nightSubsidies, BigDecimal dinnerSubsidies, BigDecimal subsidyOrBonus, BigDecimal absenteeismSalary, BigDecimal absenteeismSubsidies, BigDecimal mealFee, BigDecimal deductions, BigDecimal salary, BigDecimal payInsurance, BigDecimal salaryBeforeTax, BigDecimal totalWages, BigDecimal annualExemptionAmount, BigDecimal specialDeduction, BigDecimal slowDownTheDeduction, BigDecimal aggregatePersonalIncomeTax, BigDecimal taxPayable, BigDecimal netPayroll) {
public SalaryVo(BigDecimal monthSalary, BigDecimal levelSubsidies, BigDecimal contractSubsidies, BigDecimal senioritySalary, BigDecimal socialSubsidies, BigDecimal nightSubsidies, BigDecimal dinnerSubsidies, BigDecimal subsidyOrBonus, BigDecimal absenteeismSalary, BigDecimal absenteeismSubsidies, BigDecimal mealFee, BigDecimal deductions, BigDecimal salary, BigDecimal payInsurance, BigDecimal salaryBeforeTax, BigDecimal totalWages, BigDecimal annualExemptionAmount, BigDecimal specialDeduction, BigDecimal slowDownTheDeduction, BigDecimal aggregatePersonalIncomeTax, BigDecimal taxPayable, BigDecimal netPayroll, BigDecimal salesCommission) {
this.monthSalary = monthSalary;
// this.basicSalary = basicSalary;
// this.jobSalary = jobSalary;
this.levelSubsidies = levelSubsidies;
this.contractSubsidies = contractSubsidies;
this.senioritySalary = senioritySalary;
this.socialSubsidies = socialSubsidies;
// this.fullSubsidies = fullSubsidies;
this.nightSubsidies = nightSubsidies;
this.dinnerSubsidies = dinnerSubsidies;
this.subsidyOrBonus = subsidyOrBonus;
this.absenteeismSalary = absenteeismSalary;
this.absenteeismSubsidies = absenteeismSubsidies;
this.mealFee = mealFee;
this.deductions = deductions;
this.salary = salary;
this.payInsurance = payInsurance;
this.salaryBeforeTax = salaryBeforeTax;
this.totalWages = totalWages;
this.annualExemptionAmount = annualExemptionAmount;
this.specialDeduction = specialDeduction;
this.slowDownTheDeduction = slowDownTheDeduction;
this.aggregatePersonalIncomeTax = aggregatePersonalIncomeTax;
this.taxPayable = taxPayable;
this.netPayroll = netPayroll;
this.salesCommission = salesCommission;
}
}

View File

@ -86,9 +86,7 @@ public interface SalaryCalculationStrategyExchangeProcessor {
* @param rzSalaryDetail
*/
default void buildRzSalaryDetail(SysStaff sysStaff, SysStaffDetail detail, RzSalaryDetail rzSalaryDetail, RzAttendanceStatistical attendanceStatistical){
if(rzSalaryDetail.getName().equals("胡毅鹏")){
System.out.println(1111);
}
Date limitDate = DateUtils.addMonths(sysStaff.getEmploymentDate(), Integer.valueOf(String.valueOf(sysStaff.getWorkerTerm())));
Date limitMonth = null;
Date month = null;
@ -105,11 +103,16 @@ public interface SalaryCalculationStrategyExchangeProcessor {
//计算基础数据
monthSalary(limitMonth, month,limitDate,sysStaff,detail,rzSalaryDetail, attendanceStatistical);
//计算应发工资 合算月工资+加班工资+学历补助+合同补助+社保补助+工龄工资+全勤奖+加班工资+夜班补助+夜餐补助+其他补助+销售提成-餐费扣款-缺勤扣款-补助扣款
rzSalaryDetail.setSalary(rzSalaryDetail.getMonthSalary().add(rzSalaryDetail.getOvertimeSalary()).add(rzSalaryDetail.getNightSubsidies()).add(rzSalaryDetail.getDinnerSubsidies())
////计算应发工资 合算月工资+加班工资+学历补助+合同补助+社保补助+工龄工资+全勤奖+加班工资+夜班补助+夜餐补助+其他补助+销售提成-餐费扣款-补助扣款-其他扣款 (无需再-缺勤扣款 因为计算工资的时候, 是按照实际出勤计算的)
//计算应发工资 合算月工资+加班工资+学历补助+合同补助+社保补助+工龄工资+全勤奖+加班工资+夜班补助+夜餐补助+其他补助+销售提成-餐费扣款-补助扣款-其他扣款
rzSalaryDetail.setSalary(rzSalaryDetail.getMonthSalary().add(rzSalaryDetail.getNightSubsidies()).add(rzSalaryDetail.getDinnerSubsidies())
.add(DataUtils.findDefaultValue(rzSalaryDetail.getFullSubsidies(), DataUtils.DEFAULT_VALUE)).add(rzSalaryDetail.getLevelSubsidies()).add(rzSalaryDetail.getContractSubsidies()).add(rzSalaryDetail.getSocialSubsidies())
.add(rzSalaryDetail.getSenioritySalary()).add(rzSalaryDetail.getSubsidyOrBonus()).add(rzSalaryDetail.getSalesCommission()).subtract(rzSalaryDetail.getAbsenteeismSalary())
.subtract(rzSalaryDetail.getMealFee()).subtract(rzSalaryDetail.getAbsenteeismSubsidies()));
.add(rzSalaryDetail.getSenioritySalary()).add(rzSalaryDetail.getSubsidyOrBonus()).add(rzSalaryDetail.getSalesCommission())
.subtract(rzSalaryDetail.getMealFee()).subtract(rzSalaryDetail.getAbsenteeismSubsidies()).subtract(rzSalaryDetail.getDeductions()).subtract(rzSalaryDetail.getAbsenteeismSalary()));
//如果当前人员不打卡 则需要扣减缺勤工资
// if("".equals(sysStaff.getClockIn())){
// rzSalaryDetail.setSalary(rzSalaryDetail.getSalary());
// }
//五险一金
rzSalaryDetail.setAccumulationFund(detail.getAccumulationFund()); //公积金
rzSalaryDetail.setUnemploymentInsurance(detail.getUnemploymentInsurance()); //失业保险
@ -117,10 +120,11 @@ public interface SalaryCalculationStrategyExchangeProcessor {
rzSalaryDetail.setMedicalInsurance(detail.getMedicalInsurance()); //医疗保险
rzSalaryDetail.setEndowmentInsurance(detail.getEndowmentInsurance()); //养老保险
rzSalaryDetail.setEmploymentInjuryInsurance(detail.getEmploymentInjuryInsurance()); //工伤保险
//代缴社保
rzSalaryDetail.setPayInsurance(rzSalaryDetail.getAccumulationFund().add(rzSalaryDetail.getUnemploymentInsurance()).
add(rzSalaryDetail.getMaternityInsurance()).add(rzSalaryDetail.getMedicalInsurance()).add(rzSalaryDetail.getEndowmentInsurance()).add(rzSalaryDetail.getEmploymentInjuryInsurance()));
//税前工资 应发 - 社保 -公司缴纳
rzSalaryDetail.setSalaryBeforeTax(rzSalaryDetail.getSalary().subtract(rzSalaryDetail.getAccumulationFund()).subtract(rzSalaryDetail.getUnemploymentInsurance())
.subtract(rzSalaryDetail.getMaternityInsurance()).subtract(rzSalaryDetail.getMedicalInsurance())
.subtract(rzSalaryDetail.getEndowmentInsurance()).subtract(rzSalaryDetail.getEmploymentInjuryInsurance()).subtract(detail.getCountInsurance()));
rzSalaryDetail.setSalaryBeforeTax(rzSalaryDetail.getSalary().subtract(rzSalaryDetail.getPayInsurance()).subtract(detail.getCountInsurance()));
}
/***
@ -130,9 +134,8 @@ public interface SalaryCalculationStrategyExchangeProcessor {
default void subsidy(SysStaff sysStaff, SysStaffDetail detail, RzSalaryDetail rzSalaryDetail, RzAttendanceStatistical attendanceStatistical){
//计算实际出勤占比, 如果实际出勤小于应出勤的半数, 则社保有员工承担
//转正才享有
if(Constants.JOB_STATIS_1.equals(sysStaff.getStatus())){
// if(Constants.JOB_STATIS_1.equals(sysStaff.getStatus())){
detail = SubsidyCalculationUtils.subsidyCalculation(sysStaff, detail, null);
rzSalaryDetail.setMiddleSubsidies(new BigDecimal(attendanceStatistical.getMiddleShiftNumber()).multiply(new BigDecimal(String.valueOf(DataUtils.findDefaultValue(detail.getExtendeds().get(zbName), 0)))));
rzSalaryDetail.setNightSubsidies(new BigDecimal(attendanceStatistical.getNightNumber()).multiply(new BigDecimal(String.valueOf(DataUtils.findDefaultValue(detail.getExtendeds().get(ybName), 0)))));
rzSalaryDetail.setDinnerSubsidies(new BigDecimal(attendanceStatistical.getNightNumber()).multiply(new BigDecimal(String.valueOf(DataUtils.findDefaultValue(detail.getExtendeds().get(ycName), 0)))));
@ -143,7 +146,7 @@ public interface SalaryCalculationStrategyExchangeProcessor {
rzSalaryDetail.setSalesCommission(DataUtils.findDefaultValue(detail.getSalesCommission(), DataUtils.DEFAULT_VALUE));
//其他补助+固定补助
rzSalaryDetail.setSubsidyOrBonus(detail.getOtherSubsidies().add(detail.getFixedAllowance()));
}
// }
}
@ -167,37 +170,35 @@ public interface SalaryCalculationStrategyExchangeProcessor {
/***
* 计算扣款
*/
default void deduction(SysStaffDetail detail, RzSalaryDetail rzSalaryDetail, BigDecimal ycHours , BigDecimal cqHours){
default void deduction(Boolean isDk, SysStaffDetail detail, RzSalaryDetail rzSalaryDetail, BigDecimal ycHours , BigDecimal cqHours){
//其他扣款
rzSalaryDetail.setDeductions(detail.getDeductions());
//餐饮扣款
RzRestaurantStatistics rzRestaurantStatistics = SpringUtils.getBean(RzRestaurantStatisticsMapper.class).selectRzRestaurantStatisticsByUserIdAndDate(detail.getStaffId(),rzSalaryDetail.getMonth());
rzSalaryDetail.setMealFee(rzRestaurantStatistics.getPersonalSumConsumption());
//超过1个工作日时长
if(ycHours.compareTo(cqHours) != 0 && ycHours.subtract(cqHours).intValue() > 8){
//首先需要打卡 超过1个工作日时长
if(isDk && ycHours.compareTo(cqHours) != 0 && ycHours.subtract(cqHours).intValue() > 8){
Long ycDays = ycHours.divide(Constants.DAY_WORK_HOUR).longValue();
//补助总钱数
BigDecimal bzAmount = rzSalaryDetail.getLevelSubsidies().add(rzSalaryDetail.getContractSubsidies()).add(rzSalaryDetail.getSenioritySalary()).add(rzSalaryDetail.getSocialSubsidies());
//一天的补助
BigDecimal bzDayAmount = bzAmount.divide(new BigDecimal(ycDays),2,BigDecimal.ROUND_HALF_UP);
//计算补助扣款, 总补助-出勤补助=补助扣款, 出勤补助= 天补助*出勤天数
rzSalaryDetail.setAbsenteeismSubsidies(bzAmount.subtract(bzDayAmount.multiply(new BigDecimal(cqHours.divide(Constants.DAY_WORK_HOUR).doubleValue()))));
rzSalaryDetail.setAbsenteeismSubsidies(bzAmount.subtract(bzDayAmount.multiply(new BigDecimal(cqHours.divide(Constants.DAY_WORK_HOUR, 0,RoundingMode.UP).intValue()))));
}else{
//计算补助扣款, 总补助-出勤补助=补助扣款, 出勤补助= 天补助*出勤天数
rzSalaryDetail.setAbsenteeismSubsidies(new BigDecimal(0));
}
}
/***
* 计算社保占比
* @param detail
* @param attendanceStatistical
*/
default void socialSecurity(SysStaffDetail detail, RzAttendanceStatistical attendanceStatistical){
default void socialSecurity(SysStaff sysStaff, SysStaffDetail detail, RzAttendanceStatistical attendanceStatistical){
//计算实际出勤占比, 如果实际出勤小于应出勤的半数, 则社保有员工承担
BigDecimal proportion = attendanceStatistical.getRealAttendance().divide(attendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP);
if(proportion.compareTo(new BigDecimal("0.50")) < 0){
if(proportion.compareTo(new BigDecimal("0.50")) >= 0 || "".equals(sysStaff.getClockIn())){
detail.setCountInsurance(new BigDecimal("0.00"));
}
}
@ -234,8 +235,14 @@ public interface SalaryCalculationStrategyExchangeProcessor {
// 本年累计已发工资本年累计已发工资+本月税前工资
rzSalaryDetail.setTotalWages(detail.getTotalWages().add(rzSalaryDetail.getSalaryBeforeTax()));
// 专项附加扣除六项附加扣除额相加
rzSalaryDetail.setSpecialDeduction(detail.getChildrenEducation().add(detail.getSupportTheOld()).add(detail.getHousingLoans()).add(detail.getHousingRents()).add(detail.getAdultEducation()).add(detail.getTreatmentForSeriousDisease()));
rzSalaryDetail.setTaxableIncome(rzSalaryDetail.getTotalWages());
BigDecimal kouChu = detail.getChildrenEducation().add(detail.getSupportTheOld()).add(detail.getHousingLoans()).add(detail.getHousingRents()).add(detail.getAdultEducation()).add(detail.getTreatmentForSeriousDisease());
// 应纳税所得额(本年累计已发工资-年度免征额-累计专项扣除-本月专项扣除)
if(rzSalaryDetail.getTotalWages().subtract(rzSalaryDetail.getAnnualExemptionAmount()).subtract(detail.getSpecialDeduction()).subtract(kouChu).longValue()>0){
rzSalaryDetail.setTaxableIncome(rzSalaryDetail.getTotalWages().subtract(rzSalaryDetail.getAnnualExemptionAmount()).subtract(detail.getSpecialDeduction()).subtract(kouChu));
}else{
rzSalaryDetail.setTaxableIncome(new BigDecimal("0"));
}
// 判断应纳税所得额额度额度不一样税率不一样
if (rzSalaryDetail.getTaxableIncome().doubleValue() > 0 && rzSalaryDetail.getTaxableIncome().doubleValue() <= 36000l) {
// 此阶税率为百分之3速减数为0
@ -285,13 +292,6 @@ public interface SalaryCalculationStrategyExchangeProcessor {
// 实发工资 = 税前工资
rzSalaryDetail.setNetPayroll(rzSalaryDetail.getSalaryBeforeTax());
}else {
// 应纳税额 (本年累计已发工资-年度免征额-累计专项扣除-本月专项扣除)
BigDecimal tax = rzSalaryDetail.getTotalWages().subtract(rzSalaryDetail.getSpecialDeduction()).subtract(rzSalaryDetail.getAnnualExemptionAmount());
if(tax.doubleValue() <= 0.0){
rzSalaryDetail.setTaxableIncome(new BigDecimal("0.00"));
}else{
rzSalaryDetail.setTaxableIncome(tax);
}
// 判断税前工资是否大于5000,如果小于则不在计算个税
if (rzSalaryDetail.getSalaryBeforeTax().doubleValue() > 5000.00){
// 本月应缴税额(本月应纳税所得额*税率-速减数-本年累计已预缴个税)
@ -311,6 +311,8 @@ public interface SalaryCalculationStrategyExchangeProcessor {
rzSalaryDetail.setAggregatePersonalIncomeTax(detail.getAggregatePersonalIncomeTax().add(rzSalaryDetail.getTaxPayable()));
}
rzSalaryDetail.setId(null);
//更新下全年累计
rzSalaryDetail.setSpecialDeduction(detail.getSpecialDeduction().add(kouChu));
if(rzSalaryDetailMapper.insert(rzSalaryDetail)< 0){
throw new RuntimeException("生成员工考勤详情失败");
}
@ -319,13 +321,12 @@ public interface SalaryCalculationStrategyExchangeProcessor {
// 把本年累计个税
detail.setAggregatePersonalIncomeTax(rzSalaryDetail.getAggregatePersonalIncomeTax());
// 把本年累计专项扣除保存到员工信息表中
detail.setSpecialDeduction(detail.getSpecialDeduction().add(rzSalaryDetail.getSpecialDeduction()));
detail.setSpecialDeduction(detail.getSpecialDeduction().add(kouChu));
// 把本年累计已发工资保存到员工信息表中
detail.setTotalWages(rzSalaryDetail.getTotalWages());
if(sysStaffDetailMapper.updateSysStaffDetail(detail)< 0){
throw new RuntimeException("更新员工详情信息异常");
}
}else{
//删除原来的数据
detail.setDelFlag(Constants.DELETE_FLAG_1);
@ -334,14 +335,15 @@ public interface SalaryCalculationStrategyExchangeProcessor {
// 把本年累计已缴个税保存到员工信息表中
detail.setAggregatePersonalIncomeTax(rzSalaryDetail.getTaxPayable());
// 把本年累计专项扣除保存到员工信息表中
detail.setSpecialDeduction(rzSalaryDetail.getSpecialDeduction());
detail.setSpecialDeduction(kouChu);
// 把本年累计已发工资保存到员工信息表中
detail.setTotalWages(rzSalaryDetail.getSalaryBeforeTax());
detail.setId(null);
if(sysStaffDetailMapper.insert(detail)< 0){
throw new RuntimeException("新增员工详情信息异常");
}
}
}
}

View File

@ -52,7 +52,8 @@ public class DailyWageStrategyExchangeProcessor implements SalaryCalculationStra
// monthSalary(sysStaff, sysStaffDetail,rzSalaryDetail, attendanceStatistical);
//计算社保
socialSecurity(sysStaffDetail, attendanceStatistical);
socialSecurity(sysStaff,sysStaffDetail, attendanceStatistical);
//计算薪资
calculation(sysStaff, sysStaffDetail,rzSalaryDetail);
@ -63,11 +64,11 @@ public class DailyWageStrategyExchangeProcessor implements SalaryCalculationStra
public void monthSalary(Date limitMonth, Date month, Date limitDate ,SysStaff sysStaff, SysStaffDetail detail, RzSalaryDetail rzSalaryDetail, RzAttendanceStatistical attendanceStatistical){
//如果计算薪资的月份 小于转正的月份, 则按照全额薪资的80%发放
if(limitMonth.compareTo(month) > 0){
rzSalaryDetail.setMonthSalary(rzSalaryDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(attendanceStatistical.getRealAttendance()).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD)));
rzSalaryDetail.setOvertimeSalary(rzSalaryDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(attendanceStatistical.getWorkOvertimeNumber()).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD)));
rzSalaryDetail.setMonthSalary(rzSalaryDetail.getDailyWage().divide(Constants.DAY_WORK_HOUR,2, RoundingMode.HALF_UP).multiply(attendanceStatistical.getRealAttendance()).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD)));
rzSalaryDetail.setOvertimeSalary(rzSalaryDetail.getDailyWage().divide(Constants.DAY_WORK_HOUR,2, RoundingMode.HALF_UP).multiply(attendanceStatistical.getWorkOvertimeNumber()).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD)));
}else if(limitDate.compareTo(rzSalaryDetail.getMonth()) < 0){
rzSalaryDetail.setMonthSalary(rzSalaryDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(attendanceStatistical.getRealAttendance().add(attendanceStatistical.getWorkOvertimeNumber())));
rzSalaryDetail.setOvertimeSalary(rzSalaryDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(attendanceStatistical.getWorkOvertimeNumber()));
rzSalaryDetail.setMonthSalary(rzSalaryDetail.getDailyWage().divide(Constants.DAY_WORK_HOUR,2, RoundingMode.HALF_UP).multiply(attendanceStatistical.getRealAttendance()));
rzSalaryDetail.setOvertimeSalary(rzSalaryDetail.getDailyWage().divide(Constants.DAY_WORK_HOUR,2, RoundingMode.HALF_UP).multiply(attendanceStatistical.getWorkOvertimeNumber()));
}else {
//根据转正日期查询员工的打卡信息
List<RzAttendance> att_list = rzAttendanceMapper.queryMonthAttendanceByStaffId(sysStaff.getUserId(), rzSalaryDetail.getMonth());
@ -78,9 +79,9 @@ public class DailyWageStrategyExchangeProcessor implements SalaryCalculationStra
}
}
//未转正需要扣除的工资
BigDecimal work = rzSalaryDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(att_work).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD_1));
rzSalaryDetail.setBasicSalary(rzSalaryDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(attendanceStatistical.getRealAttendance()).subtract(work));
rzSalaryDetail.setOvertimeSalary(rzSalaryDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(attendanceStatistical.getWorkOvertimeNumber()));
BigDecimal work = rzSalaryDetail.getDailyWage().divide(Constants.DAY_WORK_HOUR,2, RoundingMode.HALF_UP).multiply(att_work).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD_1));
rzSalaryDetail.setBasicSalary(rzSalaryDetail.getDailyWage().divide(Constants.DAY_WORK_HOUR,2, RoundingMode.HALF_UP).multiply(attendanceStatistical.getRealAttendance()).subtract(work));
rzSalaryDetail.setOvertimeSalary(rzSalaryDetail.getDailyWage().divide(Constants.DAY_WORK_HOUR,2, RoundingMode.HALF_UP).multiply(attendanceStatistical.getWorkOvertimeNumber()));
}
//检查是否当月有工伤假
Long hour = rzLeaveDetailMapper.selectLeaveHourByUserIdAndDateAndType(sysStaff.getUserId(), rzSalaryDetail.getMonth(), 60l);
@ -96,7 +97,7 @@ public class DailyWageStrategyExchangeProcessor implements SalaryCalculationStra
;
deduction(detail, rzSalaryDetail, new BigDecimal(DateUtils.getMonthDays(rzSalaryDetail.getMonth())).multiply(Constants.DAY_WORK_HOUR), rzAttendanceMapper.selectOne(new QueryWrapper<RzAttendance>().select( " sum(work_sum) as workNum ").lambda().isNotNull(RzAttendance::getWorkSum).gt(RzAttendance::getWorkSum, 0).eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendance::getStaffId, sysStaff.getUserId()).apply(" DATE_FORMAT( attendance_date, '%Y%m' ) = DATE_FORMAT({0} , '%Y%m' )", rzSalaryDetail.getMonth())).getWorkSum());
deduction("".equals(sysStaff.getClockIn()), detail, rzSalaryDetail, new BigDecimal(DateUtils.getMonthDays(rzSalaryDetail.getMonth())).multiply(Constants.DAY_WORK_HOUR), rzAttendanceMapper.selectOne(new QueryWrapper<RzAttendance>().select( " ifnull(sum(work_sum),0) as workSum ").lambda().isNotNull(RzAttendance::getWorkSum).gt(RzAttendance::getWorkSum, 0).eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendance::getStaffId, sysStaff.getUserId()).apply(" DATE_FORMAT( attendance_date, '%Y%m' ) = DATE_FORMAT({0} , '%Y%m' )", rzSalaryDetail.getMonth())).getWorkSum());
//deduction(detail, rzSalaryDetail, String.valueOf(DateUtils.getMonthDays(rzSalaryDetail.getMonth())), rzAttendanceMapper.selectCount(new LambdaQueryWrapper<RzAttendance>().isNotNull(RzAttendance::getWorkSum).gt(RzAttendance::getWorkSum, 0).eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendance::getStaffId, sysStaff.getUserId()).apply(" DATE_FORMAT( attendance_date, '%Y%m' ) = DATE_FORMAT({0} , '%Y%m' )", rzSalaryDetail.getMonth()).select(RzAttendance::getId)));
//日薪没有缺勤扣款, 上一天就一天
rzSalaryDetail.setAbsenteeismSalary(new BigDecimal(0));

View File

@ -41,6 +41,7 @@ public class MonthlySalaryStrategyExchangeProcessor implements SalaryCalculation
private List<Long> qx = Collections.asList(56l,58l,59l,83l,60l);
private List<Long> qx8 = Collections.asList(52l);
@Override
public boolean accept(SysStaffDetail detail) {
//基本工资不为空, 并且大于0 并且岗位工资不为空, 并且大于0
@ -67,22 +68,24 @@ public class MonthlySalaryStrategyExchangeProcessor implements SalaryCalculation
@Override
public void monthSalary(Date limitMonth, Date month, Date limitDate ,SysStaff sysStaff, SysStaffDetail detail, RzSalaryDetail rzSalaryDetail, RzAttendanceStatistical attendanceStatistical){
//如果计算薪资的月份 小于转正的月份, 则按照全额薪资的80%发放
if(limitMonth.compareTo(month) > 0){
rzSalaryDetail.setMonthSalary(rzSalaryDetail.getBasicSalary().add(rzSalaryDetail.getJobSalary()).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD)));
}else if(limitMonth.compareTo(month) < 0){
rzSalaryDetail.setMonthSalary(rzSalaryDetail.getBasicSalary().add(rzSalaryDetail.getJobSalary()));
}else {
BigDecimal att_work = new BigDecimal("0.0");
List<RzAttendance> att_list = rzAttendanceMapper.queryMonthAttendanceByStaffId(sysStaff.getUserId(), rzSalaryDetail.getMonth());
for (RzAttendance rzAttendance : att_list) {
if(rzAttendance.getAttendanceDate().before(limitDate)) {
att_work = att_work.add(rzAttendance.getWorkSum());
BigDecimal workHourPrice = rzSalaryDetail.getBasicSalary().add(rzSalaryDetail.getJobSalary()).divide(attendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP);
if(limitMonth.compareTo(month) > 0){
rzSalaryDetail.setMonthSalary(rzSalaryDetail.getBasicSalary().add(rzSalaryDetail.getJobSalary()).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD)));
}else if(limitMonth.compareTo(month) < 0){
rzSalaryDetail.setMonthSalary(rzSalaryDetail.getBasicSalary().add(rzSalaryDetail.getJobSalary()));
}else {
BigDecimal att_work = new BigDecimal("0.0");
List<RzAttendance> att_list = rzAttendanceMapper.queryMonthAttendanceByStaffId(sysStaff.getUserId(), rzSalaryDetail.getMonth());
for (RzAttendance rzAttendance : att_list) {
if(rzAttendance.getAttendanceDate().before(limitDate)) {
att_work = att_work.add(rzAttendance.getWorkSum());
}
}
//未转正需要扣除的工资
BigDecimal work = workHourPrice.multiply(att_work).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD_1));
rzSalaryDetail.setMonthSalary(rzSalaryDetail.getBasicSalary().add(rzSalaryDetail.getJobSalary()).subtract(work));
}
//未转正需要扣除的工资
BigDecimal work = rzSalaryDetail.getBasicSalary().add(rzSalaryDetail.getJobSalary()).divide(attendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP).multiply(att_work).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD_1));
rzSalaryDetail.setMonthSalary(rzSalaryDetail.getBasicSalary().add(rzSalaryDetail.getJobSalary()).subtract(work));
}
//获取工作日天数
String workNum = ParamUtils.getMonthWorkDayNum(DateUtils.getYear(rzSalaryDetail.getMonth()), DateUtils.getMonth(rzSalaryDetail.getMonth()));
//时薪
@ -92,11 +95,10 @@ public class MonthlySalaryStrategyExchangeProcessor implements SalaryCalculation
//计算补助
subsidy(sysStaff, detail, rzSalaryDetail, attendanceStatistical);
//计算扣减
deduction(detail, rzSalaryDetail, new BigDecimal(workNum).multiply(Constants.DAY_WORK_HOUR), rzAttendanceMapper.selectOne(new QueryWrapper<RzAttendance>().select( " sum(work_sum) as workNum ").lambda().isNotNull(RzAttendance::getWorkSum).gt(RzAttendance::getWorkSum, 0).eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendance::getStaffId, sysStaff.getUserId()).apply(" DATE_FORMAT( attendance_date, '%Y%m' ) = DATE_FORMAT({0} , '%Y%m' )", rzSalaryDetail.getMonth())).getWorkSum());
deduction("".equals(sysStaff.getClockIn()), detail, rzSalaryDetail, new BigDecimal(workNum).multiply(Constants.DAY_WORK_HOUR), rzAttendanceMapper.selectOne(new QueryWrapper<RzAttendance>().select( " ifnull(sum(work_sum),0) as workSum ").lambda().isNotNull(RzAttendance::getWorkSum).gt(RzAttendance::getWorkSum, 0).eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendance::getStaffId, sysStaff.getUserId()).apply(" DATE_FORMAT( attendance_date, '%Y%m' ) = DATE_FORMAT({0} , '%Y%m' )", rzSalaryDetail.getMonth())).getWorkSum());
//deduction(detail, rzSalaryDetail,workNum, rzAttendanceMapper.selectCount(new LambdaQueryWrapper<RzAttendance>().isNotNull(RzAttendance::getWorkSum).gt(RzAttendance::getWorkSum, 0).eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendance::getStaffId, sysStaff.getUserId()).apply(" DATE_FORMAT( attendance_date, '%Y%m' ) = DATE_FORMAT({0} , '%Y%m' )", rzSalaryDetail.getMonth()).select(RzAttendance::getId)));
//计算社保
socialSecurity(detail, attendanceStatistical);
socialSecurity(sysStaff, detail, attendanceStatistical);
/***
* 婚假, 陪产假 丧假 年假 流产 全新发放
* 产假 无薪
@ -122,7 +124,20 @@ public class MonthlySalaryStrategyExchangeProcessor implements SalaryCalculation
totalAllHour = totalAllHour+hour;
}
}
if(totalAllHour.compareTo(0l)> 0){
//存在工伤假, 需要计算
rzSalaryDetail.setMonthSalary(rzSalaryDetail.getMonthSalary().add(workHourPrice.multiply(new BigDecimal(totalAllHour))));
}
if(sysStaff.getName().equals("张新怡")){
System.out.println("111111");
}
//如果是不打卡人员, 只计算请假时长, 如果不是未打卡人员, 需要检查应出去和实际出勤的值
if("".equals(sysStaff.getClockIn())){
BigDecimal qqHour = attendanceStatistical.getShouldAttendance().subtract(attendanceStatistical.getRealAttendance()).subtract(attendanceStatistical.getAbsenteeism());
if(qqHour.compareTo(DataUtils.DEFAULT_VALUE) > 0){
attendanceStatistical.setAbsenteeism(attendanceStatistical.getAbsenteeism().add(qqHour));
}
}
//请假时长
rzSalaryDetail.setAbsenteeismSalary(hourlyWage.multiply(attendanceStatistical.getAbsenteeism().subtract(new BigDecimal(totalAllHour))));
}

View File

@ -68,7 +68,5 @@ public interface IRzSalaryDetailService
*/
public List<RzSalaryDetail> selectSalaryDetailByWbFlag(String wbFlag,Date date);
AjaxResult importSalesCommissions(List<RzSalaryVo> attendanceList);
AjaxResult export(RzSalaryDetail rzSalaryDetail);
}

View File

@ -1,20 +1,20 @@
package com.evo.finance.service.impl;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.evo.attendance.domain.RzAttendance;
import com.evo.attendance.domain.RzAttendanceStatistical;
import com.evo.attendance.domain.RzSpecialOverTime;
import com.evo.attendance.domain.vo.RzSalaryVo;
import com.evo.attendance.mapper.RzAttendanceMapper;
import com.evo.attendance.mapper.RzAttendanceStatisticalMapper;
import com.evo.attendance.mapper.RzSpecialOverTimeMapper;
import com.evo.attendance.processor.PunchTheClockStrategyExchangeProcessor;
import com.evo.common.constant.Constants;
import com.evo.common.core.domain.AjaxResult;
import com.evo.common.core.domain.entity.SysDept;
import com.evo.common.core.domain.entity.SysDictData;
import com.evo.common.utils.*;
import com.evo.common.utils.Collections;
import com.evo.common.utils.poi.ExcelUtilSs;
import com.evo.finance.domain.RzSalaryDetail;
import com.evo.finance.domain.RzSalaryStatistics;
import com.evo.finance.domain.vo.SalaryVo;
@ -22,20 +22,16 @@ import com.evo.finance.mapper.RzSalaryDetailMapper;
import com.evo.finance.mapper.RzSalaryStatisticsMapper;
import com.evo.finance.processor.SalaryCalculationStrategyExchangeProcessor;
import com.evo.finance.service.IRzSalaryDetailService;
import com.evo.personnelMatters.domain.RzHoliday;
import com.evo.personnelMatters.mapper.RzHolidayMapper;
import com.evo.restaurant.domain.RzRestaurantStatistics;
import com.evo.restaurant.domain.vo.RzRestaurantStatisticsExportVo;
import com.evo.restaurant.mapper.RzRestaurantStatisticsMapper;
import com.evo.restaurant.utils.ExcelUtilCy;
import com.evo.system.domain.SysStaff;
import com.evo.system.domain.SysStaffDetail;
import com.evo.system.mapper.SysDeptMapper;
import com.evo.system.mapper.SysDictDataMapper;
import com.evo.system.mapper.SysStaffDetailMapper;
import com.evo.system.mapper.SysStaffMapper;
import com.evo.system.service.ISysDictDataService;
import com.evo.utils.DateUtil;
import org.apache.xmlbeans.impl.xb.xsdschema.Public;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
@ -43,7 +39,6 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -66,19 +61,11 @@ public class RzSalaryDetailServiceImpl extends ServiceImpl<RzSalaryDetailMapper,
@Resource
private SysStaffDetailMapper sysStaffDetailMapper; //员工详情
@Resource
private RzHolidayMapper rzHolidayMapper; //节假日
@Resource
private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //打卡统计
@Resource
private RzRestaurantStatisticsMapper rzRestaurantStatisticsMapper; //餐饮统计
@Resource
private RzAttendanceMapper rzAttendanceMapper; //考勤日期
@Resource
private SysDeptMapper deptMapper; //部门
@Resource
private RzSpecialOverTimeMapper rzSpecialOverTimeMapper;
@Resource
private ISysDictDataService sysDictDataService;
private SysDictDataMapper sysDictDataMapper;
@Autowired
private ApplicationContext applicationContext;
/**
@ -161,9 +148,6 @@ public class RzSalaryDetailServiceImpl extends ServiceImpl<RzSalaryDetailMapper,
Map<Long, Boolean> overTimeMap = deptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getDelFlag, Constants.DELETE_FLAG_0).select(SysDept::getIsOverTime, SysDept::getDeptId)).stream().collect(Collectors.toMap(SysDept::getDeptId,d->"0".equals(d.getIsOverTime())));
for (SysStaff sysStaff : st_list) {
if(sysStaff.getName().equals("胡毅鹏")){
System.out.println(1111);
}
rzSalaryDetail.setStaffId(sysStaff.getUserId()); //员工ID
rzSalaryDetail.setDeptId(sysStaff.getDeptId()); //部门
rzSalaryDetail.setName(sysStaff.getName()); //姓名
@ -628,60 +612,94 @@ public class RzSalaryDetailServiceImpl extends ServiceImpl<RzSalaryDetailMapper,
return rzSalaryDetailMapper.selectSalaryDetailByWbFlag(wbFlag,date);
}
@Override
public AjaxResult importSalesCommissions(List<RzSalaryVo> attendanceList) {
public static SalaryVo sumSalaryVo(List<SalaryVo> list){
SalaryVo result = list.stream().reduce((x, y) -> new SalaryVo(
x.getMonthSalary().add(y.getMonthSalary()),
x.getLevelSubsidies().add(y.getLevelSubsidies()),x.getContractSubsidies().add(y.getContractSubsidies()),x.getSenioritySalary().add(y.getSenioritySalary()), x.getSocialSubsidies().add(y.getSocialSubsidies()),
x.getNightSubsidies().add(y.getNightSubsidies()), x.getDinnerSubsidies().add(y.getDinnerSubsidies()),x.getSubsidyOrBonus().add(y.getSubsidyOrBonus()),
x.getAbsenteeismSalary().add(y.getAbsenteeismSalary()), x.getAbsenteeismSubsidies().add(y.getAbsenteeismSubsidies()),x.getMealFee().add(y.getMealFee()),x.getDeductions().add(y.getDeductions()),
x.getSalary().add(y.getSalary()),x.getPayInsurance().add(y.getPayInsurance()),x.getSalaryBeforeTax().add(y.getSalaryBeforeTax()),x.getTotalWages().add(y.getTotalWages()),
x.getAnnualExemptionAmount().add(y.getAnnualExemptionAmount()),x.getSpecialDeduction().add(y.getSpecialDeduction()),x.getSlowDownTheDeduction().add(y.getSlowDownTheDeduction()),x.getAggregatePersonalIncomeTax().add(y.getAggregatePersonalIncomeTax()),
x.getTaxPayable().add(y.getTaxPayable()),x.getNetPayroll().add(y.getNetPayroll()), x.getSalesCommission().add(y.getSalesCommission()))).orElse(new SalaryVo(BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO,BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO));
result.setName("");
result.setCompanyName("");
return result;
}
LambdaQueryWrapper<SysDept> wa = new LambdaQueryWrapper<>();
wa.eq(SysDept::getDelFlag,Constants.DELETE_FLAG_0)
.eq(SysDept::getDeptName,"销售部");
SysDept sysDept = deptMapper.selectOne(wa);
if (!attendanceList.isEmpty()) {
Date month = attendanceList.get(0).getDate();
List<RzSalaryDetail> existingDetails = rzSalaryDetailMapper.selectSalaryDetailByDeptId(sysDept.getDeptId(), month);
for (RzSalaryDetail detail : existingDetails) {
detail.setSalesCommission(new BigDecimal("0"));
detail.setUpdateTime(DateUtils.getNowDate());
detail.setUpdateBy(SecurityUtils.getUsername());
rzSalaryDetailMapper.updateById(detail);
public static void main(String[] args) {
List<String> sheetCompanyNames = Collections.asList("外包","石家庄辰宙","河北伊特").stream().sorted((x,y) -> {
if(x.equals("河北伊特")){
return -1;
}else{
return x.compareTo(y);
}
}
//更新工资单详情,写入销售提成
for (RzSalaryVo rzSalaryVo : attendanceList) {
if (rzSalaryVo.getSale() != null ){
//根据本门查询 月份工资单
List<RzSalaryDetail> rzSalaryDetails = rzSalaryDetailMapper.selectSalaryDetailByDeptId(sysDept.getDeptId(),rzSalaryVo.getDate());
if (!rzSalaryDetails.isEmpty()){
for (RzSalaryDetail rzSalaryDetail : rzSalaryDetails) {
if (rzSalaryDetail.getName().equals(rzSalaryVo.getName())){
//更新销售提成
rzSalaryDetail.setSalesCommission(rzSalaryVo.getSale());
rzSalaryDetail.setUpdateTime(DateUtils.getNowDate());
rzSalaryDetail.setUpdateBy(SecurityUtils.getUsername());
rzSalaryDetailMapper.updateById(rzSalaryDetail);
}
}
}
}
}
return AjaxResult.success();
}).collect(Collectors.toList());
System.out.println(JSON.toJSONString(sheetCompanyNames));
}
@Override
public AjaxResult export(RzSalaryDetail rzSalaryDetail) {
ExcelUtilCy<SalaryVo> util = new ExcelUtilCy<SalaryVo>(SalaryVo.class);
Map<String,List<SalaryVo>> dataList = buildExportData(rzSalaryDetail).stream().collect(Collectors.groupingBy(SalaryVo::getDeptName));
List<SalaryVo> allList = new ArrayList<>();
//创建各个部门工资数据集合的集合
List<List<SalaryVo>> lists = new ArrayList<>();
for (String key : dataList.keySet()){
allList.addAll(dataList.get(key));
lists.add(dataList.get(key));
}
ExcelUtilSs<SalaryVo> util = new ExcelUtilSs<SalaryVo>(SalaryVo.class);
List<SalaryVo> excelResult = buildExportData(rzSalaryDetail);
//获取公司的数据
Map<String,List<SalaryVo>> companyDataList = excelResult.stream().collect(Collectors.groupingBy(SalaryVo::getCompanyName));
List<String> sheetCompanyNames = Collections.asList(companyDataList.keySet()).stream().sorted((x,y) -> {
if(x.equals("河北伊特")){
return -1;
}else{
return x.compareTo(y);
}
}).collect(Collectors.toList());
List<List<SalaryVo>> companyLists = new ArrayList<>();
List<List<SalaryVo>> deptLists = new ArrayList<>();
List<String> allSheetNames = Collections.emptyList();
List<SalaryVo> allList = new ArrayList<>();
allSheetNames.addAll(sheetCompanyNames);
for (String sheetCompanyName : sheetCompanyNames){
List<SalaryVo> dataList = companyDataList.get(sheetCompanyName);
if(sheetCompanyName.equals("河北伊特")){
Map<String,List<SalaryVo>> deptDataList = dataList.stream().collect(Collectors.groupingBy(SalaryVo::getDeptName));
List<String> sheetDeptNames = deptDataList.keySet().stream().sorted((x,y) -> x.compareTo(y)).collect(Collectors.toList());
allSheetNames.addAll(sheetDeptNames);
for (String sheetDeptName : sheetDeptNames){
List<SalaryVo> depts = deptDataList.get(sheetDeptName);
SalaryVo result = sumSalaryVo(depts);
result.setDeptName(sheetDeptName);
allList.add(result);
SalaryVo hjResult = new SalaryVo();
BeanUtils.copyProperties(result,hjResult);
//处理部门的合计
hjResult.setDeptName("合计");
depts.add(hjResult);
deptLists.add(depts);
}
SalaryVo result = sumSalaryVo(allList);
result.setDeptName("小计");
allList.add(result);
}else{
SalaryVo result = sumSalaryVo(dataList);
result.setDeptName(sheetCompanyName+"总计");
allList.add(result);
SalaryVo hjResult = new SalaryVo();
BeanUtils.copyProperties(result,hjResult);
//处理公司的合计
hjResult.setDeptName("合计");
dataList.add(hjResult);
companyLists.add(dataList);
}
}
//计算总计
SalaryVo result = sumSalaryVo(allList.stream().filter(d->!d.getDeptName().equals("小计")).collect(Collectors.toList()));
result.setDeptName("总计");
allList.add(result);
allSheetNames.remove("河北伊特");
companyLists.addAll(deptLists);
return util.exportExcel(allList,companyLists,"总表", allSheetNames, new SimpleDateFormat("yyyy-MM").format(rzSalaryDetail.getMonth())+"月工资汇总表", "制表: "+"审核: "+"经理签字: "+"总经理签字:");
return util.exportExcel(allList,lists,"总表", new ArrayList<>(dataList.keySet()));
}
private List<SalaryVo> buildExportData(RzSalaryDetail rzSalaryDetail) {
@ -704,24 +722,27 @@ public class RzSalaryDetailServiceImpl extends ServiceImpl<RzSalaryDetailMapper,
}
}
});
nameAndDeptIdMap.entrySet().stream().forEach(d->{
companyNameMap.put(Long.valueOf(d.getKey()), d.getValue());
});
Map<String,String> valAndLabel = sysDictDataMapper.selectDictDataByType("sys_company").stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
BigDecimal shouldAttendance = Constants.DAY_WORK_HOUR.multiply(new BigDecimal(ParamUtils.getMonthWorkDayNum(DateUtils.getYear(rzSalaryDetail.getMonth()), DateUtils.getMonth(rzSalaryDetail.getMonth()))));
Map<Long, BigDecimal> realAttendanceMap = rzAttendanceStatisticalMapper.queryStatisticalByMonth(rzSalaryDetail.getMonth()).stream().collect(Collectors.toMap(RzAttendanceStatistical::getStaffId, RzAttendanceStatistical::getRealAttendance));
List<SalaryVo> voResult = Collections.emptyList();
String month = new SimpleDateFormat("yyyy-MM").format(rzSalaryDetail.getMonth());
List<RzSalaryDetail> res_list = selectRzSalaryDetaiList(rzSalaryDetail);
for (RzSalaryDetail salaryDetail : res_list) {
SalaryVo vo = new SalaryVo();
com.evo.common.utils.bean.BeanUtils.copyProperties(salaryDetail, vo);
vo.setDeptName(DataUtils.findDefaultValue(companyNameMap.get(salaryDetail.getDeptId()), "实习生"));
vo.setCompanyName(DataUtils.findDefaultValue(valAndLabel.get(salaryDetail.getWbFlag()), "未知"));
vo.setDeptName(DataUtils.findDefaultValue(deptNameMap.get(salaryDetail.getDeptId()), "实习生"));
vo.setMonth(month);
vo.setShouldAttendance(shouldAttendance);
vo.setRealAttendance(DataUtils.findDefaultValue(realAttendanceMap.get(salaryDetail.getStaffId()), DataUtils.DEFAULT_VALUE));
voResult.add(vo);
}
return voResult;
}

View File

@ -6,10 +6,7 @@ import com.evo.common.constant.Constants;
import com.evo.common.core.domain.AjaxResult;
import com.evo.common.core.domain.entity.SysDept;
import com.evo.common.core.domain.entity.SysDictData;
import com.evo.common.utils.Collections;
import com.evo.common.utils.DataUtils;
import com.evo.common.utils.DateUtils;
import com.evo.common.utils.StringUtils;
import com.evo.common.utils.*;
import com.evo.restaurant.domain.RzRestaurantDetail;
import com.evo.restaurant.domain.RzRestaurantImages;
import com.evo.restaurant.domain.RzRestaurantStatistics;
@ -155,9 +152,10 @@ public class RzRestaurantStatisticsServiceImpl extends ServiceImpl<RzRestaurantS
Map<Long,String> dicMap = sysDictDataMapper.selectDictDataByType(Constants.SYS_RESTAUTANT).stream().collect(Collectors.toMap(SysDictData::getDictCode, SysDictData::getDictValue));
//优先检查是否为住宿
Map<Long, Boolean> zsMap = sysStaffMapper.selectSysStaffListAll().stream().collect(Collectors.toMap(SysStaff::getUserId, d->"".equals(d.getZsFlag())));
List<String> notAccommodationNames = ParamUtils.getInternNotAccommodation();
//然后在检查是否为日薪
Map<Long, Boolean> rxMap = sysStaffDetailMapper.selectList(new LambdaQueryWrapper<SysStaffDetail>().in(SysStaffDetail::getStaffId, zsMap.keySet().toArray())).stream().collect(Collectors.toMap(SysStaffDetail::getStaffId, d->d.getDailyWage() != null && d.getDailyWage().intValue() > 0));
List<String> dailyWageNames = ParamUtils.getInternDailyWage();
//循环统计信息
for (RzRestaurantStatistics restaurantStatistics : rt_list) {
//记录早午晚三餐次数
@ -173,11 +171,11 @@ public class RzRestaurantStatisticsServiceImpl extends ServiceImpl<RzRestaurantS
restaurantStatistics.setBreakfastExpend(new BigDecimal(dicMap.get(Constants.gr_zc_code)));
//晚餐
restaurantStatistics.setSupperExpend( new BigDecimal(dicMap.get(Constants.gr_wcc_code)));
//如果不是住宿人员
if(!DataUtils.findDefaultValue(zsMap.get(restaurantStatistics.getStaffId()),false) ){
//如果不是住宿人员 或者 不是实习生住宿人员
if(notAccommodationNames.contains(restaurantStatistics.getName()) || !DataUtils.findDefaultValue(zsMap.get(restaurantStatistics.getStaffId()),true)){
restaurantStatistics.setBreakfastExpend(new BigDecimal(dicMap.get(Constants.zc_code)));
//没有这个人员的详情, 或者是不住宿日薪
if(DataUtils.findDefaultValue(rxMap.get(restaurantStatistics.getStaffId()),true)){
//没有这个人员的详情, 或者是不住宿日薪 或者是实习生不住宿日薪
if(dailyWageNames.contains(restaurantStatistics.getName()) || DataUtils.findDefaultValue(rxMap.get(restaurantStatistics.getStaffId()),false)){
restaurantStatistics.setSupperExpend( new BigDecimal(dicMap.get(Constants.wcc_code)));
}
}
@ -224,13 +222,18 @@ public class RzRestaurantStatisticsServiceImpl extends ServiceImpl<RzRestaurantS
companyNameMap.put(Long.valueOf(d.getKey()), d.getValue());
});
Map<String,String> valAndLabel = sysDictDataMapper.selectDictDataByType("sys_company").stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
List<RzRestaurantStatisticsExportVo> voResult = Collections.emptyList();
String month = new SimpleDateFormat("yyyy-MM").format(rzRestaurantStatistics.getMonth());
List<RzRestaurantStatistics> res_list = selectRzRestaurantStatisticsList(rzRestaurantStatistics);
for (RzRestaurantStatistics restaurantStatistics : res_list) {
RzRestaurantStatisticsExportVo vo = new RzRestaurantStatisticsExportVo();
com.evo.common.utils.bean.BeanUtils.copyProperties(restaurantStatistics, vo);
vo.setCompanyName(DataUtils.findDefaultValue(companyNameMap.get(restaurantStatistics.getDeptId()), "实习生"));
vo.setCompanyName(DataUtils.findDefaultValue(valAndLabel.get(restaurantStatistics.getCompanyName()), "实习生"));
if(vo.getCompanyName().equals("实习生") ||vo.getCompanyName().equals("外包")){
vo.setCompanyName("河北伊特");
}
vo.setDeptName(DataUtils.findDefaultValue(deptNameMap.get(restaurantStatistics.getDeptId()), "实习生"));
vo.setMonth(month);
voResult.add(vo);

View File

@ -54,4 +54,12 @@ public interface SysStaffDetailMapper extends BaseMapper<SysStaffDetail>
public int clearAllSubsidy();
/**
* 重置员工社保信息
*
* @return 员工详情集合
*/
public void resetSocialSecurity();
public void resetSalesCommission();
}

View File

@ -1,6 +1,7 @@
package com.evo.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.evo.attendance.service.IRzAttendanceStatisticalService;
import com.evo.attendance.domain.vo.RzSalaryVo;
@ -39,10 +40,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.*;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@ -285,24 +283,24 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
sysStaff.setSex("0");
}
//根据员工ID查询原来的数据信息
SysStaff old_staff = getBaseMapper().selectSysStaffByUserId(sysStaff.getUserId());
// SysStaff old_staff = getBaseMapper().selectSysStaffByUserId(sysStaff.getUserId());
//判断员工更换公司
if(!old_staff.getCompanyName().equals(sysStaff.getCompanyName())){
//保存旧公司数据存档
old_staff.setDelFlag(Constants.DELETE_FLAG_1);
old_staff.setUpdateBy(SecurityUtils.getUsername());
old_staff.setUpdateTime(DateUtils.getNowDate());
int i = getBaseMapper().updateSysStaff(old_staff);
if(i < 1){
return AjaxResult.error();
}
//处理新公司数据
createNewStaff(sysStaff);
}else {
//根据部门ID查询部门信息
SysDept oldDept = deptMapper.selectDeptById(old_staff.getDeptId());
//判断原来为领导现在不是领导则把旧职位部门负责人反写
if("".equals(old_staff.getIsLeader())){
// if(!old_staff.getCompanyName().equals(sysStaff.getCompanyName())){
// //保存旧公司数据存档
// old_staff.setDelFlag(Constants.DELETE_FLAG_1);
// old_staff.setUpdateBy(SecurityUtils.getUsername());
// old_staff.setUpdateTime(DateUtils.getNowDate());
// int i = getBaseMapper().updateSysStaff(old_staff);
// if(i < 1){
// return AjaxResult.error();
// }
// //处理新公司数据
//// createNewStaff(sysStaff);
// }else {
//如果是部门负责人, 修改部门领导信息
if("".equals(sysStaff.getIsLeader())){
//根据部门ID查询部门信息
SysDept oldDept = deptMapper.selectDeptById(sysStaff.getDeptId());
oldDept.setPhone(sysStaff.getPhone());
oldDept.setLeader(sysStaff.getName());
oldDept.setUpdateTime(DateUtils.getNowDate());
@ -327,7 +325,7 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
createRestaurantStatistics(sysStaff);
//处理考勤机相关信息
initCheckDevice(sysStaff);
}
// }
return AjaxResult.success();
}
/**
@ -405,41 +403,160 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
String substring = originalFilename.substring(originalFilename.length() - 4);
//判断是否是xlsx文件或xls文件
if ("xls".equals(postfix) || "xlsx".equals(substring)) {
InputStream is = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
try {
is = filePath.getInputStream();
byte[] bytes = new byte[is.available()];
is.read(bytes);
File file = new File(com.evo.equipment.constant.Constants.STAFF_FUND_ADDRESS + originalFilename);
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(bytes);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (is != null) {
is.close();
}
if (bos != null) {
bos.flush();
bos.close();
}
if (fos != null) {
fos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return writeStaffInformation(filePath.getInputStream());
} catch (IOException e) {
return AjaxResult.error(e.getMessage());
}
//写入数据库
writeStaffInformation(originalFilename);
return AjaxResult.success();
// InputStream is = null;
// FileOutputStream fos = null;
// BufferedOutputStream bos = null;
// try {
// is = filePath.getInputStream();
// byte[] bytes = new byte[is.available()];
// is.read(bytes);
// File file = new File(com.evo.equipment.constant.Constants.STAFF_FUND_ADDRESS + originalFilename);
// fos = new FileOutputStream(file);
// bos = new BufferedOutputStream(fos);
// bos.write(bytes);
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// try {
// if (is != null) {
// is.close();
// }
// if (bos != null) {
// bos.flush();
// bos.close();
// }
// if (fos != null) {
// fos.close();
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// //写入数据库
// writeStaffInformation(originalFilename);
// return AjaxResult.success();
}
return AjaxResult.error();
}
/**
* 把公积金写入系统
* @return
*/
private AjaxResult writeStaffInformation(InputStream is){
//在指定位置读取文件
Workbook wb = null;
StringBuilder sb = new StringBuilder("");
try {
//重置社保信息
sysStaffDetailMapper.resetSocialSecurity();
wb = WorkbookFactory.create(is);
Sheet sheet = wb.getSheetAt(0);
//得到行数
int rowNumbers = sheet.getLastRowNum();
SysStaff sysStaff = null;
SysStaffDetail staffDetail = null;
//存储缴纳公积金人员信息
// List<SysStaffDetail> de_list = new ArrayList<SysStaffDetail>();
for(int p=4;p< rowNumbers;p++){
Row row = sheet.getRow(p);
if(StringUtils.isEmpty(row.getCell(1).getStringCellValue()) && (sheet.getRow(p+1)==null || StringUtils.isEmpty(sheet.getRow(p+1).getCell(1).getStringCellValue()))){
//当前行, 和当前的下一行都没有员工姓名,. 默认执行结束了
break;
}
//身份证号为空处理下一条数据
if(StringUtils.isEmpty(row.getCell(2).getStringCellValue())){
sb.append(row.getCell(1).getStringCellValue()).append("没有身份证信息;");
continue;
}
//根据身份证号查询员工
sysStaff = getBaseMapper().queryysStaffByIdCard(row.getCell(2).getStringCellValue());
//没有此员工继续下一条
if(StringUtils.isNull(sysStaff)){
sb.append(row.getCell(1).getStringCellValue()).append("员工未找到, 身份证是:").append(row.getCell(2).getStringCellValue()).append(";");
continue;
}
staffDetail = sysStaffDetailMapper.selectSysStaffDetailByStaffId(sysStaff.getUserId());
if(StringUtils.isNotNull(row.getCell(5).getNumericCellValue())){
BigDecimal big = BigDecimal.valueOf(row.getCell(5).getNumericCellValue());
if(StringUtils.isNotNull(row.getCell(7).getNumericCellValue())){
big = big.add(BigDecimal.valueOf(row.getCell(7).getNumericCellValue()));
}
staffDetail.setEndowmentInsurance(big); //养老
}
if(StringUtils.isNotNull(row.getCell(10).getNumericCellValue())){
BigDecimal big = BigDecimal.valueOf(row.getCell(10).getNumericCellValue());
if(StringUtils.isNotNull(row.getCell(12).getNumericCellValue())){
big = big.add(BigDecimal.valueOf(row.getCell(12).getNumericCellValue()));
}
staffDetail.setUnemploymentInsurance(big); //失业
}
if(StringUtils.isNotNull(row.getCell(15).getNumericCellValue())){
BigDecimal big = BigDecimal.valueOf(row.getCell(15).getNumericCellValue());
if(StringUtils.isNotNull(row.getCell(18).getNumericCellValue())){
big = big.add(BigDecimal.valueOf(row.getCell(18).getNumericCellValue()));
}
staffDetail.setMedicalInsurance(big); //医疗
}
if(StringUtils.isNotNull(row.getCell(25).getNumericCellValue())){
BigDecimal big = BigDecimal.valueOf(row.getCell(25).getNumericCellValue());
if(StringUtils.isNotNull(row.getCell(27).getNumericCellValue())){
big = big.add(BigDecimal.valueOf(row.getCell(27).getNumericCellValue()));
}
staffDetail.setAccumulationFund(big); //公积金
}
//公司缴纳保险总和
if(StringUtils.isNotNull(row.getCell(31).getNumericCellValue())){
staffDetail.setCountInsurance(BigDecimal.valueOf(row.getCell(31).getNumericCellValue()));
}
sysStaffDetailMapper.updateSysStaffDetail(staffDetail);
// de_list.add(staffDetail);
}
// //查询公司员工
// List<SysStaffDetail> s_list = sysStaffDetailMapper.resetSocialSecurity();
// //修改没有公积金的员工
// for(SysStaffDetail sysStaffDetail : s_list){
// int flag = 0; //标识五险一金的员工 0不存在
// for (SysStaffDetail detail : de_list) {
// if(sysStaffDetail.getStaffId() == detail.getStaffId()){
// flag = 1;
// break;
// }
// }
// if(flag == 0){
//// sysStaffDetail.setEndowmentInsurance(new BigDecimal("0.00")); //养老
// sysStaffDetail.setMedicalInsurance(new BigDecimal("0.00")); //医疗
// sysStaffDetail.setUnemploymentInsurance(new BigDecimal("0.00")); //失业
// sysStaffDetail.setEmploymentInjuryInsurance(new BigDecimal("0.00")); //工伤
// sysStaffDetail.setMaternityInsurance(new BigDecimal("0.00")); //生育
// sysStaffDetail.setAccumulationFund(new BigDecimal("0.00")); //公积金
// sysStaffDetail.setDeductions(new BigDecimal("0.00"));
// sysStaffDetail.setCountInsurance(new BigDecimal("0.00"));
// sysStaffDetailMapper.updateSysStaffDetail(sysStaffDetail);
// }
// }
} catch (Exception e) {
e.printStackTrace();
}finally {
try{
if(wb != null){
wb.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
if(StringUtils.isNotEmpty(sb.toString())){
return AjaxResult.error(sb.toString());
}
return AjaxResult.success();
}
/**
* 把公积金写入系统
* @param originalFilename
@ -799,7 +916,7 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
sysStaff.setRegularDate(calendar.getTime());
}
//判断转正日期和今天时间比较
if(sysStaff.getRegularDate().getTime() < DateUtils.getNowDate().getTime()){
if(DateUtils.addMonths(sysStaff.getEmploymentDate(), Integer.valueOf(String.valueOf(sysStaff.getWorkerTerm()))).getTime() < DateUtils.getNowDate().getTime()){
sysStaff.setStatus("1");
}
getBaseMapper().updateSysStaff(sysStaff);
@ -883,6 +1000,9 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
return AjaxResult.error("销售部门未找到,请确认部门是否存在且未被删除!");
}
sysStaffDetailMapper.resetSalesCommission();
// 更新工资单详情写入销售提成
for (RzSalaryVo rzSalaryVo : attendanceList) {
if (rzSalaryVo.getSale() != null && rzSalaryVo.getName() != null) {

View File

@ -55,11 +55,11 @@ public class SubsidyCalculationUtils {
RzSubsidyInfo rzSubsidyInfo = map.get(Long.valueOf(subsidyId));
String key = rzSubsidyInfo.getName();
BigDecimal value = rzSubsidyInfo.getValue();
if(ht.equals(subsidyId)){
Integer year= DateUtils.getBetweenYear(staff.getContractStart(), staff.getContractEnd());
if(ht.equals(subsidyId) && staff.getContractStart() != null && staff.getContractEnd() != null){
Integer year= DateUtils.getBetweenYear(staff.getContractStart(), staff.getContractEnd(), 1);
value = value.multiply(new BigDecimal(year));
}else if(gl.equals(subsidyId)){
Integer year= DateUtils.getBetweenYear(staff.getEmploymentDate(), new Date());
Integer year= DateUtils.getBetweenYearByDays(staff.getEmploymentDate(), new Date());
//最多只允许10年的工龄补贴
if(year > 10) year=10;
value = value.multiply(new BigDecimal(year));

View File

@ -57,7 +57,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectRzSalaryDetailVo">
select id, staff_id, name, month, wb_flag, dept_id,month_salary, basic_salary, job_salary, daily_wage, hours_salary, overtime_salary, level_subsidies, contract_subsidies, seniority_salary, social_subsidies, full_subsidies, night_subsidies, dinner_subsidies, subsidy_or_bonus, absenteeism_salary, absenteeism_subsidies, meal_fee, deductions, salary, pay_insurance, endowment_insurance, medical_insurance, employment_injury_insurance, maternity_insurance, unemployment_insurance, accumulation_fund, salary_before_tax, total_wages, annual_exemption_amount, special_deduction, taxable_income, tax_rate, slow_down_the_deduction, aggregate_personal_income_tax, aggregate_tax, tax_payable, net_payroll, remarks, del_flag, create_by, create_time, update_by, update_time from rz_salary_detail
select id, staff_id, name, month, wb_flag, dept_id,month_salary, basic_salary, job_salary, daily_wage, hours_salary, overtime_salary, level_subsidies, contract_subsidies, seniority_salary, social_subsidies, full_subsidies, night_subsidies, dinner_subsidies, subsidy_or_bonus, absenteeism_salary, absenteeism_subsidies, meal_fee, deductions, salary, pay_insurance, endowment_insurance, medical_insurance, employment_injury_insurance, maternity_insurance, unemployment_insurance, accumulation_fund, salary_before_tax, total_wages, annual_exemption_amount, special_deduction, taxable_income, tax_rate, slow_down_the_deduction, aggregate_personal_income_tax, aggregate_tax, tax_payable, net_payroll, remarks, del_flag, create_by, create_time, update_by, update_time, sales_commission from rz_salary_detail
</sql>
<select id="selectRzSalaryDetailList" parameterType="RzSalaryDetail" resultMap="RzSalaryDetailResult">

View File

@ -36,16 +36,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select id, staff_id, dept_id, name, month, breakfast_expend, breakfast_number, breakfast_pre_sum_expend, breakfast_sum_expend, lunch_expend, lunch_number, lunch_pre_sum_expend, lunch_sum_expend, supper_expend, supper_number, supper_pre_sum_expend, supper_sum_expend, personal_sum_consumption, sum_consumption, remarks, del_flag, create_by, create_time, update_by, update_time from rz_restaurant_statistics
</sql>
<select id="selectRzRestaurantStatisticsList" parameterType="RzRestaurantStatistics" resultMap="RzRestaurantStatisticsResult">
<include refid="selectRzRestaurantStatisticsVo"/>
<select id="selectRzRestaurantStatisticsList" parameterType="RzRestaurantStatistics" resultType="com.evo.restaurant.domain.RzRestaurantStatistics">
<!-- <include refid="selectRzRestaurantStatisticsVo"/> -->
select rrs.*, s.company_name as companyName
from rz_restaurant_statistics rrs left join sys_staff s on rrs.staff_id = s.user_id
<where>
del_flag = '0'
<if test="deptId != null "> and dept_id = #{deptId}</if>
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
rrs.del_flag = '0'
<if test="deptId != null "> and rrs.dept_id = #{deptId}</if>
<if test="name != null and name != ''"> and rrs.name like concat('%', #{name}, '%')</if>
<choose>
<when test="month != null">and DATE_FORMAT(month, '%Y%m' ) = DATE_FORMAT( #{month} , '%Y%m' )</when>
<when test="month != null">and DATE_FORMAT(rrs.month, '%Y%m' ) = DATE_FORMAT( #{month} , '%Y%m' )</when>
<otherwise>
and DATE_FORMAT( month, '%Y%m' ) = DATE_FORMAT(NOW() , '%Y%m' )
and DATE_FORMAT( rrs.month, '%Y%m' ) = DATE_FORMAT(NOW() , '%Y%m' )
</otherwise>
</choose>
</where>

View File

@ -52,7 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectSysStaffDetailVo">
select id, staff_id, basic_salary, jobs_salary,count_insurance, daily_wage, hours_salary, full_frequently_subsidies, middle_subsidies,level_of_education_subsidies, contract_subsidies, seniority_subsidies, social_security_subsidies, night_shift_subsidies, dinner_subsidies, fixed_allowance, other_subsidies, breakfast_expend, lunch_expend, supper_expend, subsidy_deduct_money, deductions, endowment_insurance, medical_insurance, employment_injury_insurance, maternity_insurance, unemployment_insurance, accumulation_fund, children_education, support_the_old, housing_loans, housing_rents, adult_education, treatment_for_serious_disease, special_deduction, total_wages, aggregate_personal_income_tax, remarks, del_flag, create_by, create_time, update_by, update_time from sys_staff_detail
select id, staff_id, basic_salary, jobs_salary,count_insurance, daily_wage, hours_salary, full_frequently_subsidies, middle_subsidies,level_of_education_subsidies, contract_subsidies, seniority_subsidies, social_security_subsidies, night_shift_subsidies, dinner_subsidies, fixed_allowance, other_subsidies, breakfast_expend, lunch_expend, supper_expend, subsidy_deduct_money, deductions, endowment_insurance, medical_insurance, employment_injury_insurance, maternity_insurance, unemployment_insurance, accumulation_fund, children_education, support_the_old, housing_loans, housing_rents, adult_education, treatment_for_serious_disease, special_deduction, total_wages, aggregate_personal_income_tax, remarks, del_flag, create_by, create_time, update_by, update_time,sales_commission from sys_staff_detail
</sql>
<select id="selectSysStaffDetailList" parameterType="SysStaffDetail" resultMap="SysStaffDetailResult">
@ -218,4 +218,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<update id="clearAllSubsidy">
update sys_staff_detail set other_subsidies = 0.00,deductions = 0.00
</update>
<update id="resetSocialSecurity">
update sys_staff_detail set endowment_insurance = 0.00,medical_insurance = 0.00,unemployment_insurance = 0.00,employment_injury_insurance = 0.00,maternity_insurance = 0.00,accumulation_fund = 0.00,deductions = 0.00,count_insurance = 0.00
</update>
<update id="resetSalesCommission">
update sys_staff_detail set sales_commission = 0.00
</update>
</mapper>