Kaynağa Gözat

Merge branch 'dev' of http://192.168.1.220:10080/Amoy/patient-co-management into dev

yeshijie 8 yıl önce
ebeveyn
işleme
a0c4d01a14

+ 0 - 2
.gitignore

@ -43,8 +43,6 @@ project/build/target/
project/plugins/target/
project/plugins/lib_managed/
project/plugins/src_managed/
logs/
log/
spark-tests.log
streaming-tests.log
dependency-reduced-pom.xml

+ 5 - 5
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/service/JobService.java

@ -164,7 +164,7 @@ public class JobService {
                params.put("yesterday", getYesterday(0 - i));
                if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                    quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-", ""), params);
                    Thread.sleep(20000L);
                    Thread.sleep(40000L);
                }
            }
        }
@ -206,7 +206,7 @@ public class JobService {
            params.put("yesterday", yesterday);
            if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-", ""), params);
                Thread.sleep(20000L);
                Thread.sleep(40000L);
            }
        }
@ -252,7 +252,7 @@ public class JobService {
        params.put("yesterday", yesterday);
        if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
            quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-", ""), params);
            Thread.sleep(20000L);
            Thread.sleep(40000L);
        }
    }
@ -283,7 +283,7 @@ public class JobService {
            params.put("yesterday", getYesterday(0 - i));
            if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-", ""), params);
                Thread.sleep(20000L);
                Thread.sleep(40000L);
            }
        }
    }
