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.*;
/**
* 员工兼职信息查询OSF服务
*
* 实现 {@link IHRMsfService} 接口,提供员工兼职信息的分页查询功能。
* 支持按员工编号(精确)、最后修改时间进行过滤筛选。
* 同一员工存在多个上级时,会将上级ID合并到一个列表中返回。
*
*
* 关联数据表
*
* - T_HR_PluralityAddBizBillEntry(pae)—— 员工加入兼职单分录表,主表
* - T_HR_PluralityAddBizBill(pa)—— 员工加入兼职单表,获取审批状态
* - T_HR_PluralityDelBizBillentry(pde)—— 员工移除兼职单分录表,获取结束日期
* - T_HR_PluralityDelBizBill(pd)—— 员工移除兼职单表,获取移除审批状态
* - t_org_position(pos)—— 组织岗位表,用于关联上级
* - T_HR_EMPPOSTEXPERIENCEHIS(phis)—— 岗位任职历史表,取当前上级
*
*
* 入参说明
*
* - modifyDate(String,可选)—— 最后修改日期(格式yyyy-MM-dd),筛选该日期之后修改的兼职记录
* - personid(String,可选)—— 员工编号/ID,精确匹配
* - page(int/String,可选,默认1)—— 页码
* - size(int/String,可选,默认100,上限1000)—— 每页条数
*
*
* 返回结果
* {@code
* {
* "msg": "成功",
* "code": "200",
* "page": 1,
* "size": 100,
* "data": [{
* "personid": "员工ID",
* "startDate": "兼职开始日期(yyyy-MM-dd)",
* "endDate": "兼职结束日期(yyyy-MM-dd),未结束则为2199-12-31",
* "orgid": "兼职组织ID",
* "posid": "兼职岗位ID",
* "leader": ["上级ID列表"],
* "description": "兼职备注"
* }]
* }
* }
*
* 业务规则
*
* - 只查询加入兼职单审批通过的记录(pa.fbillstate=3)
* - 兼职结束日期:只有移除兼职单审批通过(pd.fbillstate=3)时才取实际结束日期,否则返回"2199-12-31"表示未结束
*
*
* @author szpgm
* @since 2026/07/02
*/
public class GetPluralityInfoOsfService implements IHRMsfService {
/**
* 处理员工兼职信息查询请求
*
* @param context EAS上下文对象,用于执行数据库查询
* @param map 入参Map,包含过滤条件和分页参数
* @return Map 包含查询结果、状态码和分页信息
* @throws EASBizException 业务异常
* @throws BOSException 平台异常
*/
@Override
public Object process(Context context, Map map) throws EASBizException, BOSException {
// 返回结果容器
Map result = new HashMap();
List