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.core.domain.entity.EsModel;
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.*;
import com.ruoyi.service.ZfDoctorService;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.*;
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;
@Resource
ZfDoctorMapper zfDoctorMapper;
@Resource
EsService esService;
@Resource
private RestHighLevelClient restHighLevelClient;
@Resource
ZfDoctorShareService zfDoctorShareService;
@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();
if (myself == null) {
// System.out.println("ssssss");
return AjaxResult.success("您没加入到对应的家庭,请联系管理员");
}
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);
}
}
).sorted((a, b) -> b.getOwnData() - a.getOwnData()).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) {
// if (zfDoctor.getSuitable().length() != 0 || zfDoctor.getType().length() != 0 || zfDoctor.getEffect().length() != 0 ) {
if(zfDoctor.getSymptom().length() == 0 || zfDoctor.getSymptom() == null){
throw new RuntimeException("症状为空,导入数据失败");
}
else {
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);
// List authority1 = zfDoctorShareService.getAuthority();
// List idList1 = authority1.stream().filter(auth -> auth.getShareContent().toString().equals(DOCTOR_LIST)).map(ZfDoctorShare::getShareId).collect(Collectors.toList());
// zfDoctorService.addData(zfDoctor);
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)) {
EsModel esModel = new EsModel();
Integer inte = zfDoctor.getId().intValue();
String uuid = UUID.randomUUID().toString().replace("-", "");
esModel.setId(uuid);
esModel.setCtId(Long.valueOf(inte));
esModel.setCtTableName("家庭小医生");
esModel.setBy1(zfDoctor.getType());
esModel.setBy2(zfDoctor.getSymptom());
esModel.setBy3(zfDoctor.getEffect());
esModel.setBy4(zfDoctor.getSuitable());
esModel.setBy5("/family/zfDoctor");
esModel.setBy6(zfDoctor.getCmedical());
esModel.setBy7(zfDoctor.getWmedical());
// esModel.setBy7();
esModel.setRemark(zfDoctor.getRemark());
esModel.setFid(familyId);
//这里存储查询详情的路径
esService.insertTable(esModel);
return AjaxResult.success();
} else {
return AjaxResult.error();
}
}
@Resource
ZfLogService zfLogService;
@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("你没有权限操作此家庭的数据");
}
//操作后加入日志
ZfLog zfLog = new ZfLog();
zfLog.setUpdateTime(LocalDateTime.now());
zfLog.setModule("家庭小医生");
zfLog.setUpdater(zInfoUserService.getMyself().getNickName());
zfLogService.save(zfLog);
if (updateById(zfDoctor)) {
//到数据库中查询对应的数据
ZfDoctor dataById = getById(zfDoctor.getId());
//先到es中查询到对应那条数据在es的id
EsModel esResult = esService.findByCtId(dataById.getId().intValue(), "家庭小医生");
if (esResult == null) {
return AjaxResult.success();
}
//操作es修改数据
EsModel newModel = new EsModel();
if (zfDoctor.getType() != null) {
newModel.setBy1(zfDoctor.getType());
} else {
newModel.setBy1(dataById.getType());
}
if (zfDoctor.getSymptom() != null) {
newModel.setBy2(zfDoctor.getSymptom());
} else {
newModel.setBy2(dataById.getSymptom());
}
if (zfDoctor.getEffect() != null) {
newModel.setBy3(zfDoctor.getEffect());
} else {
newModel.setBy3(dataById.getEffect());
}
if (zfDoctor.getSuitable() != null) {
newModel.setBy4(zfDoctor.getSuitable());
} else {
newModel.setBy4(dataById.getSuitable());
}
if (zfDoctor.getCmedical() != null) {
newModel.setBy6(zfDoctor.getCmedical());
} else {
newModel.setBy6(dataById.getCmedical());
}
if (zfDoctor.getWmedical() != null) {
newModel.setBy7(zfDoctor.getWmedical());
} else {
newModel.setBy7(dataById.getWmedical());
}
if (zfDoctor.getRemark() != null) {
newModel.setRemark(zfDoctor.getRemark());
} else {
newModel.setRemark(dataById.getRemark());
}
UpdateRequest updateRequest = new UpdateRequest("allsearchdata", esResult.getId());
updateRequest.doc(
"by1", newModel.getBy1(),
"by2", newModel.getBy2(),
"by3", newModel.getBy3(),
"by4", newModel.getBy4(),
"by6", newModel.getBy6(),
"by7", newModel.getBy7(),
"remark", newModel.getRemark()
);
try {
restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
throw new RuntimeException(e);
}
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("你没有权限操作此家庭的数据");
}
}
List zfDoctors = listByIds(Arrays.asList(ids));
if (zfDoctorService.removeByIds(Arrays.asList(ids))) {
//删除es中的数据
zfDoctors.stream().forEach(zfDoctor -> {
EsModel esModel = esService.findByCtId(zfDoctor.getId().intValue(), "家庭小医生");
if (esModel != null) {
DeleteRequest deleteRequest = new DeleteRequest("allsearchdata", esModel.getId());
try {
restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
});
return AjaxResult.success();
} else {
return AjaxResult.error();
}
}
@Override
public AjaxResult listType() {
List result = zfDoctorMapper.listType();
return AjaxResult.success(result);
}
// @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.getWmedical()), ZfDoctor::getWmedical, zfDoctor.getWmedical())
.like(StringUtils.isNotEmpty(zfDoctor.getCmedical()), ZfDoctor::getCmedical, zfDoctor.getCmedical())
.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;
}
// public LambdaQueryWrapper buildCondition2(List ids) {
// LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
// lqw.eq(ZfDoctor::getId, ids);
//
// return lqw;
// }
// @Override
// public AjaxResult selectListById(List ids, Integer pageNum, Integer pageSize) {
// List lqw2 = new ArrayList<>();
//
// LambdaQueryWrapper lqw = buildCondition2(ids);
// List bb = list(lqw);
// System.out.println("15052222254"+bb);
//
// Page zfDoctorPage = new Page<>(pageNum, pageSize);
// Page pageResult = page(zfDoctorPage, lqw);
// List beanRecords = pageResult.getRecords();//得到查询出来的数据
// System.out.println(beanRecords);
//
// HashMap data = MapUtils.getResult(pageResult, beanRecords);
//
//
// return AjaxResult.success(data);
//// }
// private List buildCondition1(){
// List authority1 = zfDoctorShareService.getAuthority();
// List idList1 = authority1.stream().filter(auth -> auth.getShareContent().toString().equals(DOCTOR_LIST)).map(ZfDoctorShare::getShareId).collect(Collectors.toList());
// return idList1;
// }
// private LambdaQueryWrapper buildCondition2(ZfDoctor zfDoctor, List IdList) {
// LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
// lqw.in(ZfDoctorShare::getShareId, IdList);
// List beanRecords = list(lqw);
// for (ZfDoctorShare shareContent : beanRecords){
// zfDoctorService.getById(shareContent);
// }
//
// }
}