/**
 * 文件名:SysDicNameService.java 版本信息: 日期:2018年5月16日 Copyright 足下 Corporation 2018 版权所有
 */
package org.danyuan.application.softm.dic.service;

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

import org.danyuan.application.common.base.BaseService;
import org.danyuan.application.common.base.BaseServiceImpl;
import org.danyuan.application.common.base.Pagination;
import org.danyuan.application.softm.dic.dao.SysDicKeyListDao;
import org.danyuan.application.softm.dic.dao.SysDicNameDao;
import org.danyuan.application.softm.dic.po.SysDicKeyList;
import org.danyuan.application.softm.dic.po.SysDicName;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;

/**
 * 文件名 : SysDicNameService.java
 * 包 名 : com.shumeng.application.softm.dic.service
 * 描 述 : TODO(用一句话描述该文件做什么)
 * 机能名称:
 * 技能ID :
 * 作 者 : Administrator
 * 时 间 : 2018年5月16日 上午9:35:09
 * 版 本 : V1.0
 */
@Service
public class SysDicNameService extends BaseServiceImpl<SysDicName> implements BaseService<SysDicName> {
	@Autowired
	private SysDicNameDao		sysDicNameDao;
	@Autowired
	private SysDicKeyListDao	sysDicKeyListDao;

	/**
	 * 方法名 : page
	 * 功 能 : TODO(这里用一句话描述这个方法的作用)
	 * 参 数 : @param pageNumber
	 * 参 数 : @param pageSize
	 * 参 数 : @param info
	 * 参 数 : @param map
	 * 参 数 : @param order
	 * 参 数 : @return
	 * 参 考 : @see com.shumeng.application.common.base.BaseService#page(int, int, java.lang.Object, java.util.Map, org.springframework.data.domain.Sort.Order[])
	 * 作 者 : Administrator
	 */

	@Override
	public Page<SysDicName> page(Pagination<SysDicName> vo) {
		List<Order> orders = new ArrayList<>();
		if (vo.getSortName() != null) {
			Order order;
			if (vo.getSortOrder().equals("desc")) {
				order = Order.desc(vo.getSortName());
			} else {
				order = Order.asc(vo.getSortName());
			}
			orders.add(order);
		} else {
			Order order = new Order(Direction.DESC, "createTime");
			orders.add(order);
		}
		if (vo.getInfo() == null) {
			vo.setInfo(new SysDicName());
		}

		Sort sort = Sort.by(orders);
		PageRequest request = PageRequest.of(vo.getPageNumber() - 1, vo.getPageSize(), sort);
		return sysDicNameDao.findAll((Specification<SysDicName>) (root, query, cb) -> {
			if (vo.getInfo().getName() != null) {
				return cb.like(root.get("name").as(String.class), "%" + vo.getInfo().getName() + "%");
			} else {
				return null;
			}
		}, request);
	}

	/**
	 * 方法名: checkCode
	 * 功 能: TODO(这里用一句话描述这个方法的作用)
	 * 参 数: @param url
	 * 参 数: @return
	 * 返 回: boolean
	 * 作 者 : Administrator
	 * @throws
	 */
	public boolean checkCode(String code) {
		SysDicName info = new SysDicName();
		info.setCode(code);
		Example<SysDicName> example = Example.of(info);
		List<SysDicName> list = sysDicNameDao.findAll(example);
		if (list.size() == 0) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 方法名: findkeyList
	 * 功 能: TODO(这里用一句话描述这个方法的作用)
	 * 参 数: @param code
	 * 参 数: @return
	 * 返 回: boolean
	 * 作 者 : Administrator
	 * @throws
	 */
	public List<SysDicKeyList> findkeyList(SysDicName info) {
		Example<SysDicName> example = Example.of(info);
		Optional<SysDicName> reinfo = sysDicNameDao.findOne(example);
		if (reinfo.isPresent()) {
			info = reinfo.get();
			SysDicKeyList key = new SysDicKeyList();
			key.setNameUuid(info.getUuid());

			Example<SysDicKeyList> ke = Example.of(key);
			Order[] order = { new Order(Direction.ASC, "keyOrder"), new Order(Direction.ASC, "createTime") };
			Sort sort = Sort.by(order);
			return sysDicKeyListDao.findAll(ke, sort);
		} else {
			return null;
		}
	}

}