package weaver.interfaces.htxc.htqc;

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.ArrayUtils;
import weaver.conn.RecordSet;
import weaver.formmode.customjavacode.AbstractCustomSqlConditionJavaCode;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.interfaces.htsc.comInfo.PropBean;

import java.util.Map;

/**
 * @Title: ecology-9
 * @Company: 泛微软件
 * @author: K1810039
 * @version: 1.0
 * @CreateDate: 2022-09-26 11:31
 * @Description: 合同模块-归档管理-部门即时归档，生成查询列表SQL查询限制条件
 * @ModifyLog:
 **/
@Slf4j
public class CustomSearchTemplate extends AbstractCustomSqlConditionJavaCode {

    /**
     * 生成SQL查询限制条件
     * @param param
     *  param包含(但不限于)以下数据
     *  user 当前用户
     * @return
     *  返回的查询限制条件的格式举例为: t1.a = '1' and t1.b = '3' and t1.c like '%22%'
     *  其中t1为表单主表表名的别名
     */
    @Override
    public String generateSqlCondition(Map<String, Object> param) throws Exception {
        log.info("合同模块-归档管理-部门即时归档，生成查询列表SQL查询限制条件,param:[{}]", JSON.toJSONString(param));
        RecordSet rs = new RecordSet();
        PropBean pb = new PropBean();
        // 部门即时归档必须条件  用印及归档状态下拉框为【部门归档审批中】和【待部门归档】选项选项值
        final String necessaryCondition = "t1.YYJGDZT in ("+pb.getPropName("ht_yyjgzt")+")";
        log.info("necessaryCondition:[{}]",necessaryCondition);
        // 总部 华泰证券股份有限公司 id
        final int zbId = 728;
        User user = (User)param.get("user");
        // 当前用户 loginId
        String loginId = user.getLoginid();
        String id = "";
        String depId = "";
        String sql = "select ID,DEPARTMENTID from HRMRESOURCE where LOGINID = ?";
        rs.executeQuery(sql,loginId);
        if (rs.next()){
            id = Util.null2String(rs.getString("ID"));
            depId = Util.null2String(rs.getString("DEPARTMENTID"));
        }
        log.info("当前用户id:[{}],depId:[{}]",id,depId);

        // 总部办公室归档管理员角色，成员 loginId
        String [] zbbgsSysAdminArr = pb.getPropName("ht_zbbgsgdgly").split(",");
        // 分公司归档管理员角色，成员loginId
        String [] fgsSysAdminArr = pb.getPropName("ht_fgsgdgly").split(",");
        // 部门归档管理员角色，成员loginId
        String [] bmSysAdminArr = pb.getPropName("ht_bmgdgly").split(",");

        String sqlCondition = "";

        if (ArrayUtils.contains(zbbgsSysAdminArr,loginId)){
            // 总部办公室归档管理员 可查看 所有
            log.info("总部办公室归档管理员-loginId:[{}]",loginId);
            sqlCondition = necessaryCondition;
        }else if (ArrayUtils.contains(fgsSysAdminArr,loginId)){
            // 分公司归档管理员 可查看 分公司及所属营业部、业务部的
            log.info("分公司归档管理员-loginId:[{}]",loginId);
            sqlCondition = necessaryCondition + " and t1.BMLX in ("+pb.getPropName("ht_fgsDeptCode")+")";
        }else if (ArrayUtils.contains(bmSysAdminArr,loginId)){
            // 部门归档管理员 可查看 本部门的
            log.info("部门归档管理员-loginId:[{}]",loginId);
            sqlCondition = necessaryCondition + " and t1.QCBM = " + depId;
        }else {
            // 普通用户 可查看 本人发起的
            log.info("普通用户-loginId:[{}]",loginId);
            sqlCondition = necessaryCondition + " and t1.QCR = " + id;
        }
        log.info("合同模块-归档管理-部门即时归档-返回数据sqlCondition:[{}]", sqlCondition);
        return sqlCondition;
    }



}
