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; /** * 获取组织信息接口 *

* 根据组织类型、最后修改日期、组织名称、组织编号等条件分页查询组织基础信息, * 包含组织名称、编号、上下级关系、状态等字段。 *

* *

入参说明

*
 * layerType  - 组织类型(如:公司、部门、集团、中心、子中心、公司(新))
 * modifyDate - 最后修改日期(yyyy-MM-dd)
 * name       - 组织名称(左模糊匹配)
 * code       - 组织编号(精确匹配)
 * size       - 每页条数(可选,默认100,最大1000)
 * page       - 页码(可选,默认1)
 * 
* *

返回值说明

*
 * code    - 状态码(200:成功, 500:异常)
 * msg     - 提示信息
 * page    - 当前页码
 * size    - 每页条数
 * data    - 组织列表,每项包含:
 *   id          - 主键
 *   name        - 组织名称
 *   fullname    - 组织全称
 *   code        - 组织编号
 *   parent      - 上级组织ID
 *   fullnumber  - 组织全编码
 *   disporder   - 显示顺序
 *   status      - 是否启用(1:有效, 0:封存,与数据库fissealup取反)
 *   description - 备注
 *   modifyDate  - 修改日期(yyyy-MM-dd,当前版本不返回此字段)
 *   layerType   - 组织类型
 * 
* * @author szpgm * @since 1.0.0 */ public class GetOrgInfoOsfService 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 layerType = (String) map.get("layerType"); 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 org.flastupdatetime >= ? "); paramArr.add(modifyDate); } // 组织类型精确匹配 if (StringUtils.isNotBlank(layerType)) { sql.append(" and lt.fname_l2 = ? "); paramArr.add(layerType); } // 组织名称左模糊匹配 if (StringUtils.isNotBlank(name)) { sql.append(" and org.fname_l2 like ? "); paramArr.add(name + "%"); } // 组织编号精确匹配 if (StringUtils.isNotBlank(code)) { sql.append(" and org.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()); // 日期格式化器(yyyy-MM-dd) SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); while (rs.next()) { Map params = new HashMap(); // 组织名称 params.put("name", rs.getString("name")); // 组织全称 params.put("fullname", rs.getString("fullname")); // 组织编号 params.put("code", rs.getString("code")); // 上级组织ID params.put("parent", rs.getString("parent")); // 组织全编码(长编码路径) params.put("fullnumber", rs.getString("fullnumber")); // 显示顺序 params.put("disporder", rs.getString("disporder")); // 是否启用(DB字段fissealup: 1=封存,0=有效 → 取反后: 1=有效,0=封存) int statusVal = rs.getInt("status"); params.put("status", statusVal == 1 ? "0" : "1"); // 主键ID params.put("id", rs.getString("id")); // 备注 params.put("description", rs.getString("description")); // 修改日期(当前版本不返回此字段,如需返回请取消注释) //Date modifyDateVal = rs.getTimestamp("modifyDate"); //params.put("modifyDate", modifyDateVal != null ? sdf.format(modifyDateVal) : ""); // 组织类型(公司 / 部门 / 集团 / 子中心 / 中心 / 公司(新)) params.put("layerType", rs.getString("layerType")); list.add(params); } } catch (Exception e) { // 异常时返回错误信息 e.printStackTrace(); result.put("msg", e.getMessage()); result.put("code", "500"); } return result; } /** * 构建组织信息查询SQL *

* 从 t_org_admin(组织管理表)左连 T_Org_LayerType(组织类型表) * 查询组织基础信息,按修改日期、组织类型、名称、编号过滤,支持分页。 *

* * @return 含占位符的基础SQL(where 1=1),过滤条件和分页参数由调用方动态追加 */ private static StringBuilder getSql() { StringBuilder sql = new StringBuilder(); sql.append(" /*dialect*/ select "); // 组织名称 sql.append(" org.fname_l2 \"name\", "); // 组织全称(显示名) sql.append(" org.fdisplayname_l2 fullname, "); // 组织编号 sql.append(" org.fnumber code, "); // 上级组织ID sql.append(" org.fparentid parent, "); // 组织长编码(层级路径) sql.append(" org.flongNumber fullnumber, "); // 显示排序号 sql.append(" org.fsortcode disporder, "); // 是否封存(1=封存, 0=有效,接口层取反) sql.append(" org.fissealup status, "); // 主键 sql.append(" org.fid id, "); // 备注说明 sql.append(" org.fdescription_l2 description, "); // 最后修改时间 sql.append(" org.flastupdatetime modifyDate, "); // 组织类型名称 sql.append(" lt.fname_l2 layerType "); // 组织管理表 sql.append(" from t_org_admin org "); // 左连组织类型表 sql.append(" left join T_Org_LayerType lt on lt.fid = org.flayertypeid "); sql.append(" where 1=1 "); return sql; } }