package weaver.interfaces.shuzhi.cronjob;

import com.time.util.DateUtil;
import tebie.applib.api.S;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob;
import weaver.interfaces.shuzhi.util.WorkflowUtil;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 员工关系提醒流程-计划任务
 * <p>
 * 从转正记录（uf_zzjl）、员工调动记录（uf_ddjl）、离职办理查询表单（uf_lzblcxbd），
 *
 * <p>
 * uf_zzjl：生效日期=zzrq（转正日期）、归档日期=gdrq（归档日期）
 1、生效日期小于等于归档日期，当前日期=归档日期+1天，更新人力资源表单（hrmresource）、入职管理建模表（uf_rzgljmb）
 2、生效日期大于归档日期，当前日期=生效日期，更新人力资源表单（hrmresource）、入职管理建模表（uf_rzgljmb）

 *
 *  hrmresource表：根据人员id更新status='1'
 *  uf_rzgljmb表：（员工状态：ygzt，转正日期：zzrq，员工（人力资源）：ygrlzy）
 *      update uf_rzgljmb set  ygzt = '1' , zzrq = '" + date + "' where ygrlzy = '" + userid + "'
 *
 * <p>
 * uf_ddjl：生效日期=ddrq（调动日期）、归档日期=gdrq（归档日期）
 * 1、生效日期大于归档日期，当前日期=生效日期，根据记录数据更新数据
 * 2、生效日期小于等于归档日期，当前日期=归档日期+1天，根据记录数据更新数据
 *
 *  hrmresource表：根据人员id更新jobtitle（岗位）、departmentid（部门）、subcompanyid1（分部）
 *  uf_rzgljmb表：（岗位名称：gwmc，职级：xl，部门：bm，公司分部：gsfb，员工（人力资源）：ygrlzy）
 *      update uf_rzgljmb set  gwmc = '"+xgw+"' , xl = '" + zj + "' ,bm = '"+xbm+"' ,gsfb = '"+xfb+"' where ygrlzy = '" + userid + "'
 *
 * <p>
 * uf_lzblcxbd：生效日期=jhlzrq（uf_lzblcxbd_dt1 计划离职日期）、归档日期=gdrq（归档日期）
 * 1、生效日期大于归档日期，当前日期=生效日期，根据记录数据更新数据
 * 2、生效日期小于等于归档日期，当前日期=归档日期+1天，根据记录数据更新数据
 *
 *  hrmresource表：根据人员id更新status='5'
 *  uf_rzgljmb表：（员工状态：ygzt，离职日期：lzrq，员工（人力资源）：ygrlzy）
 *      update uf_rzgljmb set  ygzt = '3' , lzrq = '" + date + "' where ygrlzy = '" + userid + "'
 *
 * @author wangj
 * @version 1.00版本
 * @Date 2023/7/3
 */

