SalaryAdjustmentDataService.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package com.kingdee.eas.custom.esign.service;
  2. import com.kingdee.bos.util.BOSObjectType;
  3. import com.kingdee.bos.util.BOSUuid;
  4. /**
  5. * 调薪薪酬取数
  6. * @author coyle
  7. * 202603
  8. */
  9. public class SalaryAdjustmentDataService extends OtherESignConfigDataService {
  10. public String getSql(String id) {
  11. StringBuilder sql = new StringBuilder();
  12. // ===================== 薪酬调薪前后对比查询 =====================
  13. // 查询内容:员工基础信息 + 固定工资/绩效奖金/福利 调薪前后对比及差额
  14. sql.append("SELECT \n");
  15. // 1. 员工基础信息
  16. // 人员姓名
  17. sql.append(" person.FNAME_L2 AS person_name, \n");
  18. // 入职日期
  19. sql.append(" elation.FEnterDate AS entry_date, \n");
  20. // 调薪日期(新记录生效日)
  21. sql.append(" new_fas.FEffectDay AS salary_adjust_date, \n");
  22. sql.append(" firstParty.FName_l2 as firstPartyName , \n");
  23. // 2. 固定工资对比(税前:TD01+T012+T013+TD02)
  24. // 调薪前固定工资
  25. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02') THEN old_fas.FMoney ELSE 0 END), 0) AS before_fixed_salary, \n");
  26. // 调薪后固定工资
  27. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02') THEN new_fas.FMoney ELSE 0 END), 0) AS after_fixed_salary, \n");
  28. // 固定工资调薪差额
  29. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02') THEN new_fas.FMoney - old_fas.FMoney ELSE 0 END), 0) AS fixed_salary_diff, \n");
  30. // 3. 绩效奖金对比(税前:TD04=标准绩效,TD74=试用期绩效)
  31. // 3.1 标准绩效奖金
  32. // 调薪前标准绩效奖金
  33. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER = 'TD04' THEN old_fas.FMoney ELSE 0 END), 0) AS before_perf_bonus, \n");
  34. // 调薪后标准绩效奖金
  35. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER = 'TD04' THEN new_fas.FMoney ELSE 0 END), 0) AS after_perf_bonus, \n");
  36. // 标准绩效奖金差额
  37. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER = 'TD04' THEN new_fas.FMoney - old_fas.FMoney ELSE 0 END), 0) AS perf_bonus_diff, \n");
  38. // 3.2 试用期绩效奖金
  39. // 调薪前试用期绩效奖金
  40. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER = 'TD74' THEN old_fas.FMoney ELSE 0 END), 0) AS before_prob_perf_bonus, \n");
  41. // 调薪后试用期绩效奖金
  42. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER = 'TD74' THEN new_fas.FMoney ELSE 0 END), 0) AS after_prob_perf_bonus, \n");
  43. // 试用期绩效奖金差额
  44. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER = 'TD74' THEN new_fas.FMoney - old_fas.FMoney ELSE 0 END), 0) AS prob_perf_bonus_diff, \n");
  45. // 4. 福利对比(餐补+艰苦补贴+社保公积金补贴)
  46. // 4.1 国内餐补(T014)
  47. // 调薪前餐补
  48. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER = 'T014' THEN old_fas.FMoney ELSE 0 END), 0) AS before_meal_subsidy, \n");
  49. // 调薪后餐补
  50. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER = 'T014' THEN new_fas.FMoney ELSE 0 END), 0) AS after_meal_subsidy, \n");
  51. // 4.2 艰苦补贴(TD05)
  52. // 调薪前艰苦补贴
  53. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER = 'TD05' THEN old_fas.FMoney ELSE 0 END), 0) AS before_hardship_subsidy, \n");
  54. // 调薪后艰苦补贴
  55. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER = 'TD05' THEN new_fas.FMoney ELSE 0 END), 0) AS after_hardship_subsidy, \n");
  56. // 4.3 社保公积金补贴(TD101)
  57. // 调薪前社保公积金补贴
  58. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER = 'TD101' THEN old_fas.FMoney ELSE 0 END), 0) AS before_social_fund, \n");
  59. // 调薪后社保公积金补贴
  60. sql.append(" ISNULL(SUM(CASE WHEN sitem_new.FNUMBER = 'TD101' THEN new_fas.FMoney ELSE 0 END), 0) AS after_social_fund \n");
  61. // ===================== 表关联 =====================
  62. // 主表:人员基础信息
  63. sql.append("FROM \n");
  64. sql.append(" T_bd_Person person \n");
  65. // 关联:入职日期
  66. sql.append("LEFT JOIN \n");
  67. sql.append(" T_HR_EmpLaborRelation elation ON person.fid = elation.FPersonID \n");
  68. // 主表:调薪后记录(当前生效)
  69. sql.append("LEFT JOIN \n");
  70. sql.append(" T_HR_SFixAdjustSalary new_fas ON person.FID = new_fas.FPersonID \n");
  71. // 关联:调薪前记录
  72. sql.append("LEFT JOIN \n");
  73. sql.append(" T_HR_SFixAdjustSalary old_fas ON new_fas.FOldFixAdjustSalaryID = old_fas.FID \n");
  74. // 关联:薪酬项目字典
  75. sql.append("LEFT JOIN \n");
  76. sql.append(" T_HR_SCmpItem sitem_new ON new_fas.FCmpItemID = sitem_new.FID \n");
  77. sql.append(" LEFT JOIN \n");
  78. sql.append(" T_HR_EmployeeContract econtract on econtract.FEmployeeID = person.FID \n");
  79. sql.append(" left join T_HR_LabContractFirstParty firstParty on econtract.FContFirstPartyID = firstParty.FID \n");
  80. // ===================== 查询条件 =====================
  81. sql.append("WHERE \n");
  82. // 仅保留调薪相关记录
  83. sql.append(" new_fas.FAdjustSalaryCauseID IS NOT NULL \n");
  84. // 仅保留模板所需薪酬项目
  85. sql.append(" AND sitem_new.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02', 'TD04', 'TD74', 'T014', 'TD05', 'TD101') \n");
  86. // 调薪后记录为永久有效
  87. sql.append(" AND new_fas.FLeffectDay = '2199-12-31 00:00:00' \n");
  88. BOSUuid read = BOSUuid.read(id);
  89. BOSObjectType type = read.getType();
  90. if (type.toString().equals("7BD37592")){//id类型为合同
  91. sql.append("and person.fid in (select FEmployeeID from T_HR_EmployeeContract where fid = '"+id+"')" ) ;
  92. }else if (type.toString().equals("80EF7DED")){//id类型为员工felse
  93. sql.append("and person.fid = '"+id+"'");
  94. }
  95. // ===================== 分组 & 排序 =====================
  96. // 按员工维度分组,一人一条记录
  97. sql.append("GROUP BY \n");
  98. sql.append(" person.FID, person.FNAME_L2, elation.FEnterDate, new_fas.FEffectDay , firstParty.FName_l2 \n");
  99. // -------------------------- ORDER BY子句 --------------------------
  100. // 排序规则:按人员姓名升序排列
  101. sql.append("ORDER BY \n");
  102. sql.append(" person.FNAME_L2");
  103. System.out.print("osfsql"+sql.toString());
  104. return sql.toString();
  105. }
  106. }