OnboardingSalaryDataService.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. package com.kingdee.eas.custom.esign.service;
  2. import java.sql.SQLException;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.kingdee.bos.BOSException;
  5. import com.kingdee.bos.Context;
  6. import com.kingdee.bos.util.BOSObjectType;
  7. import com.kingdee.bos.util.BOSUuid;
  8. import com.kingdee.eas.custom.esign.ESignTemplateFileEntryFieldInfo;
  9. import com.kingdee.eas.custom.esign.ESignTemplateFileEntryInfo;
  10. import com.kingdee.eas.custom.esign.FieldMappingEntryCollection;
  11. import com.kingdee.eas.custom.esign.FieldMappingEntryInfo;
  12. import com.kingdee.eas.fi.arap.util.DBUtil;
  13. import com.kingdee.jdbc.rowset.IRowSet;
  14. /**
  15. * 入职薪酬取数
  16. * @author coyle
  17. * 202602
  18. */
  19. public class OnboardingSalaryDataService extends OtherESignConfigDataService {
  20. public String getSql(String id) {
  21. StringBuilder sql = new StringBuilder();
  22. // -------------------------- SELECT子句 --------------------------
  23. // 基础字段:人员姓名、身份证号、甲方名称、入职日期
  24. // 薪资计算字段:固定工资、试用期固定工资、绩效奖金、各类补贴(均为税前)
  25. sql.append("SELECT \n");
  26. sql.append(" person.FNAME_L2 AS person_name ,\n");
  27. sql.append(" person.FIDCardNO AS idcard ,\n");
  28. sql.append(" firstParty.FName_l2 as firstPartyName ,\n");
  29. sql.append(" elation.FEnterDate AS eDate ,\n");
  30. // 1. 固定工资(税前)= 标准基本工资+综合工资+其他工资+加班工资
  31. sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02') THEN fas.FMoney ELSE 0 END), 0) AS fixed_salary ,\n");
  32. // 2. 试用期固定工资(税前)= 标准基本工资+综合工资+其他工资+加班工资
  33. 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");
  34. // 3. 绩效奖金(税前)= 标准绩效奖金
  35. sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'TD04' THEN fas.FMoney ELSE 0 END), 0) AS perf_bonus ,\n");
  36. // 4. 试用期绩效奖金(税前)= 试用期标准绩效奖金
  37. sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'TD74' THEN fas.FMoney ELSE 0 END), 0) AS prob_perf_bonus ,\n");
  38. // 5. 国内餐补 = 餐补补贴
  39. sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'T014' THEN fas.FMoney ELSE 0 END), 0) AS domestic_meal_subsidy ,\n");
  40. // 6. 艰苦补贴 = 艰苦补贴
  41. sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'TD05' THEN fas.FMoney ELSE 0 END), 0) AS hardship_subsidy ,\n");
  42. // 7. 社保公积金补贴 = 社保公积金补贴
  43. sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'TD101' THEN fas.FMoney ELSE 0 END), 0) AS social_fund \n");
  44. // -------------------------- FROM子句 --------------------------
  45. // 表关联逻辑:
  46. // 1. T_bd_Person(人员表)关联T_HR_EmpLaborRelation(用工关系表):取入职日期
  47. // 2. 人员表关联T_HR_SFixAdjustSalary(固定薪资调整表):取薪资金额
  48. // 3. 薪资表关联T_HR_SCmpItem(薪资项目表):按薪资项目编码过滤
  49. // 4. 人员表关联T_HR_EmployeeContract(员工合同表):关联甲方信息
  50. // 5. 合同表关联T_HR_LabContractFirstParty(合同甲方表):取甲方名称
  51. sql.append("FROM \n");
  52. sql.append(" T_bd_Person person \n");
  53. sql.append("LEFT JOIN T_HR_EmpLaborRelation elation on person.fid = elation.FPersonID \n");
  54. sql.append("LEFT JOIN T_HR_SFixAdjustSalary fas ON person.FID = fas.FPersonID\n");
  55. sql.append("LEFT JOIN T_HR_SCmpItem sitem ON fas.FCmpItemID = sitem.FID\n");
  56. sql.append("LEFT JOIN T_HR_EmployeeContract econtract on econtract.FEmployeeID = person.FID\n");
  57. sql.append("LEFT JOIN T_HR_LabContractFirstParty firstParty on econtract.FContFirstPartyID = firstParty.FID \n");
  58. sql.append("WHERE \n");
  59. sql.append(" sitem.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02', 'TD04', 'TD74', 'T014', 'TD05', 'TD101') \n");
  60. sql.append(" and fas.FLeffectDay = '2199-12-31 00:00:00' \n");
  61. BOSUuid read = BOSUuid.read(id);
  62. BOSObjectType type = read.getType();
  63. if (type.toString().equals("7BD37592")){//id类型为合同
  64. sql.append("and person.fid in (select FEmployeeID from T_HR_EmployeeContract where fid = '"+id+"')" ) ;
  65. }else if (type.toString().equals("80EF7DED")){//id类型为员工felse
  66. sql.append("and person.fid = '"+id+"'");
  67. }
  68. sql.append("GROUP BY \n");
  69. sql.append(" person.FID, person.FNAME_L2 , elation.FEnterDate , person.FIDCardNO , firstParty.FName_l2 \n");
  70. // -------------------------- ORDER BY子句 --------------------------
  71. // 排序规则:按人员姓名升序排列
  72. sql.append("ORDER BY \n");
  73. sql.append(" person.FNAME_L2");
  74. System.out.print("osfsql"+sql.toString());
  75. return sql.toString();
  76. }
  77. // /**
  78. // * 执行SQL查询并将结果封装为JSON对象
  79. // *
  80. // * @param sql 要执行的查询SQL
  81. // * @param context 上下文对象
  82. // * @param entrys 字段映射明细集合
  83. // * @return 封装后的JSON对象,包含电子签模板各字段信息
  84. // */
  85. // public JSONObject getData(String sql, Context context, FieldMappingEntryCollection entrys) {
  86. // // 创建JSON对象用于存储最终封装的数据
  87. // JSONObject jsonObject = new JSONObject();
  88. // try {
  89. // // 执行SQL查询,获取结果集
  90. // IRowSet iRowSet1 = DBUtil.executeQuery(context, sql);
  91. // // 遍历结果集中的每一行数据
  92. // while (iRowSet1.next()) {
  93. // // 遍历每个字段映射明细项
  94. // for (int i = 0; i < entrys.size(); i++) {
  95. // // 获取当前索引对应的字段映射明细信息
  96. // FieldMappingEntryInfo fieldMappingEntryInfo = entrys.get(i);
  97. // // 获取明细项中关联的电子签模板字段信息
  98. // ESignTemplateFileEntryFieldInfo eField = fieldMappingEntryInfo.getEField();
  99. // // 判断该字段是否无效(已废弃)
  100. // boolean invalid = eField.isInvalid();
  101. // // 若字段无效,跳过当前循环(不处理)
  102. // if (invalid) {
  103. // continue;
  104. // }
  105. // // 获取明细项中关联的电子签模板明细信息
  106. // ESignTemplateFileEntryInfo template = fieldMappingEntryInfo.getTemplate();
  107. // // 获取电子签模板的ID
  108. // String eSignTemplateId = template.getESignTemplateId();
  109. // // 从JSON对象中获取该模板ID对应的子JSON对象
  110. // JSONObject templateJSON = jsonObject.getJSONObject(eSignTemplateId);
  111. // // 若模板对应的子JSON对象不存在,则创建并初始化(设置ID和名称)
  112. // if (templateJSON == null) {
  113. // templateJSON = new JSONObject();
  114. // templateJSON.put("id", eSignTemplateId); // 设置模板ID
  115. // templateJSON.put("name", template.getName()); // 设置模板名称
  116. // jsonObject.put(eSignTemplateId, templateJSON); // 将模板信息存入主JSON对象
  117. // }
  118. // // 从模板子JSON对象中获取字段信息对应的子JSON对象
  119. // JSONObject fields = templateJSON.getJSONObject("fields");
  120. // // 若字段信息子JSON对象不存在,则创建并添加到模板子JSON中
  121. // if (fields == null) {
  122. // fields = new JSONObject();
  123. // templateJSON.put("fields", fields);
  124. // }
  125. // // 获取电子签模板字段的ID
  126. // String templateFieldId = eField.getTemplateFieldId();
  127. // // 创建用于存储字段值信息的JSON对象
  128. // JSONObject value = new JSONObject();
  129. // value.put("name", eField.getTemplateFieldName()); // 设置字段名称
  130. // // 获取明细项中关联的数据源字段信息
  131. // //DataConfigSelectFieldEntryInfo dataSourceField = fieldMappingEntryInfo.getDataSourceField();
  132. //// if (dataSourceField==null){
  133. //// value.put("value","");
  134. //// value.put("dataFormat", eField.getDataFormat());
  135. //// }else {
  136. // // 获取数据源字段的映射键(对应数据库列名)
  137. // String name = fieldMappingEntryInfo.getEFieldMark();
  138. // // 去除映射键中的双引号(处理可能的格式问题)
  139. // //name = name.replace("\"", "");
  140. // // 从结果集中获取该字段对应的值,并存入字段值JSON对象
  141. // if (name != null && !name.equals("")) {
  142. // try {
  143. // value.put("value", iRowSet1.getObject(name));
  144. // } catch (SQLException e) {
  145. // e.printStackTrace();
  146. // }
  147. // }
  148. // // 设置字段的数据类型(取自数据源字段的类型别名)
  149. // //value.put("dataType", dataSourceField.getDataType().getAlias());
  150. //// if (dataSourceField.getDataType().getAlias().equals("Date")) {
  151. //// Object object = iRowSet1.getObject(name);
  152. //// if (object != null) {
  153. //// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
  154. //// value.put("value", simpleDateFormat.format(iRowSet1.getDate(name)));
  155. //// }
  156. //// value.put("dataFormat", eField.getDataFormat());
  157. //// }
  158. // //}
  159. // if (eField.getComponentType().getValue() == 6 || eField.getComponentType().getValue() == 106) {
  160. // value.put("positionX", eField.getPositionX());
  161. // value.put("positionY", eField.getPositionY());
  162. // value.put("pageNum", eField.getPageNum());
  163. // }
  164. // // 将字段值信息存入字段信息子JSON对象(以模板字段ID为键)
  165. // fields.put(templateFieldId, value);
  166. // }
  167. // }
  168. //
  169. //
  170. // } catch (BOSException e) {
  171. // // BOS异常时,封装为运行时异常抛出
  172. // throw new RuntimeException(e);
  173. // } catch (SQLException e) {
  174. // // SQL异常时,封装为运行时异常抛出
  175. // throw new RuntimeException(e);
  176. // }
  177. // // 返回封装好的JSON对象
  178. // return jsonObject;
  179. // }
  180. }