package com.diagbot.facade;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.diagbot.dto.TemplateInfoDTO;
import com.diagbot.entity.TemplateInfo;
import com.diagbot.enums.IsDeleteEnum;
import com.diagbot.exception.CommonErrorCode;
import com.diagbot.exception.CommonException;
import com.diagbot.service.impl.TemplateInfoServiceImpl;
import com.diagbot.util.BeanUtil;
import com.diagbot.util.DateUtil;
import com.diagbot.util.GsonUtil;
import com.diagbot.vo.TemplateInfoRevampVO;
import com.diagbot.vo.TemplateInfoVO;
import com.diagbot.vo.TemplateInfosIdVO;
import com.diagbot.vo.TemplateInfosVO;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author wangfeng
 * @Description: 病历模板
 * @date 2018年11月16日 上午11:24:36
 */
@Component
public class TemplateInfoFacade extends TemplateInfoServiceImpl {

    /**
     * @param templateInfoVO
     * @return 医生病历模板信息
     */
    public List<TemplateInfoDTO> findByDoctorIdTemplates(TemplateInfoVO templateInfoVO) {
		//根据传入的医生id和部门id还有医院id在数据表中查出相应的模板数据
		
        QueryWrapper<TemplateInfo> templateInfoQuery = new QueryWrapper<>();
        Map<String, Object> mapAll = new HashMap<>();
        mapAll.put("hospital_dept_id", templateInfoVO.getHospitalDeptId());
        mapAll.put("doctor_id", templateInfoVO.getDoctorId());
        mapAll.put("hospital_id", templateInfoVO.getHospitalId());
        mapAll.put("is_deleted", IsDeleteEnum.N.getKey());
        mapAll.put("type", templateInfoVO.getType());
        if(templateInfoVO.getSex()!=null){
        	templateInfoQuery.allEq(mapAll).in("sex", 3,templateInfoVO.getSex()).orderByDesc("gmt_create");
        }else {
        	templateInfoQuery.allEq(mapAll).orderByDesc("gmt_create");
		} 
        List<TemplateInfoDTO> data = new ArrayList<TemplateInfoDTO>();
        List<TemplateInfo> datas = list(templateInfoQuery);
		//过滤
        data = BeanUtil.listCopyTo(datas, TemplateInfoDTO.class);

        return data;
    }

    /**
     * 根据模板id 修改模板名
     *
     * @param templateInfoRevampVO
     * @return
     */
    public boolean updateByIdUsName(TemplateInfoRevampVO templateInfoRevampVO) {
        //1.先判断数据是否存在有效
        QueryWrapper<TemplateInfo> templateInfoFand = new QueryWrapper<>();
        templateInfoFand.eq("is_deleted", IsDeleteEnum.N.getKey())
                .eq("id", templateInfoRevampVO.getId());
        int sum = count(templateInfoFand);
        if (sum == 0) {
            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该模板不存在");
        }
        //2.再判断该医生下模板名是否重复重在
        QueryWrapper<TemplateInfo> templates = new QueryWrapper<>();
        Map<String, Object> mapAll = new HashMap<>();
        mapAll.put("hospital_dept_id", templateInfoRevampVO.getHospitalDeptId());
        mapAll.put("doctor_id", templateInfoRevampVO.getDoctorId());
        mapAll.put("hospital_id", templateInfoRevampVO.getHospitalId());
        mapAll.put("is_deleted", IsDeleteEnum.N.getKey());
        mapAll.put("name", templateInfoRevampVO.getModeName());
        mapAll.put("type", templateInfoRevampVO.getType());
        templates.allEq(mapAll);
        TemplateInfo datas = getOne(templates);
        if (datas != null) {
            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该模板名已存在");
        }
        //3.修改表数据的模板名字
        TemplateInfo templateInfo = new TemplateInfo();
        templateInfo.setId(templateInfoRevampVO.getId());//模板id
        templateInfo.setName(templateInfoRevampVO.getModeName());//模板名称
        templateInfo.setGmtModified(DateUtil.now());//修改时间
        boolean res = updateById(templateInfo);
        if (!res) {
            throw new CommonException(CommonErrorCode.UPDATE_INFO_FAIL);
        }

        return res;
    }

    /**
     * 保存模板
     *
     * @param templateInfosVO
     * @return
     */
    public boolean saveTemplateInfo(TemplateInfosVO templateInfosVO) {
        //1.判断该医生下是否存在模板名相同的数据
        TemplateInfo templateInfo = new TemplateInfo();
        QueryWrapper<TemplateInfo> templateInfoFand = new QueryWrapper<>();
        Map<String, Object> mapAll = new HashMap<>();
        mapAll.put("hospital_dept_id", templateInfosVO.getHospitalDeptId());
        mapAll.put("doctor_id", templateInfosVO.getDoctorId());
        mapAll.put("hospital_id", templateInfosVO.getHospitalId());
        mapAll.put("is_deleted", IsDeleteEnum.N.getKey());
        mapAll.put("name", templateInfosVO.getModeName());
        mapAll.put("type", templateInfosVO.getModeType());
        
        templateInfoFand.allEq(mapAll);
        int sum = count(templateInfoFand);
        if (sum != 0) {
            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该模板名存在");
        }
        //2.获取传入的数据，保存到数据表中。
        templateInfo.setCreator(templateInfosVO.getDoctorId().toString());//创建人id
        templateInfo.setDoctorId(templateInfosVO.getDoctorId());//医生id
        templateInfo.setGmtCreate(DateUtil.now());//创建时间
        templateInfo.setHospitalDeptId(templateInfosVO.getHospitalDeptId());//部门id
        templateInfo.setHospitalId(templateInfosVO.getHospitalId());//医院id
        templateInfo.setSex(templateInfosVO.getSex());
        templateInfo.setPreview(GsonUtil.toJson(templateInfosVO.getPreview()));//文本的展示
        templateInfo.setDataJson(templateInfosVO.getDataJson());//页面json
        templateInfo.setName(templateInfosVO.getModeName());//模板名称
        templateInfo.setType(templateInfosVO.getModeType());//模板类型
        boolean res = save(templateInfo);
        if (!res) {
            throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED);
        }

        return res;
    }

    /**
     * 根据模板id批量删除模板
     *
     * @param templateInfosIdVO
     * @return
     */
    public boolean cancelTemplateInfo(TemplateInfosIdVO templateInfosIdVO) {
        //1.获取传入的ids数据
        String ids = templateInfosIdVO.getIds();
        //2.截取到最后一个
        String substring = ids.substring(0, ids.length());
        //System.out.println(substring);
        //3.以逗号分割
        String[] splitIds = substring.split(",");
        //把分割的id数据传入对象中，在表中批量删除
        UpdateWrapper<TemplateInfo> templateInfoNew = new UpdateWrapper<>();
        templateInfoNew.in("id", splitIds)
                .eq("is_deleted", IsDeleteEnum.N.getKey())
                .set("is_deleted", IsDeleteEnum.Y.getKey())
                //.set("modifier",UserUtils.getCurrentPrincipleID())
                .set("gmt_modified", DateUtil.now());
        boolean res = update(new TemplateInfo(), templateInfoNew);

        return res;
    }

}
