Browse Source

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

yeshijie 7 năm trước cách đây
mục cha
commit
826ecdac57

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

@ -135,10 +135,10 @@ public class PrenatalInspectorPreCardService extends BaseService {
                    String doctor = signFamily.getDoctor();
                    String doctorHealth = signFamily.getDoctorHealth();
                    if (StringUtils.isNotEmpty(doctor)) {
                        saveMessageRecord(plan.getId().toString(), doctor, content);
                        saveMessageRecord(plan.getId().toString(), doctor,code, content);
                    }
                    if (StringUtils.isNotEmpty(doctorHealth)) {
                        saveMessageRecord(plan.getId().toString(), doctorHealth, content);
                        saveMessageRecord(plan.getId().toString(), doctorHealth,code, content);
                    }
                }
            }
@ -153,10 +153,11 @@ public class PrenatalInspectorPreCardService extends BaseService {
     *
     * @param prenatalId
     * @param doctor
     * @param patient
     * @param content
     * @throws Exception
     */
    public void saveMessageRecord(String prenatalId, String doctor, String content) throws Exception {
    public void saveMessageRecord(String prenatalId, String doctor,String patient, String content) throws Exception {
        try {
            Doctor doc = doctorDao.findByCode(doctor);
            String doctorName = doc.getName();
@ -180,7 +181,7 @@ public class PrenatalInspectorPreCardService extends BaseService {
            }
            record.setRelation(prenatalId);
            record.setSender("SYSTEM");
            record.setSender(patient);
            record.setReceiver(doctor);
            record.setType(2);
            record.setName(doctorName);
@ -195,11 +196,11 @@ public class PrenatalInspectorPreCardService extends BaseService {
            message.setRead(1);
            message.setOver("1");
            message.setReceiver(doctor);
            message.setSender("SYSTEM");
            message.setSender(patient);
            message.setCode(getCode());
            message.setTitle("孕检提醒");
            message.setContent(content);
            message.setType(2);
            message.setType(13);
            messageDao.save(message);
            // 推送消息给医生
            pushMsgTask.put(doctor, "13", "孕检提醒", content, "");

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

@ -713,4 +713,20 @@ public class JobController extends BaseController {
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 医生端产检系统提醒
     * @return
     */
    @RequestMapping(value = "startDoctorPrenatalInspectorJob", method = RequestMethod.GET)
    @ApiOperation("医生端产检系统提醒")
    public String startDoctorPrenatalInspectorJob() {
        try {
            quartzHelper.startNow(DoctorPrenatalInspectorJob.class, "DOCTOR_PRENATAL_INSPECTOR_JOB", null);
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
}

+ 23 - 6
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/common/QrcodeService.java

@ -501,13 +501,13 @@ public class QrcodeService extends BaseService {
    }
    /**
     * 从微信生成二维码(供第三方调用)
     *
     * 从微信生成永久二维码(供第三方调用)
     *  文件不存在才会新建
     * @param content
     * @param token
     * @throws IOException
     */
    public String getQrcodeFromWeiXin(String content,String token) throws Exception {
    public String getQrcodeFromWeiXin(String content, String fileName, String path, String token) throws Exception {
        try {
            String token_url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + token;
            String params = "{\"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": \"" + content + "\"}}}";
@ -517,10 +517,24 @@ public class QrcodeService extends BaseService {
                JSONObject json = new JSONObject(result);
                if (json.has("ticket")) {
                    String file = path + File.separator + fileName + ".png";
                    // 保存路径
                    File pathFile = new File(path);
                    // 保存文件
                    File outputFile = new File(file);
                    // 路径不存在则创建
                    if (!pathFile.exists()) {
                        pathFile.mkdir();
                    }
                    // 文件已存在则返回已存在的路径
                    if (outputFile.exists()) {
//                        outputFile.delete();
                        return file;
                    }
                    // 请求输入流
                    InputStream inputStream = null;
                    // 二维码图片输出流
                    StringBuffer tStringBuffer = new StringBuffer();
                    FileOutputStream outputStream = new FileOutputStream(file);
                    // 下载二维码图片
                    URL urlGet = new URL("https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="
                            + URLEncoder.encode(json.get("ticket").toString(), "UTF-8"));
@ -532,14 +546,17 @@ public class QrcodeService extends BaseService {
                    int len = 0;
                    while ((len = inputStream.read(data)) != -1) {
                        tStringBuffer.append(data);
                        outputStream.write(data, 0, len);
                    }
                    if (inputStream != null) {
                        inputStream.close();
                    }
                    if (outputStream != null) {
                        outputStream.close();
                    }
                    return tStringBuffer.toString();
                    return file;
                } else {
                    throw new Exception("请求微信生成二维码失败!");
                }

+ 1 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/third/ylz/ThirdMessageService.java

@ -97,7 +97,7 @@ public class ThirdMessageService extends BaseService {
            model.put("keyword5", medicalTime);
            if (StringUtils.isNotEmpty(openId) && !"undefined".equals(openId)) {
                pushMsgTask.putAgentWxMsg(patient.getCode(), 18, model);
                pushMsgTask.putAgentWxMsg(patient.getCode(), 21, model);
            }

+ 28 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/task/PushMsgTask.java

@ -61,6 +61,8 @@ public class PushMsgTask {
    private String template_doctor_survey;
    @Value("${wechat.message.template_doctor_audit}")
    private String template_doctor_audit;//审核结果通知
    @Value("${wechat.message.template_physical_examination}")
    private String template_physical_examination;//体检提醒
    @Value("${wechat.message.template_doctor_service}")
    private String template_doctor_service;//服务结果通知
    @Value("${pushMes.method}")
@ -225,7 +227,7 @@ public class PushMsgTask {
     * 发送微信模板消息
     *
     * @param type 1:签约成功  2:签约失败  3:咨询回复通知  4:健康指导提醒  5:解约申请通知  6:预约挂号成功通知  7:预约取消通知 8 缴费提醒 9 健康教育  10 签约医生变更(信息变更通知)
     *             18 产检提醒和产检就诊提醒 19:续方审核结果通知(0.不通过 1.通过 2。调整处方并通过) 20:服务结果通知 11.代办事项通知
     *             18 产检提醒和产检就诊提醒 19:续方审核结果通知(0.不通过 1.通过 2。调整处方并通过) 20:服务结果通知 11.代办事项通知 21体检提醒
     * @param json 当type==1||type==2时:{"first":"消息主题",”doctor":"医生code","doctorName":"医生名","date":"签约时间","content":"签约内容","remark":"消息备注"}
     *             type==3时:{"first":"消息主题","consult":"医生咨询编号","consultcontent":"咨询内容","replycontent":"回复内容","doctorName":"医生名","remark":"消息备注"}
     *             type==4时:{"first":"消息主题","date":"指导时间","orgName":"指导机构","doctorName":"指导医生名","content":"指导内容","remark":"消息备注"}
@ -668,6 +670,31 @@ public class PushMsgTask {
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("keyword3"));
                m.put("keyword3", keyword3);
            }else if (type == 21) {
                if (json.has("url")) {
                    temp.setUrl(url + json.getString("url"));
                }
                temp.setTemplate_id(template_physical_examination);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("keyword3"));
                m.put("keyword3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("keyword4"));
                m.put("keyword4", keyword4);
                WechatTemplateData keyword5 = new WechatTemplateData();
                keyword5.setColor("#000000");
                keyword5.setValue(json.getString("keyword5"));
                m.put("keyword5", keyword5);
            }
            temp.setData(m);

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

@ -0,0 +1,127 @@
package com.yihu.wlyy.web.third.ylzpay;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.wlyy.entity.organization.HospitalMapping;
import com.yihu.wlyy.entity.ylz.PayConfigura;
import com.yihu.wlyy.repository.organization.HospitalMappingDao;
import com.yihu.wlyy.repository.ylz.PayConfiguraDao;
import com.yihu.wlyy.service.third.ylz.PayLogService;
import com.yihu.wlyy.service.weixin.wxpay.model.Charge;
import com.yihu.wlyy.service.weixin.wxpay.service.OnePayService;
import com.yihu.wlyy.util.HttpClientUtil;
import com.yihu.wlyy.web.WeixinBaseController;
import com.ylzinfo.onepay.sdk.OnepayDefaultClient;
import com.ylzinfo.onepay.sdk.domain.ResponseParams;
import com.ylzinfo.onepay.sdk.exception.PayException;
import com.ylzinfo.onepay.sdk.utils.StringUtil;
import io.swagger.annotations.Api;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
/**
 * Created by Reece on 2017/8/30/030.
 *
 * 供易联众支付类相关业务调用
 */
@RestController
@RequestMapping(value = "/onepay")
@Api(description = "供易联众家庭签约支付调用")
public class ThirdOnepayController extends WeixinBaseController {
    private static final Logger LOGGER = LoggerFactory.getLogger(ThirdOnepayController.class);
    @Autowired
    private OnePayService pay;
    @Autowired
    PayLogService logService;
    @Autowired
    private PayConfiguraDao configuraDao;
    @Autowired
    private HospitalMappingDao mappingDao;
    @Autowired
    ObjectMapper objectMapper;
    /**
     * 支付真正完成,异步回调返回支付参数 后台做数据操作
     *
     * @param request
     * @param response
     * @throws IOException
     * @throws PayException
     */
    @RequestMapping(value = "/receiveNotify")
    public void receiveNotify(HttpServletRequest request, HttpServletResponse response) throws IOException, PayException {
        SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMddHHmmss");
        PayConfigura config = configuraDao.findWorkConfigura();
        Boolean isSuccess = false;
        String error = "";
        String responses = "";
        response.setContentType("text/html;charset=utf-8");
        InputStream inputStream = request.getInputStream();
        String params = StreamUtils.copyToString(inputStream, Charset.forName("UTF-8"));
        try {
            JSONObject json = new JSONObject(params);
            String appId = json.getString("appId");
            HospitalMapping hospital = mappingDao.findByAppId(appId);
            String appSecret = hospital.getAppSecret();
            LOGGER.info("回调参数:{}", params);
            if (StringUtil.isEmpty(params)) {
                response.getWriter().write("empty");
                return;
            }
            // 参数转换
            ResponseParams<?> encryptRes = JSON.parseObject(params, ResponseParams.class);
            OnepayDefaultClient client = new OnepayDefaultClient("", appId, appSecret, encryptRes.getSignType(), encryptRes.getEncryptType());
            LOGGER.info("解密前:{}", JSON.toJSONString(encryptRes));
            ResponseParams<?> decryptRes = client.decryptNotifyResponse(encryptRes);
            LOGGER.info("解密后:{}", JSON.toJSONString(decryptRes));
            boolean isDecrypt = ("-1".equals(decryptRes.getRespCode()) ? false : true); // 是否解密失败
            if (!isDecrypt) {
                response.getWriter().write("DECRYPT FAILURE");
            } else {
                boolean isVerify = client.verifyResponseSign(decryptRes);
                LOGGER.info("验签结果:{}", isVerify);
                if (!isVerify) {
                    response.getWriter().write("FAILURE");
                } else {
//					业务逻辑代码
                    isSuccess = true;
                    responses = JSON.toJSONString(decryptRes);
                    JSONObject requestParam = new JSONObject(responses);//业务出参
                    JSONObject responseParam = requestParam.getJSONObject("param");
                    Charge chargeView = objectMapper.readValue(responseParam.toString(), Charge.class);
                    pay.saveToWlyyCharge(chargeView);
                    response.getWriter().write("SUCCESS");
                }
            }
        } catch (Exception e) {
            response.getWriter().write(e.getMessage());
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            error = sw.toString();
        }
        //                记录log日志到数据库
        logService.saveHttpLog(isSuccess, config.getReceiveNotify(), "异步支付通知", "POST", null, params, responses, error, logService.onepayType);
    }
}

+ 1 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/ylzpay/ThirdQrcodeController.java

@ -48,7 +48,7 @@ public class ThirdQrcodeController extends WeixinBaseController {
            String content = "wechat_" + scene;
            String path = server_url + File.separator + "qrcode";
            // 通过微信接口生成医生二维码
            String result = qrcodeService.makeQrcodeFromWeiXin(content, content.replaceAll("\r\n", ""), path, getAccessToken());
            String result = qrcodeService.getQrcodeFromWeiXin(content, content.replaceAll("\r\n", ""), path, getAccessToken());
            return write(200, "生成二维码成功!", "data", result);
        } catch (Exception e) {
            e.printStackTrace();

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

@ -61,7 +61,7 @@ import java.util.*;
 * Created by hzp on 2017/05/23.
 */
@Controller
@RequestMapping(value = "/onepay", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@RequestMapping(value = "/patient", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(description = "统一支付服务")
public class OnePayController extends WeixinBaseController {

+ 17 - 14
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/wechat/process/WeiXinEventProcess.java

@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@ -299,16 +300,17 @@ public class WeiXinEventProcess {
        if (StringUtils.isNotEmpty(eventKey) && (("wechat_ehc").equals(eventKey)) ||
                eventKey.startsWith("qrscene_wechat_ehc")) {
            System.out.println("第三方ehr关注推送事件");
            JSONObject json = new JSONObject();
            json.put("first", "first");
            json.put("remark", "remark");
            json.put("keyword1", "keyword1");
            json.put("keyword2", "keyword2");
            json.put("url", "www.baidu.com");
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            json.put("first", "尊敬的用户,您已成功注册居民电子健康卡");
            json.put("remark", "请点击领取使用");
            json.put("keyword1", "电子健康卡注册");
            json.put("keyword2", "线下自助机");
            json.put("keyword3", format.format(new Date()));
            json.put("url", "grzx/html/my-health-card.html");
            //跳转路径问题,如果是第三方不加本地服务器名称(要改push公用方法)
            json.put("openId", message.get("FromUserName"));
            json.put("type", 11);
            json.put("type", 20);
            //模板消息json串
            result = json.toString();
        } else {
@ -540,16 +542,17 @@ public class WeiXinEventProcess {
            result = WeiXinMessageReplyUtils.replyNewsMessage(message.get("FromUserName"), message.get("ToUserName"), articles);
        } else if (StringUtils.isNotEmpty(eventKey) && (("wechat_ehc").equals(eventKey)) ||
                eventKey.startsWith("qrscene_wechat_ehc")) {
            System.out.println("第三方ehr扫描推送事件");
            JSONObject json = new JSONObject();
            json.put("first", "first");
            json.put("remark", "remark");
            json.put("keyword1", "keyword1");
            json.put("keyword2", "keyword2");
            json.put("url", "www.baidu.com");
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            json.put("first", "尊敬的用户,您已成功注册居民电子健康卡");
            json.put("remark", "请点击领取使用");
            json.put("keyword1", "电子健康卡注册");
            json.put("keyword2", "线下自助机");
            json.put("keyword3", format.format(new Date()));
            json.put("url", "grzx/html/my-health-card.html");
            //跳转路径问题,如果是第三方不加本地服务器名称(要改push公用方法)
            json.put("openId", message.get("FromUserName"));
            json.put("type", 11);
            json.put("type", 20);
            //模板消息json串
            result = json.toString();
        }

+ 2 - 0
patient-co/patient-co-wlyy/src/main/resources/application-dev.yml

@ -64,6 +64,8 @@ wechat:
   template_doctor_audit:  OFyLUeBW3r9trWw-i6pbB1sPSTD4J2recCv_mc-gKxA
   #服务结果通知
   template_doctor_service:  ezr5RlX0nvh7bGU9aVsGDMJbjKDp1uMKP-AGGYXwI5g
   #体检报告提醒
   template_physical_examination:  jTsvKU3iFw0yiJi5ESyFGDTmFSVcWlMot3yHier39Vc
yihu:
  yihu_OpenPlatform_url: http://ssotest.yihu.cn/OpenPlatform/cgiBin/1.0/

+ 2 - 0
patient-co/patient-co-wlyy/src/main/resources/application-devtest.yml

@ -64,6 +64,8 @@ wechat:
    template_doctor_audit:  lCtOgJgL1tBJbAytqN7cn-FgCH_Usg99FENEy2TrC08
    #服务结果通知
    template_doctor_service: i34rq3xFLnpf_VN2Jor9n2YlQqJMM7oXyYvuctriISw
    #体检报告提醒
    template_physical_examination:  tlsPJlgA90-I73j2QudyMG7C-LmrMn1lC4_UnJPyWSM
yihu:

+ 2 - 0
patient-co/patient-co-wlyy/src/main/resources/application-local.yml

@ -64,6 +64,8 @@ wechat:
     template_doctor_audit:  egrX5Larpkv8opQW67_hwsZoT0OHwwUpE1v7HeU_Jnw
     #服务结果通知
     template_doctor_service:  xhi1LEudiZwJfZylOHuZNo8EiA73GtSshPQv5XOt9Lk
     #体检报告提醒
     template_physical_examination:  jTsvKU3iFw0yiJi5ESyFGDTmFSVcWlMot3yHier39Vc
yihu:

+ 2 - 0
patient-co/patient-co-wlyy/src/main/resources/application-localtest.yml

@ -64,6 +64,8 @@ wechat:
    template_doctor_audit:  lCtOgJgL1tBJbAytqN7cn-FgCH_Usg99FENEy2TrC08
    #服务结果通知
    template_doctor_service: i34rq3xFLnpf_VN2Jor9n2YlQqJMM7oXyYvuctriISw
    #体检报告提醒
    template_physical_examination:  tlsPJlgA90-I73j2QudyMG7C-LmrMn1lC4_UnJPyWSM
yihu:

+ 2 - 0
patient-co/patient-co-wlyy/src/main/resources/application-prod.yml

@ -63,6 +63,8 @@ wechat:
   template_doctor_audit:  egrX5Larpkv8opQW67_hwsZoT0OHwwUpE1v7HeU_Jnw
   #服务结果通知
   template_doctor_service:  xhi1LEudiZwJfZylOHuZNo8EiA73GtSshPQv5XOt9Lk
   #体检报告提醒
   template_physical_examination:  jTsvKU3iFw0yiJi5ESyFGDTmFSVcWlMot3yHier39Vc
yihu:

+ 2 - 0
patient-co/patient-co-wlyy/src/main/resources/application-test.yml

@ -63,6 +63,8 @@ wechat:
   template_doctor_audit:  lCtOgJgL1tBJbAytqN7cn-FgCH_Usg99FENEy2TrC08
   #服务结果通知
   template_doctor_service:  i34rq3xFLnpf_VN2Jor9n2YlQqJMM7oXyYvuctriISw
   #体检报告提醒
   template_physical_examination:  tlsPJlgA90-I73j2QudyMG7C-LmrMn1lC4_UnJPyWSM
yihu:
  yihu_OpenPlatform_url: http://ssotest.yihu.cn/OpenPlatform/cgiBin/1.0/