package com.lyms.talkonlineweb.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lyms.talkonlineweb.domain.*;
import com.lyms.talkonlineweb.result.BaseResponse;
import com.lyms.talkonlineweb.service.*;
import com.lyms.talkonlineweb.util.Constant;
import com.lyms.talkonlineweb.util.HXService;
import com.lyms.talkonlineweb.util.JwtUtils;
import com.lyms.talkonlineweb.util.StringUtil;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
* 医生管理
*/
@RestController
@RequestMapping("doctor")
@Log4j2
public class DoctorController {
@Autowired
private LymsDoctorService lymsDoctorService;
@Autowired
private LymsHdepartService lymsHdepartService;
@Autowired
private LymsHospitalService lymsHospitalService;
@Autowired
private LymsDictService lymsDictService;
@Autowired
private LymsLogsCrudService lymsLogsCrudService;
@Autowired
private HXService hxService;
@Autowired
private AppgetdoctorlistInfoService appgetdoctorlistInfoService;
/**
* 获取医生列表
* @param doctor
* @param current
* @param size
* @return
*/
@GetMapping("sltDoctorLst")
public BaseResponse sltDoctorLst(LymsDoctor doctor, int current, int size){
BaseResponse baseResponse=new BaseResponse();
Page<LymsDoctor> page=new Page<>(current,size);
Page<LymsDoctor> doctorPagePage=lymsDoctorService.page(page, Wrappers.query(doctor).orderByDesc("updated_time","createdtime"));
conDocCode(doctorPagePage);
baseResponse.setObject(doctorPagePage);
return baseResponse;
}
public void conDocCode(Page<LymsDoctor> doctorPagePage){
Map param=new HashMap();
param.put("vtype",4);
List<LymsDict> dLst=lymsDictService.listByMap(param);
doctorPagePage.getRecords().forEach(d->{
param.clear();
param.put("did",d.getDpid());
List<LymsHdepart> departLst=lymsHdepartService.listByMap(param);
if(departLst.size()>0){
LymsHdepart depart=departLst.get(0);
d.setHname(depart.getHname());
d.setDdname(depart.getDname());
dLst.forEach(dd->{
if(dd.getCode()==d.getLvl()){
d.setLname(dd.getValue());
}
});
}
});
}
/**
* 保存或更新医生信息
* @param doctor
* @return
*/
@PostMapping("saveDoctor")
public BaseResponse saveDoctor(@Validated LymsDoctor doctor, BindingResult result){
BaseResponse baseResponse=new BaseResponse();
baseResponse.setErrormsg("");
//操作记录标识
Integer did=0;
if(doctor.getDid()==null){
doctor.setCreatedtime(new Date());
LymsDoctor depart2=new LymsDoctor();
depart2.setDlogin(doctor.getDlogin());
List<LymsDoctor> dLst=lymsDoctorService.list(Wrappers.query(depart2));
if (dLst.size()>0) {
baseResponse.setErrormsg("不能创建重复账号");
baseResponse.setErrorcode(1);
return baseResponse;
}
LymsHdepart hdepart=lymsHdepartService.getById(doctor.getDpid());
if(doctor.getHxid()==null ){
JSONObject json=hxService.addUser(doctor.getDlogin(),Constant.COMMON_PASSWD,doctor.getDname()+","+hdepart.getDname()+","+hdepart.getHname());
JSONArray rArr=json.getJSONArray("entities");
if(rArr.size()>0){
doctor.setHxid(rArr.getJSONObject(0).getString("uuid"));
}
// lymsDoctorService.saveOrUpdate(doctor);
}
}else{
did=1;
doctor.setUpdatedTime(new Date());
}
if(result.hasErrors()){
baseResponse.setErrorcode(1);
result.getAllErrors().forEach(e->{
baseResponse.setErrormsg(baseResponse.getErrormsg()+e.getDefaultMessage());
});
return baseResponse;
}
boolean f=lymsDoctorService.saveOrUpdate(doctor);
lymsLogsCrud(doctor,did);
baseResponse.setErrorcode(f==true?0:1);
return baseResponse;
}
/**
* 删除医生
* @param did
* @return
*/
@GetMapping("delDoctor")
public BaseResponse delDoctor(int did){
BaseResponse baseResponse=new BaseResponse();
//操作记保存参数
LymsDoctor doctor=lymsDoctorService.getById(did);
boolean f=lymsDoctorService.removeById(did);
if (!StringUtils.isEmpty(doctor.getDlogin())){
JSONObject rs=hxService.delUser(doctor.getDlogin());
log.info(rs);
}
//保存操作记录
lymsLogsCrud(doctor,null);
baseResponse.setErrorcode(f==true?0:1);
return baseResponse;
}
/**
* 医生登录
* @param doctor
* @return
*/
@PostMapping("loginDoctor")
public BaseResponse loginDoctor(@RequestBody LymsDoctor doctor){
BaseResponse baseResponse=new BaseResponse();
List<LymsDoctor> dLst=lymsDoctorService.list(Wrappers.query(doctor));
baseResponse.setErrorcode(1);
if (dLst.size()>0) {
doctor=dLst.get(0);
doctor.setDpasswd(null);
baseResponse.setObject(doctor);
String jwt = JwtUtils.createJWT("1", doctor.getDlogin(), Constant.JWT_TTL);
Map<String,Object> map=new HashMap<>();
map.put("doctor",doctor);
map.put("token",jwt);
baseResponse.setErrorcode(0);
baseResponse.setObject(map);
}
return baseResponse;
}
/**
* 统计医生信息
* @return
*/
@GetMapping("statDoctor")
public BaseResponse statDoctor(Integer hid){
BaseResponse baseResponse=new BaseResponse();
Map<String,Object> stat=lymsDoctorService.statDoctor(hid);
baseResponse.setObject(stat);
return baseResponse;
}
/**
* 操作记录
* @param doctor
* @param did
*/
public void lymsLogsCrud(LymsDoctor doctor,Integer did){
LymsLogsCrud lymsLogsCrud=new LymsLogsCrud();
if(null!=did){
lymsLogsCrud.setCrudtype(did==1?"编辑科室":"新增科室");
}else {
lymsLogsCrud.setCrudtype("删除科室");
}
lymsLogsCrud.setCreatedbyname(doctor.getCreatedbyname());
lymsLogsCrud.setUpdatedbyname(doctor.getUpdatedbyname());
lymsLogsCrud.setHname(doctor.getHname());
lymsLogsCrud.setHdname(doctor.getDname());
lymsLogsCrud.setCreatdata(new Date());
lymsLogsCrud.setCreatdata(new Date());
lymsLogsCrud.setType(2);
lymsLogsCrudService.save(lymsLogsCrud);
}
/**
* 查询单个医生的信息
* @param doctor
* @return
*/
@GetMapping("queryDoctor")
public BaseResponse delDoctor(LymsDoctor doctor){
BaseResponse baseResponse=new BaseResponse();
LymsDoctor doctor2=lymsDoctorService.getOne(Wrappers.query(doctor));
LymsHdepart hdepart=lymsHdepartService.getById(doctor2.getDpid());
doctor2.setDdname(hdepart.getDname());
doctor2.setHname(hdepart.getHname());
Map param=new HashMap();
param.put("vtype",4);
param.put("code",doctor2.getLvl());
List<LymsDict> dLst=lymsDictService.listByMap(param);
if (dLst.size()>0){
doctor2.setLname(dLst.get(0).getValue());
}
baseResponse.setObject(doctor2);
return baseResponse;
}
/**
* 小程序用户端-根据医院id获取医生信息
* @param hid
* @param current
* @param size
* @return
*/
@GetMapping("appGetDoctorList")
public BaseResponse appGetDoctorList(AppgetdoctorlistInfo appgetdoctorlistInfo, int current, int size){
BaseResponse baseResponse=new BaseResponse();
LambdaQueryWrapper<AppgetdoctorlistInfo> queryWrapper = new QueryWrapper().lambda();
queryWrapper.setEntity(appgetdoctorlistInfo);
if(StringUtil.isNotEmpty(appgetdoctorlistInfo.getSearchinfo())){
queryWrapper.like(AppgetdoctorlistInfo::getDname, appgetdoctorlistInfo.getSearchinfo())
.or().like(AppgetdoctorlistInfo::getDpname,appgetdoctorlistInfo.getSearchinfo())
.or().like(AppgetdoctorlistInfo::getLvlname, appgetdoctorlistInfo.getSearchinfo());
}
Page<AppgetdoctorlistInfo> page=new Page<>(current,size);
Page<AppgetdoctorlistInfo> appgetdoctorlistInfoPage=appgetdoctorlistInfoService.page(page,queryWrapper);
baseResponse.setObject(appgetdoctorlistInfoPage);
return baseResponse;
}
}