package com.engine.organization.thread;

/**
 * @author:dxfeng
 * @createTime: 2022/08/30
 * @version: 1.0
 */
//public class DepartmentTriggerRunnable implements Runnable {
//
//    private DepartmentPO oldDepartment;
//    private final DepartmentPO newDepartment;
//    private String oldFparentId;
//    private String moveTarget;
//    private Boolean forbiddenTag = false;
//
//    private CompTriggerMapper getCompTriggerMapper() {
//        return MapperProxyFactory.getProxy(CompTriggerMapper.class);
//    }
//
//    private DepartmentTriggerMapper getDepartmentTriggerMapper() {
//        return MapperProxyFactory.getProxy(DepartmentTriggerMapper.class);
//    }
//
//    public DepartmentTriggerRunnable(DepartmentPO oldDepartment, DepartmentPO newDepartment) {
//        this.oldDepartment = oldDepartment;
//        this.newDepartment = newDepartment;
//    }
//
//    public DepartmentTriggerRunnable(Boolean forbiddenTag,DepartmentPO oldDepartment, DepartmentPO newDepartment) {
//        this.oldDepartment = oldDepartment;
//        this.newDepartment = newDepartment;
//        this.forbiddenTag = forbiddenTag;
//    }
//
//    public DepartmentTriggerRunnable(Long departmentId) {
//        this.oldDepartment = new DepartmentPO();
//        this.newDepartment = MapperProxyFactory.getProxy(DepartmentMapper.class).getDeptById(departmentId);
//    }
//
//    public DepartmentTriggerRunnable(String moveTarget,DepartmentPO newDepartment) {
//        this.oldDepartment = new DepartmentPO();
//        this.newDepartment = newDepartment;
//        this.moveTarget = moveTarget;
//    }
//
//    public DepartmentTriggerRunnable(Integer oldFparentId, Long departmentId) {
//        this.oldFparentId = null == oldFparentId ? null : oldFparentId.toString();
//        this.newDepartment = MapperProxyFactory.getProxy(DepartmentMapper.class).getDeptById(departmentId);
//    }
//
//    public DepartmentTriggerRunnable(DepartmentPO newDepartment) {
//        this.oldDepartment = new DepartmentPO();
//        this.newDepartment = newDepartment;
//        this.newDepartment.setDeleteType(1);
//    }
//
//    @Override
//    public void run() {
//        FieldBaseEquator fieldBaseEquator = new FieldBaseEquator();
//        List<String> diffFields = fieldBaseEquator.getDiffFieldList(oldDepartment, newDepartment);
//        if (CollectionUtils.isEmpty(diffFields)) {
//            return;
//        }
//
//        // 判断
//        if (diffFields.contains("deptName") || diffFields.contains("deptPrincipal") || diffFields.contains("parentComp") || diffFields.contains("parentDept") || diffFields.contains("forbiddenTag") || diffFields.contains("deleteType")) {
//            JclOrgMap jclMap = new JclOrgMap();
//            jclMap.setFType(2);
//            int st = 100000000;
//
//            // 更新逻辑
//            jclMap.setFObjId(newDepartment.getId().intValue());
//            jclMap.setId(newDepartment.getId().intValue() + st);
//            jclMap.setUuid(newDepartment.getUuid());
//            jclMap.setFNumber(newDepartment.getDeptNo());
//            jclMap.setFName(newDepartment.getDeptName());
//            jclMap.setFParentId(null == newDepartment.getParentDept() ? newDepartment.getParentComp().intValue() : newDepartment.getParentDept().intValue() + st);
//            jclMap.setFObjParentId(null == newDepartment.getParentDept() ? newDepartment.getParentComp().intValue() : newDepartment.getParentDept().intValue());
//
//            jclMap.setFEcId(getDepartmentTriggerMapper().getEcDepartmentIdByUuid(jclMap.getUuid()));
//
//            jclMap.setFClass(0);
//            jclMap.setFClassName("行政维度");
//            Integer ecResourceId =  null == newDepartment.getDeptPrincipal() ? null : newDepartment.getDeptPrincipal().intValue();
//            HrmResourcePO hrmResourcePO = getCompTriggerMapper().getResourceByEcId(ecResourceId);
//            if (null != hrmResourcePO) {
//                jclMap.setFLeader(hrmResourcePO.getId().intValue());
//                jclMap.setFLeaderName(hrmResourcePO.getLastName());
//                jclMap.setFLeaderJobId(hrmResourcePO.getJobTitle().intValue());
//                jclMap.setFLeaderSt(hrmResourcePO.getJobGrade());
//                jclMap.setFLeaderLv(hrmResourcePO.getJobLevel());
//                String image = UserCard.builder().image(hrmResourcePO.getResourceImageId()).build().getImage();
//                jclMap.setFLeaderImg(image);
//                if (null != hrmResourcePO.getJobTitle()) {
//                    JobPO jobById = MapperProxyFactory.getProxy(JobMapper.class).getJobById(hrmResourcePO.getJobTitle());
//                    if (null != jobById) {
//                        jclMap.setFLeaderJob(jobById.getJobName());
//                    }
//                }
//            }
//
//            String currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date());
//            jclMap.setFDateBegin(new Date(OrganizationDateUtil.stringToDate(currentDate).getTime()));
//            jclMap.setFDateEnd(new Date(OrganizationDateUtil.stringToDate("2099-12-31").getTime()));
//
//            // 获取当前生效的本部门map记录
//            JclOrgMap jclOrgMapByObjID = MapperProxyFactory.getProxy(JclOrgMapper.class).getJclOrgMapByObjID(jclMap.getFDateBegin(), ModuleTypeEnum.departmentfielddefined.getValue().toString(), Util.null2String(jclMap.getFObjId()));
//            StaffPO staffPO = new StaffPO();
//            switch (jclMap.getFType()) {
//                // 分部
//                case 1:
//                    staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(1,jclMap.getFObjId().toString(), null, null);
//                    break;
//                // 部门
//                case 2:
//                    staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(2,null, jclMap.getFObjId().toString(), null);
//                    break;
//            }
//            // 取出以该部门为上级部门的在编、在岗数,转移无需计算
//            JclOrgMap jclOrgMap = MapperProxyFactory.getProxy(JclOrgMapper.class).getSumPlanAndJobByFParentId(jclMap.getFDateBegin(), jclMap.getId().toString());
//            if (null != moveTarget) {
//                jclOrgMap = null;
//            }
//            if (null != jclOrgMapByObjID) {
//                if (null != jclOrgMap) {
//                    jclMap.setFPlan((null != staffPO ? staffPO.getStaffNum() : 0) + jclOrgMap.getFPlan());
//                    jclMap.setFOnJob(jclOrgMap.getFOnJob());
//                } else {
//                    jclMap.setFPlan(null != staffPO ? staffPO.getStaffNum() : 0);
//                    jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob());
//                }
//            } else {
//                jclMap.setFPlan(null != staffPO ? staffPO.getStaffNum() : 0);
//                jclMap.setFOnJob(0);
//            }
//            jclMap.setFIsVitual(0);
//
//            Calendar cal = Calendar.getInstance();
//            cal.setTime(jclMap.getFDateBegin());
//            Calendar calendar = DateUtil.addDay(cal, -1);
//            Date time = new Date(calendar.getTime().getTime());
//            getCompTriggerMapper().deleteMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin());
//            getCompTriggerMapper().updateMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin(), time);
//
//            if (1 != newDepartment.getDeleteType() && 1 != newDepartment.getForbiddenTag()) {
//                MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(jclMap);
//            }
//            if(null != jclOrgMapByObjID) {
//                updateParentPlanAndJob(jclMap.getFDateBegin(), jclOrgMapByObjID.getFParentId().toString());
//            }
//            // 部门启用，刷新上级数据
//            if(forbiddenTag){
//                updateParentPlanAndJob(jclMap.getFDateBegin(), jclMap.getFParentId().toString());
//            }
//            if(null != moveTarget){
//                updateParentPlanAndJob(jclMap.getFDateBegin(), moveTarget);
//            }
//            if (null != oldFparentId) {
//                updateParentPlanAndJob(jclMap.getFDateBegin(), oldFparentId);
//            }
//        }
//    }
//
//    private void updateParentPlanAndJob(Date currentDate, String parentId) {
//        // 获取上级部门
//        JclOrgMap parentJclOrgMap = MapperProxyFactory.getProxy(JclOrgMapper.class).getJclOrgMapById(currentDate, parentId);
//        if (null != parentJclOrgMap) {
//            // 上级部门当前在编、在岗数
//            JclOrgMap jclOrgMapSum = MapperProxyFactory.getProxy(JclOrgMapper.class).getSumPlanAndJobByFParentId(currentDate, parentJclOrgMap.getId().toString());
//            StaffPO staffPO = new StaffPO();
//            switch (parentJclOrgMap.getFType()) {
//                case 1:
//                    staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(1,Util.null2String(parentJclOrgMap.getFObjId()), null, null);
//                    break;
//                // 部门
//                case 2:
//                    staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(2, null, Util.null2String(parentJclOrgMap.getFObjId()), null);
//                    break;
//            }
//            // 编制表jcl_org_staff中的编制数+下级编制数，工具类判断
//            if(null != jclOrgMapSum){
//                parentJclOrgMap.setFPlan((null != staffPO ? staffPO.getStaffNum() : 0) + jclOrgMapSum.getFPlan());
//                parentJclOrgMap.setFOnJob(jclOrgMapSum.getFOnJob());
//            }else{
//                parentJclOrgMap.setFPlan(null != staffPO ? staffPO.getStaffNum() : 0);
//                parentJclOrgMap.setFOnJob(0);
//            }
//            parentJclOrgMap.setFDateBegin(currentDate);
//            parentJclOrgMap.setFDateEnd(new Date(OrganizationDateUtil.stringToDate("2099-12-31").getTime()));
//
//            Calendar cal = Calendar.getInstance();
//            cal.setTime(parentJclOrgMap.getFDateBegin());
//            Calendar calendar = DateUtil.addDay(cal, -1);
//            Date time = new Date(calendar.getTime().getTime());
//            getCompTriggerMapper().deleteMap(parentJclOrgMap.getFType(), parentJclOrgMap.getFObjId(), parentJclOrgMap.getFDateBegin());
//            getCompTriggerMapper().updateMap(parentJclOrgMap.getFType(), parentJclOrgMap.getFObjId(), parentJclOrgMap.getFDateBegin(), time);
//            MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(parentJclOrgMap);
//            if (null != parentJclOrgMap.getFParentId() && -1 != parentJclOrgMap.getFParentId()) {
//                updateParentPlanAndJob(currentDate, parentJclOrgMap.getFParentId().toString());
//            }
//        }
//    }
//}