Bladeren bron

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

linzhuo 8 jaren geleden
bovenliggende
commit
e0e7868671

+ 1 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/dao/QuartzJobConfigDao.java

@ -18,7 +18,7 @@ public interface QuartzJobConfigDao extends PagingAndSortingRepository<QuartzJob
    @Query(" FROM QuartzJobConfig a WHERE a.status=?1 and a.del='1'")
    List<QuartzJobConfig> findByAll(String s);
    @Query(" FROM QuartzJobConfig a WHERE a.id in (1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,20,21,22)  and a.del='1' ")
    @Query(" FROM QuartzJobConfig a WHERE a.id in (1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,20,21,22,23)  and a.del='1' ")
    List<QuartzJobConfig> findByIds();
    @Query(" FROM QuartzJobConfig a WHERE a.id=?1 and a.del='1'")

+ 72 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/CurrentDayAllQuotaJob.java

@ -170,11 +170,12 @@ public class CurrentDayAllQuotaJob implements Job {
        computequota_13(sql,signFamilies,null);//统计今天的签约量
        computequota_16_1(sql,signFamilies,null);//统计今天的签约数的扣费钱 1
        computequota_15(sql,signFamilies,null);//统计今天的健康分布统计
        //computequota_16_0(sql,signFamilies,null);//统计今天的签约数的未扣费 0
        computequota_16_0(sql,signFamilies,null);//统计今天的签约数的未扣费 0
        computequota_17(sql,signFamilies,null);//统计今天的年龄疾病
        computequota_20();//统计今天的已经签约患者绑定设备
        computequota_21();//统计今天的已经签约微信关注人数
        computequota_22();//未回复的咨询量
        computequota_23();//及时回复的咨询量
        quartzJobLog.setJobContent(allContent.toString());
        quartzJobLog.setJobName("实时统计");
@ -234,6 +235,42 @@ public class CurrentDayAllQuotaJob implements Job {
    }
    private void computequota_23() {
        String quotaId="23";
        try{
            //查找Im库中的所有的医生ID
            List<String> consultIdMaps = getConsultIdsByIm23();
            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< '"+tomorrow+"' and a.consult in ("+sb.toString()+")";
            }else{
                sql="select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '"+tomorrow+ "' and a.consult ='noRey' ";
            } //抽取數據
            List<ConsultTeam> consultTeams= SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class,sql);
            System.out.println("consultTeams num:"+consultTeams.size());
            //過濾數據
            FilterModel etlModels= consultDataFilter.filter(consultTeams,sql,null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
        }
        allContent.append("----------23-----------");
    }
    /**
     * 找出 im中的所有未回复的topic
     *
@ -266,6 +303,40 @@ public class CurrentDayAllQuotaJob implements Job {
        System.out.println("22 ids 实时:" +ids.size());
        return ids;
    }
    /**
     * 找出 im中的所有未回复的topic
     *
     * @return
     */
    public List<String> getConsultIdsByIm23() {
        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< '" + tomorrow + "'";
        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("23 ims 实时:" +ims.size());
        System.out.println("23 实时sql:" +sql);
        System.out.println("23 ids 实时:" +ids.size());
        return ids;
    }
    private void computequota_21() {
        try{
            //找出今天的签约信息 yesterday,now

+ 174 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/ReyConsultJob.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 ReyConsultJob 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;
    }
}

+ 9 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/patient/PatientFamilyTemp.java

