Jelajahi Sumber

Merge branch 'dev' of trick9191/patient-co-management into dev

trick9191 8 tahun lalu
induk
melakukan
bb5b1dd39b

+ 10 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/consult/EvaluateScore.java

@ -20,6 +20,8 @@ public class EvaluateScore extends IdEntity {
    private Double score;//分数
    private String remark;//备注
    public String getDoctor() {
        return doctor;
    }
@ -43,4 +45,12 @@ public class EvaluateScore extends IdEntity {
    public void setScore(Double score) {
        this.score = score;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
}

+ 14 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/consult/EvaluateScoreJob.java

@ -57,7 +57,20 @@ public class EvaluateScoreJob implements Job {
                    //计算完毕
                    BigDecimal amount = new BigDecimal(evaluateList.get(0).get("score").toString());
                    BigDecimal count = new BigDecimal(evaluateTimes.get(0).get("count").toString());
                    BigDecimal score = amount.divide(count, 1, BigDecimal.ROUND_HALF_UP);
                    BigDecimal avg = amount.divide(count, 1, BigDecimal.ROUND_HALF_UP);
                    BigDecimal coefficient ;
                    if(count.compareTo(new BigDecimal(100))==-1&&count.compareTo(new BigDecimal(100))==0){
                        //如果数目小于等于100,系数为3
                        coefficient = new BigDecimal(3);
                    }else if(count.compareTo(new BigDecimal(1000))==1){
                        //如果数量大于1000,系数为1
                        coefficient = new BigDecimal(1);
                    }else{
                        //系数为2
                        coefficient = new BigDecimal(2);
                    }
                    //评分=80+(平均分-80)/系数
                    BigDecimal score = new BigDecimal(80).add((avg.subtract(new BigDecimal(80)).divide(coefficient,1,BigDecimal.ROUND_HALF_UP)));
                    Doctor d = doctorDao.findByCode(doctor);
                    if (d != null) {
                        d.setEvaluateScore(score.doubleValue());

+ 124 - 2
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/consult/EvaluateService.java

@ -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;

+ 53 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/consult/EvaluateController.java

@ -51,6 +51,23 @@ public class EvaluateController  extends BaseController {
        }
    }
    /**
     * 更新平均
     * @param evaluateJson
     * @return
     */
    @RequestMapping(value = "updete")
    @ResponseBody
    public String updete(@RequestParam(required = true,value="evaluate") String evaluateJson){
        try{
            evaluateService.updateByJson(evaluateJson,getRepUID());
            return  write(200,"保存成功!");
        }catch (Exception e){
            error(e);
            return write(-1,e.getMessage());
        }
    }
    /**
     * 获取评价
     * @param consult 咨询
@ -81,6 +98,42 @@ public class EvaluateController  extends BaseController {
        }
    }
    /**
     * 获取医生评价列表
     * @param type
     * @param page
     * @param size
     * @return
     */
    @RequestMapping(value = "getDoctorSorceList")
    @ResponseBody
    public String getDoctorSorceList(@RequestParam(required = true)String type,
                                     @RequestParam(required = false)Integer page,
                                     @RequestParam(required = false)Integer size){
        try{
            JSONArray rs =evaluateService.getDoctorSorceList(getUID(),type,page,size);
            return  write(200,"查询成功!","data",rs);
        }catch (Exception e){
            error(e);
            return write(-1,e.getMessage());
        }
    }
    /**
     * 获取医生各个类型评价数
     * @return
     */
    @RequestMapping(value = "getScoreListTitle")
    @ResponseBody
    public String  getScoreListTitle(){
        try{
            JSONArray rs =evaluateService.getScoreListTitle(getUID());
            return  write(200,"查询成功!","data",rs);
        }catch (Exception e){
            error(e);
            return write(-1,e.getMessage());
        }
    }
    /**
     * 保存评价