Browse Source

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

8 years ago
parent
commit
0588315147

+ 174 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/ReyTimeConsultJob.java

@ -0,0 +1,174 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.QuartzJobLogDao;
import com.yihu.wlyy.statistics.etl.dataFilter.ConsultDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.consult.ConsultTeam;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.util.JsonUtil;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Calendar;
/**
 * 咨询模块
 * 及时回复的指标执行类
 */
@Component
@Scope("prototype")
@DisallowConcurrentExecution//防止到了执行时间点前一任务还在执行中,但是这时有空闲的线程,那么马上又会执行,这样一来就会存在同一job被并行执行
public class ReyTimeConsultJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private ConsultDataFilter consultDataFilter;
    @Autowired
    private DBExtract dbExtract;
    //im库的jdbcTemplate
    private JdbcTemplate imjdbcTemplate;
    @Resource(name="imData")
    private DataSource dataSource;
    String yesterday;
    String daybefore;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        try {
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            //初始化参数
            JobDataMap map = context.getJobDetail().getJobDataMap();
            wlyyQuota = (WlyyQuotaVO) map.get("quota");
            wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
            //初始化im数据源
            this.imjdbcTemplate = new JdbcTemplate();
            this.imjdbcTemplate.setDataSource(dataSource);
            daybefore = StringUtils.isEmpty(map.get("daybefore")) ? SignJob.getDayString(-2) : map.get("daybefore").toString();
            yesterday = StringUtils.isEmpty(map.get("yesterday")) ? SignJob.getDayString(-1) : map.get("yesterday").toString();  //線刪除今天的数据
            //计算指标
            computequota();
        } catch (Exception e) {
            //如果出錯立即重新執行
            JobExecutionException e2 = new JobExecutionException(e);
            e2.setRefireImmediately(true);
        }
    }
    @Transactional
    private void computequota() {
        try {
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 23 + "'");
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            //查找Im库中的所有的医生ID
            List<String> consultIdMaps = getConsultIdsByIm();
            StringBuffer sb=new StringBuffer("");
            for(int i=0;i<consultIdMaps.size();i++){
                sb.append(consultIdMaps.get(i));
                if(i<(consultIdMaps.size()-1)){
                    sb.append(",");
                }
            }
            String sql ="";
            if(consultIdMaps.size()>0){
                sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult in ("+sb.toString()+")";
            }else{
                sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult ='noRey' ";
            } //抽取數據
            List<ConsultTeam> consultTeams = dbExtract.extract(ConsultTeam.class, sql);
            System.out.println("consultTeams num"+consultTeams.size());
            //過濾數據
            FilterModel etlModels = consultDataFilter.filter(consultTeams, sql, yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>> returnDatas = levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            dbStorage.saveByLevel1(returnDatas, yesterday, wlyyQuota);
            //保存日志
            quartzJobLog.setJobEndTime(new Date());
            quartzJobLog.setJobContent(JsonUtil.objToStr(etlModels.getLogModel()));
            quartzJobLog.setJobType(etlModels.getError() ? "1" : "0");
            quartzJobLogDao.save(quartzJobLog);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public String getYesterday() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -1);
        String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
        return yesterday;
    }
    /**
     * 找出 im中的所有未回复的topic
     * 名医有算 求助没有
     * @return
     */
    public List<String> getConsultIdsByIm() {
        String sql = "SELECT DISTINCT t.id consultId " +
                " FROM " +
                " topics t, " +
                " participants p, " +
                " doctors d ," +
                " sessions s " +
                " WHERE " +
                " p.participant_id = d.id " +
                " AND t.session_id = p.session_id " +
                " AND t.session_id = s.id " +
                " AND s.business_type=2 " +
                " AND t.`reply`=1 " +
                "  AND t.create_time< '" + yesterday + Constant.quota_date_last + "'";
        List<Map<String, Object>> ims = imjdbcTemplate.queryForList(sql);
        //得到医生的id
        List<String> ids = new ArrayList<>();
        ims.stream().forEach(map -> {
            if (map.containsKey("consultId")) {
                ids.add("'"+ String.valueOf(map.get("consultId"))+"'");
            }
        });
        System.out.println("ims num:"+ims.size());
        System.out.println("sql:"+sql);
        System.out.println("ids num:"+ids.size());
        return ids;
    }
}

