com.itrus.ca.modules.sys.service.OfficeService.java Source code

Java tutorial

Introduction

Here is the source code for com.itrus.ca.modules.sys.service.OfficeService.java

Source

/**
 * Copyright &copy; 2012-2013 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 */
package com.itrus.ca.modules.sys.service;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.hibernate.Query;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.itrus.ca.common.persistence.DataEntity;
import com.itrus.ca.common.persistence.Page;
import com.itrus.ca.common.service.BaseService;
import com.itrus.ca.common.utils.EscapeUtil;
import com.itrus.ca.modules.sys.dao.OfficeDao;
import com.itrus.ca.modules.sys.dao.RoleDao;
import com.itrus.ca.modules.sys.dao.UserDao;
import com.itrus.ca.modules.sys.entity.Office;
import com.itrus.ca.modules.sys.entity.Role;
import com.itrus.ca.modules.sys.entity.User;
import com.itrus.ca.modules.sys.utils.UserUtils;

/**
 * Service
 * @author ThinkGem
 * @version 2013-5-29
 */
@Service
@Transactional(readOnly = true)
public class OfficeService extends BaseService {

    @Autowired
    private OfficeDao officeDao;

    @Autowired
    private UserDao userDao;

    @Autowired
    private RoleDao roleDao;

    public Office get(Long id) {
        return officeDao.findOne(id);
    }

    public List<Office> findAll() {
        return UserUtils.getOfficeList();
    }

    public List<Office> findall() {
        return (List<Office>) officeDao.findAll();
    }

    /**
     *  ??
    * @Title: find
    * @Description: TODO(????)
    * @param @param page
    * @param @param office
    * @param @return    
    * @return Page<Office>    
    * @throws
     */
    public Page<Office> find(Page<Office> page, Office office) {
        User user = UserUtils.getUser();
        DetachedCriteria dc = officeDao.createDetachedCriteria();
        if (StringUtils.isNotEmpty(office.getName())) {
            dc.add(Restrictions.like("name", "%" + EscapeUtil.escapeLike(office.getName()) + "%"));
        }

        dc.add(Restrictions.eq("delFlag", DataEntity.DEL_FLAG_NORMAL));
        Office off = new Office();
        off.setId(1L);
        dc.add(Restrictions.eq("parent", off));
        //dc.add(Restrictions.eq("delFlag", Office.DEL_FLAG_NORMAL));
        dc.add(Restrictions.ne("id", 34L));
        dc.addOrder(Order.asc("code"));
        dc.addOrder(Order.desc("id"));
        return officeDao.find(page, dc);
    }

    /**
     * ?
     * ?del
    * @Title: findByDel
    * @Description: TODO(????)
    * @param @param page
    * @param @param office
    * @param @return    
    * @return Page<Office>    
    * @throws
     */
    public Page<Office> findByDel(Page<Office> page, Office office) {
        User user = UserUtils.getUser();
        DetachedCriteria dc = officeDao.createDetachedCriteria();
        if (StringUtils.isNotEmpty(office.getName())) {
            dc.add(Restrictions.like("name", "%" + EscapeUtil.escapeLike(office.getName()) + "%"));
        }
        Office off = new Office();
        off.setId(1L);
        dc.add(Restrictions.ne("parent", off));
        dc.add(Restrictions.eq("delFlag", Office.DEL_FLAG_NORMAL));
        dc.add(Restrictions.ne("id", 34L));
        dc.addOrder(Order.asc("code"));
        dc.addOrder(Order.desc("id"));
        return officeDao.find(page, dc);
    }

    /**
     * 
     * @param office
     * @return
     */
    public List<Office> findAllByDel(Office office) {
        User user = UserUtils.getUser();
        DetachedCriteria dc = officeDao.createDetachedCriteria();
        if (StringUtils.isNotEmpty(office.getName())) {
            dc.add(Restrictions.like("name", "%" + EscapeUtil.escapeLike(office.getName()) + "%"));
        }
        Office off = new Office();
        off.setId(1L);
        dc.add(Restrictions.ne("parent", off));
        dc.add(Restrictions.eq("delFlag", Office.DEL_FLAG_NORMAL));
        dc.add(Restrictions.ne("id", 34L));
        dc.addOrder(Order.asc("code"));
        dc.addOrder(Order.desc("id"));
        return officeDao.find(dc);
    }

    public Page<Office> findOffice(Page<Office> page, Office office) {
        User user = UserUtils.getUser();
        DetachedCriteria dc = officeDao.createDetachedCriteria();
        //      if (StringUtils.isNotEmpty(office.getName())){
        //         dc.add(Restrictions.like("name", "%"+EscapeUtil.escapeLike(office.getName())+"%"));
        //      }
        dc.add(Restrictions.eq("areaName", office.getName()));
        dc.add(Restrictions.eq("parent", office));
        //dc.add(Restrictions.eq("delFlag", Office.DEL_FLAG_NORMAL));
        dc.add(Restrictions.ne("id", 34L));
        dc.addOrder(Order.asc("code"));
        dc.addOrder(Order.desc("id"));
        return officeDao.find(page, dc);
    }

