package com.hongqiang.shop.modules.user.service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.hongqiang.shop.common.base.persistence.Page;
import com.hongqiang.shop.common.service.BaseService;
import com.hongqiang.shop.common.utils.Pageable;
import com.hongqiang.shop.common.utils.Principal;
import com.hongqiang.shop.modules.entity.Admin;
import com.hongqiang.shop.modules.entity.Role;
import com.hongqiang.shop.modules.user.dao.AdminDao;
@Service("adminServiceImpl")
public class AdminServiceImpl extends BaseService implements AdminService {
@Autowired
private AdminDao adminDao;
@Transactional(readOnly = true)
public Admin find(Long id) {
return this.adminDao.findById(id);
}
@Transactional(readOnly = true)
public Page<Admin> findPage(Pageable pageable) {
return this.adminDao.findPage(pageable);
}
@Transactional
@CacheEvict(value = { "authorization" }, allEntries = true)
public void save(Admin admin) {
this.adminDao.persist(admin);
}
@Transactional
@CacheEvict(value = { "authorization" }, allEntries = true)
public void delete(Long id) {
this.adminDao.delete(id);
}
@Transactional
@CacheEvict(value = { "authorization" }, allEntries = true)
public void delete(Long[] ids) {
if (ids != null)
for (Long localSerializable : ids)
this.adminDao.delete(localSerializable);
}
@Transactional
@CacheEvict(value = { "authorization" }, allEntries = true)
public void delete(Admin admin) {
this.adminDao.delete(admin);
}
@Transactional
@CacheEvict(value = { "authorization" }, allEntries = true)
public Admin update(Admin admin) {
return (Admin) this.adminDao.merge(admin);
}
@Transactional
@CacheEvict(value = { "authorization" }, allEntries = true)
public Admin update(Admin admin, String[] ignoreProperties){
return (Admin) this.adminDao.update(admin, ignoreProperties);
}
@Transactional(readOnly = true)
public Long count() {
return (Long) this.adminDao.count();
}
@Transactional(readOnly = true)
public boolean usernameExists(String username) {
return this.adminDao.usernameExists(username);
}
@Transactional(readOnly = true)
public Admin findByUsername(String username) {
return this.adminDao.findByUsername(username);
}
@Transactional(readOnly = true)
public List<String> findAuthorities(Long id) {
ArrayList<String> localArrayList = new ArrayList<String>();
Admin localAdmin = (Admin) this.adminDao.findById(id);
if (localAdmin != null) {
Iterator<Role> localIterator = localAdmin.getRoles().iterator();
while (localIterator.hasNext()) {
Role localRole = (Role) localIterator.next();
localArrayList.addAll(localRole.getAuthorities());
}
}
return localArrayList;
}
@Transactional(readOnly = true)
public boolean isAuthenticated() {
Subject localSubject = SecurityUtils.getSubject();
if (localSubject != null)
return localSubject.isAuthenticated();
return false;
}
@Transactional(readOnly = true)
public Admin getCurrent() {
Subject localSubject = SecurityUtils.getSubject();
if (localSubject != null) {
Principal localPrincipal = (Principal) localSubject.getPrincipal();
if (localPrincipal != null)
return (Admin) this.adminDao.findById(localPrincipal.getId());
}
return null;
}
@Transactional(readOnly = true)
public String getCurrentUsername() {
Subject localSubject = SecurityUtils.getSubject();
if (localSubject != null) {
Principal localPrincipal = (Principal) localSubject.getPrincipal();
if (localPrincipal != null)
return localPrincipal.getUsername();
}
return null;
}
}