You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
virtual-patient/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseaseServiceImpl.java

124 lines
4.3 KiB
Java

package com.supervision.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.dto.UploadDiseaseDTO;
import com.supervision.model.Disease;
import com.supervision.service.DiseaseService;
import com.supervision.mapper.DiseaseMapper;
import com.supervision.util.StringChartUtil;
import com.supervision.util.UserUtil;
import com.supervision.vo.manage.DiseaseReqVo;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
/**
* @author flevance
* @description 针对表【vp_disease(疾病名称)】的数据库操作Service实现
* @createDate 2023-10-20 17:19:21
*/
@Service
public class DiseaseServiceImpl extends ServiceImpl<DiseaseMapper, Disease>
implements DiseaseService {
@Override
public List<Disease> listDiseaseNestIfComposite(String id) {
Assert.notEmpty(id, "id is not allow empty");
Disease disease = super.getById(id);
if (!isCompositeDisease(disease) || CollUtil.isEmpty(disease.getContainDiseaseIds())) {
return CollUtil.newArrayList(disease);
}
return super.listByIds(disease.getContainDiseaseIds());
}
@Override
public IPage<? extends Disease> queryPageList(Integer pageNum, Integer pageSize, DiseaseReqVo diseaseReqVo) {
return super.getBaseMapper().queryPageList(new Page<>(pageNum, pageSize), diseaseReqVo);
}
@Override
public List<String> queryAllDiseaseListByDiseaseId(List<String> diseaseId) {
if (CollUtil.isEmpty(diseaseId)) {
return new ArrayList<>();
}
return this.baseMapper.queryAllDiseaseListByDiseaseId(diseaseId);
}
/**
* 是否是复合疾病
*
* @param disease 疾病
* @return true 是复合疾病 false 不是复合疾病
*/
private boolean isCompositeDisease(Disease disease) {
if (Objects.isNull(disease)) {
return false;
}
return isCompositeDisease(disease.getDiseaseType());
}
private boolean isCompositeDisease(Integer integer) {
if (Objects.isNull(integer)) {
return false;
}
return Integer.valueOf(1).equals(integer);
}
@Override
public List<String> queryDiseaseListByDiseaseCode(List<String> codeId) {
List<String> diseaseIdList = new ArrayList<>();
List<Disease> diseaseList = this.lambdaQuery()
.select(Disease::getId)
.in(Disease::getCode, codeId)
.list();
for (Disease disease : diseaseList) {
String diseaseId = disease.getId();
diseaseIdList.add(diseaseId);
}
return diseaseIdList;
}
@Override
public Disease saveDisease(List<UploadDiseaseDTO> uploadDiseaseResVos) {
UploadDiseaseDTO uploadDiseaseDTO = uploadDiseaseResVos.get(0);
// 保存疾病
String categoryCode = uploadDiseaseDTO.getCategoryCode();
String diseaseClassificationName = uploadDiseaseDTO.getDiseaseClassificationName();
String commonName = uploadDiseaseDTO.getCommonName();
String mainSymptom = uploadDiseaseDTO.getMainSymptom();
int diseaseType = StringChartUtil.countChar(categoryCode, '/') > 0 ? 1 : 0;
Disease disease = new Disease();
disease.setCode(categoryCode);
disease.setDiseaseName(diseaseClassificationName);
disease.setDiseaseNameAlias(commonName);
disease.setStatus(0);
disease.setDiseaseType(diseaseType);
if (diseaseType == 1) {
List<String> codeIdList = Arrays.stream(categoryCode.split("/")).toList();
List<String> listByDiseaseCode = queryDiseaseListByDiseaseCode(codeIdList);
Assert.isTrue(listByDiseaseCode.size() != codeIdList.size(), "请检查复合疾病中的单一疾病是否存在");
disease.setContainDiseaseIds(listByDiseaseCode);
}
disease.setSymptom(mainSymptom);
disease.setCreateUserId(UserUtil.getUser().getId());
disease.setUpdateUserId(UserUtil.getUser().getId());
save(disease);
return disease;
}
}