    public List<Office> find(Long areaId) {
        User user = UserUtils.getUser();
        DetachedCriteria dc = officeDao.createDetachedCriteria();
        if (StringUtils.isNotEmpty(areaId.toString())) {
            dc.add(Restrictions.eq("area.id", areaId));
        }
        dc.add(dataScopeFilter(user, dc.getAlias(), ""));
        dc.add(Restrictions.eq("delFlag", Office.DEL_FLAG_NORMAL));
        dc.addOrder(Order.asc("code"));
        dc.addOrder(Order.desc("id"));
        return officeDao.find(dc);
    }

    public List<Office> findByParentId(Long areaId) {
        DetachedCriteria dc = officeDao.createDetachedCriteria();
        if (areaId == null) {
            return null;
        }
        if (areaId != null) {

            if (StringUtils.isNotEmpty(areaId.toString())) {
                dc.add(Restrictions.eq("parent.id", areaId));
            } else {
                return null;
            }
        }
        dc.add(Restrictions.neOrIsNotNull("type", "1"));
        dc.add(Restrictions.eq("delFlag", Office.DEL_FLAG_NORMAL));
        dc.addOrder(Order.asc("code"));
        dc.addOrder(Order.desc("id"));
        return officeDao.find(dc);
    }

    public List<Office> findByParentIds(List<Long> areaIds) {
        DetachedCriteria dc = officeDao.createDetachedCriteria();
        if (areaIds == null) {
            return null;
        }
        if (areaIds != null) {

            if (StringUtils.isNotEmpty(areaIds.toString())) {
                dc.add(Restrictions.in("parent.id", areaIds));
            } else {
                return null;
            }
        }
        dc.add(Restrictions.neOrIsNotNull("type", "1"));
        dc.add(Restrictions.eq("delFlag", Office.DEL_FLAG_NORMAL));
        dc.addOrder(Order.asc("code"));
        dc.addOrder(Order.desc("id"));
        return officeDao.find(dc);
    }

    public List<Long> findOfficeIdsByParentId(Long areaId) {
        return officeDao.findOfficeIdsByParentId(areaId);
    }

    /**
     * ?
    * @Title: findOfficesByParentId
    * @Description: TODO(????)
    * @param @param areaId
    * @param @return    
    * @return List<Office>    
    * @throws
     */
    public List<Office> findOfficesByParentId(Long areaId) {
        DetachedCriteria dc = officeDao.createDetachedCriteria();
        if (StringUtils.isNotEmpty(areaId.toString())) {
            dc.add(Restrictions.eq("parent.id", areaId));
        }
        dc.add(Restrictions.eq("type", "2"));
        dc.addOrder(Order.asc("code"));
        dc.addOrder(Order.desc("id"));
        return officeDao.find(dc);
    }

    public List<Office> findByParentId(Long areaId, Integer type) {
        DetachedCriteria dc = officeDao.createDetachedCriteria();
        if (StringUtils.isNotEmpty(areaId.toString())) {
            dc.add(Restrictions.eq("parent.id", areaId));
        }
        dc.add(Restrictions.eq("type", String.valueOf(type)));
        dc.add(Restrictions.eq("delFlag", Office.DEL_FLAG_NORMAL));
        dc.addOrder(Order.asc("code"));
        dc.addOrder(Order.desc("id"));
        return officeDao.find(dc);
    }

    public List<Office> findByIds(Page<Office> page, List<Long> officeIds) {
        DetachedCriteria dc = officeDao.createDetachedCriteria();
        if (officeIds.size() > 0) {
            dc.add(Restrictions.in("id", officeIds));
        }
        dc.add(Restrictions.eq("delFlag", Office.DEL_FLAG_NORMAL));
        dc.addOrder(Order.asc("code"));
        dc.addOrder(Order.desc("id"));
        return officeDao.find(dc);
    }

    public Office findById(Long officeId) {
        return officeDao.findOne(officeId);

    }

    @Transactional(readOnly = false)
    public void save(Office office) {
        officeDao.save(office);
    }

    @Transactional(readOnly = false)
    public void delete(Long id) {
        officeDao.deleteById(id);
        //UserUtils.removeCache(UserUtils.CACHE_OFFICE_LIST);
    }

    public void deleteL(Office office) {
        officeDao.deleteById(office.getId());
    }

    @Transactional(readOnly = false)
    public List<Office> findAllByidNotInRaletion() {
        return officeDao.findAllByIdNotInRelation();
    }

    @Transactional(readOnly = false)
    public List<Office> findAllByid(Long id) {
        return officeDao.findAllById(id);
    }

    @Transactional(readOnly = false)
    public List<Office> findByAgentId(Long id) {
        return officeDao.findByAgentId(id);
    }

    public List<Office> selectAreaList() {
        return officeDao.selectAreaList();
    }

    public void updateOffice(Office off, Long id, String name, String name2, String name3, String name4) {
        officeDao.updateOffice(off, id, name, name2, name3, name4);
    }

