package com.kingdee.eas.custom.szpgm.osf.service; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.bos.bsf.service.app.IHRMsfService; import com.kingdee.eas.common.EASBizException; import com.kingdee.eas.util.app.DbUtil; import com.kingdee.jdbc.rowset.IRowSet; import org.apache.commons.lang3.StringUtils; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 获取角色/角色成员信息接口(分管领导接口) *

* 根据修改日期、角色名称、角色编号等条件分页查询角色成员-角色关联信息, * 包含角色名称、编号、类型、状态以及人员关联关系等字段。 *

* *

入参说明

*
 * modifyDate - 最后修改日期(yyyy-MM-dd),同时过滤角色-角色成员关联的最后修改时间
 * name       - 成员名称(左模糊匹配)
 * code       - 角色编号(精确匹配)
 * size       - 每页条数(可选,默认100,最大1000)
 * page       - 页码(可选,默认1)
 * 
* *

返回值说明

*
 * code    - 状态码(200:成功, 500:异常)
 * msg     - 提示信息
 * page    - 当前页码
 * size    - 每页条数
 * data    - 角色负责人列表,每项包含:
 *   id          - 主键(人员-角色关联表主键)
 *   roleid      - 角色ID(关联 T_WFR_WFROLE.FID)
 *   orgid       - 组织ID
 *   personid    - 人员ID
 *   isinclude   - 是否包含下级
 *   isdele      - 是否委托
 *   deleperson  - 委托操作人
 *   rolename    - 角色名称
 *   rolenumber  - 角色编号
 *   roledescribe- 角色描述
 *   roletype    - 角色类型
 *   state       - 角色状态
 * 
* * @author szpgm * @since 1.0.0 */ public class GetRoleSupervisorInfoOsfService implements IHRMsfService { /** * 处理角色-角色成员信息查询请求 * * @param context 上下文对象 * @param map 入参,支持以下 key: * * @return Map<String, Object>,包含 code、msg、page、size、data 字段 * @throws EASBizException 业务异常 * @throws BOSException 平台异常 */ @Override public Object process(Context context, Map map) throws EASBizException, BOSException { Map result = new HashMap(); List> list = new ArrayList<>(); // ---------- 入参解析 ---------- String modifyDate = (String) map.get("modifyDate"); String name = (String) map.get("name"); String code = (String) map.get("code"); // 每页条数(默认100,上限1000) int maxSize = 1000; int size = 100; if (map.get("size") != null) { if (map.get("size") instanceof Integer) { size = (int) map.get("size"); } else if (map.get("size") instanceof String) { size = Integer.parseInt((String) map.get("size")); } size = Math.min(maxSize, size); } // 页码(默认1) int page = 1; if (map.get("page") != null) { if (map.get("page") instanceof Integer) { page = (int) map.get("page"); } else if (map.get("page") instanceof String) { page = Integer.parseInt((String) map.get("page")); } } // ---------- 查询数据 ---------- try { result.put("msg", "成功"); result.put("code", "200"); result.put("page", page); result.put("size", size); result.put("data", list); // 构建基础SQL并动态追加过滤条件 StringBuilder sql = getSql(); List paramArr = new ArrayList<>(); // 修改日期过滤:角色或角色成员-关联最后修改时间 >= 指定日期 if (StringUtils.isNotBlank(modifyDate)) { sql.append(" and (role.flastupdatetime >= ? or prole.flastupdatetime >= ? ) "); paramArr.add(modifyDate); paramArr.add(modifyDate); } // 角色名称左模糊匹配 if (StringUtils.isNotBlank(name)) { sql.append(" and role.frolename_l2 like ? "); paramArr.add(name + "%"); } // 角色编号精确匹配 if (StringUtils.isNotBlank(code)) { sql.append(" and role.fnumber = ? "); paramArr.add(code); } // 分页:LIMIT 条数 OFFSET 偏移量 sql.append(" LIMIT ? OFFSET ? "); paramArr.add(size); paramArr.add(((page - 1) * size)); IRowSet rs = DbUtil.executeQuery(context, sql.toString(), paramArr.toArray()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); while (rs.next()) { Map params = new HashMap(); // 主键(人员-角色关联表主键) params.put("id", rs.getString("id")); // 角色ID params.put("roleid", rs.getString("roleid")); // 组织ID params.put("orgid", rs.getString("orgid")); // 人员ID params.put("personid", rs.getString("personid")); // 是否包含 params.put("isinclude", rs.getString("isinclude")); // 是否删除 params.put("isdele", rs.getString("isdele")); // 删除操作人 params.put("deleperson", rs.getString("deleperson")); // 角色名称 params.put("rolename", rs.getString("rolename")); // 角色编号 params.put("rolenumber", rs.getString("rolenumber")); // 角色描述 params.put("roledescribe", rs.getString("roledescribe")); // 角色类型 params.put("roletype", rs.getString("roletype")); // 角色状态 params.put("state", rs.getString("state")); // 修改日期(格式化为 yyyy-MM-dd) //Date modifyDateVal = rs.getTimestamp("modifyDate"); //params.put("modifyDate", modifyDateVal != null ? sdf.format(modifyDateVal) : ""); list.add(params); } } catch (Exception e) { // 异常时返回错误信息 e.printStackTrace(); result.put("msg", e.getMessage()); result.put("code", "500"); } return result; } /** * 构建角色负责人信息查询SQL *

* 从 T_WFR_PERSONROLE(人员-角色关联表)左连 T_WFR_WFROLE(工作流角色表) * 查询角色与角色成员的关联信息,按修改日期、岗位名称、岗位编号过滤,支持分页。 *

* * @return 含占位符的SQL,参数顺序: modifyDate(×2), name, code, limit, offset */ private static StringBuilder getSql() { StringBuilder sql = new StringBuilder(); sql.append(" /*dialect*/ select "); // 人员-角色关联主键 sql.append(" prole.fid id, "); // 角色ID sql.append(" prole.froleid roleid, "); // 组织ID sql.append(" prole.forgid orgid, "); // 人员ID sql.append(" prole.fpsersonid personid, "); // 是否包含子组织 sql.append(" prole.fisinclude isinclude, "); // 是否已删除 sql.append(" prole.fisdele isdele, "); // 删除操作人ID sql.append(" prole.fdelepersonid deleperson, "); // 角色名称 sql.append(" role.frolename_l2 rolename, "); // 角色编号 sql.append(" role.fnumber rolenumber, "); // 角色描述 sql.append(" role.froledescribe_l2 roledescribe, "); // 角色类型 sql.append(" role.froletype roletype, "); // 角色状态 sql.append(" role.fstate state "); sql.append(" from T_WFR_PERSONROLE prole "); sql.append(" LEFT JOIN T_WFR_WFROLE role on prole.FROLEID = role.FID "); sql.append(" where 1=1 "); return sql; } }