发版调整

This commit is contained in:
andy 2025-06-16 16:47:02 +08:00
parent 8d832351ef
commit deb4b535ec
7 changed files with 75 additions and 37 deletions

View File

@ -58,4 +58,12 @@ public interface RzAttendanceDetailMapper extends BaseMapper<RzAttendanceDetail>
public List<RzAttendanceDetail> selectRzAttendanceDetailByMonth(Date date);
/***
* 检查加班情况
* @param userId
* @param date
* @return
*/
Long checkOverTimeCard(@Param("userId") Long userId, @Param("date") Date date);
}

View File

@ -91,9 +91,9 @@ public class KQDeviceExchangeProcessor implements PunchTheClockStrategyExchangeP
RzAttendanceDetail rzAttendanceDetail = rzAttendanceDetailMapper.selectLastRzAttendanceDetail(sysStaff.getUserId());
//判断最后一次打卡为下班卡或没有打卡记录则打卡为上班卡
if(StringUtils.isNull(rzAttendanceDetail) || "下班卡".equals(rzAttendanceDetail.getButtonType()) || "撤销".equals(rzAttendanceDetail.getButtonType())){
//如果最后一条数据的卡类型为下班卡则返回上班卡和加班卡权限 or 检查当前人员是否存在特殊加班中 或者 检查当前人员部门是否开启加班
if(ObjectUtils.isNotEmpty(eqOverStaffMapper.selectEqOverStaffByUserId(sysStaff.getUserId())) || ObjectUtils.isEmpty(sysDeptMapper.selectOne(new LambdaQueryWrapper<SysDept>().eq(SysDept::getDeptId, sysStaff.getDeptId()).eq(SysDept::getIsOverTime,"1")))){
//如果存在特殊加班, 或者当前部门没有开启加班, 则无法打加班卡
//如果最后一条数据的卡类型为下班卡则返回上班卡和加班卡权限 or 检查当前人员是否存在特殊加班中 或者 检查当前人员部门是否开启加班 or 当天打过加班卡
if(ObjectUtils.isNotEmpty(eqOverStaffMapper.selectEqOverStaffByUserId(sysStaff.getUserId())) || ObjectUtils.isEmpty(sysDeptMapper.selectOne(new LambdaQueryWrapper<SysDept>().eq(SysDept::getDeptId, sysStaff.getDeptId()).eq(SysDept::getIsOverTime,"1"))) || rzAttendanceDetailMapper.checkOverTimeCard(sysStaff.getUserId(), new Date()) > 0){
//如果存在特殊加班, 或者当前部门没有开启加班 或者当天打过加班, 则无法打加班卡
return initMessage(0,"验证通过", "111000000");
}
return initMessage(0,"验证通过", "111100000");

View File

@ -625,6 +625,14 @@ public class RzSalaryDetailServiceImpl extends ServiceImpl<RzSalaryDetailMapper,
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));
//添加此处的原因是, 如果部门中, 有且只有1人的情况下, stream().reduce() 不会创建新的对象, 只是把唯一的对象返回了,, 会对后续的数据展示产生影响, 所以重新创new新对象
if(Collections.isNotEmpty(list) || list.size() == 1){
SalaryVo newResult = new SalaryVo();
BeanUtils.copyProperties(result,newResult);
newResult.setShouldAttendance(null);
newResult.setRealAttendance(null);
result = newResult;
}
result.setName("");
result.setCompanyName("");
return result;
@ -658,9 +666,12 @@ public class RzSalaryDetailServiceImpl extends ServiceImpl<RzSalaryDetailMapper,
}).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);
List<SalaryVo> allList = new ArrayList<>();
for (String sheetCompanyName : sheetCompanyNames){
List<SalaryVo> dataList = companyDataList.get(sheetCompanyName);
if(sheetCompanyName.equals("河北伊特")){
@ -668,6 +679,9 @@ public class RzSalaryDetailServiceImpl extends ServiceImpl<RzSalaryDetailMapper,
List<String> sheetDeptNames = deptDataList.keySet().stream().sorted((x,y) -> x.compareTo(y)).collect(Collectors.toList());
allSheetNames.addAll(sheetDeptNames);
for (String sheetDeptName : sheetDeptNames){
if(Collections.asList("生技部","装配车间","设备工段").contains(sheetDeptName)){
System.out.println(123213);
}
List<SalaryVo> depts = deptDataList.get(sheetDeptName);
SalaryVo result = sumSalaryVo(depts);
result.setDeptName(sheetDeptName);

View File

@ -161,39 +161,48 @@ public class RzLeaveDetailServiceImpl extends ServiceImpl<RzLeaveDetailMapper, R
Map<String, Object> extensionMap = Collections.emptyMap();
//先计算相差几个月
Integer betweenMonth = DateUtils.getBetweenMonth(rzLeaveDetail.getLeaveStartTime(), rzLeaveDetail.getLeaveEndTime());
Date startDate = rzLeaveDetail.getLeaveStartTime();
for (int i = 0; i <= betweenMonth; i++) {
startDate = DateUtils.addMonths(startDate, i>0 ? 1 : 0);
//获取月的开始时间和结束时间
Date firsDay = DateUtils.getMonthFirst(startDate);
if(firsDay.compareTo(rzLeaveDetail.getLeaveStartTime())<0){
firsDay = rzLeaveDetail.getLeaveStartTime();
if(betweenMonth == 0 && Long.valueOf(1).equals(DateUtils.getBetweenDays(rzLeaveDetail.getLeaveStartTime(),rzLeaveDetail.getLeaveEndTime())+1)){
extensionMap.put("month"+m.format(rzLeaveDetail.getLeaveStartTime()), ym.format(rzLeaveDetail.getLeaveStartTime()));
//如果只请1天, 则按照录入的时间计算, 如果
extensionMap.put("hours"+m.format(rzLeaveDetail.getLeaveStartTime()), rzLeaveDetail.getLeaveHour());
}else{
Date startDate = rzLeaveDetail.getLeaveStartTime();
for (int i = 0; i <= betweenMonth; i++) {
startDate = DateUtils.addMonths(startDate, i>0 ? 1 : 0);
//获取月的开始时间和结束时间
Date firsDay = DateUtils.getMonthFirst(startDate);
if(firsDay.compareTo(rzLeaveDetail.getLeaveStartTime())<0){
firsDay = rzLeaveDetail.getLeaveStartTime();
}
Date endDay = DateUtils.getMonthEnd(startDate);
if(endDay.compareTo(rzLeaveDetail.getLeaveEndTime())>0){
endDay = rzLeaveDetail.getLeaveEndTime();
}
//获取相差天数 因为包含开始结束, 所以需要加1
Long dayNum = DateUtils.getBetweenDays(firsDay,endDay)+1;
List<String> dayList = Collections.emptyList();
for (int j = 0; j < dayNum; j++) {
dayList.add(ymd.format(DateUtils.addDays(firsDay, j>0 ? 1 : 0)));
}
List<String> holidays = Collections.emptyList();
if(ParamUtils.getLeaveTypeNotIncludedFaXiuAndPublicHoliday().contains(flag)){
holidays.addAll(ParamUtils.getHoliddayList(firsDay.getYear(), 0));
}else if(ParamUtils.getLeaveTypeNotIncludedFaXiu().contains(flag)){
holidays.addAll(ParamUtils.getHoliddayList(firsDay.getYear(), 1));
}else{
holidays.addAll(ParamUtils.getHoliddayList(firsDay.getYear(), 2));
}
//获取假期里的重复天数
Integer doubleDayNum = Collections.findDuplicatesList(holidays, dayList).size();
//计算实际放假天数
Integer holidayNum = dayList.size()-doubleDayNum;
extensionMap.put("month"+m.format(firsDay), ym.format(firsDay));
//如果只请1天, 则按照录入的时间计算, 如果
extensionMap.put("hours"+m.format(firsDay), holidayNum*8);
}
Date endDay = DateUtils.getMonthEnd(startDate);
if(endDay.compareTo(rzLeaveDetail.getLeaveEndTime())>0){
endDay = rzLeaveDetail.getLeaveEndTime();
}
//获取相差天数 因为包含开始结束, 所以需要加1
Long dayNum = DateUtils.getBetweenDays(firsDay,endDay)+1;
List<String> dayList = Collections.emptyList();
for (int j = 0; j < dayNum; j++) {
dayList.add(ymd.format(DateUtils.addDays(firsDay, j>0 ? 1 : 0)));
}
List<String> holidays = Collections.emptyList();
if(ParamUtils.getLeaveTypeNotIncludedFaXiuAndPublicHoliday().contains(flag)){
holidays.addAll(ParamUtils.getHoliddayList(firsDay.getYear(), 0));
}else if(ParamUtils.getLeaveTypeNotIncludedFaXiu().contains(flag)){
holidays.addAll(ParamUtils.getHoliddayList(firsDay.getYear(), 1));
}else{
holidays.addAll(ParamUtils.getHoliddayList(firsDay.getYear(), 2));
}
//获取假期里的重复天数
Integer doubleDayNum = Collections.findDuplicatesList(holidays, dayList).size();
//计算实际放假天数
Integer holidayNum = dayList.size()-doubleDayNum;
extensionMap.put("month"+m.format(firsDay), ym.format(firsDay));
extensionMap.put("hours"+m.format(firsDay), holidayNum*8);
}
rzLeaveDetail.setExtension(JSON.toJSONString(extensionMap));
getBaseMapper().updateById(rzLeaveDetail);
}

View File

@ -50,7 +50,7 @@ spring:
# 国际化资源文件路径
basename: i18n/messages
profiles:
active: dev
active: druid
# 文件上传
servlet:
multipart:

View File

@ -92,4 +92,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by create_time
</select>
<select id="checkOverTimeCard" resultType="java.lang.Long">
select count(id) from rz_attendance_detail
where del_flag = '0' and DATE_FORMAT( date_time, '%Y%m%d' ) = DATE_FORMAT(#{date} , '%Y%m%d' ) and staff_id = #{userId} and button_type = '加班卡'
</select>
</mapper>

View File

@ -85,7 +85,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<!-- <if test="dinnerSubsidies != null">dinner_subsidies,</if>-->
<if test="fixedAllowance != null">fixed_allowance,</if>
<if test="otherSubsidies != null">other_subsidies,</if>
<if test="breakfastExpend != null">breakfast_expend,</if>
<!-- <if test="breakfastExpend != null">breakfast_expend,</if> -->
<!-- <if test="lunchExpend != null">lunch_expend,</if>-->
<!-- <if test="supperExpend != null">supper_expend,</if>-->
<!-- <if test="subsidyDeductMoney != null">subsidy_deduct_money,</if>-->