Преглед на файлове

定时推送门诊满意度调查

lighter преди 2 години
родител
ревизия
fe40a78ac5

+ 18 - 4
src/main/java/thyyxxk/wxservice_server/dao/AssessmentDao.java

@@ -1,11 +1,11 @@
 package thyyxxk.wxservice_server.dao;
 
-import org.apache.ibatis.annotations.Insert;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.*;
 import thyyxxk.wxservice_server.entity.assessment.ClinicSatisfiedQuestionnaire;
 import thyyxxk.wxservice_server.entity.assessment.DepressionQuestionnaire;
+import thyyxxk.wxservice_server.entity.assessment.PushQuestionnaireVisit;
+
+import java.util.List;
 
 /**
  * @author dj
@@ -28,4 +28,18 @@ public interface AssessmentDao {
     @Insert("insert into t_clinic_satisfied_assessment (patient_id,item1,item2,item3,item4,item5,item6,item7,item8,item9,item10,item11,item12) " +
             "values (#{patientId},#{item1},#{item2},#{item3},#{item4},#{item5},#{item6},#{item7},#{item8},#{item9},#{item10},#{item11},#{item12})")
     void insertClinicSatisfiedAssessment(ClinicSatisfiedQuestionnaire 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, " +
+            "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();
+
+    @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);
 }

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

@@ -0,0 +1,16 @@
+package thyyxxk.wxservice_server.entity.assessment;
+
+import lombok.Data;
+
+@Data
+public class PushQuestionnaireVisit {
+    private String patientId;
+    private String patName;
+    private String deptCode;
+    private String deptName;
+    private String doctorCode;
+    private String doctorName;
+    private String visitDate;
+    private String openId;
+    private Integer questionnaireOffset;
+}

+ 63 - 0
src/main/java/thyyxxk/wxservice_server/scheduled/QuestionnaireAfterVisit.java

@@ -0,0 +1,63 @@
+package thyyxxk.wxservice_server.scheduled;
+
+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.RequestMapping;
+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 java.util.List;
+
+@Slf4j
+@RestController
+@RequestMapping("/")
+public class QuestionnaireAfterVisit {
+    private final AssessmentDao dao;
+    private final RedisLikeService redis;
+    private final PushWxMessageService messageService;
+
+    @Autowired
+    public QuestionnaireAfterVisit(AssessmentDao dao, RedisLikeService redis, PushWxMessageService messageService) {
+        this.dao = dao;
+        this.redis = redis;
+        this.messageService = messageService;
+    }
+
+    @Scheduled(cron = "0 0 11 * * ?")
+    public void start() {
+        int frequency = dao.selectQuestionnaireFrequency("clinic_satisfied_questionnaire");
+        List<PushQuestionnaireVisit> list = dao.selectPushQuestionnairePatients();
+        for (PushQuestionnaireVisit item : list) {
+            if (null == item.getQuestionnaireOffset() || item.getQuestionnaireOffset() >= frequency) {
+                item.setDeptName(redis.getDepartmentName(item.getDeptCode()));
+                item.setDoctorName(redis.getEmployeeName(item.getDoctorCode()));
+                pushMessage(item);
+            }
+        }
+    }
+
+    private void pushMessage(PushQuestionnaireVisit 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() +
+                "&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
+        String msgContent = "{\"touser\":\"" + visit.getOpenId() + "\",\"data\":" +
+                "{\"keyword1\":{\"color\":\"#173177\",\"value\":\"" + visit.getPatName() + "\"}," +
+                "\"keyword2\":{\"color\":\"#173177\",\"value\":\"长沙泰和医院\"}," +
+                "\"keyword3\":{\"color\":\"#173177\",\"value\":\"" + visit.getDeptName() + "\"}," +
+                "\"keyword4\":{\"color\":\"#173177\",\"value\":\"" + visit.getDoctorName() + "\"}," +
+                "\"keyword5\":{\"color\":\"#173177\",\"value\":\"" + visit.getVisitDate() + "\"}," +
+                "\"remark\":{\"color\":\"#FF0000\",\"value\":\"特邀请您进行本次诊疗的满意度调查,我们很重视您提出的宝贵意见!\"}," +
+                "\"first\":{\"color\":\"#FF0000\",\"value\":\"您曾在我院进行诊疗。\"}}," +
+                "\"template_id\":\"G4YAN56RmDjEPpNyP5fpCdr5TghyqspDeWlWaD5Eg2o\"," +
+                "\"url\":\"" + url + "\"}";
+        JSONObject message = JSONObject.parseObject(msgContent);
+        if (messageService.pushMessage(message)) {
+            dao.updateQuestionnaireTime(visit.getPatientId());
+        }
+    }
+}

+ 14 - 0
src/main/java/thyyxxk/wxservice_server/service/PushWxMessageService.java

@@ -47,4 +47,18 @@ public class PushWxMessageService {
             log.info("推送消息:内容:{},结果:{}", content, res);
         }
     }
+
+    public boolean pushMessage(JSONObject msgContent) {
+        RestTemplate template = new RestTemplate();
+        String wxUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" +
+                PropertiesUtil.getLocalProperty("access_token");
+        String res = template.postForObject(wxUrl, msgContent, String.class);
+        log.info("推送消息:内容:{},结果:{}", msgContent, res);
+        if (StringUtil.isBlank(res)) {
+            return false;
+        }
+        JSONObject resobj = JSONObject.parseObject(res);
+        Integer errcode = resobj.getInteger("errcode");
+        return (null != errcode && 0 == errcode);
+    }
 }