Kaynağa Gözat

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

yeshijie 7 yıl önce
ebeveyn
işleme
d790fe6ea6

+ 91 - 0
common/common-entity/src/main/java/com/yihu/wlyy/entity/patient/PhysicalExaminationRecords.java

@ -0,0 +1,91 @@
package com.yihu.wlyy.entity.patient;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
/**
 * 系统体检提醒记录表
 * 老年人体检提醒&免疫计划提醒
 * @author Reece
 * @date 2017/10/18 17:15
 */
@Entity
@Table(name = "wlyy_physical_examination_records")
public class PhysicalExaminationRecords extends IdEntity implements Serializable {
	private String code;
	private Integer type;           //1老年人体检提醒,2免疫计划提醒
	private String patientCode;     //居民CODE
	private int status;     //状态0未发送,1已发送,2发送失败
	private Date remindTime;   //提醒时间
	private Date createTime;   //创建时间
	
	private static final long serialVersionUID = 8358924836164389434L;
	@Basic
	@Column(name = "status")
	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}
	@Basic
	@Column(name = "code")
	public String getCode() {
		return code;
	}
	
	public void setCode(String code) {
		this.code = code;
	}
	
	@Basic
	@Column(name = "type")
	public Integer getType() {
		return type;
	}
	
	public void setType(Integer type) {
		this.type = type;
	}
	@Basic
	@Column(name = "patient_code")
	public String getPatientCode() {
		return patientCode;
	}
	
	public void setPatientCode(String patientCode) {
		this.patientCode = patientCode;
	}
	
	@Basic
	@Column(name = "remind_time")
	public Date getRemindTime() {
		return remindTime;
	}
	
	public void setRemindTime(Date remindTime) {
		this.remindTime = remindTime;
	}
	
	@Basic
	@Column(name = "create_time")
	public Date getCreateTime() {
		return createTime;
	}
	
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	
}

+ 9 - 0
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/event/ApplicationEvent.java

@ -179,6 +179,15 @@ public class ApplicationEvent implements ApplicationListener<ContextRefreshedEve
                logger.info("patient_followup_syb_job  job exist");
            }
            //老年人体检消息发送记录,每天凌晨1点执行一次
            if (!quartzHelper.isExistJob("patient_physical_examination_job")) {
                String trigger = SystemConf.getInstance().getSystemProperties().getProperty("patient_physical_examination_job");
                quartzHelper.addJob(OldPeoplePhysicalExaminationSynJob.class, trigger, "patient_physical_examination_job", new HashMap<String, Object>());
                logger.info("patient_physical_examination_job  job success");
            } else {
                logger.info("patient_physical_examination_job  job exist");
            }
            // 启动redis 消息队列线程
            logger.info("redis message start");
            new Thread(redisThread).start();

+ 35 - 0
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/job/PatientPhysicalExaminationJob.java

@ -0,0 +1,35 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.service.app.physicalExamination.PatientPhysicalExaminationService;
import com.yihu.wlyy.task.PushMsgTask;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * Created by Reece on 2017/10/18/018.
 *
 * 居民端定期体检模板提醒
 */
public class PatientPhysicalExaminationJob implements Job {
    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(PatientPhysicalExaminationJob.class);
    @Autowired
    private PatientPhysicalExaminationService examinationService;
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        logger.info("PatientPhysicalExaminationJob start ..........");
        try {
            examinationService.sendExaminationTemplate();
            logger.info("PatientPhysicalExaminationJob end ..........");
        } catch (Exception e) {
            e.printStackTrace();
            logger.info("PatientPhysicalExaminationJob error ..........  error ,error message "+e.getMessage());
        }
    }
}

+ 7 - 0
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/repository/patient/SignFamilyDao.java

@ -415,4 +415,11 @@ public interface SignFamilyDao extends PagingAndSortingRepository<SignFamily, Lo
    @Query( " select a from SignFamily a where a.patient = ?1 ")
    SignFamily findPatientExpensesStatus(String patient);
    //查询65岁以上一年内未体检且未系统提醒的签约居民
    @Query(value = "SELECT DISTINCT t1.* FROM wlyy_sign_family t1 LEFT JOIN wlyy_physical_examination_records r ON r.patient_code=t1.patient WHERE r.patient_code IS NULL " +
            " AND t1.STATUS>0 AND t1.hospital=?1 AND(YEAR(curdate())-IF(length(idcard)=18,substring(idcard,7,4),IF(length(idcard)=15,concat('19',substring(idcard,7,2)),NULL)))>65 " +
            " AND t1.idcard NOT IN(SELECT DISTINCT s.idcard FROM wlyy_sign_family s,wlyy_old_people_physical_examination o WHERE s.hospital=?1 AND s.`status`>0 AND s.idcard=o.id_card " +
            " AND o.medical_time>?2 )ORDER BY t1.openid DESC,CONVERT(t1.NAME USING gbk) ",nativeQuery = true)
    List<SignFamily> findExaminationByHospital(String hospital,Date examinationTime);
}

