package com.ruoyi.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.MapUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.domain.*; import com.ruoyi.mapper.ZfDoctorMapper; import com.ruoyi.service.ZAuthorityService; import com.ruoyi.service.ZInfoUserService; import com.ruoyi.service.ZfDoctorService; import com.ruoyi.service.ZfDoctorService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; import static com.ruoyi.constant.MenuAuthority.*; /** *

* 服务实现类 *

* * @author ojq * @since 2023-03-12 */ @Service @Slf4j public class ZfDoctorServiceImpl extends ServiceImpl implements ZfDoctorService { @Resource ZInfoUserService zInfoUserService; @Resource ZfDoctorService zfDoctorService; @Resource ZAuthorityService zAuthorityService; @Override public AjaxResult selectDoctorList(ZfDoctor zfDoctor, Integer pageNum, Integer pageSize) { // LambdaQueryWrapper lqw = buildCondition(zfDoctor); // lqw.orderByDesc(ZfDoctor::getCreateTime); // // Page ZfDoctorPage = new Page<>(pageNum, pageSize); // Page pageResult = page(ZfDoctorPage, lqw); // // HashMap data = MapUtils.getResult(pageResult); // return AjaxResult.success(data); //要查自己家庭的 ZInfoUser myself = zInfoUserService.getMyself(); Long familyId = myself.getFamilyId(); //也要查别人授权的 List authority = zAuthorityService.getAuthority(); List idList = authority.stream().filter(auth -> auth.getAuthority().toString().equals(DOCTOR_LIST)).map(ZAuthority::getFid).collect(Collectors.toList()); //加上自己家庭的id idList.add(familyId); // String familyIds = listFamilyIds(); // String secondFamilyAuthority = listSecondFamilyIds(); LambdaQueryWrapper lqw = buildCondition(zfDoctor, idList); Page zfDoctorPage = new Page<>(pageNum, pageSize); Page pageResult = page(zfDoctorPage, lqw); List beanRecords = pageResult.getRecords();//得到查询出来的数据 List dtoResult = markOwnData(familyId, beanRecords); HashMap data = MapUtils.getResult(pageResult, dtoResult); return AjaxResult.success(data); } @Override public List selectByCondition(ZfDoctor zfDoctor) { // LambdaQueryWrapper lambdaQueryWrapper = buildCondition(zfDoctor); // lambdaQueryWrapper.orderByDesc(ZfDoctor::getCreateTime); // List list = list(lambdaQueryWrapper); // log.info("返回的数据为:{}", list); // return list; //要查自己家庭的 ZInfoUser myself = zInfoUserService.getMyself(); Long familyId = myself.getFamilyId(); //也要查别人授权的 List authority = zAuthorityService.getAuthority(); List idList = authority.stream().filter(auth -> auth.getAuthority().toString().equals(DOCTOR_LIST)).map(ZAuthority::getFid).collect(Collectors.toList()); //加上自己家庭的id idList.add(familyId); LambdaQueryWrapper lambdaQueryWrapper = buildCondition(zfDoctor, idList); List beanRecords = list(lambdaQueryWrapper); log.info("从数据库中查到的为:{}", beanRecords); return markOwnData(familyId, beanRecords); } public List markOwnData(Long familyId,List beanRecords){ return beanRecords.stream().peek( bean -> { if (bean.getFamilyId() == familyId) { bean.setOwnData(1); } else { bean.setOwnData(0); } } ).collect(Collectors.toList()); } @Override public List selectByIds(Long[] ids) { List list = new ArrayList<>(); if (ids.length != 0) list = listByIds(Arrays.asList(ids)); else list = list(); return list; } @Override public AjaxResult importExcel(MultipartFile file) { ExcelUtil util = new ExcelUtil<>(ZfDoctor.class); List dataList = null; try { dataList = util.importExcel(file.getInputStream()); } catch (Exception e) { throw new RuntimeException(e); } log.info("数据列表为:{}", dataList); for (ZfDoctor zfDoctor : dataList) { zfDoctorService.addData(zfDoctor); } return AjaxResult.success("导入数据成功"); } @Override public AjaxResult addData(ZfDoctor zfDoctor) { ZInfoUser myself = zInfoUserService.getMyself(); Long familyId = myself.getFamilyId(); if(familyId == null){ throw new RuntimeException("您还未加入任何家庭"); } List authority = zAuthorityService.getAuthority(); List familyIdList = authority.stream().filter(auth -> auth.getAuthority().toString().equals(DOCTOR_LIST_ADD)).map(ZAuthority::getFid).collect(Collectors.toList()); familyIdList.add(familyId); if (zfDoctor.getFamilyId()!=null && !familyIdList.contains(zfDoctor.getFamilyId())) { throw new RuntimeException("你没有权限操作此家庭的数据"); } if(zfDoctor.getFamilyId() == null){ //默认添加自己家庭的数据 zfDoctor.setFamilyId(familyId); } //判断是否有重复数据 LambdaQueryWrapper lqw = uniqueCondition(zfDoctor); List list = list(lqw); if(list.size()>0){ throw new RuntimeException("请勿新增重复数据"); } if (save(zfDoctor)) { return AjaxResult.success(); } else { return AjaxResult.error(); } } @Override public AjaxResult updateData(ZfDoctor zfDoctor) { ZInfoUser myself = zInfoUserService.getMyself(); Long familyId = myself.getFamilyId(); //先根据id查询出数据的familyId,看看有没有权限操作 Long dataFamilyId = getById(zfDoctor.getId()).getFamilyId(); List authority = zAuthorityService.getAuthority(); List familyIdList = authority.stream().filter(auth -> auth.getAuthority().toString().equals(DOCTOR_LIST_UPDATE)).map(ZAuthority::getFid).collect(Collectors.toList()); familyIdList.add(familyId); if (dataFamilyId!=null && !familyIdList.contains(dataFamilyId)) { throw new RuntimeException("你没有权限操作此家庭的数据"); } if(updateById(zfDoctor)){ return AjaxResult.success(); }else { return AjaxResult.error(); } } @Override public AjaxResult deleteData(Long[] ids) { List dataList = zfDoctorService.listByIds(Arrays.asList(ids)); ZInfoUser myself = zInfoUserService.getMyself(); Long familyId = myself.getFamilyId(); List authority = zAuthorityService.getAuthority(); List familyIdList = authority.stream().filter(auth -> auth.getAuthority().toString().equals(DOCTOR_LIST_REMOVE)).map(ZAuthority::getFid).collect(Collectors.toList()); familyIdList.add(familyId); for (ZfDoctor data : dataList) { if (!familyIdList.contains(data.getFamilyId())){ throw new RuntimeException("你没有权限操作此家庭的数据"); } } if (zfDoctorService.removeByIds(Arrays.asList(ids))) { return AjaxResult.success(); }else { return AjaxResult.error(); } } // @Override // public AjaxResult mySave(ZfDoctor zfDoctor) { // //判断是否有重复数据 // LambdaQueryWrapper lqw = uniqueCondition(zfDoctor); // List list = list(lqw); // if (list.size() > 0) { // throw new RuntimeException("请勿新增重复数据"); // } // // if (save(zfDoctor)) { // return AjaxResult.success(); // } else { // return AjaxResult.error(); // } // // // } private LambdaQueryWrapper uniqueCondition(ZfDoctor zfDoctor) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(StringUtils.isNotEmpty(zfDoctor.getType()), ZfDoctor::getType, zfDoctor.getType()); lqw.eq(StringUtils.isNotEmpty(zfDoctor.getSymptom()), ZfDoctor::getSymptom, zfDoctor.getSymptom()); lqw.eq(StringUtils.isNotEmpty(zfDoctor.getDuration()), ZfDoctor::getDuration, zfDoctor.getDuration()); lqw.eq(StringUtils.isNotEmpty(zfDoctor.getCmedical()), ZfDoctor::getCmedical, zfDoctor.getCmedical()); lqw.eq(StringUtils.isNotEmpty(zfDoctor.getWmedical()), ZfDoctor::getWmedical, zfDoctor.getWmedical()); lqw.eq(StringUtils.isNotEmpty(zfDoctor.getEffect()), ZfDoctor::getEffect, zfDoctor.getEffect()); lqw.eq(StringUtils.isNotEmpty(zfDoctor.getSuitable()), ZfDoctor::getSuitable, zfDoctor.getSuitable()); lqw.eq(StringUtils.isNotEmpty(zfDoctor.getRemark()), ZfDoctor::getRemark, zfDoctor.getRemark()); lqw.eq(zfDoctor.getFamilyId()!=null,ZfDoctor::getFamilyId,zfDoctor.getFamilyId()); return lqw; } private LambdaQueryWrapper buildCondition(ZfDoctor zfDoctor,List familyIdList) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.in(ZfDoctor::getFamilyId,familyIdList); lqw.orderByDesc(ZfDoctor::getCreateTime); lqw.like(StringUtils.isNotEmpty(zfDoctor.getType()), ZfDoctor::getType, zfDoctor.getType()) .like(StringUtils.isNotEmpty(zfDoctor.getSymptom()), ZfDoctor::getSymptom, zfDoctor.getSymptom()) .like(StringUtils.isNotEmpty(zfDoctor.getDuration()), ZfDoctor::getDuration, zfDoctor.getDuration()) .like(StringUtils.isNotEmpty(zfDoctor.getEffect()), ZfDoctor::getEffect, zfDoctor.getEffect()) .like(StringUtils.isNotEmpty(zfDoctor.getSuitable()), ZfDoctor::getSuitable, zfDoctor.getSuitable()) .like(StringUtils.isNotEmpty(zfDoctor.getRemark()), ZfDoctor::getRemark, zfDoctor.getRemark()); if (StringUtils.isNotEmpty(zfDoctor.getPrescription())){ lqw.and(wrapper -> { wrapper.like(StringUtils.isNotEmpty(zfDoctor.getPrescription()),ZfDoctor::getWmedical,zfDoctor.getPrescription()) .or() .like(StringUtils.isNotEmpty(zfDoctor.getPrescription()),ZfDoctor::getCmedical,zfDoctor.getPrescription()); }); } return lqw; } }