@ -418,7 +418,7 @@ public class JobService {
        params.put("now", yesterday);
        params.put("yesterday", day);
        quartzHelper.startNow(HealthMessageJob.class, HealthMessageJob.jobKey + UUID.randomUUID().toString().replace("-", ""), params);
        Thread.sleep(20000L);
        Thread.sleep(40000L);
    }
    public void productHealthDataByDayToDay(String start, String end) throws Exception {

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

@ -26,133 +26,152 @@ import java.util.*;
@Component
@Transactional
public class EvaluateService extends BaseService {
	@Autowired
	EvaluateDao evaluateDao;
	@Autowired
	ConsultTeamService consultTeamService;
	@Autowired
	EvaluateLabelService evaluateLabelService;
	@Autowired
	JdbcTemplate jdbcTemplate;
	@Autowired
	ConsultTeamDoctorDao consultTeamDoctorDao;
	@Autowired
	EvaluateScoreDao evaluateScoreDao;
	private  void save(Map<String,List<Evaluate>> docEvaMap){
		for(String key :docEvaMap.keySet())
			evaluateDao.save(docEvaMap.get(key));
	}
	public void saveByJson(String jsonData,String patient){
		JSONObject jsonObject = new JSONObject(jsonData);
		String consult = jsonObject.getString("consult");
		ConsultTeam consultTeam  = consultTeamService.findByCode(consult);
		JSONArray evaluateArray = jsonObject.getJSONArray("evaluate");
		JSONArray labelArray = jsonObject.getJSONArray("label");
		List<Evaluate> evaluateList =null;
		List<EvaluateLabel> evaluateLabelList = new ArrayList<>();
		Map<String,List<Evaluate>> docEvaMap = new HashMap<>();
		for(Object evaluateObj: evaluateArray){
			Evaluate evaluate = new Evaluate();
			JSONObject obj =(JSONObject) evaluateObj;
			ClazzReflect clazzReflect = new ClazzReflect();
			evaluate = (Evaluate)clazzReflect.formatToClazz(evaluate,obj);
			evaluate.setConsult(consult);
			evaluate.setPatient(patient);
			if(docEvaMap.get(evaluate.getDoctor())==null){
				evaluateList = new ArrayList<>();
				evaluateList.add(evaluate);
				docEvaMap.put(evaluate.getDoctor(),evaluateList);
			}else{
				docEvaMap.get(evaluate.getDoctor()).add(evaluate);
			}
		}
		for(Object labelObj: labelArray){
			EvaluateLabel evaluateLabel = new EvaluateLabel();
			JSONObject obj =(JSONObject) labelObj;
			ClazzReflect clazzReflect = new ClazzReflect();
			evaluateLabel = (EvaluateLabel)clazzReflect.formatToClazz(evaluateLabel,obj);
			evaluateLabel.setConsult(consult);
			evaluateLabel.setPatient(patient);
			evaluateLabelList.add(evaluateLabel);
		}
		//计算单条得分
		evaluateScoreCal(docEvaMap,consult);
		this.save(docEvaMap);
		evaluateLabelService.save(evaluateLabelList);
		consultTeam.setEvaluate(1);
		consultTeam.setEvaluateTime(new Date());
		JSONObject topicObject = new JSONObject();
		topicObject.put("evaluate",1);
		topicObject.put("evaluate_time",new Date());
		ImUtill.updateTopics(consult,topicObject.toString());
		this.consultTeamService.save(consultTeam);
	}
	/**
	 * 查询某个咨询某种类型的评价
	 * @param consult
	 * @param type
	 * @return
	 */
	public List<Evaluate> getEvaluateByConsultAndType(String consult,int type){
		List<Evaluate> evaluates = evaluateDao.findByConsultAndType(consult,type);
		return 	evaluates;
	}
	/**
	 * 查询某个咨询的评价
	 * @param consult
	 * @return
	 */
	public List<Evaluate> getEvaluateByConsult(String consult){
		List<Evaluate> evaluates = evaluateDao.findByConsult(consult);
		return 	evaluates;
	}
	/**
	 * 获取某个医生的某种类型的评价
	 * @param doctor
	 * @param type
	 * @return
	 */
	public List<Evaluate> getEvaluateByDoctorAndType(String doctor,int type){
		List<Evaluate> evaluates = evaluateDao.findByDoctorAndType(doctor,type);
		return 	evaluates;
	}
	private void evaluateScoreCal(Map<String,List<Evaluate>> docEvaMap,String consult){
		for(String doctor:docEvaMap.keySet()){
			BigDecimal realScore = new BigDecimal(REAL_SCORE_DEFAULT);//实名评价
			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()==0){
					realScore = BigDecimal.valueOf(evaluate.getScore());
				}else 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());
				}
			}
			String evaluateTimesSql = "select count(1) as count from wlyy_evaluate w where w.doctor =? GROUP BY w.consult,w.doctor";
			//有效评价次数
			List<Map<String, Object>> evaluateTimesList = jdbcTemplate.queryForList(evaluateTimesSql, new Object[]{doctor});
			//有效咨询次数
			int consultTimes = consultTeamDoctorDao.countByDoctorAndType(2, doctor);
			BigDecimal score = BigDecimal.ZERO;//总分
			BigDecimal anonymousScore = BigDecimal.ZERO;//加权平均分笔直综合
			BigDecimal jiaquan = BigDecimal.ZERO;//加权平均分
			//加权平均分=(实名评分×30%+专业能力×20%+服务态度×25%+回复速度×25%)/有效评价次数
			anonymousScore = anonymousScore.add(realScore.multiply(new BigDecimal("0.3")));
			anonymousScore =anonymousScore.add(anonymousScore1.multiply(new BigDecimal("0.2")));
			anonymousScore =anonymousScore.add(anonymousScore2.multiply(new BigDecimal("0.25")));
			anonymousScore =anonymousScore.add(anonymousScore3.multiply(new BigDecimal("0.25")));
    @Autowired
    EvaluateDao evaluateDao;
    @Autowired
    ConsultTeamService consultTeamService;
    @Autowired
    EvaluateLabelService evaluateLabelService;
    @Autowired
    JdbcTemplate jdbcTemplate;
    @Autowired
    ConsultTeamDoctorDao consultTeamDoctorDao;
    @Autowired
    EvaluateScoreDao evaluateScoreDao;
    private void save(Map<String, List<Evaluate>> docEvaMap) {
        for (String key : docEvaMap.keySet())
            evaluateDao.save(docEvaMap.get(key));
    }
    public void saveByJson(String jsonData, String patient) {
        JSONObject jsonObject = new JSONObject(jsonData);
        String consult = jsonObject.getString("consult");
        ConsultTeam consultTeam = consultTeamService.findByCode(consult);
        //评价的分数
        JSONArray evaluateArray = jsonObject.getJSONArray("evaluate");
        //标签
        JSONArray labelArray = jsonObject.getJSONArray("label");
        List<Evaluate> evaluateList = null;
        List<EvaluateLabel> evaluateLabelList = new ArrayList<>();
        Map<String, List<Evaluate>> docEvaMap = new HashMap<>();
        //反射生成评价对象
        for (Object evaluateObj : evaluateArray) {
            Evaluate evaluate = new Evaluate();
            JSONObject obj = (JSONObject) evaluateObj;
            ClazzReflect clazzReflect = new ClazzReflect();
            evaluate = (Evaluate) clazzReflect.formatToClazz(evaluate, obj);
            evaluate.setConsult(consult);
            evaluate.setPatient(patient);
            //把分数放入map中 给参与此次咨询的医生都评分
            if (docEvaMap.get(evaluate.getDoctor()) == null) {
                evaluateList = new ArrayList<>();
                evaluateList.add(evaluate);
                docEvaMap.put(evaluate.getDoctor(), evaluateList);
            } else {
                docEvaMap.get(evaluate.getDoctor()).add(evaluate);
            }
        }
        //反射得到标签内容
        for (Object labelObj : labelArray) {
            EvaluateLabel evaluateLabel = new EvaluateLabel();
            JSONObject obj = (JSONObject) labelObj;
            ClazzReflect clazzReflect = new ClazzReflect();
            evaluateLabel = (EvaluateLabel) clazzReflect.formatToClazz(evaluateLabel, obj);
            evaluateLabel.setConsult(consult);
            evaluateLabel.setPatient(patient);
            evaluateLabelList.add(evaluateLabel);
        }
        //计算单条得分
        evaluateScoreCal(docEvaMap, consult);
        this.save(docEvaMap);
        evaluateLabelService.save(evaluateLabelList);
        consultTeam.setEvaluate(1);
        consultTeam.setEvaluateTime(new Date());
        JSONObject topicObject = new JSONObject();
        topicObject.put("evaluate", 1);
        topicObject.put("evaluate_time", new Date());
        ImUtill.updateTopics(consult, topicObject.toString());
        this.consultTeamService.save(consultTeam);
    }
    /**
     * 查询某个咨询某种类型的评价
     *
     * @param consult
     * @param type
     * @return
     */
    public List<Evaluate> getEvaluateByConsultAndType(String consult, int type) {
        List<Evaluate> evaluates = evaluateDao.findByConsultAndType(consult, type);
        return evaluates;
    }
    /**
     * 查询某个咨询的评价
     *
     * @param consult
     * @return
     */
    public List<Evaluate> getEvaluateByConsult(String consult) {
        List<Evaluate> evaluates = evaluateDao.findByConsult(consult);
        return evaluates;
    }
    /**
     * 获取某个医生的某种类型的评价
     *
     * @param doctor
     * @param type
     * @return
     */
    public List<Evaluate> getEvaluateByDoctorAndType(String doctor, int type) {
        List<Evaluate> evaluates = evaluateDao.findByDoctorAndType(doctor, type);
        return evaluates;
    }
    private void evaluateScoreCal(Map<String, List<Evaluate>> docEvaMap, String consult) {
        for (String doctor : docEvaMap.keySet()) {
            List<Evaluate> evaluates = docEvaMap.get(doctor);
            if (evaluates.size() == 1) {
                //如果一条那么这条一定是实名,只有实名那么分数按实名的来存
                EvaluateScore evaluateScore = new EvaluateScore();
                evaluateScore.setConsult(consult);
                evaluateScore.setDoctor(doctor);
                evaluateScore.setScore(Double.valueOf(evaluates.get(0).getScore()));
                evaluateScoreDao.save(evaluateScore);
            } else {
                //如果既有实名和匿名的那么按照公式来存
                BigDecimal realScore = new BigDecimal(REAL_SCORE_DEFAULT);//实名评价
                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() == 0) {
                        realScore = BigDecimal.valueOf(evaluate.getScore());
                    } else 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());
                    }
                }
                String evaluateTimesSql = "select count(1) as count from wlyy_evaluate w where w.doctor =? GROUP BY w.consult,w.doctor";
                //有效评价次数
                List<Map<String, Object>> evaluateTimesList = jdbcTemplate.queryForList(evaluateTimesSql, new Object[]{doctor});
                //有效咨询次数
                int consultTimes = consultTeamDoctorDao.countByDoctorAndType(2, doctor);
                BigDecimal score = BigDecimal.ZERO;//总分
                BigDecimal anonymousScore = BigDecimal.ZERO;//加权平均分笔直综合
                BigDecimal jiaquan = BigDecimal.ZERO;//加权平均分
                //加权平均分=(实名评分×30%+专业能力×20%+服务态度×25%+回复速度×25%)/有效评价次数
                anonymousScore = anonymousScore.add(realScore.multiply(new BigDecimal("0.3")));
                anonymousScore = anonymousScore.add(anonymousScore1.multiply(new BigDecimal("0.2")));
                anonymousScore = anonymousScore.add(anonymousScore2.multiply(new BigDecimal("0.25")));
                anonymousScore = anonymousScore.add(anonymousScore3.multiply(new BigDecimal("0.25")));
