OnboardingSalaryDataService.java 4.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. * 202602
  8. */
  9. public class OnboardingSalaryDataService extends OtherESignConfigDataService {
  10. public String getSql(String id) {
  11. StringBuilder sql = new StringBuilder();
  12. // -------------------------- SELECT子句 --------------------------
  13. // 基础字段:人员姓名、身份证号、甲方名称、入职日期
  14. // 薪资计算字段:固定工资、试用期固定工资、绩效奖金、各类补贴(均为税前)
  15. sql.append("SELECT \n");
  16. sql.append(" person.FNAME_L2 AS person_name ,\n");
  17. sql.append(" person.FIDCardNO AS idcard ,\n");
  18. sql.append(" firstParty.FName_l2 as firstPartyName ,\n");
  19. sql.append(" elation.FEnterDate AS eDate ,\n");
  20. // 1. 固定工资(税前)= 标准基本工资+综合工资+其他工资+加班工资
  21. sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02') THEN fas.FMoney ELSE 0 END), 0) AS fixed_salary ,\n");
  22. // 2. 试用期固定工资(税前)= 标准基本工资+综合工资+其他工资+加班工资
  23. sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02') THEN fas.FMoney ELSE 0 END), 0) AS prob_fixed_salary ,\n");
  24. // 3. 绩效奖金(税前)= 标准绩效奖金
  25. sql.append(" ISNULL(MAX(CASE WHEN sitem.FNUMBER = 'TD04' THEN fas.FMoney ELSE 0 END), 0) AS perf_bonus ,\n");
  26. // 4. 试用期绩效奖金(税前)= 试用期标准绩效奖金
  27. sql.append(" ISNULL(MAX(CASE WHEN sitem.FNUMBER = 'TD74' THEN fas.FMoney ELSE 0 END), 0) AS prob_perf_bonus ,\n");
  28. // 5. 国内餐补 = 餐补补贴
  29. sql.append(" ISNULL(MAX(CASE WHEN sitem.FNUMBER = 'T014' THEN fas.FMoney ELSE 0 END), 0) AS domestic_meal_subsidy ,\n");
  30. // 6. 艰苦补贴 = 艰苦补贴
  31. sql.append(" ISNULL(MAX(CASE WHEN sitem.FNUMBER = 'TD05' THEN fas.FMoney ELSE 0 END), 0) AS hardship_subsidy ,\n");
  32. // 7. 社保公积金补贴 = 社保公积金补贴
  33. sql.append(" ISNULL(MAX(CASE WHEN sitem.FNUMBER = 'TD101' THEN fas.FMoney ELSE 0 END), 0) AS social_fund , \n");
  34. // 8. 总部人员产假工资:
  35. sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER IN ('TD01', 'T012', 'TD101' ) THEN fas.FMoney ELSE 0 END), 0) AS hqMaternity ,\n");
  36. // 9. 月薪产假工资
  37. sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER IN ('TD01', 'TD03', 'TD02', 'TD06' , 'TD101') THEN fas.FMoney ELSE 0 END), 0) AS msMaternity ,\n");
  38. // 10.日薪产假工资
  39. sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER IN ('TD01', 'TD06', 'TD07' ) THEN fas.FMoney ELSE 0 END), 0) AS dwMaternity \n");
  40. // -------------------------- FROM子句 --------------------------
  41. // 表关联逻辑:
  42. // 1. T_bd_Person(人员表)关联T_HR_EmpLaborRelation(用工关系表):取入职日期
  43. // 2. 人员表关联T_HR_SFixAdjustSalary(固定薪资调整表):取薪资金额
  44. // 3. 薪资表关联T_HR_SCmpItem(薪资项目表):按薪资项目编码过滤
  45. // 4. 人员表关联T_HR_EmployeeContract(员工合同表):关联甲方信息
  46. // 5. 合同表关联T_HR_LabContractFirstParty(合同甲方表):取甲方名称
  47. sql.append("FROM \n");
  48. sql.append(" T_bd_Person person \n");
  49. sql.append("LEFT JOIN T_HR_EmpLaborRelation elation on person.fid = elation.FPersonID \n");
  50. sql.append("LEFT JOIN T_HR_SFixAdjustSalary fas ON person.FID = fas.FPersonID\n");
  51. sql.append("LEFT JOIN T_HR_SCmpItem sitem ON fas.FCmpItemID = sitem.FID\n");
  52. sql.append("LEFT JOIN T_HR_EmployeeContract econtract on econtract.FEmployeeID = person.FID\n");
  53. sql.append("LEFT JOIN T_HR_LabContractFirstParty firstParty on econtract.FContFirstPartyID = firstParty.FID \n");
  54. sql.append("WHERE \n");
  55. sql.append(" sitem.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02', 'TD04', 'TD74', 'T014', 'TD05', 'TD101' ,'TD03' ,'TD06' ,'TD07') \n");
  56. sql.append(" and fas.FLeffectDay = '2199-12-31 00:00:00' \n");
  57. sql.append(" AND econtract. FState = '1' AND econtract.FNewState = '1' AND econtract.FIsNewestContract = '1' \n");
  58. BOSUuid read = BOSUuid.read(id);
  59. BOSObjectType type = read.getType();
  60. if (type.toString().equals("7BD37592")){//id类型为合同
  61. sql.append("and person.fid in (select FEmployeeID from T_HR_EmployeeContract where fid = '"+id+"')" ) ;
  62. }else if (type.toString().equals("80EF7DED")){//id类型为员工felse
  63. sql.append("and person.fid = '"+id+"'");
  64. }
  65. sql.append("GROUP BY \n");
  66. sql.append(" person.FID, person.FNAME_L2 , elation.FEnterDate , person.FIDCardNO , firstParty.FName_l2 \n");
  67. // -------------------------- ORDER BY子句 --------------------------
  68. // 排序规则:按人员姓名升序排列
  69. sql.append("ORDER BY \n");
  70. sql.append(" person.FNAME_L2");
  71. System.out.print("osfsql"+sql.toString());
  72. return sql.toString();
  73. }
  74. }