    /**
     * ?(1)or(2)
     * @param user
     * @param type
     * @return
     */
    public List<Office> getOfficeByType(User user, Integer type) {
        if (!user.isAdmin()) {
            List<Role> roles = user.getRoleList();
            List<Office> result = new ArrayList<Office>();
            Office area = user.getCompany();
            Office office = user.getOffice();

            for (Role r : roles) {
                if (Role.DATA_SCOPE_ALL.equals(r.getDataScope())) {
                    return UserUtils.getOfficeList(type);
                } else if (Role.DATA_SCOPE_COMPANY_AND_CHILD.equals(r.getDataScope())) {//?
                    if (type == 1) {//
                        if (area.getId() == 1L) {//?CA
                            result.add(user.getCompany());
                            result.addAll(findByParentId(area.getId(), type));
                            return result;
                        } else {
                            result.add(area);
                        }
                    } else {//
                        if (area.getId() == 1L) {
                            return UserUtils.getOfficeList(type);//
                        } else {//??
                            result.addAll(findByParentId(area.getId(), type));// ?office
                        }
                    }
                } else if (Role.DATA_SCOPE_COMPANY.equals(r.getDataScope())) {//?
                    if (type == 1) {//
                        result.add(area);
                    } else {//
                        result.add(office);
                    }
                } else if (Role.DATA_SCOPE_OFFICE_AND_CHILD.equals(r.getDataScope())) {//??
                    if (type == 1) {//
                        result.add(area);
                    } else {//
                        result.add(office);
                    }
                } else if (Role.DATA_SCOPE_OFFICE.equals(r.getDataScope())) {//?
                    if (type == 1) {//
                        result.add(area);
                    } else {//
                        result.add(office);
                    }
                } else if (Role.DATA_SCOPE_SELF.equals(r.getDataScope())) {//?
                    if (type == 1) {//
                        result.add(area);
                    } else {//
                        result.add(office);
                    }
                } else if (Role.DATA_SCOPE_CUSTOM.equals(r.getDataScope())) {//
                    List<Office> offices = r.getOfficeList();
                    for (Office o : offices) {
                        if (o.getType().equals(type.toString())) {
                            result.add(o);
                        }
                    }
                }
            }
            //?
            List<Office> signleResultList = new ArrayList<Office>();
            for (Office r : result) {
                if (signleResultList.contains(r)) {
                    continue;
                }
                signleResultList.add(r);
            }
            return signleResultList;
        } else {
            return UserUtils.getOfficeList(type);
        }
    }

    public List<Office> selectArea(String areaName) {
        DetachedCriteria dc = officeDao.createDetachedCriteria();
        dc.add(Restrictions.eq("name", areaName));
        dc.add(Restrictions.eq(Office.DEL_FLAG, Office.DEL_FLAG_NORMAL));
        return officeDao.find(dc);
    }

    @Transactional(readOnly = false)
    public List<Office> getOfficeList(Integer type) {
        List<Office> officeList = null;
        //User user = getUser();
        DetachedCriteria dc = officeDao.createDetachedCriteria();
        //dc.add(dataScopeFilter(user, dc.getAlias(), ""));
        dc.add(Restrictions.eq("delFlag", Office.DEL_FLAG_NORMAL));
        dc.add(Restrictions.eq("type", type.toString()));
        dc.addOrder(Order.asc("code"));
        officeList = officeDao.find(dc);
        return officeList;
    }

    /**
     * ?CA
    * @Title: updateUserByOffice
    * @Description: TODO(????)
    * @param @param offices
    * @param @return    
    * @return boolean    
    * @throws
     */
    public void updateUserByOffice(List<Office> offices) {
        Office company = new Office();
        company.setId(1L);
        userDao.updateCompany(company, offices);

        Office office = new Office();
        office.setId(34L);
        userDao.updateOffice(office, offices);
    }

    /**
     * ??truefalse
    * @Title: findUserByOffice
    * @Description: TODO(????)
    * @param @param offices
    * @param @return    
    * @return boolean    
    * @throws
     */
    public boolean findUserByOffice(List<Office> offices) {
        List<User> users = userDao.findByOffices(offices);
        if (users.size() > 0) {
            return true;
        }
        return false;
    }

    /**
     * ??CA
    * @Title: updateRoleByOffice
    * @Description: TODO(????)
    * @param @param offices    
    * @return void    
    * @throws
     */
    public void updateRoleByOffice(List<Office> offices) {
        Office company = new Office();
        company.setId(1L);
        roleDao.updateOffice(company, offices);
    }

    /**
     * ???
    * @Title: deleteRoleOffice
    * @Description: TODO(????)
    * @param     
    * @return void    
    * @throws
     */
    public void deleteRoleOffice(List<Office> offices) {
        for (Office office : offices) {
            Query query = officeDao
                    .createSqlQuery("delete sys_role_office where office_id = '" + office.getId() + "'");
        }
    }

    public boolean findRoleByOffice(List<Office> offices) {
        List<Role> list = roleDao.findByOffice(offices);
        if (list.size() > 0) {
            return true;
        }
        return false;
    }
}