//			int evaTimes = 0;
//			if(evaluateTimesList.size()>0){
//				evaTimes = evaluateTimesList.size();
@ -174,19 +193,21 @@ public class EvaluateService extends BaseService {
//				jiaquan = (jiaquan.subtract(BigDecimal.valueOf(80L))).divide(BigDecimal.valueOf(1L),2,BigDecimal.ROUND_HALF_UP);
//			}
//			score = jiaquan.add(BigDecimal.valueOf(80L)).setScale(1, BigDecimal.ROUND_HALF_UP);
			score=anonymousScore;
			EvaluateScore evaluateScore = new EvaluateScore();
			evaluateScore.setConsult(consult);
			evaluateScore.setDoctor(doctor);
			evaluateScore.setScore(score.doubleValue());
			evaluateScoreDao.save(evaluateScore);
		}
	};
                score = anonymousScore;
                EvaluateScore evaluateScore = new EvaluateScore();
                evaluateScore.setConsult(consult);
                evaluateScore.setDoctor(doctor);
                evaluateScore.setScore(score.doubleValue());
                evaluateScoreDao.save(evaluateScore);
            }
        }
    }
    ;
	public static Long REAL_SCORE_DEFAULT =100L;
	public static Long ANONYMOUS_SCORE_DEFAULT_ONE =100L;
	public static Long ANONYMOUS_SCORE_DEFAULT_TWO =100L;
	public static Long ANONYMOUS_SCORE_DEFAULT_THREE =100L;
    public static Long REAL_SCORE_DEFAULT = 100L;
    public static Long ANONYMOUS_SCORE_DEFAULT_ONE = 100L;
    public static Long ANONYMOUS_SCORE_DEFAULT_TWO = 100L;
    public static Long ANONYMOUS_SCORE_DEFAULT_THREE = 100L;
}