+ 14 - 0
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/repository/physicalExamination/PatientPhysicalExaminationDao.java

@ -0,0 +1,14 @@
package com.yihu.wlyy.repository.physicalExamination;
import com.yihu.wlyy.entity.oldpeople.OldPeoplePhysicalExaminationEntity;
import com.yihu.wlyy.entity.patient.PhysicalExaminationRecords;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Reece on 2017/10/18/018.
 */
public interface PatientPhysicalExaminationDao extends PagingAndSortingRepository<PhysicalExaminationRecords, Long>,JpaSpecificationExecutor<PhysicalExaminationRecords> {
}

+ 120 - 0
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/service/app/physicalExamination/PatientPhysicalExaminationService.java

@ -0,0 +1,120 @@
package com.yihu.wlyy.service.app.physicalExamination;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.PatientRemindRecords;
import com.yihu.wlyy.entity.patient.PhysicalExaminationRecords;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.organization.HospitalMappingDao;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.repository.physicalExamination.PatientPhysicalExaminationDao;
import com.yihu.wlyy.service.BaseService;
import com.yihu.wlyy.task.PushMsgTask;
import com.yihu.wlyy.util.IdCardUtil;
import com.yihu.wlyy.wechat.util.WeiXinAccessTokenUtils;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
 * Created by Reece on 2017/10/18/018.
 * <p>
 * 居民近365天无体检记录时,系统自动发送一条体检提醒信息。使用“代办事项通知”模板
 * 代理机制还存在
 */