public class RelationshipReminderJob extends BaseCronJob {
    @Override
    public void execute() {
        BaseBean bb = new BaseBean();
        String workflowid = bb.getPropValue("relationship", "workflowid");
        String id = "";
        String lastname = "";
        String userid = "";
        String sxrq = "";
        String gdrq = "";
        String date = DateUtil.getCurrentTime("yyyy-MM-dd");

        String datebefore = DateUtil.formatDate(DateUtil.getDateAfterDays(new Date(),-1),"yyyy-MM-dd");
        RecordSet rs = new RecordSet();
        //转正记录（uf_zzjl） uf_zzjl：生效日期=zzrq（转正日期）、归档日期=gdrq（归档日期）
        String sql = "select a.id,b.lastname,a.zzry,a.zzrq,a.gdrq from uf_zzjl a left join hrmresource b on a.zzry = b.id where a.txlcid is null";
        rs.execute(sql);
        while (rs.next()) {
            String zt = "";
            id = Util.null2String(rs.getString("id"));
            lastname = Util.null2String(rs.getString("lastname"));
            sxrq = Util.null2String(rs.getString("zzrq"));
            gdrq = Util.null2String(rs.getString("gdrq"));
            userid = Util.null2String(rs.getString("zzry"));

            if ("".equals(id) || "".equals(sxrq) || "".equals(userid)|| "".equals(gdrq)) {
                continue;
            }

            if (compareDateLessEquation(sxrq,gdrq) && compareDateEquation(datebefore,gdrq)) {
                //1、生效日期小于等于当前日期，当前日期 - 1 = 归档日期，更新人力资源表单（hrmresource）、入职管理建模表（uf_rzgljmb）
                zt = updateZZHrmStatus(userid, "1", sxrq);
            }

            if(!compareDateLessEquation(sxrq,gdrq) && compareDateEquation(date,sxrq)){
                //2、生效日期大于当前日期，当前日期=生效日期，更新人力资源表单（hrmresource）、入职管理建模表（uf_rzgljmb）
                zt = updateZZHrmStatus(userid, "1", date);
            }

            if(!"".equals(zt)){
                updateRecordData( id, zt,"uf_zzjl");
            }

        }

        String xbm = "";
        String xgw = "";
        String zj = "";
        String xfb = "";
        //员工调动记录（uf_ddjl） uf_ddjl：生效日期=ddrq（调动日期）、归档日期=gdrq（归档日期）
        sql = " select b.id,b.nzzry,b.xbm,d.subcompanyid1,b.xgw,c.lastname,b.zj,a.ddrq,a.gdrq from uf_ddjl a left join uf_ddjl_dt1 b on a.id = b.mainid left join hrmresource c on c.id = b.nzzry left join hrmdepartment d on d.id = b.xbm where b.txlcid is null";
        rs.execute(sql);
        while (rs.next()) {
            String zt = "";
            id = Util.null2String(rs.getString("id"));
            lastname = Util.null2String(rs.getString("lastname"));
            sxrq = Util.null2String(rs.getString("ddrq"));
            gdrq = Util.null2String(rs.getString("gdrq"));
            userid = Util.null2String(rs.getString("nzzry"));
            xbm = Util.null2String(rs.getString("xbm"));
            xgw = Util.null2String(rs.getString("xgw"));
            zj = Util.null2String(rs.getString("zj"));
            xfb = Util.null2String(rs.getString("subcompanyid1"));


            if ("".equals(id) || "".equals(sxrq) || "".equals(userid)|| "".equals(gdrq)) {
                continue;
            }



            if (compareDateLessEquation(sxrq,gdrq)&&compareDateEquation(datebefore,gdrq)) {
                //2、生效日期小于等于当前日期，当前日期-1 =归档日期，根据记录数据更新数据
                //更新hrmresource表（岗位、部门）、入职管理建模表uf_rzgljmb（岗位、职级名称、部门、公司名称-分部）
                zt = updateDDHrmStatus(userid, sxrq, xgw, xbm, xfb, zj);
            }

            if(!compareDateLessEquation(sxrq,gdrq)&&compareDateEquation(date,sxrq)){
                //1、生效日期大于当前日期，当前日期=生效日期，根据记录数据更新数据
                zt = updateDDHrmStatus(userid, date, xgw, xbm, xfb, zj);
            }



            if(!"".equals(zt)){
                updateRecordData( id, zt,"uf_ddjl_dt1");
            }
        }

        //uf_lzblcxbd：生效日期=jhlzrq（uf_lzblcxbd_dt1 计划离职日期）、归档日期=gdrq（归档日期）

        sql = "select b.id,b.lzry,c.lastname,b.jhlzrq,a.gdrq from uf_lzblcxbd a left join uf_lzblcxbd_dt1 b on a.id = b.mainid left join hrmresource c on c.id = b.lzry where b.txlcid is null";
        rs.execute(sql);
        while (rs.next()) {
            String zt = "";
            id = Util.null2String(rs.getString("id"));
            lastname = Util.null2String(rs.getString("lastname"));
            sxrq = Util.null2String(rs.getString("jhlzrq"));
            gdrq = Util.null2String(rs.getString("gdrq"));
            userid = Util.null2String(rs.getString("lzry"));

            if ("".equals(id) || "".equals(sxrq) || "".equals(userid)|| "".equals(gdrq)) {
                continue;
            }




            if (compareDateLessEquation(sxrq,gdrq)&&compareDateEquation(datebefore,gdrq)) {
                //2、生效日期小于等于当前日期，当前日期=归档日期+1天，根据记录数据更新数据
                zt = updateLZHrmStatus(userid, "5", sxrq);
            }

            if(!compareDateLessEquation(sxrq,gdrq)&&compareDateEquation(date,sxrq)){
                //1、生效日期大于当前日期，当前日期=生效日期，根据记录数据更新数据
                zt = updateLZHrmStatus(userid, "5", date);
            }



            if(!"".equals(zt)){
                updateRecordData( id, zt,"uf_lzblcxbd_dt1");
            }
        }
    }

