zhoulisky 4 months ago
parent
commit
fc806810b3

+ 2 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/AttendanceMapper.java

@@ -38,4 +38,6 @@ public interface AttendanceMapper extends BaseMapper<AttendanceEntity> {
 	Long countByUnicodeAndMonth(@Param("unicode") String unicode, @Param("yearAndMonth") String yearAndMonth);
 
 	AttendanceEntity selectInfoByUnicodeAndDate(AttendanceEntity entity);
+
+	double sumHoursByUnicodeAndYear(@Param("unicode") String unicode, @Param("year") String year);
 }

+ 7 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/AttendanceMapper.xml

@@ -109,4 +109,11 @@
         LEFT JOIN kd_technician t on xt.unicode = t.unicode and t.year_and_month = left(#{workDate},6)
         WHERE xt.work_date = #{workDate} and xt.unicode = #{unicode}
     </select>
+
+    <select id="sumHoursByUnicodeAndYear" resultType="java.lang.Double">
+        select
+            ifnull(sum(work_hours),0)
+        from kd_attendance_records
+        where unicode = #{unicode} and left(work_date,4)=#{year}
+    </select>
 </mapper>

+ 2 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianHoursMapper.java

@@ -83,4 +83,6 @@ public interface XmTechnicianHoursMapper extends BaseMapper<XmTechnicianHours> {
 	 * @return
 	 */
 	int batchUpdateHours(List<XmTechnicianHours> updateList);
+
+    double sumHoursByXmAndUnicodeAndYearMonth(@Param("xmId") Long xmId, @Param("unicode") String unicode, @Param("yearAndMonth") String yearAndMonth);
 }

+ 7 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianHoursMapper.xml

@@ -174,6 +174,13 @@
          WHERE LEFT(h.work_date, 6) = #{yearAndMonth}
     </select>
 
+    <select id="sumHoursByXmAndUnicodeAndYearMonth" resultType="java.lang.Double">
+        select
+            ifnull(sum(work_hours),0 )
+        from kd_xm_technician_hours
+        where xm_id = #{xmId} and unicode = #{unicode} and left(work_date,6) = #{yearAndMonth}
+    </select>
+
     <update id="clearByXmUnicodeMonth">
         update kd_xm_technician_hours
         set work_hours = 0

+ 45 - 16
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianMapper.xml

@@ -265,29 +265,18 @@
             resultMap="XmTechnicianSalaryVOMap">
         SELECT
             m.xm_id,xm.XMBH,xm.XMMC,
-            m.unicode,t.name, t.number,t.id_card, t.personnel_type,t.year_and_month,
-            (SELECT IFNULL(SUM(work_hours),0) FROM kd_attendance_records kar WHERE kar.unicode= m.unicode AND LEFT ( work_date, 4 ) = LEFT(m.year_and_month,4)) AS attendanceHours,
-            (SELECT IFNULL(SUM(work_hours),0) FROM kd_xm_technician_hours kxth WHERE kxth.xm_id = m.xm_id AND kxth.unicode = m.unicode AND LEFT ( work_date, 4 ) = LEFT(m.year_and_month,4)) AS workHours,
-            (SELECT IFNULL( sum( s.average_monthly_salary ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS average_monthly_salary,
-            (SELECT IFNULL( sum( s.pension_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS pension_insurance,
-            (SELECT IFNULL( sum( s.medical_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS medical_insurance,
-            (SELECT IFNULL( sum( s.unemployment_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS unemployment_insurance,
-            (SELECT IFNULL( sum( s.injury_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS injury_insurance,
-            (SELECT IFNULL( sum( s.maternity_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS maternity_insurance,
-            (SELECT IFNULL( sum( s.provident_fund ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS provident_fund,
-            (SELECT IFNULL( sum( s.bonus ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS bonus,
-            (SELECT IFNULL( sum( s.benefit ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS benefit,
-            (SELECT IFNULL( sum( s.pension_insurance_bc ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS pension_insurance_bc,
-            (SELECT IFNULL( sum( s.medical_insurance_bc ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS medical_insurance_bc
+            m.unicode,t.name, t.number,t.id_card, t.personnel_type,t.year_and_month
         FROM kd_xm_technician m
         LEFT JOIN
         (
-            select unicode,name,number,id_card,personnel_type,year_and_month
+            select
+                unicode,name,number,id_card,personnel_type,year_and_month
             from kd_technician temp
             where temp.unicode = unicode and year_and_month = (select max(year_and_month) from kd_technician where unicode = temp.unicode and left(year_and_month,4) = #{ew.yearAndMonth} order by year_and_month desc limit 1)
         ) as t on t.unicode = m.unicode
         LEFT JOIN (
-            SELECT temp.id, XMBH,
+            SELECT
+                temp.id, XMBH,
                 COALESCE(get_xm_info(temp.id, 'XMMC', #{ew.yearAndMonth}), temp.XMMC ) AS XMMC
             FROM kd_xm temp
         ) xm ON m.xm_id = xm.id
@@ -301,6 +290,46 @@
         order by m.xm_id, m.unicode
     </select>
 
+<!--    <select id="meiyueyanfarengongfeiyongfeifenpeibiaoYear"-->
+<!--            resultMap="XmTechnicianSalaryVOMap">-->
+<!--        SELECT-->
+<!--            m.xm_id,xm.XMBH,xm.XMMC,-->
+<!--            m.unicode,t.name, t.number,t.id_card, t.personnel_type,t.year_and_month,-->
+<!--            (SELECT IFNULL(SUM(work_hours),0) FROM kd_attendance_records kar WHERE kar.unicode= m.unicode AND LEFT ( work_date, 4 ) = LEFT(m.year_and_month,4)) AS attendanceHours,-->
+<!--            (SELECT IFNULL(SUM(work_hours),0) FROM kd_xm_technician_hours kxth WHERE kxth.xm_id = m.xm_id AND kxth.unicode = m.unicode AND LEFT ( work_date, 4 ) = LEFT(m.year_and_month,4)) AS workHours,-->
+<!--            (SELECT IFNULL( sum( s.average_monthly_salary ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS average_monthly_salary,-->
+<!--            (SELECT IFNULL( sum( s.pension_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS pension_insurance,-->
+<!--            (SELECT IFNULL( sum( s.medical_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS medical_insurance,-->
+<!--            (SELECT IFNULL( sum( s.unemployment_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS unemployment_insurance,-->
+<!--            (SELECT IFNULL( sum( s.injury_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS injury_insurance,-->
+<!--            (SELECT IFNULL( sum( s.maternity_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS maternity_insurance,-->
+<!--            (SELECT IFNULL( sum( s.provident_fund ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS provident_fund,-->
+<!--            (SELECT IFNULL( sum( s.bonus ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS bonus,-->
+<!--            (SELECT IFNULL( sum( s.benefit ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS benefit,-->
+<!--            (SELECT IFNULL( sum( s.pension_insurance_bc ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS pension_insurance_bc,-->
+<!--            (SELECT IFNULL( sum( s.medical_insurance_bc ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS medical_insurance_bc-->
+<!--        FROM kd_xm_technician m-->
+<!--        LEFT JOIN-->
+<!--        (-->
+<!--            select unicode,name,number,id_card,personnel_type,year_and_month-->
+<!--            from kd_technician temp-->
+<!--            where temp.unicode = unicode and year_and_month = (select max(year_and_month) from kd_technician where unicode = temp.unicode and left(year_and_month,4) = #{ew.yearAndMonth} order by year_and_month desc limit 1)-->
+<!--        ) as t on t.unicode = m.unicode-->
+<!--        LEFT JOIN (-->
+<!--            SELECT temp.id, XMBH,-->
+<!--                COALESCE(get_xm_info(temp.id, 'XMMC', #{ew.yearAndMonth}), temp.XMMC ) AS XMMC-->
+<!--            FROM kd_xm temp-->
+<!--        ) xm ON m.xm_id = xm.id-->
+<!--        WHERE m.tenant_id = #{ew.tenantId} and LEFT(m.year_and_month,4) = #{ew.yearAndMonth}-->
+<!--        <if test="ew.xmmc!=null and ew.xmmc!=''">and xm.XMMC like concat('%',#{ew.xmmc},'%')</if>-->
+<!--        <if test="ew.name!=null and ew.name!=''">and t.name like concat('%', #{ew.name},'%')</if>-->
+<!--        <if test="ew.number!=null and ew.number!=''">and t.number like concat('%',#{ew.number}, '%')</if>-->
+<!--        <if test="ew.idCard!=null and ew.idCard!=''">and t.id_card like concat('%', #{ew.idCard}, '%')</if>-->
+<!--        <if test="ew.personnelType!=null and ew.personnelType!=''">and t.personnel_type = #{ew.personnelType}</if>-->
+<!--        GROUP BY m.xm_id, m.unicode-->
+<!--        order by m.xm_id, m.unicode-->
+<!--    </select>-->
+
 <!--    <select id="meiyueyanfaxiangmurengongfenpeihuizongbiao" resultType="org.sky.scientific.pojo.vo.XmSalaryVO">-->
 <!--        SELECT-->
 <!--            t.xm_id,-->

+ 59 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/TechnicianServiceImpl.java

@@ -547,6 +547,65 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 			list = xmTechnicianMapper.meiyueyanfarengongfeiyongfeifenpeibiao(page, dto);
 		} else if (dto.getYearAndMonth().length() == 4) {
 			list = xmTechnicianMapper.meiyueyanfarengongfeiyongfeifenpeibiaoYear(page, dto);
+
+			String year = dto.getYearAndMonth();
+			for (XmTechnicianSalaryVO vo : list) {
+				//1.根据unicode、year查询考勤时长
+ 				vo.setAttendanceHours(attendanceMapper.sumHoursByUnicodeAndYear(vo.getUnicode(), year));
+				//2.根据xmId、unicode、yearAndMonth查询 工时
+				vo.setWorkHours(hoursMapper.sumHoursByXmAndUnicodeAndYearMonth(vo.getXmId(), vo.getUnicode(), vo.getYearAndMonth()));
+				//3.根据unicode、yearAndMonth查询工资数据
+				List<SalaryEntity> salaryList = salaryMapper.selectList(Wrappers.<SalaryEntity>lambdaQuery().eq(SalaryEntity::getUnicode, vo.getUnicode()).eq(SalaryEntity::getYearAndMonth, vo.getYearAndMonth()));
+				if(Func.isEmpty(salaryList)){
+					continue;
+				}
+				SalaryEntity salary = salaryList.get(0);
+				//4. 第2/第1 * 第3的工资分项数据
+				if(vo.getAttendanceHours() != 0){
+					vo.setYanfazhanbi(BigDecimal.valueOf(vo.getWorkHours()/vo.getAttendanceHours()));
+				}
+
+ 				vo.setAverageMonthlySalary(salary.getAverageMonthlySalary() );
+ 				vo.setAverageMonthlySalaryRate(vo.getAverageMonthlySalary().multiply(vo.getYanfazhanbi()));
+
+				vo.setPensionInsurance(salary.getPensionInsurance() );
+				vo.setPensionInsuranceRate(vo.getPensionInsurance().multiply(vo.getYanfazhanbi()));
+
+				vo.setMedicalInsurance(salary.getMedicalInsurance() );
+				vo.setMedicalInsuranceRate(vo.getMedicalInsurance().multiply(vo.getYanfazhanbi()) );
+
+				vo.setUnemploymentInsurance(salary.getUnemploymentInsurance());
+				vo.setUnemploymentInsuranceRate(vo.getUnemploymentInsurance().multiply(vo.getYanfazhanbi()));
+
+				vo.setInjuryInsurance(salary.getInjuryInsurance() );
+				vo.setInjuryInsuranceRate(vo.getInjuryInsurance().multiply(vo.getYanfazhanbi()) );
+
+				vo.setMaternityInsurance(salary.getMaternityInsurance() );
+				vo.setMaternityInsuranceRate(vo.getMaternityInsurance().multiply(vo.getYanfazhanbi()));
+
+				vo.setProvidentFund(salary.getProvidentFund() );
+				vo.setProvidentFundRate(vo.getProvidentFund().multiply(vo.getYanfazhanbi()) );
+
+				vo.setBonus(salary.getBonus() );
+				vo.setBonusRate(vo.getBonus().multiply(vo.getYanfazhanbi()));
+
+				vo.setBenefit(salary.getBenefit() );
+				vo.setBenefitRate(vo.getBenefit().multiply(vo.getYanfazhanbi()));
+
+				vo.setPensionInsuranceBc(salary.getPensionInsuranceBc() );
+				vo.setPensionInsuranceBcRate(vo.getPensionInsuranceBc().multiply(vo.getYanfazhanbi()));
+
+				vo.setMedicalInsuranceBc(salary.getMedicalInsuranceBc() );
+				vo.setMedicalInsuranceBcRate(vo.getMedicalInsuranceBc().multiply(vo.getYanfazhanbi()));
+				//5.将第4点的结果累加
+
+				//社保合计
+				vo.setTotalInsurance(vo.getInjuryInsurance().add(vo.getUnemploymentInsurance()).add(vo.getMaternityInsurance()).add(vo.getMedicalInsurance()).add(vo.getPensionInsurance()));
+				//项目分配的社保合计
+				vo.setTotalInsuranceRate(vo.getInjuryInsuranceRate().add(vo.getUnemploymentInsuranceRate()).add(vo.getMaternityInsuranceRate()).add(vo.getMedicalInsuranceRate()).add(vo.getPensionInsuranceRate()));
+				//研发费用合计=研发项目分配的工资薪金 + 社保合计 + 公积金 + 奖金 + 福利费 + 补充养老保险 + 补充医疗保险
+				vo.setTotal(vo.getAverageMonthlySalaryRate().add(vo.getTotalInsuranceRate()).add(vo.getProvidentFundRate()).add(vo.getBonusRate()).add(vo.getBenefit()).add(vo.getMedicalInsuranceBcRate()).add(vo.getPensionInsuranceBcRate()));
+			}
 		} else {
 			throw new ServiceException("参数yearAndMonth格式错误,yyyyMM或yyyy");
 		}