|
@ -1,12 +1,22 @@
|
|
|
package com.yihu.wlyy.service.manager.account;
|
|
|
|
|
|
import com.yihu.wlyy.entity.Doctor;
|
|
|
import com.yihu.wlyy.entity.Patient;
|
|
|
import com.yihu.wlyy.entity.SignFamily;
|
|
|
import com.yihu.wlyy.entity.*;
|
|
|
import com.yihu.wlyy.entity.call.CallRecord;
|
|
|
import com.yihu.wlyy.entity.call.CallService;
|
|
|
import com.yihu.wlyy.repository.MessageDao;
|
|
|
import com.yihu.wlyy.repository.PatientDao;
|
|
|
import com.yihu.wlyy.repository.UserDao;
|
|
|
import com.yihu.wlyy.repository.call.CallRecordDao;
|
|
|
import com.yihu.wlyy.repository.call.CallServiceDao;
|
|
|
import com.yihu.wlyy.service.BaseService;
|
|
|
import com.yihu.wlyy.service.manager.family.FamilyMemberService;
|
|
|
import com.yihu.wlyy.service.manager.hos.HosDoctorService;
|
|
|
import com.yihu.wlyy.service.manager.sign.FamilyContractService;
|
|
|
import com.yihu.wlyy.service.manager.sign.SignFamilyService;
|
|
|
import com.yihu.wlyy.util.DateUtil;
|
|
|
import com.yihu.wlyy.util.HttpClientUtil;
|
|
|
import io.swagger.models.auth.In;
|
|
|
import org.apache.commons.collections.map.HashedMap;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.http.NameValuePair;
|
|
|
import org.apache.http.message.BasicNameValuePair;
|
|
@ -15,15 +25,13 @@ import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.*;
|
|
|
|
|
|
@Service
|
|
|
public class CustomerService{
|
|
|
public class CustomerService extends BaseService{
|
|
|
|
|
|
@Autowired
|
|
|
private FamilyMemberService familyMemberService;
|
|
@ -31,6 +39,20 @@ public class CustomerService{
|
|
|
private FamilyContractService contractService;
|
|
|
@Autowired
|
|
|
private HosDoctorService hosDoctorService;
|
|
|
@Autowired
|
|
|
private CallRecordDao callRecordDao;
|
|
|
@Autowired
|
|
|
private CallServiceDao callServiceDao;
|
|
|
@Autowired
|
|
|
private PatientDao patientDao;
|
|
|
@Autowired
|
|
|
private SignFamilyService familyService;
|
|
|
@Autowired
|
|
|
private UserDao userDao;
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
@Autowired
|
|
|
private MessageDao messageDao;
|
|
|
|
|
|
@Value(("${doctorAssistant.api}")+"/wlyygc/doctor/message")
|
|
|
private String messageApi;
|
|
@ -160,4 +182,257 @@ public class CustomerService{
|
|
|
}
|
|
|
return resp;
|
|
|
}
|
|
|
|
|
|
public Map<String,Object> addCallRecord(String user,Integer type,String callerNumber,String recipientNumber,Integer status,Integer serviceType,String serviceContent){
|
|
|
|
|
|
List<Patient> list = patientDao.findByMobile(callerNumber);
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
Patient p ;
|
|
|
if(list!=null||list.size()==0){
|
|
|
rs.put("state",-1);
|
|
|
rs.put("mes","未找到患者信息");
|
|
|
rs.put("callRecord",null);
|
|
|
return rs;
|
|
|
}else{
|
|
|
p = list.get(0);
|
|
|
}
|
|
|
|
|
|
SignFamily sf = familyService.findByPatientCode(p.getCode());
|
|
|
User u = userDao.findByCode(user);
|
|
|
|
|
|
CallRecord callRecord = new CallRecord();
|
|
|
callRecord.setType(type);
|
|
|
callRecord.setCode(getCode());
|
|
|
callRecord.setCallerNumber(callerNumber);
|
|
|
callRecord.setRecipientNumber(recipientNumber);
|
|
|
callRecord.setAnswerStatus(status);
|
|
|
callRecord.setServiceType(serviceType);
|
|
|
callRecord.setServiceContent(serviceContent);
|
|
|
callRecord.setCreateTime(new Date());
|
|
|
callRecord.setCallTime(new Date());
|
|
|
callRecord.setUserCode(user);
|
|
|
callRecord.setUserName(u.getName());
|
|
|
callRecord.setPatient(p.getCode());
|
|
|
callRecord.setPatientName(p.getName());
|
|
|
callRecord.setIdcard(p.getIdcard());
|
|
|
callRecord.setSsc(p.getSsc());
|
|
|
callRecord.setDoctor(sf.getDoctor());
|
|
|
callRecord.setDoctorName(sf.getDoctorName());
|
|
|
CallRecord temp = callRecordDao.save(callRecord);
|
|
|
|
|
|
rs.put("state",1);
|
|
|
rs.put("mes","保存成功");
|
|
|
rs.put("callRecord",temp);
|
|
|
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
public String updateCallRecord(String jsonString){
|
|
|
net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(jsonString);
|
|
|
CallRecord callRecord =(CallRecord)net.sf.json.JSONObject.toBean(json,CallRecord.class);
|
|
|
callRecordDao.save(callRecord);
|
|
|
return "1";
|
|
|
}
|
|
|
|
|
|
public String updateCallRecordEndTime(String jsonString){
|
|
|
net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(jsonString);
|
|
|
CallRecord callRecord =(CallRecord)net.sf.json.JSONObject.toBean(json,CallRecord.class);
|
|
|
callRecord.setEndTime(new Date());
|
|
|
callRecord.setTalkTime(DateUtil.getTimeDifference(callRecord.getCreateTime(),callRecord.getEndTime()));
|
|
|
callRecordDao.save(callRecord);
|
|
|
return "1";
|
|
|
}
|
|
|
|
|
|
public List<Map<String,Object>> getCallRecords(String callerNumber,Integer answerStatus,Integer serviceType ,String startDate,String endDate,Integer page,Integer size){
|
|
|
|
|
|
String sql = "SELECT " +
|
|
|
" r.type, " +
|
|
|
" r.caller_number AS callerNumber, " +
|
|
|
" r.recipient_number AS recipientNumber, " +
|
|
|
" r.call_time AS callTime, " +
|
|
|
" r.talk_time AS talkTime, " +
|
|
|
" r.answer_status AS answerStatus, " +
|
|
|
" r.service_type AS serviceType, " +
|
|
|
" r.user_name AS userName, " +
|
|
|
" r.user_code AS userCode " +
|
|
|
" FROM " +
|
|
|
" manage_call_record r " +
|
|
|
" WHERE " +
|
|
|
" 1 = 1 ";
|
|
|
if(StringUtils.isNotBlank(callerNumber)){
|
|
|
sql +=" AND r.caller_number = '"+callerNumber+"'";
|
|
|
}
|
|
|
if(answerStatus!=null){
|
|
|
sql += " AND r.answer_status = "+answerStatus ;
|
|
|
}
|
|
|
if(serviceType!=null){
|
|
|
sql += " AND r.service_type = " +serviceType;
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(startDate)){
|
|
|
sql +=" AND r.call_time >='"+startDate+" 00:00:00'";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(endDate)){
|
|
|
sql +=" AND r.call_time <='"+endDate+" 23:59:59'";
|
|
|
}
|
|
|
sql += " LIMIT "+(page-1)*size+","+size +" ORDER BY r.call_time DESC";
|
|
|
List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
public Map<String,Object> getCallRecordInfo(String code){
|
|
|
CallRecord callRecord = callRecordDao.findByCode(code);
|
|
|
List<CallService> consultService = callServiceDao.findByCallCodeAndType(code,0);
|
|
|
List<CallService> orderService = callServiceDao.findByCallCodeAndType(code,1);
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
rs.put("callRecord",callRecord);
|
|
|
rs.put("consultService",consultService);
|
|
|
rs.put("orderService",orderService);
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
public String getCallServiceCode(String type){
|
|
|
/**
|
|
|
* 服务编号规则:协同服务类型编号+YYMMddhhmmss+编号
|
|
|
* 协同服务类型编号:01预约挂号,02咨询医生
|
|
|
* YYMMDDHHMMSS:创建时间,例子20170901010101
|
|
|
* 编号:4位,当天累计协同服务数,按顺序+1
|
|
|
*/
|
|
|
String head ;
|
|
|
if("1".equals(type)){
|
|
|
head = "01";
|
|
|
}else{
|
|
|
head = "02";
|
|
|
}
|
|
|
String time = DateUtil.getStringDate("YYYYMMDDHHmmss");
|
|
|
String sql = "SElECT count(1) AS total FROM manage_call_service s WHERE s.create_time >='"+DateUtil.getStringDate("yyyy-MM-ss")+" 00:00:00'";
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
String count ;
|
|
|
if(list!=null&&list.size()>0){
|
|
|
Map<String,Object> map = list.get(0);
|
|
|
Long c = (Long) map.get("total");
|
|
|
count =c.toString();
|
|
|
}else{
|
|
|
count = "0000";
|
|
|
}
|
|
|
if(count.length()==1){
|
|
|
count = "000"+count;
|
|
|
}else if(count.length()==2){
|
|
|
count = "00"+count;
|
|
|
}else if(count.length()==3){
|
|
|
count = "0"+count;
|
|
|
}else if(count.length()==4){
|
|
|
count = count;
|
|
|
}else{
|
|
|
count = count.substring(0,3);
|
|
|
}
|
|
|
return head+time+count;
|
|
|
|
|
|
}
|
|
|
|
|
|
public String saveCallService(String callServiceJson,String user){
|
|
|
net.sf.json.JSONObject jsonObject = net.sf.json.JSONObject.fromObject(callServiceJson);
|
|
|
CallService callService = (CallService)net.sf.json.JSONObject.toBean(jsonObject);
|
|
|
callService.setUser(user);
|
|
|
User u = userDao.findByCode(user);
|
|
|
callService.setUserName(u.getName());
|
|
|
callServiceDao.save(callService);
|
|
|
|
|
|
//待处理发送消息给医生
|
|
|
if(callService.getState()==1){
|
|
|
Patient p = patientDao.findByCode(callService.getPatient());
|
|
|
// 添加签约消息
|
|
|
Message message = new Message();
|
|
|
message.setCzrq(new Date());
|
|
|
message.setCreateTime(new Date());
|
|
|
message.setContent("您有一条新的协同服务消息!");
|
|
|
message.setRead(1);//设置未读
|
|
|
message.setReceiver(callService.getDoctor());//设置接受医生的code
|
|
|
message.setSender(callService.getPatient());//设置发送的用户
|
|
|
message.setSenderName(callService.getPatientName());
|
|
|
message.setCode(getCode());
|
|
|
message.setSenderPhoto(p.getPhoto());
|
|
|
message.setTitle("协同服务消息");
|
|
|
message.setType(11);//协同服务消息
|
|
|
message.setReadonly(1);//是否只读消息
|
|
|
message.setSex(p.getSex());
|
|
|
message.setOver("1");//未处理
|
|
|
|
|
|
messageDao.save(message);
|
|
|
}
|
|
|
|
|
|
return "1";
|
|
|
}
|
|
|
|
|
|
public List<Map<String,Object>> getCallServices(String keyword, Integer serverType,Integer state,String patientName,String ssc,String idCard,String doctorName,String code,String startDate,String endDate,Integer page,Integer size){
|
|
|
String sql = "SELECT " +
|
|
|
" s.`code`, " +
|
|
|
" s.patient, " +
|
|
|
" s.patient_name AS patientName, " +
|
|
|
" s.doctor, " +
|
|
|
" s.doctor_name AS doctorName, " +
|
|
|
" s.server_type As serverType, " +
|
|
|
" s.state, " +
|
|
|
" s.server_content AS serverContent, " +
|
|
|
" s.create_time AS createTime, " +
|
|
|
" s.user, " +
|
|
|
" s.user_name AS userName " +
|
|
|
" FROM " +
|
|
|
" manage_call_service s " +
|
|
|
" WHERE " +
|
|
|
" 1 = 1";
|
|
|
if(StringUtils.isNotBlank(keyword)){
|
|
|
sql +=" AND (s.patient_name = '"+keyword+"' OR s.ssc ='"+keyword+"' OR s.Idcard ='"+keyword+"')";
|
|
|
}
|
|
|
if(serverType!=null){
|
|
|
sql += " AND s.server_type ='"+serverType+"' " ;
|
|
|
}
|
|
|
if(state != null){
|
|
|
sql +=" AND s.state ='"+state+"'";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(patientName)){
|
|
|
sql +=" AND s.patient_name ='"+patientName+"'" ;
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(ssc)){
|
|
|
sql +=" AND s.ssc ='"+ssc+"'" ;
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(idCard)){
|
|
|
sql +=" AND s.IdCard ='"+idCard+"'" ;
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(doctorName)){
|
|
|
sql +=" AND s.doctor_name ='"+doctorName+"'" ;
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(code)){
|
|
|
sql +=" AND s.code ='"+code+"'" ;
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(startDate)){
|
|
|
sql +=" AND s.create_time >='"+startDate+" 00:00:00'" ;
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(endDate)){
|
|
|
sql +=" AND s.create_time <='"+endDate+" 23:59:59'" ;
|
|
|
}
|
|
|
sql += " LIMIT "+(page-1)*size+","+size +" ORDER BY r.create_time DESC";
|
|
|
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
public Map<String,Object> getCallServiceInfo(String code){
|
|
|
CallService callService = callServiceDao.findByCode(code);
|
|
|
CallRecord callRecord = callRecordDao.findByCode(callService.getCallCode());
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
rs.put("callService",callService);
|
|
|
rs.put("callRecord",callRecord);
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|