    //转正
    private String updateZZHrmStatus(String userid, String status, String date) {
        RecordSet rs = new RecordSet();
        String sql = "update hrmresource set status = '" + status + "' where id = '" + userid + "'";
        rs.execute(sql);

        sql = "update uf_rzgljmb set  ygzt = '1' , zzrq = '" + date + "' where ygrlzy = '" + userid + "'";
        rs.execute(sql);

        return "update";
    }


    //离职
    private String updateLZHrmStatus(String userid, String status, String date) {
        RecordSet rs = new RecordSet();
        String sql = "update hrmresource set status = '" + status + "' where id = '" + userid + "'";
        boolean isTrue = rs.executeUpdate(sql);

        sql = "update uf_rzgljmb set  ygzt = '3' , lzrq = '" + date + "' where ygrlzy = '" + userid + "'";
        rs.execute(sql);

        if(isTrue){
            EcologyToDelicloudUtil EcologyToDelicloudUtil = new EcologyToDelicloudUtil();
            EcologyToDelicloudUtil.updateEmployeeResign(userid);
        }
        return "update";
    }

    //调动
    private String updateDDHrmStatus(String userid, String date, String xgw, String xbm, String xfb, String zj) {
        RecordSet rs = new RecordSet();
        String sql = "update hrmresource set jobtitle = '" + xgw + "' ,departmentid = '"+xbm+"' ,subcompanyid1 = '"+xfb+"' where id = '" + userid + "'";
        rs.execute(sql);

        //岗位、职级名称、部门、公司名称-分部
        sql = "update uf_rzgljmb set  gwmc = '"+xgw+"' , xl = '" + zj + "' ,bm = '"+xbm+"' ,gzdw = '"+xfb+"' where ygrlzy = '" + userid + "'";
        rs.execute(sql);

        return "update";
    }

    /**
    * @Description: 比较日期相等
    * @Param:
    * @return:
    * @Author: wangj
    */
    private boolean compareDateEquation(String start, String end) {
        boolean flag = false;
        Date sdate = DateUtil.parseDate(start, "yyyy-MM-dd");
        Date edate = DateUtil.parseDate(end, "yyyy-MM-dd");
        if (sdate.getTime() == edate.getTime()) {
            flag = true;
        }
        return flag;
    }

    /**
     * @Description: 比较日期小于等于
     * @Param:
     * @return:
     * @Author: wangj
     */
    private boolean compareDateLessEquation(String start, String end) {
        boolean flag = false;
        Date sdate = DateUtil.parseDate(start, "yyyy-MM-dd");
        Date edate = DateUtil.parseDate(end, "yyyy-MM-dd");
        if (sdate.getTime() <= edate.getTime()) {
            flag = true;
        }
        return flag;
    }

//    /**
//    * @Description: 比较日期加一天相等
//    * @Param:
//    * @return:
//    * @Author: wangj
//    */
//    private boolean compareDateOneDayEquation(String start, String end) {
//        boolean flag = false;
//        Date sdate = DateUtil.parseDate(start, "yyyy-MM-dd");
//        Date edate = DateUtil.parseDate(end, "yyyy-MM-dd");
//        if (sdate.getTime() < edate.getTime()) {
//            flag = true;
//        }
//        return flag;
//    }

    private void updateRecordData(String id,String zt,String tablename){
        RecordSet rs = new RecordSet();
        rs.execute("update "+tablename+" set txlcid = '"+zt+"' where id = '"+id+"'");
    }


}
