GetRoleSupervisorInfoOsfService.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package com.kingdee.eas.custom.szpgm.osf.service;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.bos.bsf.service.app.IHRMsfService;
  5. import com.kingdee.eas.common.EASBizException;
  6. import com.kingdee.eas.util.app.DbUtil;
  7. import com.kingdee.jdbc.rowset.IRowSet;
  8. import org.apache.commons.lang3.StringUtils;
  9. import java.text.SimpleDateFormat;
  10. import java.util.ArrayList;
  11. import java.util.Date;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15. /**
  16. * 获取角色/角色成员信息接口(分管领导接口)
  17. * <p>
  18. * 根据修改日期、角色名称、角色编号等条件分页查询角色成员-角色关联信息,
  19. * 包含角色名称、编号、类型、状态以及人员关联关系等字段。
  20. * </p>
  21. *
  22. * <h3>入参说明</h3>
  23. * <pre>
  24. * modifyDate - 最后修改日期(yyyy-MM-dd),同时过滤角色-角色成员关联的最后修改时间
  25. * name - 成员名称(左模糊匹配)
  26. * code - 角色编号(精确匹配)
  27. * size - 每页条数(可选,默认100,最大1000)
  28. * page - 页码(可选,默认1)
  29. * </pre>
  30. *
  31. * <h3>返回值说明</h3>
  32. * <pre>
  33. * code - 状态码(200:成功, 500:异常)
  34. * msg - 提示信息
  35. * page - 当前页码
  36. * size - 每页条数
  37. * data - 角色负责人列表,每项包含:
  38. * id - 主键(人员-角色关联表主键)
  39. * roleid - 角色ID(关联 T_WFR_WFROLE.FID)
  40. * orgid - 组织ID
  41. * personid - 人员ID
  42. * isinclude - 是否包含下级
  43. * isdele - 是否委托
  44. * deleperson - 委托操作人
  45. * rolename - 角色名称
  46. * rolenumber - 角色编号
  47. * roledescribe- 角色描述
  48. * roletype - 角色类型
  49. * state - 角色状态
  50. * </pre>
  51. *
  52. * @author szpgm
  53. * @since 1.0.0
  54. */
  55. public class GetRoleSupervisorInfoOsfService implements IHRMsfService {
  56. /**
  57. * 处理角色-角色成员信息查询请求
  58. *
  59. * @param context 上下文对象
  60. * @param map 入参,支持以下 key:
  61. * <ul>
  62. * <li><b>modifyDate</b> - 最后修改日期(可选,yyyy-MM-dd)</li>
  63. * <li><b>name</b> - 角色名称(可选,左模糊匹配)</li>
  64. * <li><b>code</b> - 角色编号(可选,精确匹配)</li>
  65. * <li><b>page</b> - 页码(可选,默认1)</li>
  66. * <li><b>size</b> - 每页条数(可选,默认100,最大1000)</li>
  67. * </ul>
  68. * @return Map&lt;String, Object&gt;,包含 code、msg、page、size、data 字段
  69. * @throws EASBizException 业务异常
  70. * @throws BOSException 平台异常
  71. */
  72. @Override
  73. public Object process(Context context, Map map) throws EASBizException, BOSException {
  74. Map<String, Object> result = new HashMap<String, Object>();
  75. List<Map<String, Object>> list = new ArrayList<>();
  76. // ---------- 入参解析 ----------
  77. String modifyDate = (String) map.get("modifyDate");
  78. String name = (String) map.get("name");
  79. String code = (String) map.get("code");
  80. // 每页条数(默认100,上限1000)
  81. int maxSize = 1000;
  82. int size = 100;
  83. if (map.get("size") != null) {
  84. if (map.get("size") instanceof Integer) {
  85. size = (int) map.get("size");
  86. } else if (map.get("size") instanceof String) {
  87. size = Integer.parseInt((String) map.get("size"));
  88. }
  89. size = Math.min(maxSize, size);
  90. }
  91. // 页码(默认1)
  92. int page = 1;
  93. if (map.get("page") != null) {
  94. if (map.get("page") instanceof Integer) {
  95. page = (int) map.get("page");
  96. } else if (map.get("page") instanceof String) {
  97. page = Integer.parseInt((String) map.get("page"));
  98. }
  99. }
  100. // ---------- 查询数据 ----------
  101. try {
  102. result.put("msg", "成功");
  103. result.put("code", "200");
  104. result.put("page", page);
  105. result.put("size", size);
  106. result.put("data", list);
  107. // 构建基础SQL并动态追加过滤条件
  108. StringBuilder sql = getSql();
  109. List<Object> paramArr = new ArrayList<>();
  110. // 修改日期过滤:角色或角色成员-关联最后修改时间 >= 指定日期
  111. if (StringUtils.isNotBlank(modifyDate)) {
  112. sql.append(" and (role.flastupdatetime >= ? or prole.flastupdatetime >= ? ) ");
  113. paramArr.add(modifyDate);
  114. paramArr.add(modifyDate);
  115. }
  116. // 角色名称左模糊匹配
  117. if (StringUtils.isNotBlank(name)) {
  118. sql.append(" and role.frolename_l2 like ? ");
  119. paramArr.add(name + "%");
  120. }
  121. // 角色编号精确匹配
  122. if (StringUtils.isNotBlank(code)) {
  123. sql.append(" and role.fnumber = ? ");
  124. paramArr.add(code);
  125. }
  126. // 分页:LIMIT 条数 OFFSET 偏移量
  127. sql.append(" LIMIT ? OFFSET ? ");
  128. paramArr.add(size);
  129. paramArr.add(((page - 1) * size));
  130. IRowSet rs = DbUtil.executeQuery(context, sql.toString(), paramArr.toArray());
  131. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  132. while (rs.next()) {
  133. Map<String, Object> params = new HashMap<String, Object>();
  134. // 主键(人员-角色关联表主键)
  135. params.put("id", rs.getString("id"));
  136. // 角色ID
  137. params.put("roleid", rs.getString("roleid"));
  138. // 组织ID
  139. params.put("orgid", rs.getString("orgid"));
  140. // 人员ID
  141. params.put("personid", rs.getString("personid"));
  142. // 是否包含
  143. params.put("isinclude", rs.getString("isinclude"));
  144. // 是否删除
  145. params.put("isdele", rs.getString("isdele"));
  146. // 删除操作人
  147. params.put("deleperson", rs.getString("deleperson"));
  148. // 角色名称
  149. params.put("rolename", rs.getString("rolename"));
  150. // 角色编号
  151. params.put("rolenumber", rs.getString("rolenumber"));
  152. // 角色描述
  153. params.put("roledescribe", rs.getString("roledescribe"));
  154. // 角色类型
  155. params.put("roletype", rs.getString("roletype"));
  156. // 角色状态
  157. params.put("state", rs.getString("state"));
  158. // 修改日期(格式化为 yyyy-MM-dd)
  159. //Date modifyDateVal = rs.getTimestamp("modifyDate");
  160. //params.put("modifyDate", modifyDateVal != null ? sdf.format(modifyDateVal) : "");
  161. list.add(params);
  162. }
  163. } catch (Exception e) {
  164. // 异常时返回错误信息
  165. e.printStackTrace();
  166. result.put("msg", e.getMessage());
  167. result.put("code", "500");
  168. }
  169. return result;
  170. }
  171. /**
  172. * 构建角色负责人信息查询SQL
  173. * <p>
  174. * 从 T_WFR_PERSONROLE(人员-角色关联表)左连 T_WFR_WFROLE(工作流角色表)
  175. * 查询角色与角色成员的关联信息,按修改日期、岗位名称、岗位编号过滤,支持分页。
  176. * </p>
  177. *
  178. * @return 含占位符的SQL,参数顺序: modifyDate(×2), name, code, limit, offset
  179. */
  180. private static StringBuilder getSql() {
  181. StringBuilder sql = new StringBuilder();
  182. sql.append(" /*dialect*/ select ");
  183. // 人员-角色关联主键
  184. sql.append(" prole.fid id, ");
  185. // 角色ID
  186. sql.append(" prole.froleid roleid, ");
  187. // 组织ID
  188. sql.append(" prole.forgid orgid, ");
  189. // 人员ID
  190. sql.append(" prole.fpsersonid personid, ");
  191. // 是否包含子组织
  192. sql.append(" prole.fisinclude isinclude, ");
  193. // 是否已删除
  194. sql.append(" prole.fisdele isdele, ");
  195. // 删除操作人ID
  196. sql.append(" prole.fdelepersonid deleperson, ");
  197. // 角色名称
  198. sql.append(" role.frolename_l2 rolename, ");
  199. // 角色编号
  200. sql.append(" role.fnumber rolenumber, ");
  201. // 角色描述
  202. sql.append(" role.froledescribe_l2 roledescribe, ");
  203. // 角色类型
  204. sql.append(" role.froletype roletype, ");
  205. // 角色状态
  206. sql.append(" role.fstate state ");
  207. sql.append(" from T_WFR_PERSONROLE prole ");
  208. sql.append(" LEFT JOIN T_WFR_WFROLE role on prole.FROLEID = role.FID ");
  209. sql.append(" where 1=1 ");
  210. return sql;
  211. }
  212. }