package com.huatek.frame.base.service.impl;

import cn.hutool.core.util.StrUtil;
import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.huatek.frame.base.dto.DictionnaireDetailDTO;
import com.huatek.frame.base.entity.Dictionnaire;
import com.huatek.frame.base.entity.DictionnaireDetail;
import com.huatek.frame.base.mapper.DictionnaireDetailDao;
import com.huatek.frame.base.mapper.DictionnaireDetailMapper;
import com.huatek.frame.base.service.DictionnaireDetailService;
import com.huatek.frame.base.util.Constants;
import com.huatek.frame.base.vo.DictionnaireDetailVO;
import com.huatek.torch.frame.tools.ConstantUtil;
import com.huatek.torch.frame.tools.ResultUtil;
import com.huatek.torch.util.tools.HuatekTools;
import com.huatek.torch.util.uuid.Uuid;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * 系统_字典明细 ServiceImpl
 *
 * @author key_dong
 * @date 2018-7-11 14:03:46
 */
@Component
@Service(interfaceClass = DictionnaireDetailService.class)
@Transactional(rollbackFor = Exception.class)
public class DictionnaireDetailServiceImpl implements DictionnaireDetailService {

	@Autowired
	private DictionnaireDetailMapper dictionnaireDetailMapper;

	@Autowired
	private DictionnaireDetailDao dictionnaireDetailDao;

	@Override
	public Map<String, Object> findDictionnaireDetailPage(DictionnaireDetailDTO dto) {
		PageHelper.startPage(dto.getPage(), dto.getLimit());
		dto.setDeleted(Constants.DEFAULT_NO);
		Page<DictionnaireDetailVO> dictionnaireDetails = dictionnaireDetailMapper.selectDictionnaireDetailPage(dto);
		return ResultUtil.put(ConstantUtil.REQUEST_SUCCESS, dictionnaireDetails.getTotal(), "",
				dictionnaireDetails.getResult());
	}

	@Override
	public Map<String, Object> addDictionnaireDetail( DictionnaireDetail entity) {
		entity.setId(Uuid.getUUID());
		entity.setDeleted(Constants.DEFAULT_NO);
		dictionnaireDetailDao.add(entity);
		return ResultUtil.put(ConstantUtil.REQUEST_SUCCESS, "", "");
	}

	@Override
	public Map<String, Object> findDictionnaireDetail(String id) {
		DictionnaireDetailVO vo = new DictionnaireDetailVO();
		if (!HuatekTools.isEmpty(id)) {
			DictionnaireDetail entity = dictionnaireDetailDao.get(id);
			BeanUtils.copyProperties(entity, vo);
		}
		return ResultUtil.put(ConstantUtil.REQUEST_SUCCESS, "", vo);
	}

	@Override
	public Map<String, Object> updateDictionnaireDetail( DictionnaireDetail detail) {
		dictionnaireDetailDao.updateLocal(detail);
		return ResultUtil.put(ConstantUtil.REQUEST_SUCCESS, "", "");
	}

	@Override
	public Map<String, Object> deleteDictionnaireDetail(String[] ids) {
		for (String id : ids) {
			DictionnaireDetail detail = new DictionnaireDetail();
			detail.setDeleted(Constants.DEFAULT_YES);
			detail.setId(id);
			dictionnaireDetailDao.updateLocal(detail);
		}
		return ResultUtil.put(ConstantUtil.REQUEST_SUCCESS, "", "");
	}

	@Override
	public DictionnaireDetailVO findByUnit(String unit, String dictKey){
		return dictionnaireDetailMapper.findByUnit(unit, dictKey);
	}

	@Override
	public DictionnaireDetailVO findByDCode(String dCode, String dictKey){
		return dictionnaireDetailMapper.findByDCode(dCode, dictKey);
	}

	@Override
	public DictionnaireDetailVO findByValue(String pId, String value){
		return dictionnaireDetailMapper.findByValue(pId, value);
	}

	@Override
	public DictionnaireDetailDTO findMaxDcodeByCode(String dictKey){
		return dictionnaireDetailMapper.findMaxDcodeByCode(dictKey);
	}

	@Override
	public DictionnaireDetailDTO findMaxDcodeByPId(String pId){
		return dictionnaireDetailMapper.findMaxDcodeByPId(pId);
	}

	@Override
	public int insert(DictionnaireDetail dictionnaireDetail){
		return dictionnaireDetailMapper.insert(dictionnaireDetail);
	}

	@Override
	public DictionnaireDetailVO initDictionnaireDetail(Dictionnaire dictionnaire, String value){
		String pId = dictionnaire.getId();
		DictionnaireDetailVO dictionnaireDetailVO = this.findByValue(pId, value);
		if(dictionnaireDetailVO == null){
			dictionnaireDetailVO = new DictionnaireDetailVO();
			DictionnaireDetailDTO dictionnaireDetailDTO = this.findMaxDcodeByPId(pId);
			if(dictionnaireDetailDTO != null && StrUtil.isNotEmpty(dictionnaireDetailDTO.getDcode())){
				String dCode = String.valueOf(Long.valueOf(dictionnaireDetailDTO.getDcode()) + 1);
				if(dCode.length() < 2){
					dictionnaireDetailVO.setDcode("0" + dCode);
				}else {
					dictionnaireDetailVO.setDcode(dCode);
				}
			}else {
				dictionnaireDetailVO.setDcode("01");
			}
			dictionnaireDetailVO.setId(Uuid.getUUID());
			dictionnaireDetailVO.setPid(pId);
			dictionnaireDetailVO.setDname(value);
			dictionnaireDetailVO.setDeleted(Constants.DEFAULT_NO);

			DictionnaireDetail dictionnaireDetail = new DictionnaireDetail();
			BeanUtils.copyProperties(dictionnaireDetailVO, dictionnaireDetail);
			this.insert(dictionnaireDetail);
		}
		return dictionnaireDetailVO;
	}

	@Override
	public Map<String, Object> findByCode(String code){
		List<DictionnaireDetailVO> list = dictionnaireDetailMapper.findByCode(code);
		return ResultUtil.put(ConstantUtil.REQUEST_SUCCESS, "", list);
	}

	@Override
	public String findUnit(String code , String dCode){
		return dictionnaireDetailMapper.findUnit(code,dCode);
	}

	@Override
	public List<DictionnaireDetailVO> findByLikeDName(String dictKey, String dName){
		return dictionnaireDetailMapper.findByLikeDName(dictKey, dName);
	}
}
