发版调整

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); 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()); RzAttendanceDetail rzAttendanceDetail = rzAttendanceDetailMapper.selectLastRzAttendanceDetail(sysStaff.getUserId());
//判断最后一次打卡为下班卡或没有打卡记录则打卡为上班卡 //判断最后一次打卡为下班卡或没有打卡记录则打卡为上班卡
if(StringUtils.isNull(rzAttendanceDetail) || "下班卡".equals(rzAttendanceDetail.getButtonType()) || "撤销".equals(rzAttendanceDetail.getButtonType())){ if(StringUtils.isNull(rzAttendanceDetail) || "下班卡".equals(rzAttendanceDetail.getButtonType()) || "撤销".equals(rzAttendanceDetail.getButtonType())){
//如果最后一条数据的卡类型为下班卡则返回上班卡和加班卡权限 or 检查当前人员是否存在特殊加班中 或者 检查当前人员部门是否开启加班 //如果最后一条数据的卡类型为下班卡则返回上班卡和加班卡权限 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")))){ 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,"验证通过", "111000000");
} }
return initMessage(0,"验证通过", "111100000"); 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.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, 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)); 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.setName("");
result.setCompanyName(""); result.setCompanyName("");
return result; return result;
@ -658,9 +666,12 @@ public class RzSalaryDetailServiceImpl extends ServiceImpl<RzSalaryDetailMapper,
}).collect(Collectors.toList()); }).collect(Collectors.toList());
List<List<SalaryVo>> companyLists = new ArrayList<>(); List<List<SalaryVo>> companyLists = new ArrayList<>();
List<List<SalaryVo>> deptLists = new ArrayList<>(); List<List<SalaryVo>> deptLists = new ArrayList<>();
List<String> allSheetNames = Collections.emptyList(); List<String> allSheetNames = Collections.emptyList();
List<SalaryVo> allList = new ArrayList<>();
allSheetNames.addAll(sheetCompanyNames); allSheetNames.addAll(sheetCompanyNames);
List<SalaryVo> allList = new ArrayList<>();
for (String sheetCompanyName : sheetCompanyNames){ for (String sheetCompanyName : sheetCompanyNames){
List<SalaryVo> dataList = companyDataList.get(sheetCompanyName); List<SalaryVo> dataList = companyDataList.get(sheetCompanyName);
if(sheetCompanyName.equals("河北伊特")){ 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()); List<String> sheetDeptNames = deptDataList.keySet().stream().sorted((x,y) -> x.compareTo(y)).collect(Collectors.toList());
allSheetNames.addAll(sheetDeptNames); allSheetNames.addAll(sheetDeptNames);
for (String sheetDeptName : sheetDeptNames){ for (String sheetDeptName : sheetDeptNames){
if(Collections.asList("生技部","装配车间","设备工段").contains(sheetDeptName)){
System.out.println(123213);
}
List<SalaryVo> depts = deptDataList.get(sheetDeptName); List<SalaryVo> depts = deptDataList.get(sheetDeptName);
SalaryVo result = sumSalaryVo(depts); SalaryVo result = sumSalaryVo(depts);
result.setDeptName(sheetDeptName); result.setDeptName(sheetDeptName);

View File

@ -161,6 +161,11 @@ public class RzLeaveDetailServiceImpl extends ServiceImpl<RzLeaveDetailMapper, R
Map<String, Object> extensionMap = Collections.emptyMap(); Map<String, Object> extensionMap = Collections.emptyMap();
//先计算相差几个月 //先计算相差几个月
Integer betweenMonth = DateUtils.getBetweenMonth(rzLeaveDetail.getLeaveStartTime(), rzLeaveDetail.getLeaveEndTime()); Integer betweenMonth = DateUtils.getBetweenMonth(rzLeaveDetail.getLeaveStartTime(), rzLeaveDetail.getLeaveEndTime());
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(); Date startDate = rzLeaveDetail.getLeaveStartTime();
for (int i = 0; i <= betweenMonth; i++) { for (int i = 0; i <= betweenMonth; i++) {
startDate = DateUtils.addMonths(startDate, i>0 ? 1 : 0); startDate = DateUtils.addMonths(startDate, i>0 ? 1 : 0);
@ -192,8 +197,12 @@ public class RzLeaveDetailServiceImpl extends ServiceImpl<RzLeaveDetailMapper, R
//计算实际放假天数 //计算实际放假天数
Integer holidayNum = dayList.size()-doubleDayNum; Integer holidayNum = dayList.size()-doubleDayNum;
extensionMap.put("month"+m.format(firsDay), ym.format(firsDay)); extensionMap.put("month"+m.format(firsDay), ym.format(firsDay));
//如果只请1天, 则按照录入的时间计算, 如果
extensionMap.put("hours"+m.format(firsDay), holidayNum*8); extensionMap.put("hours"+m.format(firsDay), holidayNum*8);
} }
}
rzLeaveDetail.setExtension(JSON.toJSONString(extensionMap)); rzLeaveDetail.setExtension(JSON.toJSONString(extensionMap));
getBaseMapper().updateById(rzLeaveDetail); getBaseMapper().updateById(rzLeaveDetail);
} }

View File

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

View File

@ -92,4 +92,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by create_time order by create_time
</select> </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> </mapper>

View File

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