public class PatientPhysicalExaminationService extends BaseService {
    @Autowired
    private PushMsgTask pushMsgTask;
    @Autowired
    private PatientDao patientDao;
    @Autowired
    private WeiXinOpenIdUtils openIdUtils;
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private SignFamilyDao familyDao;
    @Autowired
    private WeiXinAccessTokenUtils accessTokenUtils;
    @Autowired
    private PatientPhysicalExaminationDao examinationDao;
    public void sendExaminationTemplate() throws Exception {
        SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
        Calendar c = Calendar.getInstance();
        c.setTime(new Date());
        c.add(Calendar.YEAR, -1);
        Date yesteryear = c.getTime();
        JSONObject json = new JSONObject();
        String first = "温馨提醒,您已经超过一年没有到社区进行健康体检啦,为了您和您的家庭医生了解您近期的健康状况,请及时到签约社区进行免费的健康体检哟~";
        json.put("remark", "");
        json.put("keyword1", "健康体检");
        json.put("keyword2", format.format(new Date()));
        String accessToken = accessTokenUtils.getAccessToken();
//        1.找出符合条件的居民信息
        List<Hospital> hospitals = hospitalDao.findAllHospital();
        for (Hospital hospital : hospitals) {
            Boolean flag = false;
            List<SignFamily> signFamilies = familyDao.findExaminationByHospital(hospital.getCode(), yesteryear);
            for (SignFamily signFamilie : signFamilies) {
                String patientCode = signFamilie.getPatient();
                Patient patient = patientDao.findByCode(patientCode);
                String url = "huanzhe/html/jiankangtijian.html?openid=" + patient.getOpenid() + "&toUser=" + patient.getCode() + "&toName=" + patient.getName();
                json.put("url", url);
                String mobile = patient.getMobile();
                if (StringUtils.isNotBlank(patient.getOpenid())) {
                    json.put("first", first);
                    pushMsgTask.putWxMsg(accessToken, 11, patient.getOpenid(), patient.getName(), json);
                    flag = true;
                }
                //发送代理人
                JSONArray jsonArray = openIdUtils.getAgentOpenId(patient.getCode(), patient.getOpenid());
                if (jsonArray != null && jsonArray.length() > 0) {
                    for (int i = 0; i < jsonArray.length(); i++) {
                        org.json.JSONObject j = jsonArray.getJSONObject(i);
                        Patient member = (Patient) j.get("member");
                        int start = url.indexOf("&toUser=");
                        int end = url.indexOf("&", start + 1);
                        String touser = url.substring(start, end);
                        url = url.replace(touser, "&toUser=" + member.getCode());
                        json.remove("first");
                        try {
                            json.put("first", openIdUtils.getTitleMes(patient, j.isNull("relation") ? 1 : j.getInt("relation"), patient.getName()) + first);
                            json.put("url", url);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        if (StringUtils.isNotBlank(member.getOpenid())) {
                            pushMsgTask.putWxMsg(accessToken, 11, member.getOpenid(), patient.getName(), json);
                            flag = true;
                        }
                    }
                }
                if (flag){
                    //发送成功保存发送记录
                    PhysicalExaminationRecords records = new PhysicalExaminationRecords();
                    records.setCode(getCode());
                    records.setType(1);
                    records.setPatientCode(patientCode);
                    records.setStatus(1);
                    records.setCreateTime(new Date());
                    records.setRemindTime(new Date());
                    examinationDao.save(records);
                }
            }
        }
    }
}

+ 25 - 6
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/web/quota/JobController.java

@ -606,7 +606,7 @@ public class JobController extends BaseController {
            return error(-1, e.getMessage());
        }
    }
    
    /**
     *根据时间范围同步居民随访记录
     *@author huangwenjie
@ -620,24 +620,43 @@ public class JobController extends BaseController {
            @ApiParam(name="enddate", value="结束时间:yyyy-mm-dd")
            @RequestParam(value = "enddate",required = true) String enddate) {
        try {
            
            String start = "";
            String end = "";
            
            do{
                start = startdate + " 00:00:00";
                end = startdate + " 23:59:59";
                //根据时间范围同步居民随访记录
                jwPrescriptionService.getFollowUpByTime(start,end);
                
                startdate = DateUtil.getNextDay(startdate,1);
                
            }while (!startdate.equals(enddate));
            
            return write(200, "执行成功");
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
    /**
     *老年人体检系统发送提醒,每天早上8点执行一次
     *@author Reece
     *@date 2017/10/23 13:37
     */
    @RequestMapping(value = "/executePatientPhysicalExaminationJob", method = RequestMethod.POST)
    @ApiOperation("定期体检,系统定时提醒")
    public String executePatientPhysicalExaminationJob() {
        try {
            quartzHelper.startNow(PatientPhysicalExaminationJob.class, "PATIENT_PHYSICAL_EXAMINATION_JOB", null);
            return write(200, "启动成功");
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
}

+ 4 - 0
patient-co/patient-co-wlyy-job/src/main/resources/system.properties

@ -116,6 +116,10 @@ old_people_tijian_syb_job=0 0 1 * * ?
# 老年人体检记录同步,每天凌晨1点执行一次
patient_followup_syb_job=0 0 3 * * ?
# 老年人体检系统发送提醒记录,每天8点执行一次
#patient_physical_examination_job=0 0 8 * * ?
patient_physical_examination_job=0 0/10 * * * ?
#统一支付平台支付成功后页面跳转地址
return_url={server}/wx/html/qygl/html/pay_result.html
#统一支付平台支付接口地址

+ 1 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/patient/PatientDao.java

@ -69,7 +69,7 @@ public interface PatientDao extends PagingAndSortingRepository<Patient, Long> {
    @Query(value=" select p.* from wlyy_patient p LEFT JOIN wlyy_sign_family s on s.patient = p.code WHERE s.status > 0  and p.disease >0 and p.status>0 and s.admin_team_code = ?1 and (s.doctor = ?2 or s.doctor_health =?2)",nativeQuery = true)
    List<Patient> findAllSignPatientTeamcode(String teamcode, String  doctorcode);
    @Query(value="SELECT DISTINCT t.*FROM wlyy_sign_family t1,wlyy_patient t WHERE t.`code`=t1.patient AND t1.STATUS>0 AND " +
    @Query(value="SELECT DISTINCT t.* FROM wlyy_sign_family t1,wlyy_patient t WHERE t.`code`=t1.patient AND t1.STATUS>0 AND " +
            " t1.admin_team_code= ?1 AND(YEAR(curdate())-IF(length(t.idcard)=18,substring(t.idcard,7,4),IF(length(t.idcard)=15,concat('19',substring(t.idcard,7,2)),NULL)))>65 " +
            " AND t1.idcard NOT IN(SELECT DISTINCT s.idcard FROM wlyy_sign_family s,wlyy_old_people_physical_examination o WHERE s.admin_team_code=?1 AND s.`status`>0 AND s.idcard=o.id_card " +
            " AND o.medical_time>?2 )ORDER BY t1.openid DESC,CONVERT(t1.NAME USING gbk)",nativeQuery = true)