package com.lyms.talkonlineweb.controller;
import com.alibaba.fastjson.JSON;
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.HXService;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.*;
@RestController
@RequestMapping("chat")
@Log4j2
public class ChatGroupController {
@Autowired
private LymsChatgroupService lymsChatgroupService;
@Autowired
private LymsMessageService lymsMessageService;
@Autowired
private PatientInfoService patientInfoService;
@Autowired
private LymsDoctorService lymsDoctorService;
@Autowired
private LymsHdepartService lymsHdepartService;
@Autowired
private LymsDictService lymsDictService;
@Autowired
private HXService hxService;
@Autowired
private LymsTcardService lymsTcardService;
@Autowired
private LymsPatientService lymsPatientService;
@Autowired
private LymsTkrecordService lymsTkrecordService;
@Autowired
private AppgetdoctorlistInfoService appgetdoctorlistInfoService;
/**
* 添加或删除聊天组
*
* @param group
* @return
*/
@PostMapping("saveChatGroup")
public BaseResponse saveChatGroup(@RequestBody LymsChatgroup group) {
BaseResponse baseResponse = new BaseResponse();
List<LymsChatgroup> gLst = lymsChatgroupService.list(Wrappers.query(group).orderByDesc("id"));
if (group.getOwnerk() == null) {
group.setOwnerk("test");
}
if (gLst.size() > 0) {
LymsChatgroup group2 = gLst.get(0);
group = group2;
} else {
log.info("创建环信组:{} from:{} target:{}", group.getOwnerk(), group.getFromp(), group.getTarget());
JSONObject rJson = hxService.addChatGroups(group.getFromp() + "," + group.getTarget(), group.getOwnerk(), new String[]{group.getFromp(), group.getTarget()});
log.info("rJson:" + rJson);
group.setHxgroupid(rJson.getJSONObject("data").getString("groupid"));
group.setDescription(group.getFromp() + "," + group.getTarget());
// group.setGroupname(group.getFromp() + "," + group.getTarget());
//环信群组名称更改为姓名串-用于PC端问诊展示
LymsPatient patient= lymsPatientService.getOne(new QueryWrapper<LymsPatient>().lambda().eq(LymsPatient::getIdno, group.getFromp()));
LymsDoctor doctor= lymsDoctorService.getOne(new QueryWrapper<LymsDoctor>().lambda().eq(LymsDoctor::getDlogin, group.getTarget()));
group.setGroupname(patient.getPname() + "," + doctor.getDdname());
group.setCtime(new Date());
lymsChatgroupService.saveOrUpdate(group);
}
baseResponse.setObject(group);
return baseResponse;
}
/**
* 保存消息记录
*
* @param message
* @return
*/
@PostMapping("saveMsg")
public BaseResponse saveMsg(@RequestBody LymsMessage message) {
BaseResponse baseResponse = new BaseResponse();
message.setSendtime(new Date());
boolean f = lymsMessageService.saveOrUpdate(message);
baseResponse.setErrorcode(f == true ? 0 : 1);
return baseResponse;
}
/**
* 根据群组ID获取患者和医生信息
* @param chatgroup
* @return
*/
@GetMapping("getPatDoc")
public BaseResponse getPatDoc(LymsChatgroup chatgroup) {
log.info(">>>>>>>>>>chatgroup:" + chatgroup);
BaseResponse baseResponse = new BaseResponse();
Map<String, Object> rs = new HashMap<>();
// chatgroup = lymsChatgroupService.getOne(Wrappers.query(chatgroup));
List<LymsChatgroup> gLst = lymsChatgroupService.list(Wrappers.query(chatgroup).orderByDesc("id"));
if (gLst.size()>0){
chatgroup=gLst.get(0);
}
LymsDoctor doctor = new LymsDoctor();
doctor = lymsDoctorService.getOne(Wrappers.query(doctor).eq("dlogin", chatgroup.getTarget()));
LymsPatient patient = new LymsPatient();
patient.setIdno(chatgroup.getFromp());
List<LymsPatient> pLst = lymsPatientService.list(Wrappers.query(patient));
conDocCode(doctor);
List<Map<String, Object>> tmpList = lymsChatgroupService.getPinfoBySesson(null, doctor.getDid().toString(), chatgroup.getHxgroupid());
if (tmpList.size() > 0) {
rs.put("sess",tmpList.get(0));
}
rs.put("doctor", doctor);
rs.put("patient", pLst);
baseResponse.setObject(rs);
return baseResponse;
}
public void conDocCode(LymsDoctor d) {
Map param = new HashMap();
param.put("vtype", 4);
List<LymsDict> dLst = lymsDictService.listByMap(param);
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 froms 发送人员ID
* @param did 问诊医生ID
* @param groupid 群组ID
* @return
*/
@PostMapping("getPinfoBySession")
public BaseResponse getPinfoBySesson(String froms, String did, String groupid) {
BaseResponse baseResponse = new BaseResponse();
List<Map<String, Object>> psList = new ArrayList<>();
List<Map<String, Object>> tmpList = lymsChatgroupService.getPinfoBySesson(null, did, groupid);
if (tmpList.size() > 0) {
psList.add(tmpList.get(0));
}
baseResponse.setObject(psList);
return baseResponse;
}
/**
* 根据环信传入的会话,获取用户信息
* @param request
* @return
*/
@PostMapping("getSessionListInfo")
public BaseResponse getSessionListInfo(HttpServletRequest request) {
BaseResponse baseResponse = new BaseResponse();
log.info(">>>>>>>>> getSessionListInfo 根据环信传入的会话,获取用户信息");
JSONArray rs=new JSONArray();
try {
request.setCharacterEncoding("utf-8");
String res=IOUtils.toString(request.getInputStream(),Charset.forName("UTF-8"));
log.info(res);
JSONObject jsonObject= JSON.parseObject(res);
JSONArray channel_infos=jsonObject.getJSONArray("channel_infos");
if(channel_infos.size()>0){
for (int i = 0; i < channel_infos.size(); i++) {
JSONObject row=channel_infos.getJSONObject(i);
if(row.getJSONObject("meta").size()>0){
JSONObject payload=row.getJSONObject("meta").getJSONObject("payload");
System.out.println(payload);
payload.put("unread_num",row.get("unread_num"));
String to=payload.getString("to");
LymsTkrecord tkrecord=new LymsTkrecord();
tkrecord.setHxgroupid(to);
List<LymsTkrecord> rLst=lymsTkrecordService.list(Wrappers.query(tkrecord));
payload.put("stat",0);
if(rLst.size()>0){
payload.put("stat",rLst.get(0).getStat());
}
LymsChatgroup chatgroup=new LymsChatgroup();
chatgroup.setHxgroupid(to);
List<LymsChatgroup> cLst=lymsChatgroupService.list(Wrappers.query(chatgroup));
if(cLst.size()>0){
chatgroup=cLst.get(0);
Map<String,Object> param=new HashMap<>();
param.put("idno",chatgroup.getFromp());
List<LymsPatient> pLst=lymsPatientService.listByMap(param);
if(pLst.size()>0){
payload.put("pat",pLst.get(0));
}
param.clear();
param.put("dlogin",chatgroup.getTarget());
List<AppgetdoctorlistInfo> dLst=appgetdoctorlistInfoService.listByMap(param);
if(dLst.size()>0){
payload.put("doc",dLst.get(0));
}
}
payload.put("timestamp",row.getJSONObject("meta").get("timestamp"));
rs.add(payload);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
baseResponse.setObject(rs);
return baseResponse;
}
/**
* 获取专家组\客服人员信息
* @param request
* @return
*/
@GetMapping("getPreMsg")
public BaseResponse getPreMsg(HttpServletRequest request){
BaseResponse baseResponse =new BaseResponse();
Map<String,Object> param=new HashMap<>();
param.put("vtype",998);
List<LymsDict> dLst=lymsDictService.listByMap(param);
if(dLst.size()>0){
baseResponse.setObject(dLst.get(0));
}
return baseResponse;
}
}