Browse Source

住院满意度调查

lighter 1 year ago
parent
commit
cd11ad16b7

+ 1 - 1
pom.xml

@@ -10,7 +10,7 @@
     </parent>
     <groupId>thyyxxk</groupId>
     <artifactId>wxservice-server</artifactId>
-    <version>11.0</version>
+    <version>11.1</version>
     <name>wxservice-server</name>
     <description>server for wxservice-web</description>
 

+ 15 - 3
src/main/java/thyyxxk/wxservice_server/dao/AssessmentDao.java

@@ -35,23 +35,35 @@ public interface AssessmentDao {
             "#{item11},#{item12},#{item12Input},#{item13},#{item14},#{item14Input},#{suggestion})")
     void insertClinicSatisfiedAssessment(ClinicSatisfiedQuestionnaire questionnaire);
 
-    @Insert("insert into t_inpatient_satisfied_assessment (patient_id,item1,item2,item3,item4,item5,item6,item7,item8,item9,item10,item11,item12, " +
+    @Insert("insert into t_inpatient_satisfied_assessment (inpatient_no,admiss_times,patient_id,item1,item2,item3,item4,item5,item6,item7,item8,item9,item10,item11,item12, " +
             "item13,item14,item15,item16,item17,item18,item19,item20,item21,item22) " +
-            "values (#{patientId},#{item1},#{item2},#{item3},#{item4},#{item5},#{item6},#{item7},#{item8},#{item9},#{item10},#{item11},#{item12}, " +
+            "values (#{inpatientNo},#{times},#{patientId},#{item1},#{item2},#{item3},#{item4},#{item5},#{item6},#{item7},#{item8},#{item9},#{item10},#{item11},#{item12}, " +
             "#{item13},#{item14},#{item15},#{item16},#{item17},#{item18},#{item19},#{item20},#{item21},#{item22})")
     void insertInpatientSatisfiedAssessment(InpatientSatisfiedQuestionnaire questionnaire);
 
     @Select("select frequency from t_questionnaire_frequency where code=#{code} ")
     int selectQuestionnaireFrequency(String code);
 
-    @Select("select rtrim(a.patient_id) as patientId,max(b.name) as patName,max(rtrim(visit_dept_code)) as deptCode,max(rtrim(doctor_code)) as doctorCode,b.open_id, " +
+    @Select("select type=1,rtrim(a.patient_id) as patientId,max(b.name) as patName,max(rtrim(visit_dept_code)) as deptCode,max(rtrim(doctor_code)) as doctorCode,b.open_id, " +
             "max(convert(varchar(10),visit_date,21)) as visitDate,questionnaireOffset=datediff(day,max(clinic_satisfied_questionnaire),getdate()) " +
             "from mz_visit_table a with(nolock),t_wechat_patient_bind b with(nolock) where visit_dept_code not in ('1070100','1020510') and " +
             "isnull(doctor_code,'99999')!='99999' and datediff(day,visit_date,getdate())=1 and b.patient_id=a.patient_id and b.del_flag=0 and " +
             "b.relation=1 group by a.patient_id,b.open_id order by a.patient_id")
     List<PushQuestionnaireVisit> selectPushQuestionnairePatients();
 
+    @Select("select type=2,rtrim(a.inpatient_no) as inpatientNo,a.admiss_times as times,a.admiss_date,a.dis_date,c.open_id, " +
+            "c.patient_id,c.name as patName,a.zk_ward as deptCode,rtrim(a.refer_physician) as doctorCode, " +
+            "questionnaireOffset=datediff(day,a.inpatient_satisfied_questionnaire,getdate()) " +
+            "from zy_inactpatient a,a_patient_mi b,t_wechat_patient_bind c " +
+            "where datediff(day,a.dis_date,getdate())=1 and a.inpatient_no=b.inpatient_no and b.social_no=c.social_no " +
+            "and c.relation=1 and c.del_flag=0")
+    List<PushQuestionnaireVisit> selectInpatientQuestionnairePatients();
+    
     @Update("update mz_visit_table set clinic_satisfied_questionnaire=getdate() where patient_id=#{patientId} " +
             "and datediff(day,visit_date,getdate())=1")
     void updateQuestionnaireTime(String patientId);
+
+    @Update("update zy_inactpatient set inpatient_satisfied_questionnaire=getdate() where " +
+            "inpatient_no=#{inpatientNo} and admiss_times=#{times}")
+    void updateQuestionnaireTime2(String inpatientNo, int times);
 }

+ 2 - 0
src/main/java/thyyxxk/wxservice_server/entity/assessment/InpatientSatisfiedQuestionnaire.java

@@ -8,6 +8,8 @@ import java.util.List;
 @Data
 public class InpatientSatisfiedQuestionnaire {
     private Integer id;
+    private String inpatientNo;
+    private Integer times;
     private String patientId;
     private String item1;
     private String item2;

+ 8 - 0
src/main/java/thyyxxk/wxservice_server/entity/assessment/PushQuestionnaireVisit.java

@@ -2,8 +2,14 @@ package thyyxxk.wxservice_server.entity.assessment;
 
 import lombok.Data;
 
+import java.util.Date;
+
 @Data
 public class PushQuestionnaireVisit {
+    // 1-门诊,2-住院
+    private Integer type;
+    private String inpatientNo;
+    private Integer times;
     private String patientId;
     private String patName;
     private String deptCode;
@@ -11,6 +17,8 @@ public class PushQuestionnaireVisit {
     private String doctorCode;
     private String doctorName;
     private String visitDate;
+    private Date admissDate;
+    private Date disDate;
     private String openId;
     private Integer questionnaireOffset;
 }

+ 55 - 3
src/main/java/thyyxxk/wxservice_server/scheduled/QuestionnaireAfterVisit.java

@@ -4,18 +4,23 @@ import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import thyyxxk.wxservice_server.dao.AssessmentDao;
 import thyyxxk.wxservice_server.entity.assessment.PushQuestionnaireVisit;
 import thyyxxk.wxservice_server.service.PushWxMessageService;
 import thyyxxk.wxservice_server.service.RedisLikeService;
+import thyyxxk.wxservice_server.utils.DateUtil;
 
+import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 @Slf4j
 @RestController
-@RequestMapping("/")
+@RequestMapping("/questionnaireAfterVisit")
 public class QuestionnaireAfterVisit {
     private final AssessmentDao dao;
     private final RedisLikeService redis;
@@ -41,9 +46,42 @@ public class QuestionnaireAfterVisit {
         }
     }
 
+    @Scheduled(cron = "0 0 12 * * ?")
+    public void test2() {
+        int frequency = dao.selectQuestionnaireFrequency("inpatient_satisfied_questionnaire");
+        List<PushQuestionnaireVisit> list = dao.selectInpatientQuestionnairePatients();
+        for (PushQuestionnaireVisit item : list) {
+            if (null == item.getAdmissDate() || null == item.getDisDate()) {
+                continue;
+            }
+            if (null == item.getQuestionnaireOffset() || item.getQuestionnaireOffset() >= frequency) {
+                item.setDeptName(redis.getDepartmentName(item.getDeptCode()));
+                item.setDoctorName(redis.getEmployeeName(item.getDoctorCode()));
+                item.setVisitDate(makeInpatientDate(item.getAdmissDate(), item.getDisDate()));
+                pushMessage(item);
+            }
+        }
+    }
+
+    @GetMapping("/test")
+    public void test(@RequestParam("token") String token) {
+        if (!token.equals("qwer1234GOGOGOwqnmlgdsb")) {
+            return;
+        }
+        List<PushQuestionnaireVisit> list = dao.selectInpatientQuestionnairePatients();
+        PushQuestionnaireVisit v = list.get(0);
+        v.setOpenId("oao6f0y4oF7jd60QhzPzMD9C3bBU");
+        v.setDeptName(redis.getDepartmentName(v.getDeptCode()));
+        v.setDoctorName(redis.getEmployeeName(v.getDoctorCode()));
+        v.setVisitDate(makeInpatientDate(v.getAdmissDate(), v.getDisDate()));
+        pushMessage(v);
+    }
+
     private void pushMessage(PushQuestionnaireVisit visit) {
+        String targetPage = visit.getType() == 1 ? "clinicSatisfiedByPush_" + visit.getPatientId() :
+                "inpatientSatisfiedByPush_" + makeVisitId(visit);
         String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxbde6b16acad84204&redirect_uri=" +
-                "http://staticweb.hnthyy.cn/wxserver/redirect/page2?to=clinicSatisfiedByPush_" + visit.getPatientId() +
+                "http://staticweb.hnthyy.cn/wxserver/redirect/page2?to=" + targetPage +
                 "&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
         String msgContent = "{\"touser\":\"" + visit.getOpenId() + "\",\"data\":" +
                 "{\"keyword1\":{\"color\":\"#173177\",\"value\":\"" + visit.getPatName() + "\"}," +
@@ -57,7 +95,21 @@ public class QuestionnaireAfterVisit {
                 "\"url\":\"" + url + "\"}";
         JSONObject message = JSONObject.parseObject(msgContent);
         if (messageService.pushMessage2(message)) {
-            dao.updateQuestionnaireTime(visit.getPatientId());
+            if (visit.getType() == 1) {
+                dao.updateQuestionnaireTime(visit.getPatientId());
+            } else {
+                dao.updateQuestionnaireTime2(visit.getInpatientNo(), visit.getTimes());
+            }
         }
     }
+
+    private String makeInpatientDate(Date adm, Date dis) {
+        String d1 = DateUtil.formatDatetime(adm, "yyyy-MM-dd");
+        String d2 = DateUtil.formatDatetime(dis, "yyyy-MM-dd");
+        return d1 + " 至 " + d2;
+    }
+
+    private String makeVisitId(PushQuestionnaireVisit v) {
+        return v.getInpatientNo() + "AND" + v.getTimes() + "AND" + v.getPatientId();
+    }
 }