Parcourir la source

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

yeshijie il y a 7 ans
Parent
commit
5c12f971fa
20 fichiers modifiés avec 1072 ajouts et 221 suppressions
  1. 1 1
      common/common-entity/src/main/java/com/yihu/wlyy/entity/message/Message.java
  2. 94 0
      common/common-entity/src/main/java/com/yihu/wlyy/entity/patient/prenatal/PrenatalInspectorRecord.java
  3. 9 0
      patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/event/ApplicationEvent.java
  4. 37 0
      patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/job/DoctorPrenatalInspectorJob.java
  5. 1 1
      patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/repository/charge/ChargeDao.java
  6. 11 1
      patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/repository/patient/PrenatalInspectorPlanDao.java
  7. 22 0
      patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/repository/patient/PrenatalInspectorRecordDao.java
  8. 146 20
      patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/service/app/prenatalInspector/PrenatalInspectorPreCardService.java
  9. 3 0
      patient-co/patient-co-wlyy-job/src/main/resources/system.properties
  10. 4 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/patient/PatientDao.java
  11. 12 1
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/patient/PrenatalInspectorPlanDao.java
  12. 20 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/patient/PrenatalInspectorRecordDao.java
  13. 409 186
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/prenatalInspector/PrenatalInspectorPreCardService.java
  14. 106 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/third/ylz/ThirdEHCService.java
  15. 3 3
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/weixin/wxpay/service/OnePayService.java
  16. 61 7
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/task/PushMsgTask.java
  17. 33 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/util/DateUtil.java
  18. 45 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/prenatalInspector/PrenatalController.java
  19. 49 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/ylzpay/ThirdEHCController.java
  20. 6 1
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/wx/OnePayController.java

Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
common/common-entity/src/main/java/com/yihu/wlyy/entity/message/Message.java


+ 94 - 0
common/common-entity/src/main/java/com/yihu/wlyy/entity/patient/prenatal/PrenatalInspectorRecord.java

