|
@ -12,6 +12,7 @@ import com.yihu.wlyy.repository.consult.EvaluateScoreDao;
|
|
|
import com.yihu.wlyy.service.BaseService;
|
|
|
import com.yihu.wlyy.util.ClazzReflect;
|
|
|
import com.yihu.wlyy.util.ImUtill;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.json.JSONArray;
|
|
|
import org.json.JSONObject;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@ -20,6 +21,7 @@ import org.springframework.stereotype.Component;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
@ -47,6 +49,7 @@ public class EvaluateService extends BaseService {
|
|
|
public void saveByJson(String jsonData, String patient) {
|
|
|
JSONObject jsonObject = new JSONObject(jsonData);
|
|
|
String consult = jsonObject.getString("consult");
|
|
|
String remark = jsonObject.getString("remark");
|
|
|
ConsultTeam consultTeam = consultTeamService.findByCode(consult);
|
|
|
//评价的分数
|
|
|
JSONArray evaluateArray = jsonObject.getJSONArray("evaluate");
|
|
@ -83,7 +86,7 @@ public class EvaluateService extends BaseService {
|
|
|
evaluateLabelList.add(evaluateLabel);
|
|
|
}
|
|
|
//计算单条得分
|
|
|
evaluateScoreCal(docEvaMap, consult);
|
|
|
evaluateScoreC(docEvaMap, consult,remark);
|
|
|
this.save(docEvaMap);
|
|
|
evaluateLabelService.save(evaluateLabelList);
|
|
|
consultTeam.setEvaluate(1);
|
|
@ -95,6 +98,29 @@ public class EvaluateService extends BaseService {
|
|
|
this.consultTeamService.save(consultTeam);
|
|
|
}
|
|
|
|
|
|
public void updateByJson(String jsonData, String patient) {
|
|
|
JSONObject jsonObject = new JSONObject(jsonData);
|
|
|
String consult = jsonObject.getString("consult");
|
|
|
String doctors = jsonObject.getString("doctors");
|
|
|
if(StringUtils.isNotBlank(doctors)){
|
|
|
String doctor[] = doctors.split(",");
|
|
|
for(int i =0;i<doctor.length;i++){
|
|
|
//删除各类别分数
|
|
|
String delEvSql = " DELETE FROM wlyy_evaluate WHERE consult ='"+consult+"' AND doctor ='"+doctor+"'";
|
|
|
//删除分数
|
|
|
String delEvScoceSql ="DELETE FROM wlyy_evaluate_score WHERE consult ='"+consult+"' AND doctor ='"+doctor+"'";
|
|
|
//删除标签
|
|
|
String delEvLabelSql="DELETE FROM wlyy_evaluate_label WHERE consult ='"+consult+"' AND doctor ='"+doctor+"'";
|
|
|
//删除旧的平均及标签
|
|
|
jdbcTemplate.execute(delEvSql);
|
|
|
jdbcTemplate.execute(delEvScoceSql);
|
|
|
jdbcTemplate.execute(delEvLabelSql);
|
|
|
}
|
|
|
}
|
|
|
//保存新的平均
|
|
|
saveByJson(jsonData,patient);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询某个咨询某种类型的评价
|
|
|
*
|
|
@ -130,7 +156,49 @@ public class EvaluateService extends BaseService {
|
|
|
return evaluates;
|
|
|
}
|
|
|
|
|
|
private void evaluateScoreC(Map<String, List<Evaluate>> docEvaMap, String consult,String remark) {
|
|
|
for (String doctor : docEvaMap.keySet()) {
|
|
|
List<Evaluate> evaluates = docEvaMap.get(doctor);
|
|
|
BigDecimal anonymousScore1 = new BigDecimal(ANONYMOUS_SCORE_DEFAULT_ONE);//专业能力
|
|
|
BigDecimal anonymousScore2 = new BigDecimal(ANONYMOUS_SCORE_DEFAULT_TWO);//服务态度
|
|
|
BigDecimal anonymousScore3 = new BigDecimal(ANONYMOUS_SCORE_DEFAULT_THREE);//回复速度
|
|
|
//计算此次评价的分数来源
|
|
|
for (Evaluate evaluate : docEvaMap.get(doctor)) {
|
|
|
if (evaluate.getEvaluateType() == 1) {
|
|
|
anonymousScore1 = BigDecimal.valueOf(evaluate.getScore());
|
|
|
} else if (evaluate.getEvaluateType() == 2) {
|
|
|
anonymousScore2 = BigDecimal.valueOf(evaluate.getScore());
|
|
|
} else if (evaluate.getEvaluateType() == 3) {
|
|
|
anonymousScore3 = BigDecimal.valueOf(evaluate.getScore());
|
|
|
}
|
|
|
}
|
|
|
BigDecimal score = (anonymousScore1.add(anonymousScore2).add(anonymousScore3)).divide(new BigDecimal(3),1,RoundingMode.HALF_UP);
|
|
|
EvaluateScore evaluateScore = new EvaluateScore();
|
|
|
evaluateScore.setConsult(consult);
|
|
|
evaluateScore.setDoctor(doctor);
|
|
|
evaluateScore.setScore(score.doubleValue());
|
|
|
if(StringUtils.isNotBlank(remark)){
|
|
|
evaluateScore.setRemark(remark);
|
|
|
}else{
|
|
|
//如果没有评价信息,根据分数评价内容
|
|
|
if(score.compareTo(new BigDecimal(71))==0&&score.compareTo(new BigDecimal(71))==1){
|
|
|
evaluateScore.setRemark("好评");
|
|
|
}else if(score.compareTo(new BigDecimal(41))==-1){
|
|
|
evaluateScore.setRemark("差评");
|
|
|
}else{
|
|
|
evaluateScore.setRemark("中评");
|
|
|
}
|
|
|
}
|
|
|
evaluateScoreDao.save(evaluateScore);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 改用evaluateScoreC的平均规则
|
|
|
* @param docEvaMap
|
|
|
* @param consult
|
|
|
*/
|
|
|
@Deprecated
|
|
|
private void evaluateScoreCal(Map<String, List<Evaluate>> docEvaMap, String consult) {
|
|
|
for (String doctor : docEvaMap.keySet()) {
|
|
|
List<Evaluate> evaluates = docEvaMap.get(doctor);
|
|
@ -203,8 +271,62 @@ public class EvaluateService extends BaseService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
;
|
|
|
public JSONArray getDoctorSorceList(String doctor,String type,Integer page,Integer size){
|
|
|
|
|
|
String sql = "SELECT " +
|
|
|
" (case e.type WHEN 2 then '匿名' ELSE p.`name` END) `name`, " +
|
|
|
" TIMESTAMPDIFF(YEAR,p.birthday,SYSDATE()) age,s.consult,s.score,e.type, " +
|
|
|
" max(case e.evaluate_type when 1 then e.score else 0 end) ability, " +
|
|
|
" max(case e.evaluate_type when 2 then e.score else 0 end) attitude, " +
|
|
|
" max(case e.evaluate_type when 3 then e.score else 0 end) speed " +
|
|
|
" FROM wlyy_evaluate_score s " +
|
|
|
" ,wlyy_evaluate e " +
|
|
|
" ,wlyy_consult_team c " +
|
|
|
" ,wlyy_patient p " +
|
|
|
" WHERE s.consult = e.consult " +
|
|
|
" AND s.consult = c.consult " +
|
|
|
" AND p.`code` = c.patient " +
|
|
|
" AND e.evaluate_type <> 0 "+
|
|
|
" AND s.doctor ="+doctor+" ";
|
|
|
|
|
|
|
|
|
if("0".equals(type)){
|
|
|
//全部
|
|
|
}else if("1".equals(type)){
|
|
|
//好评
|
|
|
sql = sql +" AND s.score >=71 ";
|
|
|
}else if("2".equals(type)){
|
|
|
//中评
|
|
|
sql = sql +" AND s.score >=41 AND s.score <71 ";
|
|
|
}else if("3".equals(type)){
|
|
|
//差评
|
|
|
sql = sql +" AND s.score <41 ";
|
|
|
}
|
|
|
|
|
|
if(page!=null&&size!=null){
|
|
|
page = page -1;
|
|
|
sql = sql+ " GROUP BY s.consult LIMIT "+page*size+","+size+" ";
|
|
|
}else{
|
|
|
sql = sql=" GROUP BY s.consult ";
|
|
|
}
|
|
|
|
|
|
List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
|
|
|
return new JSONArray(rs);
|
|
|
}
|
|
|
|
|
|
public JSONArray getScoreListTitle(String doctor){
|
|
|
String sql ="SELECT " +
|
|
|
" (SELECT COUNT(1) FROM wlyy_evaluate_score s " +
|
|
|
" WHERE s.doctor="+doctor+") total, " +
|
|
|
" (SELECT COUNT(1) FROM wlyy_evaluate_score s " +
|
|
|
" WHERE s.doctor="+doctor+" AND s.score>=71) good, " +
|
|
|
" (SELECT COUNT(1) FROM wlyy_evaluate_score s " +
|
|
|
" WHERE s.doctor="+doctor+" AND s.score>=41 AND s.score<71) notBad, " +
|
|
|
" (SELECT COUNT(1) FROM wlyy_evaluate_score s " +
|
|
|
" WHERE s.doctor="+doctor+" AND s.score<41) bad";
|
|
|
List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
|
|
|
return new JSONArray(rs);
|
|
|
}
|
|
|
|
|
|
public static Long REAL_SCORE_DEFAULT = 100L;
|
|
|
public static Long ANONYMOUS_SCORE_DEFAULT_ONE = 100L;
|