package com.kingdee.eas.custom.esign.service; import com.kingdee.bos.util.BOSObjectType; import com.kingdee.bos.util.BOSUuid; /** * 入职薪酬取数 * @author coyle * 202602 */ public class OnboardingSalaryDataService extends OtherESignConfigDataService { public String getSql(String id) { StringBuilder sql = new StringBuilder(); // -------------------------- SELECT子句 -------------------------- // 基础字段:人员姓名、身份证号、甲方名称、入职日期 // 薪资计算字段:固定工资、试用期固定工资、绩效奖金、各类补贴(均为税前) sql.append("SELECT \n"); sql.append(" person.FNAME_L2 AS person_name ,\n"); sql.append(" person.FIDCardNO AS idcard ,\n"); sql.append(" firstParty.FName_l2 as firstPartyName ,\n"); sql.append(" elation.FEnterDate AS eDate ,\n"); // 1. 固定工资(税前)= 标准基本工资+综合工资+其他工资+加班工资 sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02') THEN fas.FMoney ELSE 0 END), 0) AS fixed_salary ,\n"); // 2. 试用期固定工资(税前)= 标准基本工资+综合工资+其他工资+加班工资 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"); // 3. 绩效奖金(税前)= 标准绩效奖金 sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'TD04' THEN fas.FMoney ELSE 0 END), 0) AS perf_bonus ,\n"); // 4. 试用期绩效奖金(税前)= 试用期标准绩效奖金 sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'TD74' THEN fas.FMoney ELSE 0 END), 0) AS prob_perf_bonus ,\n"); // 5. 国内餐补 = 餐补补贴 sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'T014' THEN fas.FMoney ELSE 0 END), 0) AS domestic_meal_subsidy ,\n"); // 6. 艰苦补贴 = 艰苦补贴 sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'TD05' THEN fas.FMoney ELSE 0 END), 0) AS hardship_subsidy ,\n"); // 7. 社保公积金补贴 = 社保公积金补贴 sql.append(" ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'TD101' THEN fas.FMoney ELSE 0 END), 0) AS social_fund \n"); // -------------------------- FROM子句 -------------------------- // 表关联逻辑: // 1. T_bd_Person(人员表)关联T_HR_EmpLaborRelation(用工关系表):取入职日期 // 2. 人员表关联T_HR_SFixAdjustSalary(固定薪资调整表):取薪资金额 // 3. 薪资表关联T_HR_SCmpItem(薪资项目表):按薪资项目编码过滤 // 4. 人员表关联T_HR_EmployeeContract(员工合同表):关联甲方信息 // 5. 合同表关联T_HR_LabContractFirstParty(合同甲方表):取甲方名称 sql.append("FROM \n"); sql.append(" T_bd_Person person \n"); sql.append("LEFT JOIN T_HR_EmpLaborRelation elation on person.fid = elation.FPersonID \n"); sql.append("LEFT JOIN T_HR_SFixAdjustSalary fas ON person.FID = fas.FPersonID\n"); sql.append("LEFT JOIN T_HR_SCmpItem sitem ON fas.FCmpItemID = sitem.FID\n"); sql.append("LEFT JOIN T_HR_EmployeeContract econtract on econtract.FEmployeeID = person.FID\n"); sql.append("LEFT JOIN T_HR_LabContractFirstParty firstParty on econtract.FContFirstPartyID = firstParty.FID \n"); sql.append("WHERE \n"); sql.append(" sitem.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02', 'TD04', 'TD74', 'T014', 'TD05', 'TD101') \n"); sql.append(" and fas.FLeffectDay = '2199-12-31 00:00:00' \n"); BOSUuid read = BOSUuid.read(id); BOSObjectType type = read.getType(); if (type.toString().equals("7BD37592")){//id类型为合同 sql.append("and person.fid in (select FEmployeeID from T_HR_EmployeeContract where fid = '"+id+"')" ) ; }else if (type.toString().equals("80EF7DED")){//id类型为员工felse sql.append("and person.fid = '"+id+"'"); } sql.append("GROUP BY \n"); sql.append(" person.FID, person.FNAME_L2 , elation.FEnterDate , person.FIDCardNO , firstParty.FName_l2 \n"); // -------------------------- ORDER BY子句 -------------------------- // 排序规则:按人员姓名升序排列 sql.append("ORDER BY \n"); sql.append(" person.FNAME_L2"); System.out.print("osfsql"+sql.toString()); return sql.toString(); } // /** // * 执行SQL查询并将结果封装为JSON对象 // * // * @param sql 要执行的查询SQL // * @param context 上下文对象 // * @param entrys 字段映射明细集合 // * @return 封装后的JSON对象,包含电子签模板各字段信息 // */ // public JSONObject getData(String sql, Context context, FieldMappingEntryCollection entrys) { // // 创建JSON对象用于存储最终封装的数据 // JSONObject jsonObject = new JSONObject(); // try { // // 执行SQL查询,获取结果集 // IRowSet iRowSet1 = DBUtil.executeQuery(context, sql); // // 遍历结果集中的每一行数据 // while (iRowSet1.next()) { // // 遍历每个字段映射明细项 // for (int i = 0; i < entrys.size(); i++) { // // 获取当前索引对应的字段映射明细信息 // FieldMappingEntryInfo fieldMappingEntryInfo = entrys.get(i); // // 获取明细项中关联的电子签模板字段信息 // ESignTemplateFileEntryFieldInfo eField = fieldMappingEntryInfo.getEField(); // // 判断该字段是否无效(已废弃) // boolean invalid = eField.isInvalid(); // // 若字段无效,跳过当前循环(不处理) // if (invalid) { // continue; // } // // 获取明细项中关联的电子签模板明细信息 // ESignTemplateFileEntryInfo template = fieldMappingEntryInfo.getTemplate(); // // 获取电子签模板的ID // String eSignTemplateId = template.getESignTemplateId(); // // 从JSON对象中获取该模板ID对应的子JSON对象 // JSONObject templateJSON = jsonObject.getJSONObject(eSignTemplateId); // // 若模板对应的子JSON对象不存在,则创建并初始化(设置ID和名称) // if (templateJSON == null) { // templateJSON = new JSONObject(); // templateJSON.put("id", eSignTemplateId); // 设置模板ID // templateJSON.put("name", template.getName()); // 设置模板名称 // jsonObject.put(eSignTemplateId, templateJSON); // 将模板信息存入主JSON对象 // } // // 从模板子JSON对象中获取字段信息对应的子JSON对象 // JSONObject fields = templateJSON.getJSONObject("fields"); // // 若字段信息子JSON对象不存在,则创建并添加到模板子JSON中 // if (fields == null) { // fields = new JSONObject(); // templateJSON.put("fields", fields); // } // // 获取电子签模板字段的ID // String templateFieldId = eField.getTemplateFieldId(); // // 创建用于存储字段值信息的JSON对象 // JSONObject value = new JSONObject(); // value.put("name", eField.getTemplateFieldName()); // 设置字段名称 // // 获取明细项中关联的数据源字段信息 // //DataConfigSelectFieldEntryInfo dataSourceField = fieldMappingEntryInfo.getDataSourceField(); //// if (dataSourceField==null){ //// value.put("value",""); //// value.put("dataFormat", eField.getDataFormat()); //// }else { // // 获取数据源字段的映射键(对应数据库列名) // String name = fieldMappingEntryInfo.getEFieldMark(); // // 去除映射键中的双引号(处理可能的格式问题) // //name = name.replace("\"", ""); // // 从结果集中获取该字段对应的值,并存入字段值JSON对象 // if (name != null && !name.equals("")) { // try { // value.put("value", iRowSet1.getObject(name)); // } catch (SQLException e) { // e.printStackTrace(); // } // } // // 设置字段的数据类型(取自数据源字段的类型别名) // //value.put("dataType", dataSourceField.getDataType().getAlias()); //// if (dataSourceField.getDataType().getAlias().equals("Date")) { //// Object object = iRowSet1.getObject(name); //// if (object != null) { //// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日"); //// value.put("value", simpleDateFormat.format(iRowSet1.getDate(name))); //// } //// value.put("dataFormat", eField.getDataFormat()); //// } // //} // if (eField.getComponentType().getValue() == 6 || eField.getComponentType().getValue() == 106) { // value.put("positionX", eField.getPositionX()); // value.put("positionY", eField.getPositionY()); // value.put("pageNum", eField.getPageNum()); // } // // 将字段值信息存入字段信息子JSON对象(以模板字段ID为键) // fields.put(templateFieldId, value); // } // } // // // } catch (BOSException e) { // // BOS异常时,封装为运行时异常抛出 // throw new RuntimeException(e); // } catch (SQLException e) { // // SQL异常时,封装为运行时异常抛出 // throw new RuntimeException(e); // } // // 返回封装好的JSON对象 // return jsonObject; // } }