@ -0,0 +1,94 @@
package com.yihu.wlyy.entity.patient.prenatal;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
@Entity
@Table(name = "wlyy_prenatal_inspector_record")
public class PrenatalInspectorRecord extends IdEntity implements Serializable {
  private String relation;
  private String sender;
  private String receiver;
  private int type;
  private String name;
  private String openid;
  private String content;
  private Integer times;
  private Date sendTime;
  public String getRelation() {
    return relation;
  }
  public void setRelation(String relation) {
    this.relation = relation;
  }
  public String getSender() {
    return sender;
  }
  public void setSender(String sender) {
    this.sender = sender;
  }
  public String getReceiver() {
    return receiver;
  }
  public void setReceiver(String receiver) {
    this.receiver = receiver;
  }
  public int getType() {
    return type;
  }
  public void setType(int type) {
    this.type = type;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getOpenid() {
    return openid;
  }
  public void setOpenid(String openid) {
    this.openid = openid;
  }
  public String getContent() {
    return content;
  }
  public void setContent(String content) {
    this.content = content;
  }
  public Integer getTimes() {
    return times;
  }
  public void setTimes(Integer times) {
    this.times = times;
  }
  public Date getSendTime() {
    return sendTime;
  }
  public void setSendTime(Date sendTime) {
    this.sendTime = sendTime;
  }
}

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

@ -160,6 +160,15 @@ public class ApplicationEvent implements ApplicationListener<ContextRefreshedEve
            } else {
                logger.info("prenatal_inspector_job exist");
            }
            //医生端产检系统提醒 每个工作日上午10:00执行一次
            if (!quartzHelper.isExistJob("doctor_prenatal_inspector_job")) {
                String trigger = SystemConf.getInstance().getSystemProperties().getProperty("doctor_prenatal_inspector_job");
                quartzHelper.addJob(DoctorPrenatalInspectorJob.class, trigger, "doctor_prenatal_inspector_job", new HashMap<String, Object>());
                logger.info("doctor_prenatal_inspector_job success");
            } else {
                logger.info("doctor_prenatal_inspector_job exist");
            }
    
            //老年人体检记录同步,每天凌晨1点执行一次
            if (!quartzHelper.isExistJob("old_people_tijian_syb_job")) {

+ 37 - 0
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/job/DoctorPrenatalInspectorJob.java

@ -0,0 +1,37 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.service.app.prenatalInspector.PrenatalInspectorPreCardService;
import com.yihu.wlyy.util.DateUtil;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import java.util.Date;
/**
 * 医生端产检系统消息提醒
 * Created by Reece on 2017/12/7.
 */
public class DoctorPrenatalInspectorJob implements Job{
    private static Logger logger = LoggerFactory.getLogger(DoctorPrenatalInspectorJob.class);
    @Autowired
    private PrenatalInspectorPreCardService preCardService;
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        try {
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            logger.info("doctor prenatal inspector message sending start...");
            preCardService.sendMessagePrenatal();
            logger.info("doctor prenatal inspector message sending end...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

+ 1 - 1
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/repository/charge/ChargeDao.java

@ -64,6 +64,6 @@ public interface ChargeDao extends PagingAndSortingRepository<WlyyCharge, Long>,
    List<WlyyCharge> findByTradeStatusAndMiRegisterNoAndUpdateTime(int tradestatus, Date enddate, Date startdate);
    //   查询当天支付,页面回调及异步回调均失败的支付 tradeStatus为空
    @Query(value = "SELECT t.`code` FROM wlyy_charge t WHERE t.trade_status != '0' AND t.create_time >= date(now()) AND t.create_time < DATE_ADD(date(now()), INTERVAL 1 DAY) ", nativeQuery = true)
    @Query(value = "SELECT t.`code` FROM wlyy_charge t WHERE ((t.trade_status = '1') OR (t.trade_status is NULL)) AND t.create_time >= timestamp(adddate(date(sysdate()),0)) AND t.create_time < timestamp(adddate(date(sysdate()),1)) ", nativeQuery = true)
    List<String> findTodayUnpay();
}

+ 11 - 1
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/repository/patient/PrenatalInspectorPlanDao.java

@ -10,11 +10,21 @@ import java.util.List;
/**
 * Created by yeshijie on 2017/6/6.
 */
public interface PrenatalInspectorPlanDao extends PagingAndSortingRepository<PrenatalInspectorPlan, Long>{
public interface PrenatalInspectorPlanDao extends PagingAndSortingRepository<PrenatalInspectorPlan, Long> {
    @Query("select a from PrenatalInspectorPlan a where a.inspectionCode = ?1 and a.status = '0' ")
    List<PrenatalInspectorPlan> findByCode(String inspectionCode);
    @Query("select a from PrenatalInspectorPlan a where a.inspectionTime is not null and a.status = '0' and a.del ='1' and ( TO_DAYS(a.inspectionTime)- TO_DAYS(NOW())=7 or TO_DAYS(a.inspectionTime)- TO_DAYS(NOW())=1 ) ")
    List<PrenatalInspectorPlan> findWxTipList();
    //获取当前时间在应产检时间往后7天以上
    @Query("select a from PrenatalInspectorPlan a where a.inspectionTime is not null and a.status = '0' and a.del ='1' and TO_DAYS(NOW()) - TO_DAYS(a.inspectionTime) > 7 ")
    List<PrenatalInspectorPlan> findByTime();
    //应产检时间前14天后14天待产检计划(不包括应产检当天)
    @Query(value = "SELECT a.* FROM wlyy_prenatal_inspector_plan a, (SELECT t.* from wlyy_prenatal_inspector_plan t where t.id = ?1 )b  " +
            " WHERE a.inspection_time >= DATE_ADD(b.inspection_time,INTERVAL -14 DAY) and a.inspection_time <= DATE_ADD(b.inspection_time,INTERVAL 14 DAY) " +
            "and a.inspection_time != b.inspection_time ORDER BY a.inspection_time DESC ", nativeQuery = true)
    List<PrenatalInspectorPlan> getScopeById(Long prenatalId);
}

+ 22 - 0
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/repository/patient/PrenatalInspectorRecordDao.java

@ -0,0 +1,22 @@
package com.yihu.wlyy.repository.patient;
import com.yihu.wlyy.entity.patient.prenatal.PrenatalInspectorRecord;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Reece on 2017/12/5.
 */
public interface PrenatalInspectorRecordDao extends PagingAndSortingRepository<PrenatalInspectorRecord, Long>{
    //根据孕检ID及type获取发送记录
    @Query("select a from PrenatalInspectorRecord a where a.relation = ?1 and a.type= ?2 ")
    PrenatalInspectorRecord findByRelationAndType(String relation,int type);
    //根据孕检ID及type和接收者code获取发送给医生的系统提醒
    @Query("select a from PrenatalInspectorRecord a where a.relation = ?1 and a.receiver= ?2 and a.type= 2 ")
    PrenatalInspectorRecord getMessageByRelation(String relation,String receiver);
}

+ 146 - 20
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/service/app/prenatalInspector/PrenatalInspectorPreCardService.java

@ -1,9 +1,17 @@
package com.yihu.wlyy.service.app.prenatalInspector;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.message.Message;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.patient.prenatal.PrenatalInspectorPlan;
import com.yihu.wlyy.entity.patient.prenatal.PrenatalInspectorRecord;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.message.MessageDao;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.repository.patient.PrenatalInspectorPlanDao;
import com.yihu.wlyy.repository.patient.PrenatalInspectorRecordDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.service.BaseService;
import com.yihu.wlyy.service.app.sign.FamilyContractService;
import com.yihu.wlyy.task.PushMsgTask;
@ -15,6 +23,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
@ -31,9 +41,15 @@ public class PrenatalInspectorPreCardService extends BaseService {
    @Autowired
    private PatientDao patientDao;
    @Autowired
    private FamilyContractService familyContractService;
    private MessageDao messageDao;
    @Autowired
    private PushMsgTask pushMsgTask;
    @Autowired
    private PrenatalInspectorRecordDao recordDao;
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private DoctorDao doctorDao;
    /**
@ -41,40 +57,59 @@ public class PrenatalInspectorPreCardService extends BaseService {
     * 1、当居民已有经医生确认过的下一次产检时间,则距离下一次产检前7天(保证居民可自行预约),发出产检预约提醒通知。点击该消息,进入预约页面
     * 2、当居民已有经医生确认过的下一次产检时间,则距离下一次产检前1天,发出产检就诊提醒,提醒居民就诊。点击该消息,进入预约记录页面
     */
    public void sendPrenatalInspectorRemind(){
    public void sendPrenatalInspectorRemind() {
        System.out.println("产检计划---running");
        List<PrenatalInspectorPlan> planList = prenatalInspectorPlanDao.findWxTipList();
        for (PrenatalInspectorPlan plan:planList){
        for (PrenatalInspectorPlan plan : planList) {
            try {
                String relation = plan.getId().toString();
                Patient patient = patientDao.findByCode(plan.getPatient());
                String openId = patient.getOpenid();
                String name = patient.getName();
                String patientCode = patient.getCode();
                if(StringUtils.isNotBlank(openId)){
                    Long day = DateUtil.getDays(plan.getInspectionTime(),DateUtil.getNowDateShort());
                plan.getId();
                if (StringUtils.isNotBlank(openId)) {
                    Long day = DateUtil.getDays(plan.getInspectionTime(), DateUtil.getNowDateShort());
                    JSONObject json = new JSONObject();
                    if(day==7){
                    PrenatalInspectorRecord record = recordDao.findByRelationAndType(relation, 0);
                    if (record == null) {
                        record = new PrenatalInspectorRecord();
                        record.setTimes(1);
                    } else {
                        record.setTimes(record.getTimes() + 1);
                    }
                    record.setRelation(relation);
                    record.setSender("PrenatalInspectorJob");
                    record.setReceiver(patientCode);
                    record.setType(0);
                    record.setName(name);
                    record.setOpenid(openId);
                    record.setContent(plan.getCheckItem());
                    record.setSendTime(new Date());
                    if (day == 7) {
                        //产检提醒
                        json.put("remark","产检内容以医生实际检查为准。点击进行预约");
                        json.put("first",name+",您好!您和您的宝宝需要进行产检啦~请及时预约产检,如已预约,请忽略");
                        json.put("url","wdyy/html/appointment-register.html?openid="+openId+"&toUser="+patientCode+"&toName="+name);
                        json.put("remark", "产检内容以医生实际检查为准。点击进行预约");
                        json.put("first", name + ",您好!您和您的宝宝需要进行产检啦~请及时预约产检,如已预约,请忽略");
                        json.put("url", "wdyy/html/appointment-register.html?openid=" + openId + "&toUser=" + patientCode + "&toName=" + name);
                        json.put("keyword1","产检提醒");
                        String keyword2 = DateUtil.getStringDateShort()+"\n产检内容:"+plan.getCheckItem();
                        json.put("keyword2",keyword2);
                        json.put("keyword1", "产检提醒");
                        String keyword2 = DateUtil.getStringDateShort() + "\n产检内容:" + plan.getCheckItem();
                        json.put("keyword2", keyword2);
                        pushMsgTask.sendWeixinMessage(accessTokenUtils.getAccessToken(), 18, openId, name, json);
                    }else if(day==1){
                        recordDao.save(record);
                    } else if (day == 1) {
                        //产检就诊提醒
                        json.put("remark","产检内容以医生实际检查为准。点击查看预约记录");
                        json.put("first",name+",您好!您和您的宝宝即将进行产检啦~请按时就诊,如已就诊,请忽略");
                        json.put("url","wdyy/html/my-appointment.html?openid="+openId+"&toUser="+patientCode+"&toName="+name);
                        json.put("keyword1","产检就诊提醒");
                        String keyword2 = DateUtil.getStringDateShort()+"\n产检内容:"+plan.getCheckItem();
                        json.put("keyword2",keyword2);
                        json.put("remark", "产检内容以医生实际检查为准。点击查看预约记录");
                        json.put("first", name + ",您好!您和您的宝宝即将进行产检啦~请按时就诊,如已就诊,请忽略");
                        json.put("url", "wdyy/html/my-appointment.html?openid=" + openId + "&toUser=" + patientCode + "&toName=" + name);
                        json.put("keyword1", "产检就诊提醒");
                        String keyword2 = DateUtil.getStringDateShort() + "\n产检内容:" + plan.getCheckItem();
                        json.put("keyword2", keyword2);
                        pushMsgTask.sendWeixinMessage(accessTokenUtils.getAccessToken(), 18, openId, name, json);
                        recordDao.save(record);
                    }
                }
            }catch (Exception e){
            } catch (Exception e) {
                System.out.println("微信提醒发送失败");
                e.printStackTrace();
            }
@ -82,4 +117,95 @@ public class PrenatalInspectorPreCardService extends BaseService {
    }
    /**
     * 向医生发出产检系统消息
     */
    public void sendMessagePrenatal() throws Exception {
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            List<PrenatalInspectorPlan> planList = prenatalInspectorPlanDao.findByTime();
            for (PrenatalInspectorPlan plan : planList) {
                String code = plan.getPatient();
                Patient patient = patientDao.findByCode(code);
                String content = "您的签约居民" + patient.getName() + "超期未进行孕检,原计划孕检时间" + format.format(plan.getInspectionTime());
                List<PrenatalInspectorPlan> plans = prenatalInspectorPlanDao.getScopeById(plan.getId());
                if (plans == null || plans.size() == 0) {
                    SignFamily signFamily = signFamilyDao.findByPatient(code);
                    String doctor = signFamily.getDoctor();
                    String doctorHealth = signFamily.getDoctorHealth();
                    if (StringUtils.isNotEmpty(doctor)) {
                        saveMessageRecord(plan.getId().toString(), doctor, content);
                    }
                    if (StringUtils.isNotEmpty(doctorHealth)) {
                        saveMessageRecord(plan.getId().toString(), doctorHealth, content);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 保存系统消息及发送记录
     *
     * @param prenatalId
     * @param doctor
     * @param content
     * @throws Exception
     */
    public void saveMessageRecord(String prenatalId, String doctor, String content) throws Exception {
        try {
            Doctor doc = doctorDao.findByCode(doctor);
            String doctorName = doc.getName();
            String doctorOpenId = doc.getOpenid();
            PrenatalInspectorRecord record = recordDao.getMessageByRelation(prenatalId, doctor);
            if (record != null) {
                if (record.getTimes() < 3 && record.getTimes() > 0) {
//                    每次间隔2天发送(已发送过1-2次)
                    if (DateUtil.getDays(new Date(), record.getSendTime()) == 3) {
                        record.setTimes(record.getTimes() + 1);
                    }else {
                        return;
                    }
                } else if (record.getTimes() >= 3) {
                    return;
                }
            } else {
                record = new PrenatalInspectorRecord();
                record.setTimes(1);
            }
            record.setRelation(prenatalId);
            record.setSender("SYSTEM");
            record.setReceiver(doctor);
            record.setType(2);
            record.setName(doctorName);
            record.setOpenid(doctorOpenId);
            record.setContent(content);
            record.setSendTime(new Date());
            recordDao.save(record);
            Message message = new Message();
            message.setCzrq(new Date());
            message.setCreateTime(new Date());
            message.setRead(1);
            message.setOver("1");
            message.setReceiver(doctor);
            message.setSender("SYSTEM");
            message.setCode(getCode());
            message.setTitle("孕检提醒");
            message.setContent(content);
            message.setType(2);
            messageDao.save(message);
            // 推送消息给医生
            pushMsgTask.put(doctor, "13", "孕检提醒", content, "");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

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

@ -125,6 +125,9 @@ patient_physical_examination_job=0 0 8 * * ?
# 电子社保卡绑定状态查询,每隔6小时执行一次
sicard_query_job=0 0 6,12,18,23 * * ?
#医生端产检系统提醒(每个工作日10点执行一次)
doctor_prenatal_inspector_job=0 0 10 ? * MON-FRI
#统一支付平台支付成功后页面跳转地址
return_url={server}/wx/html/qygl/html/pay_result.html
#统一支付平台支付接口地址

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

@ -62,6 +62,10 @@ public interface PatientDao extends PagingAndSortingRepository<Patient, Long> {
    @Query("select p from Patient p where p.status = 1 and p.openid = ?1 order by p.czrq desc")
    Page<Patient> findPatientByOpenid(String openid, Pageable pageable);
    //根据openID获取居民
    @Query("select p from Patient p where p.status = 1 and p.openid = ?1 order by p.czrq desc")
    List<Patient> findPatientByOpenid(String openid);
    //获取所有的openid并排重
    @Query("select distinct p.openid from Patient p where p.openid is not null and p.openid <> '' ")
    List<String> findOpenids();

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

@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.Date;
import java.util.List;
/**
@ -15,9 +16,19 @@ public interface PrenatalInspectorPlanDao extends PagingAndSortingRepository<Pre
    @Query("select a from PrenatalInspectorPlan a where a.inspectionCode = ?1 and a.status = '0' and a.del='1' order by a.inspectionTime asc")
    List<PrenatalInspectorPlan> findByCode(String inspectionCode);
    @Query("select a from PrenatalInspectorPlan a where a.patient = ?1 and a.status = '0' and a.del='1' and NOW()<=a.inspectionTime order by a.inspectionTime asc")
    //查询最近15天数据
    @Query(value = "SELECT a.* FROM wlyy_prenatal_inspector_plan a WHERE a.patient = ?1 AND a. STATUS = '0' AND a.del = '1' " +
            " AND DATE_ADD(CURDATE(),INTERVAL -14 DAY) <= a.inspection_time " +
            " AND a.inspection_time <= CURDATE() ORDER BY a.inspection_time DESC ",nativeQuery = true)
    List<PrenatalInspectorPlan> findByPatient(String patient);
    //应产检时间前14天后14天待产检计划(不包括应产检当天)
    @Query(value = "SELECT a.* FROM wlyy_prenatal_inspector_plan a, (SELECT t.* from wlyy_prenatal_inspector_plan t where t.id = ?1 )b  " +
            " WHERE a.inspection_time >= DATE_ADD(b.inspection_time,INTERVAL -14 DAY) and a.inspection_time <= DATE_ADD(b.inspection_time,INTERVAL 14 DAY) " +
            "and a.inspection_time != b.inspection_time ORDER BY a.inspection_time DESC ",nativeQuery = true)
    List<PrenatalInspectorPlan> getScopeById(Long prenatalId);
    @Query("select a from PrenatalInspectorPlan a where a.status = '0' and a.del='1' and ( TO_DAYS(a.inspectionTime)- TO_DAYS(NOW())=7 or TO_DAYS(a.inspectionTime)- TO_DAYS(NOW())=1 ) ")
    List<PrenatalInspectorPlan> findWxTipList();

+ 20 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/patient/PrenatalInspectorRecordDao.java

@ -0,0 +1,20 @@
package com.yihu.wlyy.repository.patient;
import com.yihu.wlyy.entity.patient.prenatal.PrenatalInspectorPlan;
import com.yihu.wlyy.entity.patient.prenatal.PrenatalInspectorRecord;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Reece on 2017/12/5.
 */
public interface PrenatalInspectorRecordDao extends PagingAndSortingRepository<PrenatalInspectorRecord, Long>{
    //根据孕检ID及type获取发送记录
    @Query("select a from PrenatalInspectorRecord a where a.relation = ?1 and a.type= ?2 ")
    PrenatalInspectorRecord findByRelationAndType(String relation,int type);
}

+ 409 - 186
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/prenatalInspector/PrenatalInspectorPreCardService.java

@ -9,17 +9,20 @@ import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.patient.prenatal.PrenatalInspectorPlan;
import com.yihu.wlyy.entity.patient.prenatal.PrenatalInspectorPlanLibrary;
import com.yihu.wlyy.entity.patient.prenatal.PrenatalInspectorPreCard;
import com.yihu.wlyy.entity.patient.prenatal.PrenatalInspectorRecord;
import com.yihu.wlyy.health.repository.DevicePatientHealthIndexDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.patient.*;
import com.yihu.wlyy.service.BaseService;
import com.yihu.wlyy.service.app.health.PatientHealthIndexService;
import com.yihu.wlyy.service.app.sign.FamilyContractService;
import com.yihu.wlyy.service.common.SMSService;
import com.yihu.wlyy.service.third.jw.JwMaternalChildService;
import com.yihu.wlyy.service.third.jw.ZyDictService;
import com.yihu.wlyy.task.PushMsgTask;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.wechat.util.WeiXinAccessTokenUtils;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -27,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@ -64,24 +68,31 @@ public class PrenatalInspectorPreCardService extends BaseService {
    private PatientHealthIndexService healthIndexService;
    @Autowired
    private DevicePatientHealthIndexDao healthIndexDao;
    @Autowired
    private PrenatalInspectorRecordDao recordDao;
    @Autowired
    private WeiXinOpenIdUtils weiXinOpenIdUtils;
    @Autowired
    private SMSService smsService;
//    public
    /**
     * 待产检计划
     *
     * @param code
     * @return
     */
    public JSONArray planList(String code){
    public JSONArray planList(String code) {
        JSONArray jsonArray = new JSONArray();
        List<PrenatalInspectorPlan> planList = prenatalInspectorPlanDao.findByCode(code);
        for (PrenatalInspectorPlan plan:planList){
        for (PrenatalInspectorPlan plan : planList) {
            JSONObject json = new JSONObject();
            json.put("checkItem",plan.getCheckItem());
            json.put("name",plan.getName());
            json.put("thisFoucs",plan.getThisFocus());
            json.put("thisNote",plan.getThisNote());
            json.put("inspectionTime",DateUtil.dateToStrShort(plan.getInspectionTime()));
            json.put("checkItem", plan.getCheckItem());
            json.put("name", plan.getName());
            json.put("thisFoucs", plan.getThisFocus());
            json.put("thisNote", plan.getThisNote());
            json.put("inspectionTime", DateUtil.dateToStrShort(plan.getInspectionTime()));
            jsonArray.add(json);
        }
@ -91,28 +102,29 @@ public class PrenatalInspectorPreCardService extends BaseService {
    /**
     * 获取产检列表
     *
     * @param patientCode
     * @return
     */
    public JSONArray getEhrMaternalFirstExamRecord(String patientCode){
    public JSONArray getEhrMaternalFirstExamRecord(String patientCode) {
        JSONArray re = new JSONArray();
        SignFamily signFamily = signFamilyDao.findByPatient(patientCode);
        String hospital = null;
        if(signFamily!=null){
        if (signFamily != null) {
            hospital = signFamily.getHospital();
        }
        Patient patient = patientDao.findByCode(patientCode);
        try{
        try {
            boolean checkFlag = true;//是否查询预建卡接口。有建卡记录且建卡记录有结束妊娠才查询预建卡
            String response = jwMaternalChildService.getEhrMaternalFirstExamRecord(patient.getIdcard(),hospital);
            String response = jwMaternalChildService.getEhrMaternalFirstExamRecord(patient.getIdcard(), hospital);
            JSONObject json = JSONObject.parseObject(response);
            JSONArray data = null;
            if(json.getInteger("status")==200){
            if (json.getInteger("status") == 200) {
                data = json.getJSONObject("data").getJSONArray("DATA");
            }
            Map<String,String> map = new HashMap<>();//存储产检号,用于去除预建卡信息中重复记录
            if(data!=null&&data.size()>0){//有建卡信息
                for (int i=0;i<data.size();i++) {
            Map<String, String> map = new HashMap<>();//存储产检号,用于去除预建卡信息中重复记录
            if (data != null && data.size() > 0) {//有建卡信息
                for (int i = 0; i < data.size(); i++) {
                    JSONObject planJson = new JSONObject();
                    JSONObject pregnancy = data.getJSONObject(i);
                    String PREGNANCY_NO = pregnancy.getString("PREGNANCY_NO");//智业产检号
@ -124,103 +136,112 @@ public class PrenatalInspectorPreCardService extends BaseService {
                    String DELIVERY_WAY = pregnancy.getString("DELIVERY_WAY");//分娩方式
                    String DELIVERY_TIME = pregnancy.getString("DELIVERY_TIME");//分娩方式时间
                    String EXAM_TIME = pregnancy.getString("EXAM_TIME");//检查日期
                    planJson.put("pregnancyNo",PREGNANCY_NO);
                    planJson.put("pregnancyStatus",PREGNANCY_STATUS);
                    planJson.put("endManner",END_MANNER);
                    planJson.put("endTime",END_TIME);
                    planJson.put("mensesLast",MENSES_LAST);
                    planJson.put("expectedTime",EXPECTED_TIME);
                    planJson.put("pregnancyNo", PREGNANCY_NO);
                    planJson.put("pregnancyStatus", PREGNANCY_STATUS);
                    planJson.put("endManner", END_MANNER);
                    planJson.put("endTime", END_TIME);
                    planJson.put("mensesLast", MENSES_LAST);
                    planJson.put("expectedTime", EXPECTED_TIME);
                    Date date = new Date();
                    map.put("PREGNANCY_NO","PREGNANCY_NO");
                    if(StringUtils.isBlank(END_TIME)){
                        checkFlag = checkFlag?false:checkFlag;
                    map.put("PREGNANCY_NO", "PREGNANCY_NO");
                    if (StringUtils.isBlank(END_TIME)) {
                        checkFlag = checkFlag ? false : checkFlag;
                        //未结束妊娠,生成待产检计划
                        List<PrenatalInspectorPlan> plans = prenatalInspectorPlanDao.findByPatient(patientCode);
                        boolean flag = false;
                        if(plans==null||plans.size()==0){
                        if (plans == null || plans.size() == 0) {
                            flag = true;
                        }else {
                        } else {
                            String inspectionCode = plans.get(0).getInspectionCode();
                            if(StringUtils.isBlank(inspectionCode)){//有待产检计划,但是产检号为空,说明是预建卡生成的产检记录
                            if (StringUtils.isBlank(inspectionCode)) {//有待产检计划,但是产检号为空,说明是预建卡生成的产检记录
                                flag = true;
                                //更新居民待产检计划,需要重新生成
                                prenatalInspectorPlanDao.updateStatus(patientCode);
                            }
                        }
                        if(flag){//判断是否已经生成产检记录
                        if (flag) {//判断是否已经生成产检记录
                            Date dueDay = DateUtil.strToDate(EXPECTED_TIME);
                            Long days = DateUtil.getDays(dueDay,date);
                            Long days = DateUtil.getDays(dueDay, date);
                            List<PrenatalInspectorPlanLibrary> libraries = prenatalInspectorPlanLibraryDao.findByDays(days);
                            plans = new ArrayList<>();
                            PrenatalInspectorPlan plan = null;
                            for (PrenatalInspectorPlanLibrary library:libraries){
                                plan = new PrenatalInspectorPlan();
                                plan.setInspectionPhase(library.getInspectionPhase());
                                plan.setStatus("0");
                                plan.setPatient(patientCode);
                                plan.setCzrq(date);
                                plan.setDel("1");
                                plan.setInspectionCode(PREGNANCY_NO);//产检号
                                plan.setCheckItem(library.getCheckItem());
                                plan.setInspectionTime(DateUtil.getPrenatalInspectorDate(dueDay,-library.getEndDay().intValue()));
                                plan.setName(library.getName());
                                plan.setThisFocus(library.getThisFocus());
                                plan.setThisNote(library.getThisNote());
                                plans.add(plan);
                            for (PrenatalInspectorPlanLibrary library : libraries) {
                                //                                    只取最近15天数据
                                Date inspectorDate = DateUtil.getPrenatalInspectorDate(dueDay, -library.getEndDay().intValue());
                                if (DateUtil.getDays(date, inspectorDate) <= 15 && DateUtil.getDays(date, inspectorDate) >= 0) {
                                    plan = new PrenatalInspectorPlan();
                                    plan.setInspectionPhase(library.getInspectionPhase());
                                    plan.setStatus("0");
                                    plan.setPatient(patientCode);
                                    plan.setCzrq(date);
                                    plan.setDel("1");
                                    plan.setInspectionCode(PREGNANCY_NO);//产检号
                                    plan.setCheckItem(library.getCheckItem());
                                    plan.setInspectionTime(DateUtil.getPrenatalInspectorDate(dueDay, -library.getEndDay().intValue()));
                                    plan.setName(library.getName());
                                    plan.setThisFocus(library.getThisFocus());
                                    plan.setThisNote(library.getThisNote());
                                    plans.add(plan);
                                }
                            }
                            if (plans.size()>0){
                            if (plans.size() > 0) {
                                prenatalInspectorPlanDao.save(plans);
                            }
                        }
                        //计算距离下次产检时间
                        Long nextExamDay = 0l;
                        for (PrenatalInspectorPlan plan:plans) {
                            Long temp = DateUtil.getDays(plan.getInspectionTime(),date);
                            if(nextExamDay==0||nextExamDay>temp){
                        for (PrenatalInspectorPlan plan : plans) {
                            Long temp = DateUtil.getDays(plan.getInspectionTime(), date);
                            if (nextExamDay == 0 || nextExamDay > temp) {
                                nextExamDay = temp;
                            }
                        }
                        planJson.put("plans",plans);//待产检列表
                        planJson.put("nextExamDay",nextExamDay);//距离下次产检天数
                        planJson.put("plans", plans);//待产检列表
                        if (plans != null && plans.size()>0) {
                            PrenatalInspectorPlan prenatalInspectorPlan = plans.get(0);
                            JSONObject status = getPrenatalStatus(prenatalInspectorPlan.getId());
                            planJson.put("inspectStatus", status);//最近一条状态
                        }
                        planJson.put("nextExamDay", nextExamDay);//距离下次产检天数
                        //产床预约信息
                        String precontract_org_name = "";//产床医院
                        try {
                            String bedRecode = jwMaternalChildService.getEhrMaternalBedPrecontractRecord(patient.getIdcard(),hospital);
                            String bedRecode = jwMaternalChildService.getEhrMaternalBedPrecontractRecord(patient.getIdcard(), hospital);
                            JSONObject bedJson = JSONObject.parseObject(bedRecode);
                            JSONArray bedData = null;
                            if(bedJson.getInteger("status")==200){
                            if (bedJson.getInteger("status") == 200) {
                                bedData = bedJson.getJSONObject("data").getJSONArray("DATA");
                            }
                            if(bedData!=null&&bedData.size()>0){
                                JSONObject exam = bedData.getJSONObject(bedData.size()-1);
                            if (bedData != null && bedData.size() > 0) {
                                JSONObject exam = bedData.getJSONObject(bedData.size() - 1);
                                precontract_org_name = exam.getString("PRECONTRACT_ORG_NAME");
                            }
                        }catch (Exception e){
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        planJson.put("precontractOrgName",precontract_org_name);//产床医院
                        planJson.put("precontractOrgName", precontract_org_name);//产床医院
                    }
                    re.add(planJson);
                }
            }
            //请求预建卡接口
            if(checkFlag){
                String resp = jwMaternalChildService.getEhrMaternalPreFirstExamRecord(patient.getIdcard(),hospital);
            if (checkFlag) {
                String resp = jwMaternalChildService.getEhrMaternalPreFirstExamRecord(patient.getIdcard(), hospital);
                JSONObject preJson = JSONObject.parseObject(resp);
                JSONArray preData = null;
                if(preJson.getInteger("status")==200){
                if (preJson.getInteger("status") == 200) {
                    preData = preJson.getJSONObject("data").getJSONArray("DATA");
                    if(preData!=null&&preData.size()>0){
                    if (preData != null && preData.size() > 0) {
                        JSONArray rep = new JSONArray();
                        for (int i=0;i<preData.size();i++){
                        for (int i = 0; i < preData.size(); i++) {
                            JSONObject planJson = new JSONObject();
                            JSONObject pregnancy = preData.getJSONObject(i);
                            String PREGNANCY_NO = pregnancy.getString("PREGNANCY_NO");//智业产检号
                            if(map.containsKey(PREGNANCY_NO)){
                            if (map.containsKey(PREGNANCY_NO)) {
                                continue;//去重
                            }
@ -228,58 +249,67 @@ public class PrenatalInspectorPreCardService extends BaseService {
                            String END_TIME = pregnancy.getString("END_TIME");//结束妊娠
                            String MENSES_LAST = pregnancy.getString("MENSES_LAST");//末次月经
                            Date dueday = DateUtil.getDueDate(DateUtil.strToDateLong(MENSES_LAST));//预产期
                            planJson.put("pregnancyNo",PREGNANCY_NO);
                            planJson.put("pregnancyStatus","0");
                            planJson.put("endManner",END_MANNER);
                            planJson.put("endTime",END_TIME);
                            planJson.put("mensesLast",MENSES_LAST);
                            planJson.put("expectedTime",DateUtil.dateToStrLong(dueday));
                            planJson.put("pregnancyNo", PREGNANCY_NO);
                            planJson.put("pregnancyStatus", "0");
                            planJson.put("endManner", END_MANNER);
                            planJson.put("endTime", END_TIME);
                            planJson.put("mensesLast", MENSES_LAST);
                            planJson.put("expectedTime", DateUtil.dateToStrLong(dueday));
                            Date date = new Date();
                            List<PrenatalInspectorPlan> plans = prenatalInspectorPlanDao.findByPatient(patientCode);
                            if(plans==null||plans.size()==0){//判断是否已经生成产检记录
                            if (plans == null || plans.size() == 0) {//判断是否已经生成产检记录
                                //预建卡还没产检,有产检就会生成产检记录,建卡接口就会有数据
                                Long days = DateUtil.getDays(dueday,date);
                                Long days = DateUtil.getDays(dueday, date);
                                List<PrenatalInspectorPlanLibrary> libraries = prenatalInspectorPlanLibraryDao.findByDays(days);
                                plans = new ArrayList<>();
                                PrenatalInspectorPlan plan = null;
                                for (PrenatalInspectorPlanLibrary library:libraries){
                                    plan = new PrenatalInspectorPlan();
                                    plan.setInspectionPhase(library.getInspectionPhase());
                                    plan.setStatus("0");
                                    plan.setPatient(patientCode);
                                    plan.setCzrq(date);
                                    plan.setDel("1");
                                    plan.setCheckItem(library.getCheckItem());
                                    plan.setInspectionTime(DateUtil.getPrenatalInspectorDate(dueday,-library.getEndDay().intValue()));
                                    plan.setName(library.getName());
                                    plan.setThisFocus(library.getThisFocus());
                                    plan.setThisNote(library.getThisNote());
                                    plans.add(plan);
                                for (PrenatalInspectorPlanLibrary library : libraries) {
//                                    只取最近15天数据
                                    Date inspectorDate = DateUtil.getPrenatalInspectorDate(dueday, -library.getEndDay().intValue());
                                    if (DateUtil.getDays(date, inspectorDate) <= 15 && DateUtil.getDays(date, inspectorDate) >= 0) {
                                        plan = new PrenatalInspectorPlan();
                                        plan.setInspectionPhase(library.getInspectionPhase());
                                        plan.setStatus("0");
                                        plan.setPatient(patientCode);
                                        plan.setCzrq(date);
                                        plan.setDel("1");
                                        plan.setCheckItem(library.getCheckItem());
                                        plan.setInspectionTime(inspectorDate);
                                        plan.setName(library.getName());
                                        plan.setThisFocus(library.getThisFocus());
                                        plan.setThisNote(library.getThisNote());
                                        plans.add(plan);
                                    }
                                }
                                if (plans.size()>0){
                                if (plans.size() > 0) {
                                    prenatalInspectorPlanDao.save(plans);
                                }
                            }
                            //计算距离下次产检时间
                            Long nextExamDay = 0l;
                            for (PrenatalInspectorPlan plan:plans) {
                                Long temp = DateUtil.getDays(plan.getInspectionTime(),date);
                                if(nextExamDay==0||nextExamDay>temp){
                            for (PrenatalInspectorPlan plan : plans) {
                                Long temp = DateUtil.getDays(plan.getInspectionTime(), date);
                                if (nextExamDay == 0 || nextExamDay > temp) {
                                    nextExamDay = temp;
                                }
                            }
                            planJson.put("plans",plans);//待产检列表
                            planJson.put("nextExamDay",nextExamDay);//距离下次产检天数
                            planJson.put("precontractOrgName",null);//产床医院
                            planJson.put("plans", plans);//待产检列表
                            if (plans != null && plans.size()>0) {
                                PrenatalInspectorPlan prenatalInspectorPlan = plans.get(0);
                                JSONObject status = getPrenatalStatus(prenatalInspectorPlan.getId());
                                planJson.put("inspectStatus", status);//最近一条状态
                            }
                            planJson.put("nextExamDay", nextExamDay);//距离下次产检天数
                            planJson.put("precontractOrgName", null);//产床医院
                            rep.add(planJson);
                        }
                        //重新排序
                        if(rep.size()>0){
                            for (int i=0;i<re.size();i++){
                        if (rep.size() > 0) {
                            for (int i = 0; i < re.size(); i++) {
                                rep.add(re.getJSONObject(i));
                            }
                            return rep;
@ -288,7 +318,7 @@ public class PrenatalInspectorPreCardService extends BaseService {
                }
            }
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
        }
@ -297,28 +327,29 @@ public class PrenatalInspectorPreCardService extends BaseService {
    /**
     * 初检
     *
     * @param patientCode
     * @return
     */
    public JSONObject firstExam(String patientCode,String pregnancyNo){
    public JSONObject firstExam(String patientCode, String pregnancyNo) {
        JSONObject re = new JSONObject();
        try {
            SignFamily signFamily = signFamilyDao.findByPatient(patientCode);
            String hospital = null;
            if(signFamily!=null){
            if (signFamily != null) {
                hospital = signFamily.getHospital();
            }
            Patient patient = patientDao.findByCode(patientCode);
            String response = jwMaternalChildService.getEhrMaternalFirstExamRecord(patient.getIdcard(),hospital);
            String response = jwMaternalChildService.getEhrMaternalFirstExamRecord(patient.getIdcard(), hospital);
            JSONObject json = JSONObject.parseObject(response);
            JSONArray data = null;
            if(json.getInteger("status")==200){
            if (json.getInteger("status") == 200) {
                data = json.getJSONObject("data").getJSONArray("DATA");
            }
            if(data!=null&&data.size()>0){
                for (int i=0;i<data.size();i++){
                    if(pregnancyNo.equals(data.getJSONObject(i).getString("PREGNANCY_NO"))){//判断是否同一个产检
            if (data != null && data.size() > 0) {
                for (int i = 0; i < data.size(); i++) {
                    if (pregnancyNo.equals(data.getJSONObject(i).getString("PREGNANCY_NO"))) {//判断是否同一个产检
                        re = data.getJSONObject(i);
                        String SICK_PROVINCE = re.getString("SICK_PROVINCE");//省
                        String SICK_CITY = re.getString("SICK_CITY");//市
@ -332,42 +363,42 @@ public class PrenatalInspectorPreCardService extends BaseService {
                        String SICK_HOUSEHOLD_COUNTRY = re.getString("SICK_HOUSEHOLD_COUNTRY");//户籍街道
                        String SICK_HOUSEHOLD_VILLAGE = re.getString("SICK_HOUSEHOLD_VILLAGE");//户籍居委会
                        if(StringUtils.isNotBlank(SICK_PROVINCE)){
                            re.put("SICK_PROVINCE",zyDictService.findZoneName(SICK_PROVINCE));
                        if (StringUtils.isNotBlank(SICK_PROVINCE)) {
                            re.put("SICK_PROVINCE", zyDictService.findZoneName(SICK_PROVINCE));
                        }
                        if(StringUtils.isNotBlank(SICK_CITY)){
                            re.put("SICK_CITY",zyDictService.findZoneName(SICK_CITY));
                        if (StringUtils.isNotBlank(SICK_CITY)) {
                            re.put("SICK_CITY", zyDictService.findZoneName(SICK_CITY));
                        }
                        if(StringUtils.isNotBlank(SICK_COUNTY)){
                            re.put("SICK_COUNTY",zyDictService.findZoneName(SICK_COUNTY));
                        if (StringUtils.isNotBlank(SICK_COUNTY)) {
                            re.put("SICK_COUNTY", zyDictService.findZoneName(SICK_COUNTY));
                        }
                        if(StringUtils.isNotBlank(SICK_COUNTRY)){
                            re.put("SICK_COUNTRY",zyDictService.findZoneName(SICK_COUNTRY));
                        if (StringUtils.isNotBlank(SICK_COUNTRY)) {
                            re.put("SICK_COUNTRY", zyDictService.findZoneName(SICK_COUNTRY));
                        }
                        if(StringUtils.isNotBlank(SICK_VILLAGE)){
                            re.put("SICK_VILLAGE",zyDictService.findZoneName(SICK_VILLAGE));
                        if (StringUtils.isNotBlank(SICK_VILLAGE)) {
                            re.put("SICK_VILLAGE", zyDictService.findZoneName(SICK_VILLAGE));
                        }
                        if(StringUtils.isNotBlank(SICK_HOUSEHOLD_PROVINCE)){
                            re.put("SICK_HOUSEHOLD_PROVINCE",zyDictService.findZoneName(SICK_HOUSEHOLD_PROVINCE));
                        if (StringUtils.isNotBlank(SICK_HOUSEHOLD_PROVINCE)) {
                            re.put("SICK_HOUSEHOLD_PROVINCE", zyDictService.findZoneName(SICK_HOUSEHOLD_PROVINCE));
                        }
                        if(StringUtils.isNotBlank(SICK_HOUSEHOLD_CITY)){
                            re.put("SICK_HOUSEHOLD_CITY",zyDictService.findZoneName(SICK_HOUSEHOLD_CITY));
                        if (StringUtils.isNotBlank(SICK_HOUSEHOLD_CITY)) {
                            re.put("SICK_HOUSEHOLD_CITY", zyDictService.findZoneName(SICK_HOUSEHOLD_CITY));
                        }
                        if(StringUtils.isNotBlank(SICK_HOUSEHOLD_COUNTY)){
                            re.put("SICK_HOUSEHOLD_COUNTY",zyDictService.findZoneName(SICK_HOUSEHOLD_COUNTY));
                        if (StringUtils.isNotBlank(SICK_HOUSEHOLD_COUNTY)) {
                            re.put("SICK_HOUSEHOLD_COUNTY", zyDictService.findZoneName(SICK_HOUSEHOLD_COUNTY));
                        }
                        if(StringUtils.isNotBlank(SICK_HOUSEHOLD_COUNTRY)){
                            re.put("SICK_HOUSEHOLD_COUNTRY",zyDictService.findZoneName(SICK_HOUSEHOLD_COUNTRY));
                        if (StringUtils.isNotBlank(SICK_HOUSEHOLD_COUNTRY)) {
                            re.put("SICK_HOUSEHOLD_COUNTRY", zyDictService.findZoneName(SICK_HOUSEHOLD_COUNTRY));
                        }
                        if(StringUtils.isNotBlank(SICK_HOUSEHOLD_VILLAGE)){
                            re.put("SICK_HOUSEHOLD_VILLAGE",zyDictService.findZoneName(SICK_HOUSEHOLD_VILLAGE));
                        if (StringUtils.isNotBlank(SICK_HOUSEHOLD_VILLAGE)) {
                            re.put("SICK_HOUSEHOLD_VILLAGE", zyDictService.findZoneName(SICK_HOUSEHOLD_VILLAGE));
                        }
                        return re;
                    }
                }
            }
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
        }
        return re;
@ -375,30 +406,31 @@ public class PrenatalInspectorPreCardService extends BaseService {
    /**
     * 复检记录
     *
     * @param patientCode
     * @return
     */
    public JSONArray reExamRecode(String patientCode,String pregnancyNo){
    public JSONArray reExamRecode(String patientCode, String pregnancyNo) {
        JSONArray re = new JSONArray();
        try {
            SignFamily signFamily = signFamilyDao.findByPatient(patientCode);
            String hospital = null;
            if(signFamily!=null){
            if (signFamily != null) {
                hospital = signFamily.getHospital();
            }
            Patient patient = patientDao.findByCode(patientCode);
            String response = jwMaternalChildService.getEhrMaternalReExamRecord(patient.getIdcard(),hospital,pregnancyNo);
            String response = jwMaternalChildService.getEhrMaternalReExamRecord(patient.getIdcard(), hospital, pregnancyNo);
            JSONObject json = JSONObject.parseObject(response);
            JSONArray data = null;
            if(json.getInteger("status")==200){
            if (json.getInteger("status") == 200) {
                data = json.getJSONObject("data").getJSONArray("DATA");
            }
            if(data!=null&&data.size()>0){
            if (data != null && data.size() > 0) {
                return data;
            }
            return re;
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
        }
        return re;
@ -406,26 +438,27 @@ public class PrenatalInspectorPreCardService extends BaseService {
    /**
     * 获取最后一次产检时间
     *
     * @param idcard
     * @param hospital
     * @return
     */
    public String getLastExamTime(String idcard,String hospital,String pregnancyNo){
    public String getLastExamTime(String idcard, String hospital, String pregnancyNo) {
        String re = "";
        try {
            String response = jwMaternalChildService.getEhrMaternalReExamRecord(idcard,hospital,pregnancyNo);
            String response = jwMaternalChildService.getEhrMaternalReExamRecord(idcard, hospital, pregnancyNo);
            JSONObject json = JSONObject.parseObject(response);
            JSONArray data = null;
            if(json.getInteger("status")==200){
            if (json.getInteger("status") == 200) {
                data = json.getJSONObject("data").getJSONArray("DATA");
            }
            if(data!=null&&data.size()>0){
                JSONObject exam = data.getJSONObject(data.size()-1);
            if (data != null && data.size() > 0) {
                JSONObject exam = data.getJSONObject(data.size() - 1);
//                String PREGNANCY_WEEK = exam.getString("PREGNANCY_WEEK");//检查孕周
                String examTime = exam.getString("EXAM_TIME");//产检日期
                re = examTime;
            }
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
        }
        return re;
@ -433,26 +466,27 @@ public class PrenatalInspectorPreCardService extends BaseService {
    /**
     * 产床预约信息
     *
     * @param idcard
     * @param hospital
     * @return
     */
    public String getEhrMaternalBedPrecontractRecord(String idcard,String hospital){
    public String getEhrMaternalBedPrecontractRecord(String idcard, String hospital) {
        String re = "";
        try {
            String response = jwMaternalChildService.getEhrMaternalBedPrecontractRecord(idcard,hospital);
            String response = jwMaternalChildService.getEhrMaternalBedPrecontractRecord(idcard, hospital);
            JSONObject json = JSONObject.parseObject(response);
            JSONArray data = null;
            if(json.getInteger("status")==200){
            if (json.getInteger("status") == 200) {
                data = json.getJSONObject("data").getJSONArray("DATA");
            }
            if(data!=null&&data.size()>0){
                JSONObject exam = data.getJSONObject(data.size()-1);
            if (data != null && data.size() > 0) {
                JSONObject exam = data.getJSONObject(data.size() - 1);
                String PREGNANCY_WEEK = exam.getString("PREGNANCY_WEEK");//检查孕周
                String examTime = exam.getString("EXAM_TIME");//产检日期
                re = examTime;
            }
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
        }
        return re;
@ -460,34 +494,35 @@ public class PrenatalInspectorPreCardService extends BaseService {
    /**
     * 预建卡列表-孕检计划
     *
     * @param patient
     * @return
     */
    public JSONArray preCardList(String patient){
    public JSONArray preCardList(String patient) {
        JSONArray jsonArray = new JSONArray();
        List<PrenatalInspectorPreCard> preCards = prenatalInspectorPreCardDao.findByPatient(patient);
        for (PrenatalInspectorPreCard preCard:preCards){
        for (PrenatalInspectorPreCard preCard : preCards) {
            JSONObject json = new JSONObject();
            json.put("code",preCard.getCode());
            json.put("dueDate",DateUtil.dateToStrShort(preCard.getDueDate()));//预产期
            json.put("code", preCard.getCode());
            json.put("dueDate", DateUtil.dateToStrShort(preCard.getDueDate()));//预产期
            Date date = new Date();
            Long dueDateDay = DateUtil.getDays(preCard.getDueDate(),date);
            if(dueDateDay>0){
                json.put("dueDateWeek",getWeek(dueDateDay.intValue()));//距离预产期周数
                json.put("dueDateDay",getDay(dueDateDay.intValue()));//距离预产期周数的余数
                Long pregnancyDay = DateUtil.getDays(date,preCard.getLastMenstrualDate());
            Long dueDateDay = DateUtil.getDays(preCard.getDueDate(), date);
            if (dueDateDay > 0) {
                json.put("dueDateWeek", getWeek(dueDateDay.intValue()));//距离预产期周数
                json.put("dueDateDay", getDay(dueDateDay.intValue()));//距离预产期周数的余数
                Long pregnancyDay = DateUtil.getDays(date, preCard.getLastMenstrualDate());
                int week = getWeek(pregnancyDay.intValue());
                int day = getDay(pregnancyDay.intValue());
                String preDay = day==0?(week+"周"):(week+"周"+day+"天");//怀孕时间
                json.put("status",preDay);
            }else {
                json.put("dueDateWeek",0);//距离预产期周数
                json.put("dueDateDay",0);//距离预产期周数的余数
                json.put("status",preCard.getStatus());
                String preDay = day == 0 ? (week + "周") : (week + "周" + day + "天");//怀孕时间
                json.put("status", preDay);
            } else {
                json.put("dueDateWeek", 0);//距离预产期周数
                json.put("dueDateDay", 0);//距离预产期周数的余数
                json.put("status", preCard.getStatus());
            }
            json.put("hospitalName",preCard.getHospitalName());//预约床位医院
            json.put("orderBedTime",preCard.getOrderBedTime());//预约床位时间
            json.put("hospitalName", preCard.getHospitalName());//预约床位医院
            json.put("orderBedTime", preCard.getOrderBedTime());//预约床位时间
            jsonArray.add(json);
        }
@ -497,47 +532,50 @@ public class PrenatalInspectorPreCardService extends BaseService {
    /**
     * 把天数换算成周数
     *
     * @param day
     * @return
     */
    private int getWeek(Integer day){
        return day/7;
    private int getWeek(Integer day) {
        return day / 7;
    }
    /**
     * 把天数换算成周数的余数
     *
     * @param day
     * @return
     */
    private int getDay(Integer day){
        return day%7;
    private int getDay(Integer day) {
        return day % 7;
    }
    /**
     * 上传预建卡
     *
     * @param code
     */
    public String uploadPreExam(String code){
    public String uploadPreExam(String code) {
        String re = "";
        try {
            //上传预建卡
            String response = jwMaternalChildService.SaveEhrMaternalPreFirstExamRecord(code);
            JSONObject preJson = JSONObject.parseObject(response);
            if(preJson.getInteger("status")!=200){
            if (preJson.getInteger("status") != 200) {
                re = preJson.getString("msg");
            }else {
            } else {
                JSONObject json = preJson.getJSONObject("data");
                if("0".equals(json.getString("code"))){
                if ("0".equals(json.getString("code"))) {
                    re = json.getString("MESSAGE");
                }
            }
            if(re.contains("身份证为空,请检查")){
            if (re.contains("身份证为空,请检查")) {
                re = "身份证为空,请检查";
            }else if(re.contains("操作员为空,请检查")){
            } else if (re.contains("操作员为空,请检查")) {
                re = "操作员为空,请检查";
            }
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
        }
        return re;
@ -557,12 +595,12 @@ public class PrenatalInspectorPreCardService extends BaseService {
        //判断是否有预建卡
        try {
            String resp = jwMaternalChildService.getEhrMaternalPreFirstExamRecord(preCard.getIdcard(),signFamily.getHospital());
            String resp = jwMaternalChildService.getEhrMaternalPreFirstExamRecord(preCard.getIdcard(), signFamily.getHospital());
            JSONObject preJson = JSONObject.parseObject(resp);
            JSONArray preData = null;
            if(preJson.getInteger("status")==200){
            if (preJson.getInteger("status") == 200) {
                preData = preJson.getJSONObject("data").getJSONArray("DATA");
                if(preData!=null&&preData.size()>0){
                if (preData != null && preData.size() > 0) {
                    JSONObject temp = preData.getJSONObject(0);
                    String END_MANNER = temp.getString("END_MANNER");//妊娠终止方式
                    if(StringUtils.isBlank(END_MANNER)){
@ -571,7 +609,7 @@ public class PrenatalInspectorPreCardService extends BaseService {
                    }
                }
            }
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            json.put("code","-3");
            return json;
@ -583,8 +621,8 @@ public class PrenatalInspectorPreCardService extends BaseService {
        preCard.setDoctorName(doctor.getName());
        //保存智业的医生信息
        Map<String,Object> map = zyDictService.findJwDoctorByDoctor(doctor.getCode());
        if(map!=null){
        Map<String, Object> map = zyDictService.findJwDoctorByDoctor(doctor.getCode());
        if (map != null) {
            preCard.setJwDoctor(map.get("jw_doctor").toString());
        }
@ -612,11 +650,11 @@ public class PrenatalInspectorPreCardService extends BaseService {
//        p.setMobile(preCard.getMobile());
        //2、生成待产检计划(待产检计划由获取健康信息接口生成,关联产检计划)
        Long days = DateUtil.getDays(dueDate,date);
        Long days = DateUtil.getDays(dueDate, date);
        List<PrenatalInspectorPlanLibrary> libraries = prenatalInspectorPlanLibraryDao.findByDays(days);
        List<PrenatalInspectorPlan> plans = new ArrayList<>();
        PrenatalInspectorPlan plan = null;
        for (PrenatalInspectorPlanLibrary library:libraries){
        for (PrenatalInspectorPlanLibrary library : libraries) {
            plan = new PrenatalInspectorPlan();
            plan.setInspectionPhase(library.getInspectionPhase());
            plan.setStatus("0");
@ -625,7 +663,7 @@ public class PrenatalInspectorPreCardService extends BaseService {
            plan.setDel("1");
            plan.setCheckItem(library.getCheckItem());
//            plan.setInspectionCode(preCard.getCode());
            plan.setInspectionTime(DateUtil.getPrenatalInspectorDate(dueDate,-library.getEndDay().intValue()));
            plan.setInspectionTime(DateUtil.getPrenatalInspectorDate(dueDate, -library.getEndDay().intValue()));
            plan.setName(library.getName());
            plan.setThisFocus(library.getThisFocus());
            plan.setThisNote(library.getThisNote());
@ -639,7 +677,7 @@ public class PrenatalInspectorPreCardService extends BaseService {
            plans.add(plan);
        }
        if (plans.size()>0){
        if (plans.size() > 0) {
            prenatalInspectorPlanDao.save(plans);
        }
        json.put("code",preCard.getCode());
@ -649,28 +687,29 @@ public class PrenatalInspectorPreCardService extends BaseService {
    /**
     * 保存体征数据 有保存体征数据才更新
     *
     * @param preCard
     * @param patientCode
     */
    public void saveHealthIndex(PrenatalInspectorPreCard preCard,String patientCode){
        if(StringUtils.isNotBlank(preCard.getHeight())&&StringUtils.isNotBlank(preCard.getWeight())){
    public void saveHealthIndex(PrenatalInspectorPreCard preCard, String patientCode) {
        if (StringUtils.isNotBlank(preCard.getHeight()) && StringUtils.isNotBlank(preCard.getWeight())) {
            //先判断体征数据是否变更
            DevicePatientHealthIndex index = healthIndexDao.findLastData(patientCode, 3);
            String height = null;
            String weight = null;
            if(index!=null){
            if (index != null) {
                height = index.getValue2();
                weight = index.getValue1();
            }
            if(!preCard.getHeight().equals(height)||!preCard.getWeight().equals(weight)){
            if (!preCard.getHeight().equals(height) || !preCard.getWeight().equals(weight)) {
                //更新体征数据
                JSONObject json = new JSONObject();
                json.put("time",DateUtil.dateToStrLong(preCard.getCzrq()));
                json.put("height",preCard.getHeight());
                json.put("weight",preCard.getWeight());
                json.put("time", DateUtil.dateToStrLong(preCard.getCzrq()));
                json.put("height", preCard.getHeight());
                json.put("weight", preCard.getWeight());
                try {
                    healthIndexService.addPatientHealthIndex(json.toString(), "3", patientCode, null);
                }catch (Exception e){
                } catch (Exception e) {
                    e.printStackTrace();
                    logger.error("预建卡时 保存体征数据失败。。。");
                }
@ -678,4 +717,188 @@ public class PrenatalInspectorPreCardService extends BaseService {
        }
    }
    /**
     * 根据待产检ID查询最近一条待产检计划状态
     *
     * @param prenatalId
     */
    public JSONObject getPrenatalStatus(Long prenatalId) throws Exception {
        JSONObject json = new JSONObject();
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            PrenatalInspectorPlan plan = prenatalInspectorPlanDao.findOne(prenatalId);
            Date planTime = plan.getInspectionTime();
            Boolean flag = getSendStatus(prenatalId);
            Long days = DateUtil.getDays(new Date(), planTime);
            if (days > 0) {
//                当前时间在应产检之后
                List<PrenatalInspectorPlan> plans = prenatalInspectorPlanDao.getScopeById(prenatalId);
                if (plans == null || plans.size() == 0) {
                    String str = "当前时间在应产检7天后";
                    if (days > 7) {
                        System.out.println("超期未检");
                        json.put("renatalStatus", "3");
                        json.put("sendStatus", flag == true ? "1" : "0");
                    }else {
                        PrenatalInspectorRecord record = recordDao.findByRelationAndType(prenatalId.toString(), 0);
                        if (record == null) {
                            System.out.println("未提醒");
                            json.put("renatalStatus", "1");
                            if (days < -7) {
                                json.put("reason", "未到提醒时间(" + format.format(DateUtil.getPreDays(plan.getInspectionTime(), -7)) + " 08:00)");
                            }
                        } else {
                            PrenatalInspectorRecord docRecord = recordDao.findByRelationAndType(prenatalId.toString(), 1);
                            System.out.println("已提醒");
                            json.put("renatalStatus", "2");
                            json.put("sendStatus", flag == true ? "1" : "0");
                            if (docRecord == null) {
                                json.put("sendTime", format.format(record.getSendTime()));
                            } else {
                                json.put("sendTime", format.format(docRecord.getSendTime()));
                            }
                        }
                    }
                } else {
                    System.out.println("已产检");
                    json.put("renatalStatus", "4");
                }
            } else {
                PrenatalInspectorRecord record = recordDao.findByRelationAndType(prenatalId.toString(), 0);
                if (record == null) {
                    System.out.println("未提醒");
                    json.put("renatalStatus", "1");
                    if (days < -7) {
                        json.put("reason", "未到提醒时间(" + format.format(DateUtil.getPreDays(plan.getInspectionTime(), -7)) + " 08:00)");
                    }
                } else {
                    PrenatalInspectorRecord docRecord = recordDao.findByRelationAndType(prenatalId.toString(), 1);
                    System.out.println("已提醒");
                    json.put("renatalStatus", "2");
                    json.put("sendStatus", flag == true ? "1" : "0");
                    if (docRecord == null) {
                        json.put("sendTime", format.format(record.getSendTime()));
                    } else {
                        json.put("sendTime", format.format(docRecord.getSendTime()));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        json.put("prenatalId", prenatalId);
        return json;
    }
    /**
     * 提醒居民(每24小时可提醒一次)
     *
     * @param prenatalId
     * @param code       居民code
     * @param doc        医生code
     */
    public Boolean sendPrenatal(Long prenatalId, String code, String doc) throws Exception {
        Boolean flag = false;
        try {
            String relation = prenatalId.toString();
            Patient patient = patientDao.findByCode(code);
            String name = patient.getName();
            String openId = patient.getOpenid();
            String mobile = patient.getMobile();
            String first = name + ",您好!您和您的宝宝需要进行产检啦~请及时预约产检,如已预约,请忽略";
            String url = "wdyy/html/appointment-register.html?openid=" + openId + "&toUser=" + code + "&toName=" + name;
            PrenatalInspectorPlan plan = prenatalInspectorPlanDao.findOne(prenatalId);
            org.json.JSONObject json = new org.json.JSONObject();
            //产检提醒
            json.put("remark", "产检内容以医生实际检查为准。点击进行预约");
            json.put("first", first);
            json.put("url", url);
            json.put("keyword1", "产检提醒");
            String keyword2 = DateUtil.getStringDateShort() + "\n产检内容:" + plan.getCheckItem();
            json.put("keyword2", keyword2);
            if (StringUtils.isNotEmpty(openId) && !("undefined".equals(openId))) {
                pushMsgTask.putWxMsg(accessTokenUtils.getAccessToken(), 18, openId, name, json);
                flag = true;
            } else {
                //发送代理人
                org.json.JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(code, openId);
                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");
                        org.json.JSONObject data = json;
                        data.remove("first");
                        data.remove("url");
                        data.put("url", url + "&represented=" + member.getCode());
                        data.put("first", weiXinOpenIdUtils.getTitleMes(patient, j.getInt("relation"), name) + first);
                        if (StringUtils.isNotEmpty(member.getOpenid()) && !("undefined".equals(member.getOpenid()))) {
                            pushMsgTask.putWxMsg(accessTokenUtils.getAccessToken(), 18, member.getOpenid(), name, data);
                            flag = true;
                        }
                    }
                }
            }
            if (!flag && StringUtils.isNotEmpty(mobile)) {
//                发送短信消息
                org.json.JSONObject resultJson = smsService.sendMsg(mobile, ":张三,您好!您的家庭医生李四提醒你,您和您的宝宝需要进行产检啦~" +
                        " 您可微信搜索公众号:厦门i健康,关注公众号预约产检时间/查看孕检计划及历史检查记录,更可及时获取产检提醒哟~");
                if (resultJson != null && resultJson.getInt("result") == 0) {
                    flag = true;
                }
            }
            if (flag) {
                PrenatalInspectorRecord record = recordDao.findByRelationAndType(relation, 1);
                if (record == null) {
                    record = new PrenatalInspectorRecord();
                    record.setTimes(1);
                } else {
                    record.setTimes(record.getTimes() + 1);
                }
                record.setRelation(relation);
                record.setSender(doc);
                record.setReceiver(code);
                record.setType(1);
                record.setName(name);
                record.setOpenid(openId);
                record.setContent(plan.getCheckItem());
                record.setSendTime(new Date());
                recordDao.save(record);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    /**
     * 查询该产检记录是否可提醒(是否过24小时)
     *
     * @param prenatalId
     * @return boolean 是否可提醒
     * @throws Exception true 可再次提醒 flase 不可提醒
     */
    public Boolean getSendStatus(Long prenatalId) throws Exception {
        Boolean flag = false;
        try {
            String relation = prenatalId.toString();
            PrenatalInspectorRecord record = recordDao.findByRelationAndType(relation, 1);
            if (record != null) {
                float hours = DateUtil.getHours(new Date(), record.getSendTime());
                if (hours > 24) {
                    flag = true;
                }
            } else {
                flag = true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
}

+ 106 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/third/ylz/ThirdEHCService.java

@ -0,0 +1,106 @@
package com.yihu.wlyy.service.third.ylz;
import com.alibaba.fastjson.JSONObject;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.ylz.PayLog;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.repository.ylz.PayLogDao;
import com.yihu.wlyy.service.BaseService;
import com.yihu.wlyy.service.system.SystemDictService;
import com.yihu.wlyy.task.PushMsgTask;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.wechat.util.WeiXinAccessTokenUtils;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.procedure.spi.ParameterRegistrationImplementor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
 * Created by Reece on 2017/9/20.
 * 日志服务
 */
@Service
public class ThirdEHCService extends BaseService {
    private static Logger logger = LoggerFactory.getLogger(ThirdEHCService.class);
    @Autowired
    private PayLogDao payLogDao;
    @Autowired
    private PushMsgTask pushMsgTask;
    @Autowired
    private PatientDao patientDao;
    /**
     *公众号消息推送接口
     */
    public String pushMessage(JSONObject json) {
        String flag = "0000";
        try {
            logger.info("push message "+ json);
            org.json.JSONObject model = new org.json.JSONObject();
            String url = null;
            model.put("remark", "产检内容以医生实际检查为准。点击进行预约");
            model.put("first", "电子健康卡提醒");
            model.put("url",url);
            model.put("keyword1", "电子健康卡提醒");
            json.put("keyword2", "电子健康卡推送");
            String messageType = json.containsKey("message_type") ? json.getString("message_type") : null;
            JSONObject messageContent = json.containsKey("message_content") ? json.getJSONObject("message_content") : null;
            String idType = json.containsKey("id_type") ? json.getString("id_type") : null;
            String idNo = json.containsKey("id_no") ? json.getString("id_no") : null;
            String openId = json.containsKey("open_id") ? json.getString("open_id") : null;
            if (idNo == null && openId ==null) {
                return "0001";
            }
            if (idNo != null) {
                Patient patient = patientDao.findByIdcard(idNo);
                pushMsgTask.putAgentWxMsg(patient.getCode(), 18, model);
            }
            if (StringUtils.isNotEmpty(openId) && !"undefined".equals(openId)) {
                List<Patient> patients = patientDao.findPatientByOpenid(openId);
                for (Patient patient : patients) {
                    Patient patient1 = patientDao.findByCode(patient.getCode());
                    pushMsgTask.putAgentWxMsg(patient1.getCode(), 18, model);
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            flag = "1000";
        }
        return flag;
    }
    /**
     * 保存http调用日志  type 0家庭签约支付 1续方支付
     */
    public void saveHttpLog(Boolean isSuccess, String url, String content, String method, String header, String params, String response, String error, String type) {
        try {
            //新增日志
            PayLog log = new PayLog();
            log.setType(type);
            log.setApi(url);
            log.setContent(content);
            log.setMethod(method);
            log.setHeader(header);
            log.setParams(params);
            log.setCreateTime(new Date());
            log.setResponse(response);
            log.setError(error);
            log.setStatus(isSuccess ? "1" : "0");
            payLogDao.save(log);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

+ 3 - 3
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/weixin/wxpay/service/OnePayService.java

@ -718,9 +718,9 @@ public class OnePayService {
                //保存到患者表
                Patient p = patientDao.findByCode(patient);
                if(!"undefined".equals(openid)&&StringUtils.isNotBlank(openid)){
                    p.setOpenid(openid);
                }
//                if(!"undefined".equals(openid)&&StringUtils.isNotBlank(openid)){
//                    p.setOpenid(openid);
//                }
//            增加绑定电子社保卡信息
                if (p.getSicardStatus()!=null && p.getSicardStatus()!=1){
                    p.setSicardTime(new Date());

+ 61 - 7
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/task/PushMsgTask.java

@ -1,11 +1,15 @@
package com.yihu.wlyy.task;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.wechat.WechatPushLog;
import com.yihu.wlyy.entity.wechat.WechatTemplate;
import com.yihu.wlyy.entity.wechat.WechatTemplateData;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.repository.wechat.WechatPushLogDao;
import com.yihu.wlyy.util.HttpUtil;
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;
@ -69,6 +73,12 @@ public class PushMsgTask {
    private StringRedisTemplate redisTemplate;
    @Autowired
    private WechatPushLogDao wechatPushLogDao;
    @Autowired
    private WeiXinAccessTokenUtils accessTokenUtils;
    @Autowired
    private WeiXinOpenIdUtils weiXinOpenIdUtils;
    @Autowired
    private PatientDao patientDao;
    /**
     * 添加一条推送消息
@ -110,12 +120,12 @@ public class PushMsgTask {
            json.put("name", name);
            json.put("data", data);
            //如果是内网推送到redis,如果是外网推送到内存队列
            if(putMesMethod.equals("1")){
            if (putMesMethod.equals("1")) {
                JSONObject mes = new JSONObject();
                mes.put("title",putMesType);
                mes.put("value",json.toString());
                redisTemplate.opsForList().leftPush(redisQueue,mes.toString());
            }else{
                mes.put("title", putMesType);
                mes.put("value", json.toString());
                redisTemplate.opsForList().leftPush(redisQueue, mes.toString());
            } else {
                queue.put(json);
            }
@ -249,7 +259,7 @@ public class PushMsgTask {
                log.setCreateTime(new Date());
                log.setName(name);
                log.setOpenid(openid);
                if(!json.isNull("toUser")){
                if (!json.isNull("toUser")) {
                    log.setPatient(json.getString("toUser"));
                }
                log.setRequest(json.toString());
@ -495,7 +505,7 @@ public class PushMsgTask {
            } else if (type == 10) {
                if (json.has("url")) {
                    temp.setUrl(url + json.getString("url"));
                }else {
                } else {
                    temp.setUrl(url + "qygl/html/signing-doctors.html?openid=" + openid + "&state=" + openid + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                }
                temp.setTemplate_id(template_doctor_change);
@ -672,4 +682,48 @@ public class PushMsgTask {
        }
    }
    /**
     * 添加含发送代理人微信消息
     *
     * @param code 居民code
     * @param type 模板类型
     * @param json 模板消息体加上跳转URL
     * @return
     */
    public Boolean putAgentWxMsg(String code, int type, JSONObject json) {
        Boolean flag = false;
        try {
            String url = json.has("url") ? json.getString("url") : null;
            String first = json.has("first") ? json.getString("first") : "";
            Patient patient = patientDao.findByCode(code);
            String name = patient.getName();
            String openId = patient.getOpenid();
            if (StringUtils.isNotEmpty(openId) && !("undefined".equals(openId))) {
                putWxMsg(accessTokenUtils.getAccessToken(), type, openId, name, json);
                flag = true;
            } else {
                //发送代理人
                org.json.JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(code, openId);
                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");
                        org.json.JSONObject data = json;
                        data.remove("first");
                        data.remove("url");
                        data.put("url", url + "&represented=" + member.getCode());
                        data.put("first", weiXinOpenIdUtils.getTitleMes(patient, j.getInt("relation"), name) + first);
                        if (StringUtils.isNotEmpty(member.getOpenid()) && !("undefined".equals(member.getOpenid()))) {
                            putWxMsg(accessTokenUtils.getAccessToken(), type, member.getOpenid(), name, data);
                            flag = true;
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
}

+ 33 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/util/DateUtil.java

@ -3,6 +3,7 @@ package com.yihu.wlyy.util;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.sql.Time;
import java.sql.Timestamp;
import java.text.DateFormat;
@ -367,6 +368,23 @@ public class DateUtil {
		return mydate1;
	}
	/**
	 * 时间前推或后推天数(负数前推正数后推)
	 * date 基准时间
	 */
	public static Date getPreDays(Date date, int days) {
		Date day = null;
		try {
			Calendar c = Calendar.getInstance();
			c.setTime(date);
			c.add(Calendar.DATE, days);
			day = c.getTime();
		} catch (Exception e) {
		}
		return day;
	}
	/**
	 * 得到一个时间延后或前移几分钟的时间,nowdate为时间,delay为前移或后延的分钟数
	 */
@ -660,6 +678,21 @@ public class DateUtil {
		return day;
	}
	/**
	 * 返回两个日期相差的小时数(保留2位小数)
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static float getHours(Date date1, Date date2) {
		if (date1 == null || date2 == null)
			return 0;
		float hours = (date1.getTime() - date2.getTime()) / (float)(60 * 60 * 1000);
		BigDecimal decimal = new BigDecimal(hours);
		float hour = decimal.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
		return hour;
	}
	/**
	 * 形成如下的日历 , 根据传入的一个时间返回一个结构 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是当月的各个时间
	 * 此函数返回该日历第一行星期日所在的日期

+ 45 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/prenatalInspector/PrenatalController.java

@ -72,4 +72,49 @@ public class PrenatalController extends BaseController{
        }
    }
    /**
     * 根据待产检ID查询最近一条待产检计划状态
     * @param prenatalId
     * @return 1未提醒 2已提醒 3超期未检 4已产检
     */
    @ApiOperation("获取产检计划状态")
    @RequestMapping(value = "/getPrenatalStatus", method = RequestMethod.GET)
    public String getPrenatalStatus(@ApiParam(name = "prenatalId", value = "产检号", defaultValue = "")
                                             @RequestParam(value = "prenatalId", required = true) Long prenatalId){
        try {
            JSONObject response = preCardService.getPrenatalStatus(prenatalId);
            return write(200, "查询成功!", "data", response);
        }catch (Exception e){
            error(e);
            return error(-1,"查询失败");
        }
    }
    /**
     * 提醒居民(每24小时可提醒一次)
     * @param prenatalId
     * @param patient
     * @return
     */
    @ObserverRequired
    @ApiOperation("提醒居民")
    @RequestMapping(value = "/sendPrenatal", method = RequestMethod.POST)
    public String sendPrenatal(@ApiParam(name = "prenatalId", value = "产检号", defaultValue = "")
                                    @RequestParam(value = "prenatalId", required = true) Long prenatalId,
                                    @ApiParam(name = "patient", value = "提醒居民", defaultValue = "")
                                    @RequestParam(value = "patient", required = true) String patient,
                                    @ApiParam(name = "doctor", value = "医生", defaultValue = "")
                                    @RequestParam(value = "doctor", required = true) String doctor){
        try {
            Boolean response = preCardService.sendPrenatal(prenatalId,patient,doctor);
            if (response){
                return write(200, "提醒成功!");
            }
            return error(-1,"提醒失败");
        }catch (Exception e){
            error(e);
            return error(-1,"提醒失败");
        }
    }
}

+ 49 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/ylzpay/ThirdEHCController.java

@ -0,0 +1,49 @@
package com.yihu.wlyy.web.third.ylzpay;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yihu.wlyy.service.app.health.HealthEduArticleService;
import com.yihu.wlyy.service.third.ylz.ThirdEHCService;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * 提供给易联众电子健康卡功能
 * Created by Reece on 2017/12/7
 *
 */
@RestController
@RequestMapping("/wlyygc/ehc/")
@Api(description = "易联众电子健康卡")
public class ThirdEHCController extends BaseController {
	
	@Autowired
	private ThirdEHCService thirdEHCService;
	/**
	 *公众号消息推送接口
	 * @param data
	 * @return
	 */
	@ApiOperation("公众号推送接口")
	@RequestMapping(value = "/pushMessage",method = RequestMethod.POST)
	@ResponseBody
	public JSON pushMessage(@ApiParam(name="data",value="推送json串",defaultValue = "{\"message_type\":\"01\",\"message_content\":{\"content\":\"尊敬的用户,您已成功在中山医院注册居民电子健康卡,请点击领取使用。\"},\"id_type\":\"01\",\"id_no\":\"350322199008207716\",\"open_id\":\"14552525252\"}")
								@RequestParam(value="data",required = true) String data) {
		JSONObject response = new JSONObject();
		try {
			String res = thirdEHCService.pushMessage(JSON.parseObject(data));
			response.put("ret_code",res);
			response.put("ret_msg","操作成功");
		} catch (Exception ex) {
			error(ex);
			response.put("ret_code","0001");
			response.put("ret_msg","操作失败");
		}
		return response;
	}
}

+ 6 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/wx/OnePayController.java

@ -100,10 +100,10 @@ public class OnePayController extends WeixinBaseController {
            JSONObject json = new JSONObject();
            String msg = null;
            String uid = getUID();
            String openid = getOpenid();
            String repUid = getRepUID();
            Patient people = patientDao.findByCode(uid);
            String openid = people.getOpenid();
            String ssc = people.getSsc();
            String createType = "sicard";
            if (!repUid.equals(uid)) {
@ -111,6 +111,11 @@ public class OnePayController extends WeixinBaseController {
                people = patientDao.findByCode(repUid);
                ssc = people.getSsc();
            }
            if("undefined".equals(openid)||StringUtils.isEmpty(openid)){
                people.setOpenid(null);
                patientDao.save(people);
                return write(-1, "用户微信信息格式不正确!");
            }
//            BindCard bindCard = pay.bindCard(patient, openid);
            List<BindCard> bindCard = pay.bindCardList(openid);