@ -28,6 +28,8 @@ public class PatientFamilyTemp extends IdEntity {
    //状态标识
    // 0 :未处理;1:已同意;2:已拒绝
    private String state;
    //更新时间
    private Date updateTime;
    public String getDealer() {
        return dealer;
@ -85,4 +87,11 @@ public class PatientFamilyTemp extends IdEntity {
        this.state = state;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}

+ 2 - 2
patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/patient/PatientFamilyTempDao.java

@ -11,6 +11,6 @@ import java.util.List;
 * Created by Trick on 2017/4/18.
 */
public interface PatientFamilyTempDao extends PagingAndSortingRepository<PatientFamilyTemp, Long>,
        JpaSpecificationExecutor<PatientFamilyMember> {
        JpaSpecificationExecutor<PatientFamilyTemp> {
    public List<PatientFamilyTemp> findByDealerAndPatient(String dealer,String patient);
}

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

@ -670,7 +670,15 @@ public class FamilyMemberService extends BaseService {
                if (m == null) {
                    return -2;
                }
                return addMemberFamily(p, m, temp.getPatient(), temp.getFamilyMember(), temp.getFamilyRelation());
                int st = addMemberFamily(p, m, temp.getPatient(), temp.getFamilyMember(), temp.getFamilyRelation());
                if(st==1){
                    //保存
                    temp.setState("1");
                    patientFamilyTempDao.save(temp);
                }
                return st;
                //不同意添加
            } else if ("2".equals(state)) {
                PatientFamilyTemp temp = patientFamilyTempDao.findOne(id);
@ -772,7 +780,7 @@ public class FamilyMemberService extends BaseService {
            return -2;
        }
        JSONObject json = new JSONObject();
        json.put("frist", m.getName() + ",您好!" + p.getName() + "向您发起添加家人申请,添加成功后,对方可使用您的账号,为您处理各类健康服务。");
        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());
@ -782,16 +790,27 @@ public class FamilyMemberService extends BaseService {
        //此消息为定向推送,无需家人代收
        PushMsgTask.getInstance().putWxMsg(access_token, 12, m.getOpenid(), p.getName(), json);
        PatientFamilyTemp temp = new PatientFamilyTemp();
        temp.setState("0");
        temp.setCzrq(new Date());
        temp.setDealer(member);
        temp.setPatient(patient);
        temp.setPatientName(p.getName());
        temp.setFamilyMember(member);
        temp.setFamilyRelation(relation);
        //保存消息列表
        patientFamilyTempDao.save(temp);
        List<PatientFamilyTemp> temps =  patientFamilyTempDao.findByDealerAndPatient(member,patient);
        if(temps!=null&&temps.size()>0){
            for(PatientFamilyTemp temp : temps){
                temp.setUpdateTime(new Date());
                patientFamilyTempDao.save(temp);
            }
        }else{
            PatientFamilyTemp temp = new PatientFamilyTemp();
            temp.setState("0");
            temp.setCzrq(new Date());
            temp.setDealer(member);
            temp.setPatient(patient);
            temp.setPatientName(p.getName());
            temp.setFamilyMember(member);
            temp.setFamilyRelation(relation);
            //
            patientFamilyTempDao.save(temp);
        }
        return 1;
    }

+ 211 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsService.java

@ -18,7 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.apache.commons.lang3.StringUtils;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
@ -1283,4 +1283,214 @@ public class StatisticsService extends BaseService {
        StringBuffer sql = new StringBuffer("SELECT COUNT(1) FROM wlyy_sign_family f WHERE f.type='2' AND f.`status`>0 AND f.expenses_status='1' ");
        return sql.toString();
    }
    /**
     * 统计回复和未回复
     * @param level
     * @return
     * @throws Exception
     */
    public JSONObject getConsultingStatisticsList(int level,String area,String lowLevel)throws Exception{
        JSONObject result = new JSONObject();
        //级别为市级,统计区级统计区和机构
        if(level == 4){
            if(StringUtils.isBlank(lowLevel)){
                String timeKey = redisTemplate.opsForValue().get("quota:timeKey");
                //及时回复数
                String relyVal = redisTemplate.opsForValue().get("quota:23:"+level+":"+area+":3:"+timeKey);
                JSONArray rely = new JSONArray(relyVal);
                //咨询总数
                String relyTotal = redisTemplate.opsForValue().get("quota:3:"+level+":"+area+":3:"+timeKey);
                JSONArray total = new JSONArray(relyTotal);
                //未回复数
                String onRelyTotal = redisTemplate.opsForValue().get("quota:22:"+level+":"+area+":3:"+timeKey);
                JSONArray onRely = new JSONArray(relyTotal);
                result.put("resultList",getCoutList(rely,total,onRely));
            }else{
                String timeKey = redisTemplate.opsForValue().get("quota:timeKey");
                //及时回复数
                String relyVal = redisTemplate.opsForValue().get("quota:23:"+level+":"+area+":2:"+timeKey);
                JSONArray rely = new JSONArray(relyVal);
                //咨询总数
                String relyTotal = redisTemplate.opsForValue().get("quota:3:"+level+":"+area+":2:"+timeKey);
                JSONArray total = new JSONArray(relyTotal);
                //未回复数
                String onRelyTotal = redisTemplate.opsForValue().get("quota:22:"+level+":"+area+":2:"+timeKey);
                JSONArray onRely = new JSONArray(relyTotal);
                result.put("resultList",getCoutList(rely,total,onRely));
            }
        }else if(level == 3){//区级底下的机构
            //quota:23:4:350200:2:1492939333191
            String timeKey = redisTemplate.opsForValue().get("quota:timeKey");
            //及时回复数
            String relyVal = redisTemplate.opsForValue().get("quota:23:"+level+":"+area+":2:"+timeKey);
            JSONArray rely = new JSONArray(relyVal);
            //咨询总数
            String relyTotal = redisTemplate.opsForValue().get("quota:3:"+level+":"+area+":2:"+timeKey);
            JSONArray total = new JSONArray(relyTotal);
            //未回复数
            String onRelyTotal = redisTemplate.opsForValue().get("quota:22:"+level+":"+area+":2:"+timeKey);
            JSONArray onRely = new JSONArray(relyTotal);
            result.put("resultList",getCoutList(rely,total,onRely));
        }else if(level == 2){//机构级别统计,统计所有团队
            //quota:23:4:350200:2:1492939333191
            String timeKey = redisTemplate.opsForValue().get("quota:timeKey");
            //及时回复数
            String relyVal = redisTemplate.opsForValue().get("quota:23:"+level+":"+area+":1:"+timeKey);
            JSONArray rely = new JSONArray(relyVal);
            //咨询总数
            String relyTotal = redisTemplate.opsForValue().get("quota:3:"+level+":"+area+":1:"+timeKey);
            JSONArray total = new JSONArray(relyTotal);
            //未回复数
            String onRelyTotal = redisTemplate.opsForValue().get("quota:22:"+level+":"+area+":1:"+timeKey);
            JSONArray onRely = new JSONArray(relyTotal);
            result.put("resultList",getCoutList(rely,total,onRely));
        }
        return result;
    }
    /**
     *  统计当前级别下数据
     * @param level
     * @param area
     * @return
     */
    public JSONObject getConsultingTitle(int level,String area){
        JSONObject result = new JSONObject();
        String timeKey = redisTemplate.opsForValue().get("quota:timeKey");
        //及时回复数
        String relyVal = redisTemplate.opsForValue().get("quota:23:"+level+":"+area+":"+timeKey);
        JSONObject relyObject =new JSONObject(relyVal);
        JSONArray rely = new JSONArray();
        rely.put(relyObject);
        //咨询总数
        String relyTotal = redisTemplate.opsForValue().get("quota:3:"+level+":"+area+":"+timeKey);
        JSONObject totalObject =new JSONObject(relyVal);
        JSONArray total = new JSONArray();
        total.put(totalObject);
        //未回复数
        String onRelyTotal = redisTemplate.opsForValue().get("quota:22:"+level+":"+area+":"+timeKey);
        JSONObject onRelyObject =new JSONObject(relyVal);
        JSONArray onRely = new JSONArray();
        onRely.put(onRelyObject);
        result.put("result",getCoutList(rely,total,onRely));
        return result;
    }
    /**
     * 统计
     * 根据总数,未回复数,回复数统计,合并结果集及排序
     * @param rely
     * @param total
     * @param onRely
     * @return
     */
    public List<Map<String,Object>> getCoutList(JSONArray rely,JSONArray total,JSONArray onRely){
        Map<String,Object> relyMap = new HashMap<>();
        Map<String,Object> totalMap = new HashMap<>();
        Map<String,Object> onRelyMap = new HashMap<>();
        //将List转换为Map,Key为要比较的CODE,降低循环层数
        //转换回复数
        Iterator iterator =  rely.iterator();
        while(iterator.hasNext()){
            JSONObject jsonObject = (JSONObject)iterator.next();
            relyMap.put(jsonObject.get("code").toString(),jsonObject);
        }
        //转换总咨询数
        Iterator iterator2 =  total.iterator();
        while(iterator2.hasNext()){
            JSONObject jsonObject = (JSONObject)iterator2.next();
            totalMap.put(jsonObject.get("code").toString(),jsonObject);
        }
        //转换总咨询数
        Iterator iterator3 =  onRely.iterator();
        while(iterator3.hasNext()){
            JSONObject jsonObject = (JSONObject)iterator3.next();
            onRelyMap.put(jsonObject.get("code").toString(),jsonObject);
        }
        List<Map<String,Object>> resultMaps = new ArrayList<>();
        for(String key : totalMap.keySet()){
            Map<String,Object> rs = new HashMap<>();
            JSONObject relyRs = (JSONObject)relyMap.get(key);
            JSONObject totalRs = (JSONObject)totalMap.get(key);
            JSONObject onRelyRs = (JSONObject)onRelyMap.get(key);
            //合并结果集
            Long totalNm = totalRs.getLong("num");
            Long relyNm = relyRs.getLong("num");
            Long noRelyNm = onRelyRs.getLong("num");
            rs.put("name",relyRs.get("name"));
            rs.put("noRelyCount",noRelyNm);
            rs.put("relyCount",relyNm);
            rs.put("total",totalNm);
            rs.put("code",key);
            if(totalNm !=null&&totalNm!=0){
                if(relyNm!=null&&relyNm!=0){
                    double rr = (double)relyNm/totalNm*100;
                    DecimalFormat df  = new DecimalFormat("0.00");
                    rs.put("relyRate",df.format(rr)+"%");
                }else{
                    rs.put("relyRate","0.00%");
                }
                if(noRelyNm!=null&&noRelyNm!=0){
                    double rr = (double)noRelyNm/totalNm*100;
                    DecimalFormat df  = new DecimalFormat("0.00");
                    rs.put("noRelyRate",df.format(rr)+"%");
                }else{
                    rs.put("noRelyRate","0.00%");
                }
            }else{
                rs.put("relyRate","0.00%");
                rs.put("noRelyRate","0.00%");
            }
            resultMaps.add(rs);
        }
        //根据回复数排序
        Collections.sort(resultMaps, new Comparator<Map<String,Object>>(){
            public int compare(Map<String,Object> o1,Map<String,Object> o2){
                return  (Long)o1.get("relyCount")<(Long)o2.get("relyCount")?1:( (Long)o1.get("relyCount")==(Long)o2.get("relyCount")?0:-1);
            }
        });
        return resultMaps;
    }
}

+ 1 - 1
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 + "/html/jtgx/html/appcation-msg-list.html?openid=" + openid+ "&member=" + json.getString("member"));
                temp.setUrl(url + "jtgx/html/appcation-msg-list.html?openid=" + openid+ "&member=" + json.getString("member"));
                temp.setTemplate_id(SystemConf.getInstance().getSystemProperties().getProperty("template_doctor_survey"));
                WechatTemplateData  keyword1= new WechatTemplateData();

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

@ -697,7 +697,7 @@ public class DoctorFamilyContractController extends WeixinBaseController {
     */
    @RequestMapping(value = "/patient_signing")
    @ResponseBody
    public String getSigningPatientInfo(String patient) {
    public String getSigningPatientInfo(@RequestParam String patient) {
        try {
            Patient temp = patientInfoService.findByCode(patient);
            if (temp != null) {

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

@ -2,6 +2,7 @@ package com.yihu.wlyy.web.patient.family;
import com.yihu.wlyy.service.app.family.FamilyMemberService;
import com.yihu.wlyy.task.PushMsgTask;
import com.yihu.wlyy.util.MD5;
import com.yihu.wlyy.web.WeixinBaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -319,6 +320,7 @@ public class FamilyMemberController extends WeixinBaseController {
    public String sendWXTemp(@RequestParam("member")String member,@RequestParam("relation")int relation){
        try {
            int result = familyMemberService.sendWXTemp(getUID(),member,getAccessToken(),relation);
            //int result = familyMemberService.sendWXTemp("28ea723708514c9bbf5a84c1db6c0215",member,getAccessToken(),relation);
            if(result==-1){
                return error(-1, "居民信息查询失败");
            }else if(result==-2){
@ -337,4 +339,11 @@ public class FamilyMemberController extends WeixinBaseController {
        String openId = getOpenidByCode(code);
        return write(200, openId);
    }
    @RequestMapping(value = "/getPw", method = RequestMethod.POST)
    @ApiOperation(value = "获取密码")
    public String getPw(@RequestParam("pw")String pw){
        String loginPassword = MD5.GetMD5Code(pw + "1");
        return write(200,loginPassword);
    }
}

+ 43 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/StatisticsController.java

@ -443,7 +443,6 @@ public class StatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取三师转签或高危人群
     *
@ -553,6 +552,49 @@ public class StatisticsController extends BaseController {
        }
    }
    /**
     * 咨询统计
     * 咨询分析页面具体交互与业务分析内一致,即按市、区、社区、机构有不同展示,可一级级进入查看
     * ①回复及时率------医生首次回复24小时内比例
     * ②未回复数(数、率)----------当前未回复咨询数、以及相应比例
     * ③处理咨询回复时间分布---------全部咨询的首次回复咨询时间分布
     *
     * @param level 查询的等级,按市、区、机构
     * @return
     */
    @RequestMapping("/Consulting_StatList")
    @ResponseBody
    public String getConsultingStatisticsList(@RequestParam(required = true) Integer level,
                                               @RequestParam(required = true) String area ,
                                               @RequestParam(required = false) String lowlevel) {
        try {
            return write(200, "查询成功", "data", statisticsService.getConsultingStatisticsList(level,area,lowlevel));
        } catch (Exception e) {
            return error(-1, "查询失败");
        }
    }
    /**
     * 咨询统计
     * 咨询分析页面具体交互与业务分析内一致,即按市、区、社区、机构有不同展示,可一级级进入查看
     * ①回复及时率------医生首次回复24小时内比例
     * ②未回复数(数、率)----------当前未回复咨询数、以及相应比例
     * ③处理咨询回复时间分布---------全部咨询的首次回复咨询时间分布
     *
     * @param level 查询的等级,按市、区、机构
     * @return
     */
    @RequestMapping("/Consulting_Title")
    @ResponseBody
    public String getConsultingTitle(@RequestParam(required = true) Integer level,
                                      @RequestParam(required = true) String area) {
        try {
            return write(200, "查询成功", "data", statisticsService.getConsultingTitle(level,area));
        } catch (Exception e) {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取绑定率
     * 1、选定绑定微信指标,下面排行内,在绑定微信数后新增:"绑定率:xx.22%"

+ 1 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/wechat/util/WeiXinOpenIdUtils.java

@ -59,7 +59,7 @@ public class WeiXinOpenIdUtils {
        /**
         * 按关系和时间排序
         */
        StringBuffer sql = new StringBuffer("SELECT * FROM wlyy_patient_family_member t WHERE t.patient = " + code + " ORDER BY t.family_relation ASC ,t.czrq DESC");
        StringBuffer sql = new StringBuffer("SELECT * FROM wlyy_patient_family_member t WHERE t.patient = '" + code + "' ORDER BY t.family_relation ASC ,t.czrq DESC");
        JSONObject result = new JSONObject();