+ 1 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/family/FamilyMemberService.java

@ -1176,7 +1176,7 @@ public class FamilyMemberService extends BaseService {
        String result = HttpUtil.sendGet(userInfo_url, params);
        JSONObject json = new JSONObject(result);
        if (json.has("subscribe")) {
            return json.get(" ").toString();
            return json.get("subscribe").toString();
        } else {
            return null;
        }

+ 27 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java

@ -3415,4 +3415,31 @@ public class FamilyContractService extends BaseService {
    public SignFamily findOutTimeSigningByPatient(String patient) {
        return signFamilyDao.findOutTimeSigningByPatient(patient);
    }
    public List<Map<String,Object>> patientGroupByServerType(String doctor) {
        // 先根据server_type分组查找wlyy_sign_family表中该医生的签约的患者,然后wlyy_sign_dict left join 得到全部的类型
        String sql=" select sd.code labelCode,sd.name labelName,IFNULL(t.count,0) amount from wlyy_sign_dict sd  " +
                " left join " +
                " ( " +
                " SELECT " +
                "  sf.server_type type, " +
                "  sf.server_type_name name, " +
                "  count(id) count " +
                " FROM " +
                "  wlyy_sign_family sf " +
                " WHERE " +
                "  sf. STATUS > 0 " +
                " AND ( " +
                "  sf.doctor =? " +
                "  or sf.doctor_health =? " +
                " ) " +
                " group by sf.server_type " +
                " ) t " +
                " on sd.`code`=t.type " +
                " where  sd.id in (4,5,6,7,8,9,10,11,12)";
        List<Map<String,Object>> queryData=jdbcTemplate.queryForList(sql,doctor,doctor);
        return queryData;
    }
}

+ 19 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/sign/DoctorFamilyContractController.java

@ -1527,6 +1527,23 @@ public class DoctorFamilyContractController extends WeixinBaseController {
        }
    }
    /**
     * test
     * @return
     */
    @RequestMapping(value = "/patientGroupByServerType", method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation(value = "根据ServerType分组查询医生签约的居民")
    public String patientGroupByServerType() {
        try {
            List<Map<String,Object>>  result = familyContractService.patientGroupByServerType(getUID());
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    @RequestMapping(value = "/wechat_focus_remind", method = {RequestMethod.GET, RequestMethod.POST})
    @ResponseBody
    @ApiOperation(value = "微信关注提醒")
@ -1567,6 +1584,8 @@ public class DoctorFamilyContractController extends WeixinBaseController {
        }
    }
    /**
     * 是否已提醒关注
     *