diff --git a/src/com/engine/qz/service/CustomRosterService.java b/src/com/engine/qz/service/CustomRosterService.java new file mode 100644 index 0000000..85307b9 --- /dev/null +++ b/src/com/engine/qz/service/CustomRosterService.java @@ -0,0 +1,34 @@ +package com.engine.qz.service; + +import com.engine.qz.entity.CustomTemplateVo; +import com.engine.qz.entity.TemplateFieldsPo; + +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * @version 1.0 + * @Title ecology-9 + * @Company 泛微软件 + * @CreateDate 2025/3/10 + * @Description ${description} + * @Author Lee + */ +public interface CustomRosterService { + + /** + * @param paramMap 参数 + * @return 返回 + */ + Map listPage(Map paramMap); + + /** + * 可选字段 + * + * @param + * @return + */ + LinkedList customFieldMap(); + +} diff --git a/src/com/engine/qz/service/impl/CustomRosterServiceImpl.java b/src/com/engine/qz/service/impl/CustomRosterServiceImpl.java new file mode 100644 index 0000000..c02d369 --- /dev/null +++ b/src/com/engine/qz/service/impl/CustomRosterServiceImpl.java @@ -0,0 +1,421 @@ +package com.engine.qz.service.impl; + +import b.a.a.w.e; +import com.cloudstore.eccom.constant.WeaBoolAttr; +import com.cloudstore.eccom.pc.table.WeaTable; +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.cloudstore.eccom.pc.table.WeaTableType; +import com.cloudstore.eccom.result.WeaResultMsg; +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.qz.entity.CustomTemplateVo; +import com.engine.qz.entity.TemplateFieldsPo; +import com.engine.qz.service.CustomRosterService; +import com.engine.qz.service.HrmCustomTemplateService; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.PageIdConst; +import weaver.hrm.User; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class CustomRosterServiceImpl extends Service implements CustomRosterService { + private static RecordSet rs = new RecordSet(); + private BaseBean bb = new BaseBean(); + + private HrmCustomTemplateService getService(User user) { + return ServiceUtil.getService(HrmCustomTemplateServiceImpl.class, user); + } + + @Override + public Map listPage(Map paramMap) { + BaseBean bb = new BaseBean(); + String sqlWhere = " where ISNUMERIC(workcode)=1 and ISNULL(t1.accounttype, 0) != 1"; + String fromSql = getSqlFrom(paramMap); + + Map resultMap = new HashMap<>(4); + try { + //字段对照关系 + HashMap> fieldMap = new HashMap<>(); + String sql = "select id,chinese,dataName,transMethod,width from uf_roster_field"; + rs.execute(sql); + while (rs.next()) { + HashMap map = new HashMap<>(); + map.put("chinese", rs.getString("chinese")); + map.put("transMethod", rs.getString("transMethod")); + map.put("width", rs.getString("width")); + fieldMap.put(rs.getString("dataName"), map); + } + + WeaTable table = new WeaTable(); + String pageId = "73ed858b37304757987724e81d096ff2"; + table.setPageID(pageId); + table.setPageUID(String.format("%s_%s", pageId, user.getUID())); + String pageSize = PageIdConst.getPageSize(pageId, user.getUID()); + table.setPagesize(pageSize); + + //获取显示字段 + String fields = getFields(user, rs); + if (StringUtils.isEmpty(fields)) { + resultMap.put("msg", "fields is null"); + return resultMap; + } + table.setBackfields(fields); + table.setSqlform(fromSql); + table.setSqlwhere(sqlWhere); + table.setSqlprimarykey("id"); + table.getColumns().add(new WeaTableColumn("id").setDisplay(WeaBoolAttr.FALSE)); + +// table.getColumns().add(new WeaTableColumn("10%", "性别", "sex").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectSexName")); + + for (String tableKey : fields.split(",")) { + String lk = StringUtils.isNotEmpty(fieldMap.get(tableKey).get("width")) ? fieldMap.get(tableKey).get("width") : "10%"; + String transMethod = fieldMap.get(tableKey).get("transMethod"); + String chinese = fieldMap.get(tableKey).get("chinese"); + WeaTableColumn column = new WeaTableColumn(lk, chinese, tableKey).setTransmethod(transMethod); + table.getColumns().add(column); + } + + + table.setTableType(WeaTableType.NONE); + WeaResultMsg result = new WeaResultMsg(false); + result.putAll(table.makeDataResult()); + result.success(); + resultMap.putAll(result.getResultMap()); + } catch (Exception e) { + bb.writeLog("CustomRosterService-e-" + e.getMessage()); + return resultMap; + } + return resultMap; + } + + + @Override + public LinkedList customFieldMap() { + LinkedList linkedList = new LinkedList(); + try { + String compareId = "," + user.getUID() + ","; + String compareDept = "," + user.getUserDepartment() + ","; + String compareCompany = "," + user.getUserSubCompany1() + ","; + RecordSet rs2 = new RecordSet(); + //查询默认可展示字段 + String sql = "select id,chinese,dataName,defaultShow,zdjs,zdrlzy,zdfb,zdbm from uf_roster_field order by id asc"; + CustomRosterServiceImpl.rs.executeQuery(sql); + while (CustomRosterServiceImpl.rs.next()) { + String defaultShow = CustomRosterServiceImpl.rs.getString("defaultShow"); + String roleIds = CustomRosterServiceImpl.rs.getString("zdjs"); + String members = "," + CustomRosterServiceImpl.rs.getString("zdrlzy") + ","; + String companyIds = CustomRosterServiceImpl.rs.getString("zdfb"); + String departments = CustomRosterServiceImpl.rs.getString("zdbm"); + TemplateFieldsPo fieldsPo = TemplateFieldsPo.builder().id(CustomRosterServiceImpl.rs.getString("id")). + fieldName(CustomRosterServiceImpl.rs.getString("chinese")). + fieldDataName(CustomRosterServiceImpl.rs.getString("dataName")). + build(); + //默认显示的字段 + if ("0".equals(defaultShow)) { + linkedList.add(fieldsPo); + } else { + if (members.contains(compareId)) { + linkedList.add(fieldsPo); + continue; + } + //当前人员的部门和分部,是否在权限下 + String s1 = "," + companyIds + ","; + String s2 = "," + departments + ","; + if (s1.contains(compareCompany) || s2.contains(compareDept)) { + linkedList.add(fieldsPo); + continue; + } + //查询角色成员中是否当前人员 + if (StringUtils.isNotEmpty(roleIds) && isRoleContainsCurrentUser(rs2, roleIds)) { + linkedList.add(fieldsPo); + } + } + } + } catch (Exception e) { + bb.writeLog("customFields-e-" + e.getMessage()); + } + return linkedList; + } + + private boolean isRoleContainsCurrentUser(RecordSet rs2, String roleIds) { + String sql = "select resourceid from HrmRoleMembers where roleid in(" + roleIds + ") and resourceid=?"; + rs2.executeQuery(sql, user.getUID()); + if (rs2.next()) { + return true; + } + return false; + } + + private String getFields(User user, RecordSet rs) { + String fields = ""; + //先查询是否有模板,有则取模板字段 + LinkedList customTemplate = getService(user).getCustomTemplate(); + List filteredList = customTemplate.stream() + .filter(vo -> vo.getIsused() != null && vo.getIsused() == 1) + .collect(Collectors.toList()); + if (filteredList.size() > 0) { + + CustomTemplateVo templateVo = filteredList.get(0); + //查询模板对应字段 + String sql = "select dataName from uf_roster_field where id in (" + templateVo.getTemplateFields() + ")"; + rs.executeQuery(sql); + while (rs.next()) { + fields += rs.getString("dataName") + ","; + } + } else { + //取默认显示字段 + String sql = "select dataName from uf_roster_field where defaultShow=0"; + rs.executeQuery(sql); + while (rs.next()) { + fields += rs.getString("dataName") + ","; + } + return fields.substring(0, fields.lastIndexOf(",")); + } + return fields; + } + + private String getSqlFrom(Map paramMap) { + String fromSql = " from view_yghmc "; + String referDate = (String) paramMap.get("referDate"); + if (StringUtils.isNotEmpty(referDate)) { + fromSql = "WITH htxy AS (\n" + + " SELECT \n" + + " ygxm, \n" + + " htgsmc, \n" + + " zt, \n" + + " htqsrq, \n" + + " htzzrq, \n" + + " qdcs,\n" + + " ROW_NUMBER() OVER (\n" + + " PARTITION BY ygxm\n" + + " ORDER BY htzzrq DESC, htqsrq DESC\n" + + " ) AS RowNum\n" + + " FROM uf_htxy\n" + + "),\n" + + "zlxx AS (\n" + + " SELECT \n" + + " xm, \n" + + " COUNT(*) AS zlsl, \n" + + " MAX(csrq) AS zlcsrq\n" + + " FROM uf_shgx\n" + + " WHERE gx = 1\n" + + " GROUP BY xm\n" + + "),\n" + + "jjlxrxx AS (\n" + + " SELECT \n" + + " xm, \n" + + " gx, \n" + + " lxrxm, \n" + + " dh,\n" + + " ROW_NUMBER() OVER (\n" + + " PARTITION BY xm\n" + + " ORDER BY id DESC\n" + + " ) AS RowNum\n" + + " FROM uf_shgx\n" + + " WHERE sfjjlxr = 0\n" + + "),\n" + + "rzjl AS (\n" + + " SELECT \n" + + " yg, \n" + + " bdhgw, \n" + + " bdhbm,\n" + + " bdhzt,\n" + + " bdhygxz,\n" + + " shenxrq,\n" + + " ROW_NUMBER() OVER (PARTITION BY yg ORDER BY shenxrq DESC) AS rn\n" + + " FROM uf_rzjl where shenxrq>='" + referDate + "'\n" + + "),\n" + + "khbhqxxrg AS (\n" + + " SELECT id,ygxm,\n" + + " ROW_NUMBER() OVER (PARTITION BY ygxm ORDER BY id DESC) AS rn\n" + + " FROM uf_khbhqxxrg where lx=0 and ksrq<='" + referDate + "' and jsrq>='" + referDate + "'\n" + + "),\n" + + "rzlc AS (\n" + + " SELECT \n" + + " *,\n" + + " ROW_NUMBER() OVER (\n" + + " PARTITION BY rzryid \n" + + " ORDER BY rzsj DESC\n" + + " ) AS RowNum \n" + + " FROM formtable_main_36\n" + + ")\n" + + "\n" + + "SELECT \n" + + " t1.id,\n" + + " t1.workcode,\n" + + " t1.lastname,\n" + + "\n" + + " SUBSTRING(t10.IDpath, 0, \n" + + " CASE WHEN CHARINDEX('>', t10.IDpath) != 0 \n" + + " THEN CHARINDEX('>', t10.IDpath) \n" + + " ELSE 20 END\n" + + " ) AS FB1,\n" + + " CASE WHEN CHARINDEX('>', t10.IDpath) != 0 \n" + + " THEN SUBSTRING(t10.IDpath, CHARINDEX('>', t10.IDpath) + 1, 20) \n" + + " ELSE NULL END AS FB2,\n" + + " SUBSTRING(t9.IDpath, 0, \n" + + " CASE WHEN CHARINDEX('>', t9.IDpath) != 0 \n" + + " THEN CHARINDEX('>', t9.IDpath) \n" + + " ELSE 20 END\n" + + " ) AS BM1,\n" + + " CASE \n" + + " WHEN CHARINDEX('>', t9.IDpath) != 0 \n" + + " AND CHARINDEX('>', t9.IDpath, CHARINDEX('>', t9.IDpath) + 1) != 0 \n" + + " THEN SUBSTRING(t9.IDpath, \n" + + " CHARINDEX('>', t9.IDpath) + 1, \n" + + " CHARINDEX('>', t9.IDpath, CHARINDEX('>', t9.IDpath) + 1) - CHARINDEX('>', t9.IDpath) - 1)\n" + + " WHEN CHARINDEX('>', t9.IDpath) != 0 \n" + + " THEN SUBSTRING(t9.IDpath, CHARINDEX('>', t9.IDpath) + 1, 20) \n" + + " ELSE NULL \n" + + " END AS BM2,\n" + + " CASE \n" + + " WHEN CHARINDEX('>', t9.IDpath) != 0 \n" + + " AND CHARINDEX('>', t9.IDpath, CHARINDEX('>', t9.IDpath) + 1) != 0 \n" + + " AND CHARINDEX('>', t9.IDpath, CHARINDEX('>', t9.IDpath, CHARINDEX('>', t9.IDpath) + 1) + 1) != 0 \n" + + " THEN SUBSTRING(t9.IDpath, \n" + + " CHARINDEX('>', t9.IDpath, CHARINDEX('>', t9.IDpath) + 1) + 1, \n" + + " CHARINDEX('>', t9.IDpath, CHARINDEX('>', t9.IDpath, CHARINDEX('>', t9.IDpath) + 1) + 1) - CHARINDEX('>', t9.IDpath, CHARINDEX('>', t9.IDpath) + 1) - 1)\n" + + " WHEN CHARINDEX('>', t9.IDpath) != 0 \n" + + " AND CHARINDEX('>', t9.IDpath, CHARINDEX('>', t9.IDpath) + 1) != 0 \n" + + " THEN SUBSTRING(t9.IDpath, \n" + + " CHARINDEX('>', t9.IDpath, CHARINDEX('>', t9.IDpath) + 1) + 1, 20) \n" + + " ELSE NULL \n" + + " END AS BM3,\n" + + " \n" + + " -- 工作信息\n" + + " t8.bdhgw AS gwmc,\n" + + " t3.field21 AS gwdj,\n" + + " t3.field45 AS ygzj,\n" + + " t1.certificatenum,\n" + + " t1.mobile,\n" + + " t1.birthday,\n" + + " t4.field62 AS srrqlx,\n" + + " DATEDIFF(DAY, \n" + + " CASE WHEN ISDATE(SUBSTRING(t1.certificatenum, 7, 8)) = 1 \n" + + " THEN SUBSTRING(t1.certificatenum, 7, 8) \n" + + " ELSE t1.birthday END, \n" + + " GETDATE()\n" + + " ) / 365 AS age,\n" + + " t8.bdhzt as \"status\",\n" + + " t8.bdhygxz as usekind,\n" + + " t1.sex,\n" + + " t1.companystartdate,\n" + + " t3.field18 AS jrjtrq,\n" + + " t3.field59 AS zzrq,\n" + + " t4.field14 AS gryx,\n" + + " t1.educationlevel,\n" + + " t4.field44 AS dyxlbyyx,\n" + + " t4.field22 AS zy,\n" + + " t4.field58 AS xllb,\n" + + " t1.degree,\n" + + " \n" + + " -- 合同信息\n" + + " t5.htqsrq,\n" + + " t5.htzzrq,\n" + + " t5.qdcs,\n" + + " t5.htgsmc,\n" + + " \n" + + " -- 个人信息\n" + + " t1.maritalstatus,\n" + + " t6.zlsl,\n" + + " t6.zlcsrq,\n" + + " t1.height,\n" + + " t1.weight,\n" + + " t1.policy,\n" + + " t1.nativeplace,\n" + + " t1.folk,\n" + + " t1.regresidentplace,\n" + + " t4.field12 AS hjdz,\n" + + " t1.residentplace,\n" + + " t7.lxrxm,\n" + + " t7.gx,\n" + + " t7.dh,\n" + + " t1.workstartdate,\n" + + " t1.workyear,\n" + + " t1.companyworkyear,t2.deptpath,\n" + + " DATEDIFF(DAY, t8.shenxrq, GETDATE()) / 365 AS gl,\n" + + " CASE WHEN t5.ygxm IS NOT NULL \n" + + " THEN '已签订' \n" + + " ELSE '未签订' \n" + + " END AS sfqdht,\n" + + " t3.field29 AS sfgb,\n" + + " t3.field40 AS gbqx,\n" + + " t3.field31 AS qccjg,\n" + + " t3.field32 AS dyzysq,\n" + + " t3.field33 AS zymb,\n" + + " t3.field34 AS grqkbc,\n" + + " t3.field35 AS wdd,\n" + + " t3.field36 AS jrzxm,\n" + + " t3.field37 AS jrzcsd,\n" + + " t3.field38 AS ydyyd,\n" + + " t3.field39 AS djls,\n" + + " t1.textfield2 AS ah,\n" + + " t1.textfield1 AS tc,\n" + + " t4.field48 AS xg,\n" + + " t3.field42 AS zply,\n" + + " t3.field43 AS lymx,\n" + + " t3.field60 AS sfecrz,\n" + + " lizhiyewuleixing,\n" + + " t14.yuangongjianyi,\n" + + " t14.rszy_1,\n" + + " t14.rszy_2,\n" + + " t14.lzxxyyzjsj,\n" + + " t14.lzxxyygsyy,\n" + + " t14.lzxxyyygyy,\n" + + " t14.lzhlxfs,\n" + + " t14.ywxz,\n" + + " t14.rszy_4,\n" + + " t14.xczy_1,\n" + + " t3.field64,\n" + + " CASE WHEN t1.seclevel >= 60 \n" + + " THEN '总部' \n" + + " ELSE SUBSTRING(t10.NAMEPath, 0, \n" + + " CASE WHEN CHARINDEX('>', t10.NAMEPath) != 0 \n" + + " THEN CHARINDEX('>', t10.NAMEPath) \n" + + " ELSE 20 END\n" + + " ) \n" + + " END AS SYZZ,\n" + + " \n" + + " t1.degree,\n" + + " t16.ntry,\n" + + " t16.sfstwjr,\n" + + " t17.ylzgs,\n" + + " t18.hm,\n" + + " t18.khyx,\n" + + " t18.zh,\n" + + " t18.gjjzh,\n" + + " CASE WHEN t15.id is not null then '是' else '否' end AS SFKHQ\n" + + "FROM hrmresource t1\n" + + "LEFT JOIN view_dept t2 ON t2.deptid = t1.departmentid\n" + + "LEFT JOIN cus_fielddata t3 ON t3.id = t1.id AND t3.scopeid = 3\n" + + "LEFT JOIN cus_fielddata t4 ON t4.id = t1.id AND t4.scopeid = 1\n" + + "LEFT JOIN htxy t5 ON t5.ygxm = t1.id AND t5.RowNum = 1 \n" + + "LEFT JOIN zlxx t6 ON t6.xm = t1.id\n" + + "LEFT JOIN jjlxrxx t7 ON t7.xm = t1.id AND t7.RowNum = 1\n" + + "LEFT JOIN rzjl t8 ON t8.rn = 1 and t1.id = t8.yg AND t8.bdhgw = t3.field13\n" + + "LEFT JOIN View_QZ_Department t9 ON t9.id = t8.bdhbm\n" + + "LEFT JOIN View_QZ_Subcompany t10 ON t10.id = (select subcompanyid1 from HrmDepartment where id=t8.bdhbm )\n" + + "LEFT JOIN ( \n" + + " SELECT t11.* \n" + + " FROM formtable_main_35 t11 \n" + + " LEFT JOIN workflow_requestbase t12 \n" + + " ON t11.requestId = t12.requestid \n" + + " WHERE t12.currentnodetype = 3\n" + + ") t14 ON t1.id = t14.sqr\n" + + "LEFT JOIN khbhqxxrg t15 ON t15.rn=1 and t1.id = t15.ygxm\n" + + "LEFT JOIN rzlc t16 ON t16.rzryid = t1.id AND t16.RowNum = 1\n" + + "LEFT JOIN formtable_main_71 t17 ON t17.requestId = t16.yglydx\n" + + "LEFT JOIN uf_yhk t18 ON t1.id = t18.xm \n" + + " AND t18.yt LIKE '%0%' \n" + + " AND ISNULL(t18.qyzt, 0) = 0\n"; + return fromSql; + } + return fromSql; + } +} diff --git a/src/com/engine/qz/service/impl/HrmCustomTemplateServiceImpl.java b/src/com/engine/qz/service/impl/HrmCustomTemplateServiceImpl.java index 432cd60..3a79764 100644 --- a/src/com/engine/qz/service/impl/HrmCustomTemplateServiceImpl.java +++ b/src/com/engine/qz/service/impl/HrmCustomTemplateServiceImpl.java @@ -2,23 +2,26 @@ package com.engine.qz.service.impl; import com.api.hrm.bean.FieldItem; import com.api.hrm.util.FieldType; +import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.qz.entity.CustomTemplateVo; import com.engine.qz.entity.CustomTranscerDataVo; import com.engine.qz.entity.EditTableColumn; import com.engine.qz.entity.TemplateFieldsPo; +import com.engine.qz.service.CustomRosterService; import com.engine.qz.service.HrmCustomTemplateService; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.general.TimeUtil; import weaver.general.Util; import weaver.conn.RecordSet; +import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; -import static weaver.general.Util.getIntValue; + /** @@ -30,11 +33,16 @@ import static weaver.general.Util.getIntValue; public class HrmCustomTemplateServiceImpl extends Service implements HrmCustomTemplateService { + private CustomRosterService getService(User user) { + return ServiceUtil.getService(CustomRosterServiceImpl.class,user); + } + @Override public CustomTranscerDataVo getCustomTransferData(Map params) { //1.所有可查看字段 (todo 权限控制获取) - LinkedList transferDatas = rosterList(); + //LinkedList transferDatas = rosterList(); + LinkedList transferDatas = getService(user).customFieldMap(); //2.存在模板 且已经选择的字段 LinkedList customTemplate = getCustomTemplate(); @@ -181,7 +189,7 @@ public class HrmCustomTemplateServiceImpl extends Service implements HrmCustomTe LinkedList keyList = customTemplateList.stream() .map(CustomTemplateVo::getKey) .collect(Collectors.toCollection(LinkedList::new)); - int rowNum = getIntValue((String) params.get("rownum")); + int rowNum = Util.getIntValue((String) params.get("rownum")); RecordSet rs = new RecordSet(); for (int i = 0; i < rowNum; i++) { String recordIndex = "_" + i;