package com.lantone.daqe.facade.base;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lantone.common.exception.Asserts;
import com.lantone.common.util.ListUtil;
import com.lantone.common.util.StringUtil;
import com.lantone.daqe.entity.DrugInfo;
import com.lantone.daqe.service.impl.DrugInfoServiceImpl;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * <p>
 * 表名：hos_drug_info 业务类
 * </p>
 */
@Component
public class DrugInfoFacade extends DrugInfoServiceImpl {

    /**
     * 判断即将新增/修改的药品是否与已存在的其他药品存在冲突
     *
     * @param drugInfo 即将新增/修改的药品，有id是修改，无id是新增。
     * @return true-存在冲突，false-无冲突
     */
    public boolean isExist(DrugInfo drugInfo) {
        if (drugInfo.getHospitalId() == null
                || StringUtil.isBlank(drugInfo.getName())) {
            Asserts.fail("判断即将新增/修改的药品是否与已存在的其他药品存在冲突时，hospitalId、code、name不能为空！");
        }
        QueryWrapper<DrugInfo> drugInfoQueryWrapper = new QueryWrapper<>();
        drugInfoQueryWrapper.eq("hospital_id", drugInfo.getHospitalId());
        drugInfoQueryWrapper.eq(StringUtil.isNotBlank(drugInfo.getCode()),"code", drugInfo.getCode());
        drugInfoQueryWrapper.eq("name", drugInfo.getName());
        List<DrugInfo> drugInfoList = list(drugInfoQueryWrapper);
        if (drugInfo.getId() == null) {
            return ListUtil.isNotEmpty(drugInfoList);
        } else {
            return drugInfoList.size() > 1
                    || (drugInfoList.size() == 1
                    && drugInfoList.get(0).getId().longValue() != drugInfo.getId().longValue());
        }
    }

    /**
     * 即将新增/修改的药品与已存在的其他药品存在冲突时，抛出异常
     *
     * @param drugInfo 即将新增/修改的药品，有id是修改，无id是新增。
     */
    public void assertIsExist(DrugInfo drugInfo) {
        if (isExist(drugInfo)) {
            Asserts.fail("与已存在的其他药品存在冲突！");
        }
    }

}