|
@ -25,12 +25,14 @@ import com.yihu.jw.restmodel.web.MixEnvelop;
|
|
|
import com.yihu.jw.utils.StringUtil;
|
|
|
import com.yihu.jw.utils.hibernate.HibenateUtils;
|
|
|
import com.yihu.jw.wechat.enterprise.EnterpriseService;
|
|
|
import jdk.management.resource.internal.TotalResourceContext;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.persistence.criteria.CriteriaBuilder;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
|
|
@ -258,6 +260,7 @@ public class BaseComplaintService {
|
|
|
baseComplaintDO.setIsDel("1");
|
|
|
baseComplaintDO.setStatus("0");
|
|
|
baseComplaintDO.setCreateTime(new Date());
|
|
|
baseComplaintDO.setDefaultdoctor("defalutDoctor");
|
|
|
baseComplaintDO= baseComplaintDao.save(baseComplaintDO);
|
|
|
BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
|
|
|
baseComplaintOperateLogDO.setOperateFrom(baseComplaintDO.getPatient());
|
|
@ -280,13 +283,14 @@ public class BaseComplaintService {
|
|
|
/*
|
|
|
* 医生转交
|
|
|
* */
|
|
|
public BaseComplaintDO passTo(String id,String complaintId,String doctor,String operator){
|
|
|
public BaseComplaintDO passTo(String id,String complaintId,String doctor,String operator,String reason){
|
|
|
BaseComplaintDO baseComplaintDO = baseComplaintDao.findOne(id);
|
|
|
BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
|
|
|
String doctorName="";
|
|
|
String complaitTypeName="";
|
|
|
if (null!=baseComplaintDO){
|
|
|
baseComplaintOperateLogDO.setOperateFrom(operator);
|
|
|
baseComplaintOperateLogDO.setReason(reason);
|
|
|
baseComplaintOperateLogDO.setOperateTo(doctor);
|
|
|
baseComplaintOperateLogDO.setComplaintTo(complaintId);
|
|
|
baseComplaintOperateLogDO.setComplaintFrom(baseComplaintDO.getComplaintId());
|
|
@ -301,7 +305,12 @@ public class BaseComplaintService {
|
|
|
baseComplaintDO.setAcceptorName(doctorName);
|
|
|
}
|
|
|
baseComplaintDO.setAcceptor(doctor);*/
|
|
|
if ("1".equalsIgnoreCase(baseComplaintDO.getStatus())){
|
|
|
baseComplaintDO.setStatus("0");
|
|
|
}
|
|
|
baseComplaintDO.setDefaultdoctor(doctor);
|
|
|
baseComplaintDO.setComplaintId(complaintId);
|
|
|
baseComplaintDO.setPassto(doctor);
|
|
|
BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findById(complaintId);
|
|
|
if (baseComplaintDictDO!=null){
|
|
|
complaitTypeName=baseComplaintDictDO.getName();
|
|
@ -331,6 +340,7 @@ public class BaseComplaintService {
|
|
|
baseComplaintDO.setAcceptorName(baseDoctorDO.getName());
|
|
|
}
|
|
|
baseComplaintDO.setAcceptor(doctor);
|
|
|
baseComplaintDO.setDefaultdoctor(doctor);
|
|
|
baseComplaintDO.setAcceptTime(new Date());
|
|
|
baseComplaintDao.save(baseComplaintDO);
|
|
|
BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
|
|
@ -355,6 +365,7 @@ public class BaseComplaintService {
|
|
|
baseComplaintDO.setFeedBack(content);
|
|
|
baseComplaintDO.setFeedImg(imgUrl);
|
|
|
baseComplaintDO.setOperator(operator);
|
|
|
baseComplaintDO.setDefaultdoctor(operator);
|
|
|
baseComplaintDO.setStatus("2");
|
|
|
BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(operator);
|
|
|
if (null != baseDoctorDO) {
|
|
@ -389,7 +400,7 @@ public class BaseComplaintService {
|
|
|
if ("admin".equalsIgnoreCase(role)){
|
|
|
queryAll=true;
|
|
|
}
|
|
|
String sql="select t.id as \"id\"," +
|
|
|
String sql="select DISTINCT t.id as \"id\"," +
|
|
|
" t.complaint_id as \"complaintId\"," +
|
|
|
" t.complaint_name as \"complaintName\"," +
|
|
|
" t.complaint_content as \"complaintContent\"," +
|
|
@ -418,10 +429,19 @@ public class BaseComplaintService {
|
|
|
" t.feed_img as \"feedImg\"," +
|
|
|
" t.acceptor as \"acceptor\"," +
|
|
|
" t.mobile as \"mobile\"," +
|
|
|
" t.passto as \"passto\"," +
|
|
|
" t.acceptor_name as \"acceptorName\"" +
|
|
|
"from base_complaint t " +
|
|
|
" left join base_patient b on t.patient=b.id" +
|
|
|
" where t.is_del=1";
|
|
|
" left join base_patient b on t.patient=b.id " ;
|
|
|
sql+=" left join base_complaint_operate_log g on t.id=g.relation_code where t.is_del=1 ";
|
|
|
if (StringUtils.isNoneBlank(status)&&"3".equalsIgnoreCase(status)){
|
|
|
sql+=" and g.status='3' ";
|
|
|
}/*else if (StringUtils.isNoneBlank(status)&&"1".equalsIgnoreCase(status)){
|
|
|
sql+=" and g.status='1' ";
|
|
|
}
|
|
|
else if (StringUtils.isNoneBlank(status)&&"2".equalsIgnoreCase(status)){
|
|
|
sql+=" and g.status='2' ";
|
|
|
}*/
|
|
|
if (!queryAll){
|
|
|
BaseComplaintDoctorDO baseComplaintDoctorDO= baseComplaintDoctorDao.findbyDoctorAndDel(doctor);
|
|
|
/*List<BaseComplaintOperateLogDO> logList =baseComplaintOperateDao.findbyOperateFrom(doctor);
|
|
@ -443,13 +463,41 @@ public class BaseComplaintService {
|
|
|
}
|
|
|
//complaint=complaint+","+types;
|
|
|
if (StringUtils.isNoneBlank(complaint)){
|
|
|
if (!StringUtils.isNoneBlank(status)){
|
|
|
sql+=" and t.status !='-1'";
|
|
|
sql+=" and (t.defaultdoctor ='defalutDoctor' or t.defaultdoctor='"+doctor+"')";
|
|
|
}
|
|
|
if (StringUtils.isNoneBlank(status)&&"3".equalsIgnoreCase(status)){
|
|
|
sql+=" and g.operate_from='"+doctor+"'";
|
|
|
}else {
|
|
|
sql+=" and t.complaint_id='"+complaint+"'";
|
|
|
}
|
|
|
if (!StringUtils.isNoneBlank(status)){
|
|
|
sql+=" or (g.operate_from='"+doctor+"' and g.status='3')";
|
|
|
}
|
|
|
if (StringUtils.isNoneBlank(status)&&"3".equalsIgnoreCase(status)){
|
|
|
sql+=" and g.operate_from='"+doctor+"'";
|
|
|
}else if (StringUtils.isNoneBlank(status)&&"0".equalsIgnoreCase(status)){
|
|
|
sql+=" and t.status='0' and (t.passto='"+doctor+"' or t.passto is null )";
|
|
|
} else if (StringUtils.isNoneBlank(status)&&"1".equalsIgnoreCase(status)){
|
|
|
sql+=" and t.status='1' and t.acceptor='"+doctor+"' ";
|
|
|
} else if (StringUtils.isNoneBlank(status)&&"2".equalsIgnoreCase(status)){
|
|
|
sql+=" and t.status='2' and t.operator='"+doctor+"' ";
|
|
|
}
|
|
|
|
|
|
//sql+=" and t.complaint_id in ('"+complaint.replace(",","','")+"')";
|
|
|
sql+=" and t.complaint_id='"+complaint+"'";
|
|
|
}else {
|
|
|
sql+=" and t.id IN (select col.relation_code from base_complaint_operate_log col where col.operate_to = '"+doctor+"' )";
|
|
|
}
|
|
|
if (!StringUtils.isNoneBlank(status)){
|
|
|
sql+=" and t.status !='-1'";
|
|
|
if (StringUtils.isNoneBlank(status)&&"3".equalsIgnoreCase(status)){
|
|
|
sql+=" and g.operate_from='"+doctor+"'";
|
|
|
}else if (StringUtils.isNoneBlank(status)&&"0".equalsIgnoreCase(status)){
|
|
|
sql+=" and t.status='0' and t.passto='"+doctor+"'";
|
|
|
} else if (StringUtils.isNoneBlank(status)&&"1".equalsIgnoreCase(status)){
|
|
|
sql+=" and t.status='1' and t.acceptor='"+doctor+"' ";
|
|
|
} else if (StringUtils.isNoneBlank(status)&&"2".equalsIgnoreCase(status)){
|
|
|
sql+=" and t.status='2' and t.operator='"+doctor+"' ";
|
|
|
} else {
|
|
|
sql+=" and t.id IN (select col.relation_code from base_complaint_operate_log col where col.operate_to = '"+doctor+"' )";
|
|
|
}
|
|
|
}
|
|
|
//complaint=complaint+","+types;
|
|
|
|
|
@ -458,10 +506,11 @@ public class BaseComplaintService {
|
|
|
//sql+=" and t.complaint_id in ('"+complaint.replace(",","','")+"')";
|
|
|
sql+=" and t.complaint_id='"+complaintId+"'";
|
|
|
}
|
|
|
if (StringUtils.isNoneBlank(status)){
|
|
|
sql+=" and t.status ='"+status+"'";
|
|
|
}
|
|
|
}
|
|
|
if (StringUtils.isNoneBlank(status)){
|
|
|
sql+=" and t.status ='"+status+"'";
|
|
|
}
|
|
|
|
|
|
if (StringUtils.isNoneBlank(patientName)){
|
|
|
sql+=" and t.patient_name like '%"+patientName+"%'";
|
|
|
}
|
|
@ -624,33 +673,150 @@ public class BaseComplaintService {
|
|
|
Integer recieve=0;
|
|
|
Integer deal=0;
|
|
|
Integer cacel=0;
|
|
|
Integer passto=0;
|
|
|
Integer total=0;
|
|
|
if (baseComplaintDoctorDO!=null){
|
|
|
Boolean queryAll=false;
|
|
|
if ("admin".equalsIgnoreCase(role)){
|
|
|
queryAll=true;
|
|
|
}
|
|
|
if (!queryAll){
|
|
|
complaints=baseComplaintDao.getCountByStatusAndComplaintId("0",baseComplaintDoctorDO.getComplaintId());
|
|
|
recieve=baseComplaintDao.getCountByStatusAndComplaintId("1",baseComplaintDoctorDO.getComplaintId());
|
|
|
deal=baseComplaintDao.getCountByStatusAndComplaintId("2",baseComplaintDoctorDO.getComplaintId());
|
|
|
//cacel=baseComplaintDao.getCountByStatusAndComplaintId("-1",baseComplaintDoctorDO.getComplaintId());
|
|
|
}else {
|
|
|
complaints=baseComplaintDao.getCountByStatus("0");
|
|
|
recieve=baseComplaintDao.getCountByStatus("1");
|
|
|
deal=baseComplaintDao.getCountByStatus("2");
|
|
|
cacel=baseComplaintDao.getCountByStatus("-1");
|
|
|
}
|
|
|
Boolean queryAll=false;
|
|
|
if ("admin".equalsIgnoreCase(role)){
|
|
|
queryAll=true;
|
|
|
}
|
|
|
if (!queryAll){
|
|
|
if ("808080eb7a194099017a1943fa820004".equalsIgnoreCase(baseComplaintDoctorDO.getComplaintId())) {
|
|
|
complaints = getCountByStatus(doctor,"0",role);
|
|
|
recieve = getCountByStatus(doctor,"1",role);
|
|
|
deal = getCountByStatus(doctor,"2",role);
|
|
|
passto = getCountByPassto(doctor);
|
|
|
total = getCountByStatus(doctor,"",role);
|
|
|
}else{
|
|
|
complaints=getCountByStatus(doctor,"0",role);
|
|
|
recieve=getCountByStatus(doctor,"1",role);
|
|
|
deal=getCountByStatus(doctor,"2",role);
|
|
|
passto=getCountByPassto(doctor);
|
|
|
total=getCountByStatus(doctor,"",role);
|
|
|
}
|
|
|
//cacel=baseComplaintDao.getCountByStatusAndComplaintId("-1",baseComplaintDoctorDO.getComplaintId());
|
|
|
}else {
|
|
|
complaints=baseComplaintDao.getCountByStatus("0");
|
|
|
recieve=baseComplaintDao.getCountByStatus("1");
|
|
|
deal=baseComplaintDao.getCountByStatus("2");
|
|
|
cacel=baseComplaintDao.getCountByStatus("-1");
|
|
|
total = complaints+recieve+deal+cacel;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
Integer total = complaints+recieve+deal+cacel;
|
|
|
Map map=new HashMap();
|
|
|
map.put("complaints",complaints);
|
|
|
map.put("recieve",recieve);
|
|
|
map.put("deal",deal);
|
|
|
map.put("passto",passto);
|
|
|
map.put("cacel",cacel);
|
|
|
map.put("total",total);
|
|
|
return map;
|
|
|
}
|
|
|
public Integer getCountByPassto(String doctor){
|
|
|
String sql ="select count(1) as \"total\" from (select DISTINCT t.id from base_complaint t left join base_complaint_operate_log b" +
|
|
|
" on t.id=b.relation_code where t.is_del='1' and b.status='3'";
|
|
|
if (StringUtils.isNoneBlank(doctor)){
|
|
|
sql+=" and b.operate_from='"+doctor+"'";
|
|
|
}
|
|
|
sql+=") m";
|
|
|
List<Map<String,Object>> listcount=hibenateUtils.createSQLQuery(sql);
|
|
|
Integer count=0;
|
|
|
if (listcount!=null&&listcount.size()>0){
|
|
|
count=Integer.valueOf(listcount.get(0).get("total").toString());
|
|
|
}
|
|
|
return count;
|
|
|
}
|
|
|
public Integer getCountByStatus(String doctor,String status,String role){
|
|
|
Boolean queryAll=false;
|
|
|
if ("admin".equalsIgnoreCase(role)){
|
|
|
queryAll=true;
|
|
|
}
|
|
|
String sql="select count(1) as \"count\" from (select DISTINCT t.id "+
|
|
|
" from base_complaint t " +
|
|
|
" left join base_patient b on t.patient=b.id " ;
|
|
|
|
|
|
sql+=" left join base_complaint_operate_log g on t.id=g.relation_code where t.is_del=1 ";
|
|
|
if (StringUtils.isNoneBlank(status)&&"3".equalsIgnoreCase(status)){
|
|
|
sql+=" and g.status='3' ";
|
|
|
} /*else if (StringUtils.isNoneBlank(status)&&"1".equalsIgnoreCase(status)){
|
|
|
sql+=" and g.status='1' ";
|
|
|
}
|
|
|
else if (StringUtils.isNoneBlank(status)&&"2".equalsIgnoreCase(status)){
|
|
|
sql+=" and g.status='2' ";
|
|
|
}*/
|
|
|
if (!queryAll){
|
|
|
BaseComplaintDoctorDO baseComplaintDoctorDO= baseComplaintDoctorDao.findbyDoctorAndDel(doctor);
|
|
|
/*List<BaseComplaintOperateLogDO> logList =baseComplaintOperateDao.findbyOperateFrom(doctor);
|
|
|
String types= "";
|
|
|
if (logList!=null&&logList.size()>0){
|
|
|
for (int i=0;i<logList.size();i++){
|
|
|
if (i==logList.size()-1){
|
|
|
types+=logList.get(i).getComplaintTo();
|
|
|
}else {
|
|
|
types+=logList.get(i).getComplaintTo()+",";
|
|
|
}
|
|
|
}
|
|
|
}*/
|
|
|
String complaint="";
|
|
|
if (baseComplaintDoctorDO!=null){
|
|
|
if (baseComplaintDoctorDO.getComplaintId().equalsIgnoreCase("808080eb7a194099017a1943fa820004")){
|
|
|
complaint=baseComplaintDoctorDO.getComplaintId();
|
|
|
}
|
|
|
}
|
|
|
//complaint=complaint+","+types;
|
|
|
if (StringUtils.isNoneBlank(complaint)){
|
|
|
if (!StringUtils.isNoneBlank(status)){
|
|
|
sql+=" and t.status !='-1'";
|
|
|
sql+=" and (t.defaultdoctor ='defalutDoctor' or t.defaultdoctor='"+doctor+"')";
|
|
|
}
|
|
|
if (StringUtils.isNoneBlank(status)&&"3".equalsIgnoreCase(status)){
|
|
|
sql+=" and g.operate_from='"+doctor+"'";
|
|
|
}else {
|
|
|
sql+=" and t.complaint_id='"+complaint+"'";
|
|
|
}
|
|
|
if (!StringUtils.isNoneBlank(status)){
|
|
|
sql+=" or (g.operate_from='"+doctor+"' and g.status='3')";
|
|
|
}
|
|
|
if (StringUtils.isNoneBlank(status)&&"3".equalsIgnoreCase(status)){
|
|
|
sql+=" and g.operate_from='"+doctor+"'";
|
|
|
}else if (StringUtils.isNoneBlank(status)&&"0".equalsIgnoreCase(status)){
|
|
|
sql+=" and t.status='0' and (t.passto='"+doctor+"' or t.passto is null )";
|
|
|
} else if (StringUtils.isNoneBlank(status)&&"1".equalsIgnoreCase(status)){
|
|
|
sql+=" and t.status='1' and t.acceptor='"+doctor+"' ";
|
|
|
} else if (StringUtils.isNoneBlank(status)&&"2".equalsIgnoreCase(status)){
|
|
|
sql+=" and t.status='2' and t.operator='"+doctor+"' ";
|
|
|
}
|
|
|
//sql+=" and t.complaint_id in ('"+complaint.replace(",","','")+"')";
|
|
|
}else {
|
|
|
if (StringUtils.isNoneBlank(status)&&"3".equalsIgnoreCase(status)){
|
|
|
sql+=" and g.operate_from='"+doctor+"'";
|
|
|
}else if (StringUtils.isNoneBlank(status)&&"0".equalsIgnoreCase(status)){
|
|
|
sql+=" and t.status='0' and t.passto='"+doctor+"'";
|
|
|
} else if (StringUtils.isNoneBlank(status)&&"1".equalsIgnoreCase(status)){
|
|
|
sql+=" and t.status='1' and t.acceptor='"+doctor+"' ";
|
|
|
} else if (StringUtils.isNoneBlank(status)&&"2".equalsIgnoreCase(status)){
|
|
|
sql+=" and t.status='2' and t.operator='"+doctor+"' ";
|
|
|
} else {
|
|
|
sql+=" and t.id IN (select col.relation_code from base_complaint_operate_log col where col.operate_to = '"+doctor+"' )";
|
|
|
}
|
|
|
}
|
|
|
if (!StringUtils.isNoneBlank(status)){
|
|
|
sql+=" and t.status !='-1'";
|
|
|
}
|
|
|
//complaint=complaint+","+types;
|
|
|
|
|
|
}
|
|
|
System.out.println("sql"+sql);
|
|
|
Integer count = 0;
|
|
|
sql+=")g";
|
|
|
List<Map<String,Object>> total = hibenateUtils.createSQLQuery(sql);
|
|
|
if(total!=null&&total.size()>0){
|
|
|
//mysql 与 Oracle 聚合函数返回类型不一致,需要判断装换
|
|
|
count = Integer.valueOf(total.get(0).get("count").toString());
|
|
|
}
|
|
|
return count;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* 查询投诉数量*/
|
|
@ -663,7 +829,6 @@ public class BaseComplaintService {
|
|
|
recieve=baseComplaintDao.getCountByStatusByPatient("1",patient);
|
|
|
deal=baseComplaintDao.getCountByStatusByPatient("2",patient);
|
|
|
cacel=baseComplaintDao.getCountByStatusByPatient("-1",patient);
|
|
|
|
|
|
Integer total = complaints+recieve+deal+cacel;
|
|
|
Map map=new HashMap();
|
|
|
map.put("complaints",complaints);
|
|
@ -698,6 +863,7 @@ public class BaseComplaintService {
|
|
|
" p.name as \"complaintNameFrom\" ," +
|
|
|
" n.name as \"complaintNameto\", " +
|
|
|
" t.operate_from as \"operateFrom\" ," +
|
|
|
" t.reason as \"reason\" ," +
|
|
|
" t.operate_to as \"operateTo\" ," +
|
|
|
" t.cancel_by as \"cancelBy\", " +
|
|
|
" t.operate_type as \"operateType\", " +
|