/** 
 | 
 * Copyright (c) 2018 人人开源 All rights reserved. 
 | 
 * 
 | 
 * https://www.renren.io 
 | 
 * 
 | 
 * 版权所有,侵权必究! 
 | 
 */ 
 | 
  
 | 
package com.zt.core.config.mybatis; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; 
 | 
import com.zt.common.entity.*; 
 | 
import com.zt.common.exception.RenException; 
 | 
import com.zt.common.utils.SpringContextUtils; 
 | 
import com.zt.core.context.User; 
 | 
import com.zt.core.context.UserContext; 
 | 
import com.zt.core.sys.model.SysDept; 
 | 
import com.zt.modules.sys.service.SysDeptService; 
 | 
import org.apache.ibatis.reflection.MetaObject; 
 | 
import org.springframework.stereotype.Component; 
 | 
  
 | 
import java.util.Date; 
 | 
  
 | 
/** 
 | 
 * 公共字段,自动填充值 
 | 
 * 
 | 
 * @author hehz 
 | 
 */ 
 | 
@Component("fieldHandler") 
 | 
public class FieldMetaObjectHandler implements MetaObjectHandler { 
 | 
  
 | 
    // @Autowired 
 | 
    private SysDeptService sysDeptService; 
 | 
  
 | 
    @Override 
 | 
    public void insertFill(MetaObject metaObject) { 
 | 
        Object object = metaObject.getOriginalObject(); 
 | 
        User user = UserContext.getUser(); 
 | 
        Date date = new Date(); 
 | 
  
 | 
        if (object instanceof PlatformLogEntity) { 
 | 
            PlatformLogEntity entity = (PlatformLogEntity) object; 
 | 
            entity.setCreator(user.getId());// 创建者 
 | 
            entity.setCreateDate(date);// 创建时间 
 | 
        } 
 | 
        if (object instanceof PlatformEntity) { 
 | 
            PlatformEntity entity = (PlatformEntity) object; 
 | 
            entity.setDelete(false); 
 | 
            entity.setUpdater(user.getId());// 更新者 
 | 
            entity.setUpdateDate(date);// 更新时间 
 | 
        } 
 | 
        if (object instanceof TenantEntity) { 
 | 
            TenantEntity entity = (TenantEntity) object; 
 | 
            entity.setTenantId(user.getTenantId()); 
 | 
        } 
 | 
        this.setBusiLevelIds(object); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateFill(MetaObject metaObject) { 
 | 
        Object object = metaObject.getOriginalObject(); 
 | 
        if (object instanceof PlatformEntity) { 
 | 
            PlatformEntity entity = (PlatformEntity) object; 
 | 
            entity.setUpdater(UserContext.getUserId());// 更新者 
 | 
            entity.setUpdateDate(new Date());// 更新时间 
 | 
        } 
 | 
  
 | 
        this.setBusiLevelIds(object); 
 | 
    } 
 | 
  
 | 
    private void setBusiLevelIds(Object object) { 
 | 
        User user = UserContext.getUser(); 
 | 
        if (object instanceof IBusiLevel) {// 到业务层级:deptId 
 | 
            IBusiLevel entity = (IBusiLevel) object; 
 | 
            if (isEmpty(entity.getDeptId()) || user.getDeptId().equals(entity.getDeptId())) { 
 | 
                // 没有设置部门id,或者跟当前用户相同,那么保存为当前登录用户的 
 | 
                entity.setDeptId(user.getDeptId()); 
 | 
                entity.setCompanyId(user.getCompanyId()); 
 | 
                entity.setTenantId(user.getTenantId()); 
 | 
            } 
 | 
//            else {// 设置了不同于当前用户的 
 | 
//                SysDept dept = getSysDeptService().get(entity.getDeptId()); 
 | 
//                if (dept == null) { 
 | 
//                    throw new RenException("部门信息缺失!"); 
 | 
//                } 
 | 
//                entity.setCompanyId(dept.getCompanyId());// 公司 
 | 
//                entity.setTenantId(dept.getTenantId());// 租户 
 | 
//            } 
 | 
        } else if (object instanceof ICompanyLevel) {// 到公司层级 
 | 
            ICompanyLevel entity = (ICompanyLevel) object; 
 | 
            if (isEmpty(entity.getCompanyId()) || user.getCompanyId().equals(entity.getCompanyId())) { 
 | 
                entity.setCompanyId(user.getCompanyId()); 
 | 
                entity.setTenantId(user.getTenantId()); 
 | 
            } 
 | 
//            else if (isEmpty(entity.getTenantId())) {// 租户没有设置 
 | 
//                SysDept company = getSysDeptService().get(entity.getCompanyId()); 
 | 
//                if (company == null) { 
 | 
//                    throw new RenException("公司信息缺失!"); 
 | 
//                } 
 | 
//                entity.setTenantId(company.getTenantId());// 租户 
 | 
//            } 
 | 
        } else if (object instanceof ITenantLevel) {// 到租户层级 
 | 
            ITenantLevel entity = (ITenantLevel) object; 
 | 
            if (isEmpty(entity.getTenantId())) { 
 | 
                entity.setTenantId(user.getTenantId()); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private boolean isEmpty(Long value) { 
 | 
        return value == null || value == 0; 
 | 
    } 
 | 
  
 | 
    private SysDeptService getSysDeptService() { 
 | 
        if (sysDeptService == null) { 
 | 
            sysDeptService = SpringContextUtils.getBean(SysDeptService.class); 
 | 
        } 
 | 
        return sysDeptService; 
 | 
    } 
 | 
} 
 |