package com.lantone.web.med;

import com.diagbot.dto.RespDTO;
import com.lantone.dto.med.IndexBatchDTO;
import com.lantone.dto.med.KllisDetailDTO;
import com.lantone.dto.med.RetrievalDTO;
import com.lantone.facade.med.KlConceptFacade;
import com.lantone.facade.med.MedRetrievalFacade;
import com.lantone.vo.med.ConceptVO;
import com.lantone.vo.med.FilterVO;
import com.lantone.vo.med.IndexByApprovalVO;
import com.lantone.vo.med.KllisDetailVO;
import com.lantone.vo.med.RetrievalVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * @Description:
 * @Author:zhaops
 * @time: 2020/8/12 16:45
 */
@ApiIgnore
@RestController
@RequestMapping("/retrieval")
@Api(value = "术语检索相关API", tags = { "术语检索相关API" })
@SuppressWarnings("unchecked")
public class MedRetrievalController {

    @Autowired
    private KlConceptFacade klConceptFacade;
    @Autowired
    private MedRetrievalFacade medRetrievalFacade;

    @ApiOperation(value = "术语检索[zhaops]",
            notes = "type： 类型：1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、9-症状、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、15-药品剂型、16-给药途径、17-物理治疗 <br>" +
                    "inputStr： 检索内容<br>" +
                    "defaultList： 默认展示 0:不展示，1：展示全部<br>" +
                    "notInIds： 排除项标准术语id<br>" +
                    "sex： 性别：1-男、2-女、3-通用 <br>" +
                    "age： 年龄<br>")
    @PostMapping("/index")
    public RespDTO<RetrievalDTO> index(@Valid @RequestBody RetrievalVO retrievalVO) {
        RetrievalDTO data = medRetrievalFacade.index(retrievalVO);
        return RespDTO.onSuc(data);
    }

    @ApiOperation(value = "术语批量查询[zhaops]",
            notes = "type： 类型：1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、15-药品剂型、16-给药途径<br>" +
                    "ids： 术语id列表<br>" +
                    "names： 术语列表<br>" +
                    "source： 数据来源：-1-id匹配、1-标准词、2-同义词、3-编码、4-历史数据、5-相似词、99-数据迁移<br>")
    @PostMapping("/getConceptNames")
    public RespDTO<List<IndexBatchDTO>> getConceptNames(@Valid @RequestBody ConceptVO conceptVO) {
        List<IndexBatchDTO> data = klConceptFacade.getConceptNames(conceptVO);
        return RespDTO.onSuc(data);
    }

    @ApiOperation(value = "化验小项术语批量查询获取范围[gaodm]",
            notes = "names： 术语列表<br>")
    @PostMapping("/getLisDetaisByNames")
    public RespDTO<Map<String, KllisDetailDTO>> getLisDetaisByNames(@RequestBody KllisDetailVO kllisDetailVO) {
        return RespDTO.onSuc(klConceptFacade.getLisDetaisByNamesFac(kllisDetailVO));
    }

    @ApiOperation(value = "术语关联医学术语检索[zhaops]",
            notes = "inputStr： 检索内容<br>")
    @PostMapping("/filter")
    public RespDTO<List<IndexBatchDTO>> filter(@Valid @RequestBody FilterVO filterVO) {
        List<IndexBatchDTO> data = klConceptFacade.filter(filterVO);
        return RespDTO.onSuc(data);
    }

    /**
     * @param indexByApprovalVO
     * @return
     */
    @ApiOperation(value = "术语关联医学术语检索[zhaops]",
            notes = "approvalList： 国药准字列表<br>")
    @PostMapping("/indexByApproval")
    public RespDTO<List<IndexBatchDTO>> indexByApproval(@Valid @RequestBody IndexByApprovalVO indexByApprovalVO) {
        List<IndexBatchDTO> data = klConceptFacade.indexByApproval(indexByApprovalVO);
        return RespDTO.onSuc(data);
    }
}