Browse Source

2022年11月17 18:18

wangzhuo 3 years ago
parent
commit
17430efd8c

+ 61 - 0
blade-service-api/blade-school-api/src/main/java/org/springblade/school/entity/SalaryItem.java

@@ -18,6 +18,7 @@ package org.springblade.school.entity;
 
 import java.math.BigDecimal;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
@@ -841,6 +842,66 @@ public class SalaryItem implements Serializable {
 	@ApiModelProperty(value = "是否享受公待遇")
 	private String enjoyOfficeTreatment;
 
+	/**
+	 * 出勤类型
+	 */
+	@ApiModelProperty(value = "出勤类型")
+	private String attendanceType;
+
+	/**
+	 * 应出勤天数
+	 */
+	@ApiModelProperty(value = "应出勤天数")
+	private BigDecimal requiredAttendanceDays;
+
+	/**
+	 * 实际出勤天数
+	 */
+	@ApiModelProperty(value = "实际出勤天数")
+	private BigDecimal actualAttendanceDays;
+
+	/**
+	 * 备注(计算规则)
+	 */
+	@ApiModelProperty(value = "备注(计算规则)")
+	private String calculationRuleRemark;
+
+	/**
+	 * 事假
+	 */
+	@ApiModelProperty(value = "事假")
+	private BigDecimal matterLeave;
+
+	/**
+	 * 病假
+	 */
+	@ApiModelProperty(value = "病假")
+	private BigDecimal sickLeave;
+
+	/**
+	 * 旷工
+	 */
+	@ApiModelProperty(value = "旷工")
+	private BigDecimal absenteeism;
+
+	/**
+	 * 拨付比例
+	 */
+	@ApiModelProperty(value = "拨付比例")
+	private BigDecimal appropriationProportion;
+
+	/**
+	 * 是否已导入出勤(0 否,1 是)
+	 */
+	@ApiModelProperty(value = "是否已导入出勤")
+	private Integer importedOrNot;
+
+	/**
+	 * 是否是出勤
+	 */
+	@TableField(exist = false)
+	private Integer IsOrNot;
+
 	public BigDecimal getfSalary() {
 		return fSalary;
 	}

+ 49 - 0
blade-service/blade-school/src/main/java/org/springblade/school/excel/AttendanceExcel.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.alibaba.excel.annotation.write.style.ContentRowHeight;
 import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -33,4 +34,52 @@ public class AttendanceExcel implements Serializable {
 	 */
 	@ExcelProperty(value = "出勤")
 	private BigDecimal attendance;
+
+	/**
+	 * 出勤类型
+	 */
+	@ExcelProperty(value = "出勤类型(居家,在校)")
+	private String attendanceType;
+
+	/**
+	 * 应出勤天数
+	 */
+	@ExcelProperty(value = "应出勤天数")
+	private BigDecimal requiredAttendanceDays;
+
+	/**
+	 * 实际出勤天数
+	 */
+	@ExcelProperty(value = "实际出勤天数")
+	private BigDecimal actualAttendanceDays;
+
+	/**
+	 * 备注(计算规则)
+	 */
+	@ExcelProperty(value = "备注(计算规则)")
+	private String calculationRuleRemark;
+
+	/**
+	 * 事假
+	 */
+	@ExcelProperty(value = "事假")
+	private BigDecimal matterLeave;
+
+	/**
+	 * 病假
+	 */
+	@ExcelProperty(value = "病假")
+	private BigDecimal sickLeave;
+
+	/**
+	 * 旷工
+	 */
+	@ExcelProperty(value = "旷工")
+	private BigDecimal absenteeism;
+
+	/**
+	 * 拨付比例
+	 */
+	@ExcelProperty(value = "拨付比例")
+	private BigDecimal appropriationProportion;
 }

+ 2 - 2
blade-service/blade-school/src/main/java/org/springblade/school/service/ISalaryItemService.java

@@ -107,14 +107,14 @@ public interface ISalaryItemService extends IService<SalaryItem> {
 	 */
 	R importSanitationFee(List<SanitationFee> data, Boolean isCovered, Long id,MultipartFile file);
 	/**
-	 * 导入周末加班
+	 * 导入出勤
 	 * @param data
 	 * @param isCovered
 	 * @return
 	 */
 	R importAttendanceExcel(List<AttendanceExcel> data, Boolean isCovered, Long id,MultipartFile file);
 	/**
-	 * 导入出勤
+	 *
 	 * @param data
 	 * @param isCovered
 	 * @return

+ 61 - 6
blade-service/blade-school/src/main/java/org/springblade/school/service/impl/SalaryItemServiceImpl.java

@@ -31,6 +31,7 @@ import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.school.entity.Salary;
 import org.springblade.school.entity.SalaryAccessory;
 import org.springblade.school.entity.SalaryItem;
@@ -47,6 +48,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.math.MathContext;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -607,7 +609,7 @@ public class SalaryItemServiceImpl extends ServiceImpl<SalaryItemMapper, SalaryI
 			}
 			SalaryItem salaryItem = new SalaryItem();
 			BeanUtil.copy(attendanceExcel,salaryItem);
-			//根据身份证号查询教职工信息是否存在存在更新不存在新增
+			//根据身份证号查询教职工信息是否存在 存在更新不存在新增
 			SalaryItem item = baseMapper.selectOne(new QueryWrapper<SalaryItem>().eq("id_number", salaryItem.getIdNumber()).eq("tenant_id", SecureUtil.getTenantId())
 				.eq("is_deleted", 0).eq("pid",id));
 			if (item != null){
@@ -615,9 +617,11 @@ public class SalaryItemServiceImpl extends ServiceImpl<SalaryItemMapper, SalaryI
 				salaryItem.setId(item.getId());
 				salaryItem.setUpdateUser(SecureUtil.getUserId());
 				salaryItem.setUpdateTime(new Date());
+
 				baseMapper.updateById(salaryItem);
 				message = ++ message;
 				//更新计算工资
+				salaryItem.setIsOrNot(1);
 				this.countSalary(salaryItem);
 			}
 		}
@@ -1555,6 +1559,7 @@ public class SalaryItemServiceImpl extends ServiceImpl<SalaryItemMapper, SalaryI
 				salary.setAssessTeachingResearchName(item.getAssessTeachingResearchName());//教研组长考核补贴标准
 				//salary.setCustomizeSeven(item.getAssessTeachingResearch());//教研组长考核补贴
 				salary.setEnjoyOfficeTreatment(item.getEnjoyOfficeTreatment());//是否享受办公待遇
+				salary.setImportedOrNot(0);//是否已导入出勤
 				SalaryItem selectOne = baseMapper.selectOne(new QueryWrapper<SalaryItem>().eq("id_number", salary.getIdNumber()).eq("tenant_id", SecureUtil.getTenantId())
 					.eq("is_deleted", 0).eq("pid",salary.getPid()));
 				if (selectOne == null){
@@ -2430,7 +2435,52 @@ public class SalaryItemServiceImpl extends ServiceImpl<SalaryItemMapper, SalaryI
 		//10.应发工资=基本工资+工作量工资+日常考核工资+日常考核工资调整+奖励工资+职务津贴+班主任津贴+补贴项-扣除项+保险(个人部分)+公积金(个人部分).. 大于700 保险(个人部分) 不加
 		//11.实发工资=应发工资-个人所得税-个人保险-公积金个人
 		SalaryItem item = baseMapper.selectById(salaryItem.getId());
+		BigDecimal zeroPointEight = new BigDecimal(0.8);//居家标准为80%
 		if (item != null){
+			//导入的excel为出勤
+			if (ObjectUtil.isNotEmpty(salaryItem.getIsOrNot()) && salaryItem.getIsOrNot().equals(1)){
+				if (ObjectUtil.isNotEmpty(item.getImportedOrNot()) && item.getImportedOrNot().equals(1)){
+					throw new SecurityException(item.getCname()+"出勤已导入,请勿重复导入");
+				}
+				if (item.getAttendanceType().equals("居家")){//出勤为居家则按照所有标准80%计算
+					item.setSalaryWithdrawalStandard(item.getSalaryWithdrawalStandard().multiply(zeroPointEight));//工资拨付标准
+					item.setRankWithdrawalStandard(item.getRankWithdrawalStandard().multiply(zeroPointEight));//职级拨付标准
+					item.setPerformanceAward(item.getPerformanceAward().multiply(zeroPointEight));//履约奖
+					item.setSchoolAgeSalary(item.getSchoolAgeSalary().multiply(zeroPointEight));//校龄工资
+					item.setCapitalIncrease(item.getCapitalIncrease().multiply(zeroPointEight));//增资
+					item.setEducationSalary(item.getEducationSalary().multiply(zeroPointEight));//学历工资
+					item.setRankSalary(item.getRankSalary().multiply(zeroPointEight));//职级工资
+					item.setSalaryBaseName(item.getSalaryBaseName().multiply(zeroPointEight));//工资基数标准
+					item.setWorkloadSalaryCritertion(item.getWorkloadSalaryCritertion().multiply(zeroPointEight));//工作量工资标准
+					item.setVirtualWorkloadSalary(item.getVirtualWorkloadSalary().multiply(zeroPointEight));//虚拟工作量工资标准
+					item.setDoubleCease(item.getDoubleCease().multiply(zeroPointEight));//双休日工作量工资标准
+					item.setVirtualDoubleCease(item.getVirtualDoubleCease().multiply(zeroPointEight));//虚拟双休日工作量工资标准
+					item.setVirtualDailyAssessmentCriteria(item.getVirtualDailyAssessmentCriteria().multiply(zeroPointEight));//虚拟日常考核标准
+					item.setTermPerformanceSalaryName(item.getTermPerformanceSalaryName().multiply(zeroPointEight));//绩效工资标准
+					item.setAppropriationProportion(new BigDecimal(0.8));
+				}else if (item.getAttendanceType().equals("在校")){//在校
+					BigDecimal absenceDays = item.getRequiredAttendanceDays().subtract(item.getActualAttendanceDays());//缺勤天数 = 应出勤天数-实际出勤天数
+					BigDecimal allotment = item.getActualAttendanceDays().divide(item.getRequiredAttendanceDays(), MathContext.DECIMAL32).setScale(2,BigDecimal.ROUND_HALF_UP);//拨付比例
+					if (absenceDays.compareTo(new BigDecimal("5")) > 0){//缺勤天数大于5 按照 标准金额/22*出勤天数 重新计算
+						item.setSalaryWithdrawalStandard(item.getSalaryWithdrawalStandard().multiply(allotment));//工资拨付标准
+						item.setRankWithdrawalStandard(item.getRankWithdrawalStandard().multiply(allotment));//职级拨付标准
+						item.setPerformanceAward(item.getPerformanceAward().multiply(allotment));//履约奖
+						item.setSchoolAgeSalary(item.getSchoolAgeSalary().multiply(allotment));//校龄工资
+						item.setCapitalIncrease(item.getCapitalIncrease().multiply(allotment));//增资
+						item.setEducationSalary(item.getEducationSalary().multiply(allotment));//学历工资
+						item.setRankSalary(item.getRankSalary().multiply(allotment));//职级工资
+						item.setSalaryBaseName(item.getSalaryBaseName().multiply(allotment));//工资基数标准
+						item.setWorkloadSalaryCritertion(item.getWorkloadSalaryCritertion().multiply(allotment));//工作量工资标准
+						item.setVirtualWorkloadSalary(item.getVirtualWorkloadSalary().multiply(allotment));//虚拟工作量工资标准
+						item.setDoubleCease(item.getDoubleCease().multiply(allotment));//双休日工作量工资标准
+						item.setVirtualDoubleCease(item.getVirtualDoubleCease().multiply(allotment));//虚拟双休日工作量工资标准
+						item.setVirtualDailyAssessmentCriteria(item.getVirtualDailyAssessmentCriteria().multiply(allotment));//虚拟日常考核标准
+						item.setTermPerformanceSalaryName(item.getTermPerformanceSalaryName().multiply(allotment));//绩效工资标准
+					}
+					item.setAppropriationProportion(allotment);
+				}
+				item.setImportedOrNot(1);
+			}
 			item.setMomthWorkloadSalary(item.getMonthHour().multiply(item.getMonthPrice()));//月份工作量工资
 			item.setDoubleMoney(item.getDoubleHour().multiply(item.getDoublePrice()));//双休日工作量工资
 			item.setCustomTwo(item.getCustom().multiply(item.getCustomOne()));//代课工作量工资
@@ -2443,11 +2493,16 @@ public class SalaryItemServiceImpl extends ServiceImpl<SalaryItemMapper, SalaryI
 				.add(item.getCustomizeTwo())
 				.add(item.getCustomizeThree())
  			);
-			item.setBasicsSalary(item.getSchoolAgeSalary().add(item.getCapitalIncrease()).add(item.getEducationSalary()).add(item.getRankSalary()).add(item.getSalaryBase()).add(item.getPerformanceAward()));//基础工资
-			item.setWorkloadSalary(item.getMomthWorkloadSalary().add(item.getDoubleMoney()).add(item.getCustomTwo()).add(item.getCustomThree()).add(item.getCustomFour()).add(item.getCustomFive()).add(item.getCustomSix()).add(item.getCustomSeven()).subtract(item.getVirtualWorkloadSalary()).subtract(item.getVirtualDoubleCease()));//工作量工资
-			item.setAwardSalary(item.getCustomAward().add(item.getCustomAwardOne()).add(item.getCustomAwardTwo()).add(item.getCustomAwardThree()).add(item.getCustomAwardFour()).add(item.getCustomAwardFive()).add(item.getCustomAwardSix()).add(item.getCustomAwardSeven()).add(item.getCustomAwardEight()).add(item.getCustomAwardNine()));//奖励工资
-			item.setDutyAllowances(item.getLeadingCadreSubsidy().add(item.getCustomizeFive()).add(item.getPrepareLessons()).add(item.getCustomizeSix()).add(item.getTeachingResearch()).add(item.getCustomizeSeven()));//职务津贴
-			item.setClassTeacherSubsidy(item.getClassTeacherFee().add(item.getClasses()).subtract(item.getAdjustTheBalance()).subtract(item.getPayrollCredit()).subtract(item.getPaid()).add(item.getCustomizeEight()));//班主任津贴
+			//基础工资
+			item.setBasicsSalary(item.getSchoolAgeSalary().add(item.getCapitalIncrease()).add(item.getEducationSalary()).add(item.getRankSalary()).add(item.getSalaryBase()).add(item.getPerformanceAward()));
+			//工作量工资
+			item.setWorkloadSalary(item.getMomthWorkloadSalary().add(item.getDoubleMoney()).add(item.getCustomTwo()).add(item.getCustomThree()).add(item.getCustomFour()).add(item.getCustomFive()).add(item.getCustomSix()).add(item.getCustomSeven()).subtract(item.getVirtualWorkloadSalary()).subtract(item.getVirtualDoubleCease()));
+			//奖励工资
+			item.setAwardSalary(item.getCustomAward().add(item.getCustomAwardOne()).add(item.getCustomAwardTwo()).add(item.getCustomAwardThree()).add(item.getCustomAwardFour()).add(item.getCustomAwardFive()).add(item.getCustomAwardSix()).add(item.getCustomAwardSeven()).add(item.getCustomAwardEight()).add(item.getCustomAwardNine()));
+			//职务津贴
+			item.setDutyAllowances(item.getLeadingCadreSubsidy().add(item.getCustomizeFive()).add(item.getPrepareLessons()).add(item.getCustomizeSix()).add(item.getTeachingResearch()).add(item.getCustomizeSeven()));
+			//班主任津贴
+			item.setClassTeacherSubsidy(item.getClassTeacherFee().add(item.getClasses()).subtract(item.getAdjustTheBalance()).subtract(item.getPayrollCredit()).subtract(item.getPaid()).add(item.getCustomizeEight()));
 			//补贴项
 			item.setSubsidy(item.getWx().add(item.getMaternityLeaveSalary()).add(item.getOvertimeAtWeekend()).add(item.getYearUpPerformance()).add(item.getYearDownPerformance()).add(item.getCadreAllowanceReservation()).add(item.getVacationOvertimePay()).add(item.getNewPostTrain()).add(item.getWinningPrize()).add(item.getClassMinister()).add(item.getMonthViceClassFee()).add(item.getSafetyFees()).add(item.getReserveReplacement()));
 			//扣除项