|
@@ -0,0 +1,233 @@
|
|
|
+package com.kcim.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.kcim.constants.NumberConstant;
|
|
|
+import com.kcim.controller.request.QualificationHisItemMapRequest;
|
|
|
+import com.kcim.dao.model.HisItemDic;
|
|
|
+import com.kcim.dao.repository.HisItemDicRepository;
|
|
|
+import com.kcim.dao.repository.QualificationRepository;
|
|
|
+import com.kcim.dao.repository.QualificationTypeRepository;
|
|
|
+import com.kcim.exception.MedicalException;
|
|
|
+import com.kcim.util.BaseUtil;
|
|
|
+import com.kcim.util.PageUtils;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+
|
|
|
+import com.kcim.dao.mapper.QualificationMapper;
|
|
|
+import com.kcim.dao.model.QualificationType;
|
|
|
+import com.kcim.dao.model.Qualification;
|
|
|
+import com.kcim.service.QualificationService;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+@Service("QualificationService")
|
|
|
+@AllArgsConstructor
|
|
|
+@Slf4j
|
|
|
+public class QualificationServiceImpl extends ServiceImpl<QualificationMapper, Qualification> implements QualificationService {
|
|
|
+
|
|
|
+ QualificationTypeRepository qualificationTypeRepository;
|
|
|
+ QualificationRepository qualificationRepository;
|
|
|
+ HisItemDicRepository hisItemDicRepository;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询资质分类列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<QualificationType> getQualificationTypeList(String queryCondition) {
|
|
|
+ LambdaQueryWrapper<QualificationType> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+
|
|
|
+ //资质编码或名称作为查询条件
|
|
|
+ if(!StringUtils.isEmpty(queryCondition)){
|
|
|
+ queryWrapper.like(QualificationType::getCode, queryCondition)
|
|
|
+ .or()
|
|
|
+ .like(QualificationType::getName, queryCondition);
|
|
|
+ }
|
|
|
+
|
|
|
+ queryWrapper.eq(QualificationType::getHospId, BaseUtil.getCurrentLoginHospId());
|
|
|
+ queryWrapper.eq(QualificationType::getDelFlag, NumberConstant.ZERO);
|
|
|
+ queryWrapper.orderByAsc(QualificationType::getSort);
|
|
|
+ return qualificationTypeRepository.list(queryWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增资质类型
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void addQualificationType(QualificationType request) {
|
|
|
+ checkQualificationType(request);
|
|
|
+ request.setCreateUser(String.valueOf(BaseUtil.getCurrentUser().getId()));
|
|
|
+ request.setCreateTime(new Date());
|
|
|
+ request.setHospId(BaseUtil.getCurrentLoginHospId());
|
|
|
+ qualificationTypeRepository.save(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除资质类型
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public QualificationType deleteQualificationType(Integer id) {
|
|
|
+ QualificationType qualificationType = qualificationTypeRepository.getById(id);
|
|
|
+ qualificationType.setDeleteUser(String.valueOf(BaseUtil.getCurrentUser().getId()));
|
|
|
+ qualificationType.setDeleteTime(new Date());
|
|
|
+ qualificationTypeRepository.updateById(qualificationType);
|
|
|
+ qualificationTypeRepository.removeById(id);
|
|
|
+ return qualificationType;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 编辑资质类型
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void editQualificationType(QualificationType request) {
|
|
|
+ Integer id = request.getId();
|
|
|
+ QualificationType qualificationType = deleteQualificationType(id);
|
|
|
+ request.setHospId(BaseUtil.getCurrentLoginHospId());
|
|
|
+ request.setUpdateUser(String.valueOf(BaseUtil.getCurrentUser().getId()));
|
|
|
+ request.setUpdateTime(new Date());
|
|
|
+ request.setCreateUser(qualificationType.getCreateUser());
|
|
|
+ request.setCreateTime(qualificationType.getCreateTime());
|
|
|
+ qualificationTypeRepository.save(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void checkQualificationType(QualificationType request) {
|
|
|
+ LambdaQueryWrapper<QualificationType> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(QualificationType::getHospId,BaseUtil.getCurrentLoginHospId());
|
|
|
+ queryWrapper.eq(QualificationType::getCode,request.getCode());
|
|
|
+ List<QualificationType> list = qualificationTypeRepository.list(queryWrapper);
|
|
|
+ if(!CollectionUtils.isEmpty(list)){
|
|
|
+ throw new MedicalException("资质类型代码【"+request.getCode()+"】已存在,请调整后再保存");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询资质列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Object getQualificationList(String name, String qualificationTypeCode, String operationLevelCode, Integer techFlag, Integer operationFlag, Integer enableFlag, Integer current, Integer pageSize) {
|
|
|
+ LambdaQueryWrapper<Qualification> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+
|
|
|
+ //资质名称过滤
|
|
|
+ if(!StringUtils.isEmpty(name)){
|
|
|
+ queryWrapper.like(Qualification::getName, name);
|
|
|
+ }
|
|
|
+
|
|
|
+ //资质分类过滤
|
|
|
+ if(!qualificationTypeCode.equals("0")) //不是”全部“节点
|
|
|
+ {
|
|
|
+ //资质分类字典
|
|
|
+ List<QualificationType> typeList = getQualificationTypeList("");
|
|
|
+ //资质分类字典的下级所有递归根节点的code
|
|
|
+ List<String> list = getQualificationTypeCodeRecursion(typeList,qualificationTypeCode);
|
|
|
+ queryWrapper.in(Qualification::getQualificationTypeCode, list);
|
|
|
+ }
|
|
|
+
|
|
|
+ //手术级别过滤
|
|
|
+ if(!StringUtils.isEmpty(operationLevelCode)){
|
|
|
+ queryWrapper.eq(Qualification::getOperationLevelCode, operationLevelCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ //医疗技术过滤
|
|
|
+ if(techFlag == 1){
|
|
|
+ queryWrapper.eq(Qualification::getTechFlag, techFlag);
|
|
|
+ }
|
|
|
+
|
|
|
+ //手术过滤
|
|
|
+ if(operationFlag == 1){
|
|
|
+ queryWrapper.eq(Qualification::getOperationFlag, operationFlag);
|
|
|
+ }
|
|
|
+
|
|
|
+ //启用过滤
|
|
|
+ if(enableFlag == 1){
|
|
|
+ queryWrapper.eq(Qualification::getEnableFlag, enableFlag);
|
|
|
+ }
|
|
|
+
|
|
|
+ queryWrapper.eq(Qualification::getHospId, BaseUtil.getCurrentLoginHospId());
|
|
|
+ queryWrapper.eq(Qualification::getDelFlag, NumberConstant.ZERO);
|
|
|
+
|
|
|
+ Page<Qualification> page = qualificationRepository.getPage(current,pageSize,queryWrapper);
|
|
|
+ if(CollectionUtils.isEmpty(page.getRecords())){
|
|
|
+ return new PageUtils(new ArrayList<>(), NumberConstant.ZERO,pageSize,current);
|
|
|
+ }
|
|
|
+ return new PageUtils(page.getRecords(), Math.toIntExact(page.getTotal()),pageSize,current);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void addQualification(Qualification request) {
|
|
|
+ checkQualification(request);
|
|
|
+ request.setCreateUser(String.valueOf(BaseUtil.getCurrentUser().getId()));
|
|
|
+ request.setCreateTime(new Date());
|
|
|
+ request.setHospId(BaseUtil.getCurrentLoginHospId());
|
|
|
+ qualificationRepository.save(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void editQualification(Qualification request) {
|
|
|
+ Integer id = request.getId();
|
|
|
+ Qualification qualification = deleteQualification(id);
|
|
|
+ request.setHospId(BaseUtil.getCurrentLoginHospId());
|
|
|
+ request.setUpdateUser(String.valueOf(BaseUtil.getCurrentUser().getId()));
|
|
|
+ request.setUpdateTime(new Date());
|
|
|
+ request.setCreateUser(qualification.getCreateUser());
|
|
|
+ request.setCreateTime(qualification.getCreateTime());
|
|
|
+ qualificationRepository.save(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Qualification deleteQualification(Integer id) {
|
|
|
+ Qualification qualification = qualificationRepository.getById(id);
|
|
|
+ qualification.setDeleteUser(String.valueOf(BaseUtil.getCurrentUser().getId()));
|
|
|
+ qualification.setDeleteTime(new Date());
|
|
|
+ qualificationRepository.updateById(qualification);
|
|
|
+ qualificationRepository.removeById(id);
|
|
|
+ return qualification;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void checkQualification(Qualification request) {
|
|
|
+ LambdaQueryWrapper<Qualification> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(Qualification::getHospId,BaseUtil.getCurrentLoginHospId());
|
|
|
+ queryWrapper.eq(Qualification::getCode,request.getCode());
|
|
|
+ List<Qualification> list = qualificationRepository.list(queryWrapper);
|
|
|
+ if(!CollectionUtils.isEmpty(list)){
|
|
|
+ throw new MedicalException("资质代码【"+request.getCode()+"】已存在,请调整后再保存");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 递归获取的资质分类编码的下级编码列表
|
|
|
+ */
|
|
|
+ private List<String> getQualificationTypeCodeRecursion(List<QualificationType> typeList, String qualificationCode){
|
|
|
+
|
|
|
+ List<String> list = new ArrayList<>();
|
|
|
+
|
|
|
+ //父节点为传入节点的节点数
|
|
|
+ long count = typeList.stream().filter(t -> t.getParentCode().equals(qualificationCode)).count();
|
|
|
+
|
|
|
+ //传入的是根节点
|
|
|
+ if(count == 0){
|
|
|
+ list.add(qualificationCode);
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ //传入的不是根节点
|
|
|
+ for(QualificationType type : typeList){
|
|
|
+ //传入节点的直接下级
|
|
|
+ if(type.getParentCode().equals(qualificationCode)){
|
|
|
+ long childCount = typeList.stream().filter(t -> t.getParentCode().equals(type.getCode())).count();
|
|
|
+ //是末级节点
|
|
|
+ if(childCount == 0 && !list.contains(type.getCode())){
|
|
|
+ list.add(type.getCode());
|
|
|
+ }
|
|
|
+ //递归
|
|
|
+ else{
|
|
|
+ list.addAll(getQualificationTypeCodeRecursion(typeList,type.getCode()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+}
|