+ 217 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/model/consult/ConsultTeamDto.java

@ -0,0 +1,217 @@
package com.yihu.wlyy.statistics.model.consult;
import java.util.Date;
/**
 * Created by Trick on 2017/4/25.
 */
public class ConsultTeamDto {
    private String consult;         // 咨询标识
    private String doctor;          // 医生标识
    private String team;            // 三师团队标识
    private Integer type;           //  1、三师咨询,2、家庭医生咨询,6、名医咨询
    private String patient;         // 提问者标识
    private String name;            // 患者姓名
    private Integer sex;            // 患者性别
    private Date birthday;          // 患者生日
    private String photo;           // 患者头像
    private String when;            // 发病日期
    private String symptoms;        // 主要症状
    private Integer status;         // 咨询状态(0进行中,1已完成,-1患者取消,-2超时未响应自动关闭)
    private String images;          // 咨询图片URL,多图以逗号分隔
    private String voice;           // 咨询语音URL
    private String comment;         // 用户评价标识
    private String commentContent;  // 用户评价内容
    private Integer commentStar;    // 用户评价星级
    private Integer doctorRead;     // 医生未读数量
    private Integer patientRead;    // 患者未读数量
    private Date czrq;              // 咨询时间
    private String del;             // 作废标识,1正常,0作废
    private Long adminTeamCode;//行政团队ID
    private Date replyTime;
    public String getConsult() {
        return consult;
    }
    public void setConsult(String consult) {
        this.consult = consult;
    }
    public String getDoctor() {
        return doctor;
    }
    public void setDoctor(String doctor) {
        this.doctor = doctor;
    }
    public String getTeam() {
        return team;
    }
    public void setTeam(String team) {
        this.team = team;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getSex() {
        return sex;
    }
    public void setSex(Integer sex) {
        this.sex = sex;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getPhoto() {
        return photo;
    }
    public void setPhoto(String photo) {
        this.photo = photo;
    }
    public String getWhen() {
        return when;
    }
    public void setWhen(String when) {
        this.when = when;
    }
    public String getSymptoms() {
        return symptoms;
    }
    public void setSymptoms(String symptoms) {
        this.symptoms = symptoms;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getImages() {
        return images;
    }
    public void setImages(String images) {
        this.images = images;
    }
    public String getVoice() {
        return voice;
    }
    public void setVoice(String voice) {
        this.voice = voice;
    }
    public String getComment() {
        return comment;
    }
    public void setComment(String comment) {
        this.comment = comment;
    }
    public String getCommentContent() {
        return commentContent;
    }
    public void setCommentContent(String commentContent) {
        this.commentContent = commentContent;
    }
    public Integer getCommentStar() {
        return commentStar;
    }
    public void setCommentStar(Integer commentStar) {
        this.commentStar = commentStar;
    }
    public Integer getDoctorRead() {
        return doctorRead;
    }
    public void setDoctorRead(Integer doctorRead) {
        this.doctorRead = doctorRead;
    }
    public Integer getPatientRead() {
        return patientRead;
    }
    public void setPatientRead(Integer patientRead) {
        this.patientRead = patientRead;
    }
    public Date getCzrq() {
        return czrq;
    }
    public void setCzrq(Date czrq) {
        this.czrq = czrq;
    }
    public String getDel() {
        return del;
    }
    public void setDel(String del) {
        this.del = del;
    }
    public Long getAdminTeamCode() {
        return adminTeamCode;
    }
    public void setAdminTeamCode(Long adminTeamCode) {
        this.adminTeamCode = adminTeamCode;
    }
    public Date getReplyTime() {
        return replyTime;
    }
    public void setReplyTime(Date replyTime) {
        this.replyTime = replyTime;
    }
}

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

@ -651,7 +651,7 @@ public class FamilyMemberService extends BaseService {
     * @throws Exception
     */
    @Transactional
    public int addMenberByWXTemp(Long id, String state) throws Exception {
    public int addMenberByWXTemp(Long id, String state,String access_token) throws Exception {
        if (StringUtils.isNotBlank(state)) {
            //同意添加
            if ("1".equals(state)) {
@ -663,6 +663,8 @@ public class FamilyMemberService extends BaseService {
                Patient p = patientDao.findByCode(temp.getPatient());
                Patient m = patientDao.findByCode(temp.getFamilyMember());
                System.out.println("----:openId "+p.getOpenid());
                if (p == null) {
                    return -1;
                }
@ -677,6 +679,23 @@ public class FamilyMemberService extends BaseService {
                    //保存
                    temp.setState("1");
                    patientFamilyTempDao.save(temp);
                    if(StringUtils.isNotBlank(p.getOpenid())){
                        //发送添加成功消息模板
                        JSONObject json = new JSONObject();
                        json.put("first", p.getName() + ",您好!添加家人"+m.getName()+"申请成功。");
                        json.put("keyword1", "添加家人申请成功");
                        json.put("keyword2", DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
//                        json.put("keyword3", m.getName());
//                        json.put("keyword4", relations.get(temp.getFamilyRelation()));
                        json.put("remark",
                                "家人:"+m.getName()+"\n"+
                                "家庭关系:"+relations.get(temp.getFamilyRelation())+"\n"+
                                "点击查看家人。");
                        System.out.println("-----sendMes----:openId "+p.getOpenid()+"-----access_token-----:"+access_token+"--json--");
                        //此消息为定向推送,无需家人代收
                        PushMsgTask.getInstance().putWxMsg(access_token, 13, p.getOpenid(), p.getName(), json);
                    }
                }
                return st;
                //不同意添加
@ -783,9 +802,11 @@ public class FamilyMemberService extends BaseService {
        json.put("first", m.getName() + ",您好!" + p.getName() + "向您发起添加家人申请,添加成功后,对方可使用您的账号,为您处理各类健康服务。");
        json.put("keyword1", "添加家人申请");
        json.put("keyword2", DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
        json.put("keyword3", p.getName());
        json.put("keyword4", relations.get(relation));
        json.put("remark", "点击立即处理。");
//        json.put("keyword3", p.getName());
//        json.put("keyword4", relations.get(relation));
        json.put("remark", "申请人:"+p.getName()+"\n"+
                 "家庭关系:"+relations.get(relation)+"\n"+
                 "点击立即处理。");
        json.put("member", member);
        //此消息为定向推送,无需家人代收
        PushMsgTask.getInstance().putWxMsg(access_token, 12, m.getOpenid(), p.getName(), json);

+ 7 - 7
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsAllService.java

@ -2316,9 +2316,9 @@ public class StatisticsAllService extends BaseService {
                    }
                }
            });
            //计算咨询总数
            Long signCout = getQuoTaResult(level,area);
            for(Map<String, Object> map :resultList){
                Long signCout = getQuoTaResult(level,area);
                Long bindCout = (Long)map.get("amount");
                if((signCout!=null&&signCout!=0)&&(bindCout!=null&&bindCout!=0)){
                    double rate = (double)bindCout/signCout*100;
@ -2342,19 +2342,19 @@ public class StatisticsAllService extends BaseService {
     * @return
     */
    public Long getQuoTaResult(int level,String code){
        StringBuffer sql = new StringBuffer("SELECT t.result FROM wlyy_quota_result t WHERE t.quato_code ='1'AND t.quota_date = DATE_SUB(curdate(),INTERVAL 1 DAY) AND t.level1_type ="+level);
        StringBuffer sql = new StringBuffer("SELECT t.result FROM wlyy_quota_result t WHERE t.quato_code ='1'AND t.quota_date = DATE_SUB(curdate(),INTERVAL 1 DAY) AND t.level1_type ='"+level+"'");
        if(level ==1){
            //1:
            sql.append(" AND t.qkdoctor_code = "+code);
            sql.append(" AND t.qkdoctor_code = '"+code+"'");
        }else if(level == 2){
            //2社区机构
            sql.append(" AND t.org_code = "+code);
            sql.append(" AND t.org_code = '"+code+"'");
        }else if(level == 3){
            //3区级
            sql.append(" AND t.town = "+code);
            sql.append(" AND t.town = '"+code+"'");
        }else if(level == 4){
            //4市级
            sql.append(" AND t.city = "+code);
            sql.append(" AND t.city = '"+code+"'");
        }
            List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql.toString());

+ 1 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/common/account/PatientService.java

@ -132,6 +132,7 @@ public class PatientService extends TokenService {
        if (!org.springframework.util.StringUtils.isEmpty(openid) && org.springframework.util.StringUtils.isEmpty(patient.getOpenid())) {
            patient.setOpenidTime(new Date());
        }
        //System.out.println("========openid=======");
        patient.setOpenid(openid);
        Patient ps = patientDao.save(patient);
        System.out.print(new JSONObject(ps));

+ 33 - 9
patient-co-wlyy/src/main/java/com/yihu/wlyy/task/PushMsgTask.java

@ -455,7 +455,7 @@ public class PushMsgTask {
                logger.info("type=====>openId " + openid);
            }else if(type == 12){
                temp.setUrl(url + "jtgx/html/appcation-msg-list.html?openid=" + openid+ "&member=" + json.getString("member"));
                temp.setUrl(url + "jtgx/html/application-msg-list.html?openid=" + openid+ "&member=" + json.getString("member"));
                temp.setTemplate_id(SystemConf.getInstance().getSystemProperties().getProperty("template_doctor_survey"));
                WechatTemplateData  keyword1= new WechatTemplateData();
@ -468,16 +468,40 @@ public class PushMsgTask {
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
                WechatTemplateData  keyword3= new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("keyword3"));
                m.put("keyword3", keyword3);
//                WechatTemplateData  keyword3= new WechatTemplateData();
//                keyword3.setColor("#000000");
//                keyword3.setValue(json.getString("keyword3"));
//                m.put("keyword3", keyword3);
//
//                WechatTemplateData  keyword4= new WechatTemplateData();
//                keyword4.setColor("#000000");
//                keyword4.setValue(json.getString("keyword4"));
//                m.put("keyword4", keyword4);
                WechatTemplateData  keyword4= new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("keyword4"));
                m.put("keyword4", keyword4);
            }else if(type == 13){
                temp.setUrl(url + "jtgx/html/family.html?openid=" + openid);
                temp.setTemplate_id(SystemConf.getInstance().getSystemProperties().getProperty("template_doctor_survey"));
                WechatTemplateData  keyword1= new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData  keyword2= new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
//                WechatTemplateData  keyword3= new WechatTemplateData();
//                keyword3.setColor("#000000");
//                keyword3.setValue(json.getString("keyword3"));
//                m.put("keyword3", keyword3);
//
//                WechatTemplateData  keyword4= new WechatTemplateData();
//                keyword4.setColor("#000000");
//                keyword4.setValue(json.getString("keyword4"));
//                m.put("keyword4", keyword4);
            }
            temp.setData(m);

+ 1 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/family/FamilyMemberController.java

@ -295,7 +295,7 @@ public class FamilyMemberController extends WeixinBaseController {
                                    @RequestParam("state") String state){
        try {
            int result = familyMemberService.addMenberByWXTemp(id,state);
            int result = familyMemberService.addMenberByWXTemp(id,state,getAccessToken());
            if(result==0){
                return error(-1, "不能添加自己");