|
@@ -302,30 +302,59 @@
|
|
|
|
|
|
|
|
<select id="meiyueyanfaxiangmurengongfenpeihuizongbiao" resultType="org.sky.scientific.pojo.vo.XmSalaryVO">
|
|
<select id="meiyueyanfaxiangmurengongfenpeihuizongbiao" resultType="org.sky.scientific.pojo.vo.XmSalaryVO">
|
|
|
SELECT
|
|
SELECT
|
|
|
- xm.xm_id,m.XMBH,m.XMMC,
|
|
|
|
|
- xm.year_and_month,
|
|
|
|
|
- (SELECT IFNULL(SUM(work_hours),0) FROM kd_attendance_records r WHERE r.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and tmp.year_and_month = xm.year_and_month) and LEFT(work_date,6)= xm.year_and_month) AS attendanceHours,
|
|
|
|
|
- (SELECT IFNULL(SUM(work_hours),0) FROM kd_xm_technician_hours kxth WHERE kxth.xm_id = xm.xm_id AND LEFT(work_date,6)=xm.year_and_month) AS workHours,
|
|
|
|
|
- (SELECT IFNULL(sum(s.average_monthly_salary),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and tmp.year_and_month = xm.year_and_month) AND s.year_and_month = xm.year_and_month) AS average_monthly_salary,
|
|
|
|
|
- (SELECT IFNULL(sum(s.pension_insurance),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and tmp.year_and_month = xm.year_and_month) AND s.year_and_month = xm.year_and_month) AS pension_insurance,
|
|
|
|
|
- (SELECT IFNULL(sum(s.medical_insurance),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and tmp.year_and_month = xm.year_and_month) AND s.year_and_month = xm.year_and_month) AS medical_insurance,
|
|
|
|
|
- (SELECT IFNULL(sum(s.unemployment_insurance),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and tmp.year_and_month = xm.year_and_month) AND s.year_and_month = xm.year_and_month) AS unemployment_insurance,
|
|
|
|
|
- (SELECT IFNULL(sum(s.injury_insurance),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and tmp.year_and_month = xm.year_and_month) AND s.year_and_month = xm.year_and_month) AS injury_insurance,
|
|
|
|
|
- (SELECT IFNULL(sum(s.maternity_insurance),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and tmp.year_and_month = xm.year_and_month) AND s.year_and_month = xm.year_and_month) AS maternity_insurance,
|
|
|
|
|
- (SELECT IFNULL(sum(s.provident_fund),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and tmp.year_and_month = xm.year_and_month) AND s.year_and_month = xm.year_and_month) AS provident_fund,
|
|
|
|
|
- (SELECT IFNULL(sum(s.bonus),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and tmp.year_and_month = xm.year_and_month) AND s.year_and_month = xm.year_and_month) AS bonus,
|
|
|
|
|
- (SELECT IFNULL(sum(s.benefit),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and tmp.year_and_month = xm.year_and_month) AND s.year_and_month = xm.year_and_month) AS benefit,
|
|
|
|
|
- (SELECT IFNULL(sum(s.pension_insurance_bc),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and tmp.year_and_month = xm.year_and_month) AND s.year_and_month = xm.year_and_month) AS pension_insurance_bc,
|
|
|
|
|
- (SELECT IFNULL(sum(s.medical_insurance_bc),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and tmp.year_and_month = xm.year_and_month) AND s.year_and_month = xm.year_and_month) AS medical_insurance_bc
|
|
|
|
|
- FROM kd_xm_technician xm
|
|
|
|
|
- LEFT JOIN (
|
|
|
|
|
- SELECT temp.id, XMBH,
|
|
|
|
|
- COALESCE(get_xm_info(temp.id, 'XMMC', #{ew.yearAndMonth}), temp.XMMC ) AS XMMC
|
|
|
|
|
- FROM kd_xm as temp
|
|
|
|
|
- ) m ON m.id = xm.xm_id
|
|
|
|
|
- WHERE xm.tenant_id = #{ew.tenantId} and xm.year_and_month = #{ew.yearAndMonth}
|
|
|
|
|
|
|
+ t.xm_id,
|
|
|
|
|
+ m.xmbh,
|
|
|
|
|
+ m.xmmc,
|
|
|
|
|
+ -- 工资薪金总和(每个人的工资×研发占比)
|
|
|
|
|
+ ROUND(SUM(COALESCE(s.average_monthly_salary, 0) * COALESCE(rd_ratio.ratio, 0)), 2) AS averageMonthlySalary,
|
|
|
|
|
+ -- 社保总和(每个人的社保×研发占比)
|
|
|
|
|
+ ROUND(SUM((COALESCE(s.pension_insurance, 0) + COALESCE(s.medical_insurance, 0) + COALESCE(s.unemployment_insurance, 0) + COALESCE(s.injury_insurance, 0) + COALESCE(s.maternity_insurance, 0)) * COALESCE(rd_ratio.ratio, 0)), 2) AS totalInsurance,
|
|
|
|
|
+ -- 公积金总和(每个人的公积金×研发占比)
|
|
|
|
|
+ ROUND(SUM(COALESCE(s.provident_fund, 0) * COALESCE(rd_ratio.ratio, 0)), 2) AS providentFund,
|
|
|
|
|
+ -- 奖金总和(每个人的公积金×研发占比)
|
|
|
|
|
+ ROUND(SUM(COALESCE(s.bonus, 0) * COALESCE(rd_ratio.ratio, 0)), 2) AS bonus,
|
|
|
|
|
+ -- 福利费总和(每个人的福利费×研发占比)
|
|
|
|
|
+ ROUND(SUM(COALESCE(s.benefit, 0) * COALESCE(rd_ratio.ratio, 0)), 2) AS benefit,
|
|
|
|
|
+ -- 补充养老保险总和(每个人的补充养老保险×研发占比)
|
|
|
|
|
+ ROUND(SUM(COALESCE(s.pension_insurance_bc, 0) * COALESCE(rd_ratio.ratio, 0)), 2) AS pensionInsuranceBc,
|
|
|
|
|
+ -- 补充医疗保险总和(每个人的补充医疗保险×研发占比)
|
|
|
|
|
+ ROUND(SUM(COALESCE(s.medical_insurance_bc, 0) * COALESCE(rd_ratio.ratio, 0)), 2) AS medicalInsuranceBc
|
|
|
|
|
+ FROM kd_xm_technician t
|
|
|
|
|
+ -- 计算研发占比的子查询
|
|
|
|
|
+ INNER JOIN (
|
|
|
|
|
+ SELECT
|
|
|
|
|
+ rd.tenant_id,rd.unicode,rd.work_year_month,rd.xm_id,
|
|
|
|
|
+ -- 研发占比 = 研发工时 / 考勤工时
|
|
|
|
|
+ CASE WHEN COALESCE(att.attendance_hours, 0) > 0 THEN LEAST(rd.rd_hours / att.attendance_hours, 1.0) ELSE 0 END AS ratio,
|
|
|
|
|
+ rd.rd_hours,att.attendance_hours
|
|
|
|
|
+ FROM (
|
|
|
|
|
+ -- 计算每个人的研发工时
|
|
|
|
|
+ SELECT
|
|
|
|
|
+ tenant_id,unicode,LEFT(work_date, 6) AS work_year_month, xm_id,SUM(work_hours) AS rd_hours
|
|
|
|
|
+ FROM kd_xm_technician_hours
|
|
|
|
|
+ GROUP BY tenant_id, unicode, LEFT(work_date, 6), xm_id
|
|
|
|
|
+ ) rd
|
|
|
|
|
+ LEFT JOIN (
|
|
|
|
|
+ -- 计算每个人的考勤工时
|
|
|
|
|
+ SELECT
|
|
|
|
|
+ tenant_id, unicode,LEFT(work_date, 6) AS work_year_month, SUM(work_hours) AS attendance_hours
|
|
|
|
|
+ FROM kd_attendance_records
|
|
|
|
|
+ GROUP BY tenant_id, unicode, LEFT(work_date, 6)
|
|
|
|
|
+ ) att ON rd.tenant_id = att.tenant_id AND rd.unicode = att.unicode AND rd.work_year_month = att.work_year_month
|
|
|
|
|
+ ) rd_ratio ON t.tenant_id = rd_ratio.tenant_id AND t.unicode = rd_ratio.unicode AND t.year_and_month = rd_ratio.work_year_month AND t.xm_id = rd_ratio.xm_id
|
|
|
|
|
+
|
|
|
|
|
+ -- 关联工资数据
|
|
|
|
|
+ LEFT JOIN kd_salary s ON t.tenant_id = s.tenant_id AND t.unicode = s.unicode AND t.year_and_month = s.year_and_month
|
|
|
|
|
+
|
|
|
|
|
+ left join
|
|
|
|
|
+ (
|
|
|
|
|
+ select
|
|
|
|
|
+ temp.id, XMBH ,
|
|
|
|
|
+ COALESCE(get_xm_info(temp.id, 'XMMC', #{ew.yearAndMonth}), temp.XMMC) as XMMC from kd_xm temp
|
|
|
|
|
+ ) m on m.id = t.xm_id
|
|
|
|
|
+ WHERE t.tenant_id = #{ew.tenantId} and t.year_and_month = #{ew.yearAndMonth}
|
|
|
<if test="ew.xmmc!=null and ew.xmmc!=''">and m.XMMC like concat('%',#{ew.xmmc},'%')</if>
|
|
<if test="ew.xmmc!=null and ew.xmmc!=''">and m.XMMC like concat('%',#{ew.xmmc},'%')</if>
|
|
|
- GROUP BY xm.xm_id
|
|
|
|
|
|
|
+ GROUP BY t.xm_id
|
|
|
</select>
|
|
</select>
|
|
|
|
|
|
|
|
<select id="meiyueyanfaxiangmurengongfenpeihuizongbiaoByYear" resultType="org.sky.scientific.pojo.vo.XmSalaryVO">
|
|
<select id="meiyueyanfaxiangmurengongfenpeihuizongbiaoByYear" resultType="org.sky.scientific.pojo.vo.XmSalaryVO">
|