GetOrgInfoOsfService.java 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  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. * layerType - 组织类型(如:公司、部门、集团、中心、子中心、公司(新))
  25. * modifyDate - 最后修改日期(yyyy-MM-dd)
  26. * name - 组织名称(左模糊匹配)
  27. * code - 组织编号(精确匹配)
  28. * size - 每页条数(可选,默认100,最大1000)
  29. * page - 页码(可选,默认1)
  30. * </pre>
  31. *
  32. * <h3>返回值说明</h3>
  33. * <pre>
  34. * code - 状态码(200:成功, 500:异常)
  35. * msg - 提示信息
  36. * page - 当前页码
  37. * size - 每页条数
  38. * data - 组织列表,每项包含:
  39. * id - 主键
  40. * name - 组织名称
  41. * fullname - 组织全称
  42. * code - 组织编号
  43. * parent - 上级组织ID
  44. * fullnumber - 组织全编码
  45. * disporder - 显示顺序
  46. * status - 是否启用(1:有效, 0:封存,与数据库fissealup取反)
  47. * description - 备注
  48. * modifyDate - 修改日期(yyyy-MM-dd,当前版本不返回此字段)
  49. * layerType - 组织类型
  50. * </pre>
  51. *
  52. * @author szpgm
  53. * @since 1.0.0
  54. */
  55. public class GetOrgInfoOsfService implements IHRMsfService {
  56. /**
  57. * 处理组织信息查询请求
  58. *
  59. * @param context 上下文对象
  60. * @param map 入参,支持以下 key:
  61. * <ul>
  62. * <li><b>layerType</b> - 组织类型(可选,精确匹配)</li>
  63. * <li><b>modifyDate</b> - 最后修改日期(可选,yyyy-MM-dd)</li>
  64. * <li><b>name</b> - 组织名称(可选,左模糊匹配)</li>
  65. * <li><b>code</b> - 组织编号(可选,精确匹配)</li>
  66. * <li><b>page</b> - 页码(可选,默认1)</li>
  67. * <li><b>size</b> - 每页条数(可选,默认100,最大1000)</li>
  68. * </ul>
  69. * @return Map&lt;String, Object&gt;,包含 code、msg、page、size、data 字段
  70. * @throws EASBizException 业务异常
  71. * @throws BOSException 平台异常
  72. */
  73. @Override
  74. public Object process(Context context, Map map) throws EASBizException, BOSException {
  75. Map<String, Object> result = new HashMap<String, Object>();
  76. List<Map<String, Object>> list = new ArrayList<>();
  77. // ---------- 入参解析 ----------
  78. String layerType = (String) map.get("layerType");
  79. String modifyDate = (String) map.get("modifyDate");
  80. String name = (String) map.get("name");
  81. String code = (String) map.get("code");
  82. // 每页条数(默认100,上限1000)
  83. int maxSize = 1000;
  84. int size = 100;
  85. if (map.get("size") != null) {
  86. if (map.get("size") instanceof Integer) {
  87. size = (int) map.get("size");
  88. } else if (map.get("size") instanceof String) {
  89. size = Integer.parseInt((String) map.get("size"));
  90. }
  91. size = Math.min(maxSize, size);
  92. }
  93. // 页码(默认1)
  94. int page = 1;
  95. if (map.get("page") != null) {
  96. if (map.get("page") instanceof Integer) {
  97. page = (int) map.get("page");
  98. } else if (map.get("page") instanceof String) {
  99. page = Integer.parseInt((String) map.get("page"));
  100. }
  101. }
  102. // ---------- 查询数据 ----------
  103. try {
  104. result.put("msg", "成功");
  105. result.put("code", "200");
  106. result.put("page", page);
  107. result.put("size", size);
  108. result.put("data", list);
  109. // 构建基础SQL并动态追加过滤条件
  110. StringBuilder sql = getSql();
  111. List<Object> paramArr = new ArrayList<>();
  112. // 修改日期过滤:组织最后修改时间 >= 指定日期
  113. if (StringUtils.isNotBlank(modifyDate)) {
  114. sql.append(" and org.flastupdatetime >= ? ");
  115. paramArr.add(modifyDate);
  116. }
  117. // 组织类型精确匹配
  118. if (StringUtils.isNotBlank(layerType)) {
  119. sql.append(" and lt.fname_l2 = ? ");
  120. paramArr.add(layerType);
  121. }
  122. // 组织名称左模糊匹配
  123. if (StringUtils.isNotBlank(name)) {
  124. sql.append(" and org.fname_l2 like ? ");
  125. paramArr.add(name + "%");
  126. }
  127. // 组织编号精确匹配
  128. if (StringUtils.isNotBlank(code)) {
  129. sql.append(" and org.fnumber = ? ");
  130. paramArr.add(code);
  131. }
  132. // 分页:LIMIT 条数 OFFSET 偏移量
  133. sql.append(" LIMIT ? OFFSET ? ");
  134. paramArr.add(size);
  135. paramArr.add(((page - 1) * size));
  136. // 执行查询
  137. IRowSet rs = DbUtil.executeQuery(context, sql.toString(), paramArr.toArray());
  138. // 日期格式化器(yyyy-MM-dd)
  139. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  140. while (rs.next()) {
  141. Map<String, Object> params = new HashMap<String, Object>();
  142. // 组织名称
  143. params.put("name", rs.getString("name"));
  144. // 组织全称
  145. params.put("fullname", rs.getString("fullname"));
  146. // 组织编号
  147. params.put("code", rs.getString("code"));
  148. // 上级组织ID
  149. params.put("parent", rs.getString("parent"));
  150. // 组织全编码(长编码路径)
  151. params.put("fullnumber", rs.getString("fullnumber"));
  152. // 显示顺序
  153. params.put("disporder", rs.getString("disporder"));
  154. // 是否启用(DB字段fissealup: 1=封存,0=有效 → 取反后: 1=有效,0=封存)
  155. int statusVal = rs.getInt("status");
  156. params.put("status", statusVal == 1 ? "0" : "1");
  157. // 主键ID
  158. params.put("id", rs.getString("id"));
  159. // 备注
  160. params.put("description", rs.getString("description"));
  161. // 修改日期(当前版本不返回此字段,如需返回请取消注释)
  162. //Date modifyDateVal = rs.getTimestamp("modifyDate");
  163. //params.put("modifyDate", modifyDateVal != null ? sdf.format(modifyDateVal) : "");
  164. // 组织类型(公司 / 部门 / 集团 / 子中心 / 中心 / 公司(新))
  165. params.put("layerType", rs.getString("layerType"));
  166. list.add(params);
  167. }
  168. } catch (Exception e) {
  169. // 异常时返回错误信息
  170. e.printStackTrace();
  171. result.put("msg", e.getMessage());
  172. result.put("code", "500");
  173. }
  174. return result;
  175. }
  176. /**
  177. * 构建组织信息查询SQL
  178. * <p>
  179. * 从 t_org_admin(组织管理表)左连 T_Org_LayerType(组织类型表)
  180. * 查询组织基础信息,按修改日期、组织类型、名称、编号过滤,支持分页。
  181. * </p>
  182. *
  183. * @return 含占位符的基础SQL(where 1=1),过滤条件和分页参数由调用方动态追加
  184. */
  185. private static StringBuilder getSql() {
  186. StringBuilder sql = new StringBuilder();
  187. sql.append(" /*dialect*/ select ");
  188. // 组织名称
  189. sql.append(" org.fname_l2 \"name\", ");
  190. // 组织全称(显示名)
  191. sql.append(" org.fdisplayname_l2 fullname, ");
  192. // 组织编号
  193. sql.append(" org.fnumber code, ");
  194. // 上级组织ID
  195. sql.append(" org.fparentid parent, ");
  196. // 组织长编码(层级路径)
  197. sql.append(" org.flongNumber fullnumber, ");
  198. // 显示排序号
  199. sql.append(" org.fsortcode disporder, ");
  200. // 是否封存(1=封存, 0=有效,接口层取反)
  201. sql.append(" org.fissealup status, ");
  202. // 主键
  203. sql.append(" org.fid id, ");
  204. // 备注说明
  205. sql.append(" org.fdescription_l2 description, ");
  206. // 最后修改时间
  207. sql.append(" org.flastupdatetime modifyDate, ");
  208. // 组织类型名称
  209. sql.append(" lt.fname_l2 layerType ");
  210. // 组织管理表
  211. sql.append(" from t_org_admin org ");
  212. // 左连组织类型表
  213. sql.append(" left join T_Org_LayerType lt on lt.fid = org.flayertypeid ");
  214. sql.append(" where 1=1 ");
  215. return sql;
  216. }
  217. }