Browse Source

Merge branch 'dev' of http://192.168.1.220:10080/Amoy2/wlyy2.0 into dev

吴世龙 3 years ago
parent
commit
9ae6d91ed9
15 changed files with 538 additions and 49 deletions
  1. 21 24
      business/base-service/src/main/java/com/yihu/jw/doctor/service/BaseDoctorInfoService.java
  2. 1 1
      business/base-service/src/main/java/com/yihu/jw/healthCare/service/HealthCareService.java
  3. 14 14
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java
  4. 3 0
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/EntranceService.java
  5. 16 0
      business/base-service/src/main/java/com/yihu/jw/wechat/dao/EnterpriseJsapiTicketDao.java
  6. 265 0
      business/base-service/src/main/java/com/yihu/jw/wechat/enterprise/EnterpriseService.java
  7. 31 8
      business/base-service/src/main/java/com/yihu/jw/wechat/service/WxAccessTokenService.java
  8. 73 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/wx/EnterpriseJsApiTicket.java
  9. 13 0
      common/common-entity/src/main/java/com/yihu/jw/entity/hospital/prescription/WlyyPrescriptionInfoDO.java
  10. 3 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/hospital/BaseHospitalRequestMapping.java
  11. 9 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/hospital/prescription/WlyyHisPrescriptionVO.java
  12. 9 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/hospital/prescription/WlyyPrescriptionInfoVO.java
  13. 78 0
      svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/patient/PatientNoLoginEndPoint.java
  14. 1 1
      svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/prescription/PrescriptionEndpoint.java
  15. 1 1
      wlyy-parent-pom/pom.xml

+ 21 - 24
business/base-service/src/main/java/com/yihu/jw/doctor/service/BaseDoctorInfoService.java

@ -8,6 +8,7 @@ import com.yihu.jw.doctor.dao.DoctorSpecialDiseaseDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorRoleDO;
import com.yihu.jw.entity.base.doctor.DoctorSpecialDiseaseDo;
import com.yihu.jw.entity.hospital.appointment.WlyySpecialDiseaseDO;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.entity.hospital.dict.WlyyChargeDictDO;
import com.yihu.jw.entity.hospital.mapping.DoctorMappingDO;
@ -23,6 +24,7 @@ import com.yihu.jw.rm.base.BaseRequestMapping;
import com.yihu.jw.rm.hospital.BaseHospitalRequestMapping;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.utils.StringUtil;
import com.yihu.jw.utils.hibernate.HibenateUtils;
import com.yihu.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
@ -199,6 +201,7 @@ public class BaseDoctorInfoService extends BaseJpaService<BaseDoctorDO, BaseDoct
    public Object queryById(String doctorId,String typeCode) {
        Map<String,Object> params = new HashedMap();
        String sql ="SELECT " +
                " a.id AS \"id\", " +
                " a.NAME AS \"name\", " +
                " a.job_title_name AS \"jobTitleName\", " +
                " a.introduce AS \"introduce\", " +
@ -208,8 +211,8 @@ public class BaseDoctorInfoService extends BaseJpaService<BaseDoctorDO, BaseDoct
                " b.dept_name AS \"deptName\", " +
                " b.org_name AS \"orgName\", " +
                " c.mapping_code AS \"jobNumber\", " +
                " d.disease_name AS \"diseaseName\", " +
                " d.disease_code AS \"diseaseCode\", " +
/*                " d.disease_name AS \"diseaseName\", " +
                " d.disease_code AS \"diseaseCode\", " +*/
                " e.req_fee AS \"money\" ," +
                " h.dept_type_code AS \"deptTypeCode\" ," +
                "\tm.req_fee as \"twfzFee\",\n" +
@ -229,7 +232,7 @@ public class BaseDoctorInfoService extends BaseJpaService<BaseDoctorDO, BaseDoct
                " LEFT JOIN base_doctor_hospital b ON a.id = b.doctor_code " +
                " LEFT JOIN base_doctor_mapping c ON a.id = c.doctor " +
                " LEFT JOIN dict_hospital_dept h ON b.dept_code = h.code " +
                " LEFT JOIN wlyy_doctor_special_disease d ON a.id = d.doctor_code " +
/*                " LEFT JOIN wlyy_doctor_special_disease d ON a.id = d.doctor_code " +*/
                " LEFT JOIN wlyy_charge_dict e ON a.charge_type = e.charge_type " +
                " LEFT JOIN wlyy_charge_dict m ON a.twfz_charge_type = m.charge_type and m.is_del='1'\n" +
                " LEFT JOIN wlyy_charge_dict n ON a.spfz_charge_type = n.charge_type and n.is_del='1'\n" +
@ -252,30 +255,24 @@ public class BaseDoctorInfoService extends BaseJpaService<BaseDoctorDO, BaseDoct
        List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql, params);
        StringBuilder disease = new StringBuilder();
        StringBuilder code = new StringBuilder();
        String diseaseName = "";
        String diseaseCode = "";
        if (null != list && list.size() > 0){
            if (list.size() == 1){
                return  list.get(0);
            }else {
                for (int i=0;i<list.size();i++){
                    if (i == 0 ){
                        if (list.get(i).get("diseaseName")!=null){
                            disease.append(list.get(i).get("diseaseName"));
                            code.append(list.get(i).get("diseaseCode"));
                        }
                    }else {
                        if (list.get(i).get("diseaseName")!=null){
                            disease.append(","+list.get(i).get("diseaseName"));
                            code.append(","+list.get(i).get("diseaseCode"));
                        }
                    }
                }
                list.get(0).put("diseaseName",disease);
                list.get(0).put("diseaseCode",code);
                return  list.get(0);
            Map<String,Object> map = list.get(0);
            List<DoctorSpecialDiseaseDo> specialDiseaseDoList = specialDiseaseDao.findByDoctorCode(map.get("id").toString());
            for (DoctorSpecialDiseaseDo diseaseDo:specialDiseaseDoList){
                disease.append(diseaseDo.getDiseaseName()+",");
                code.append(diseaseDo.getDiseaseCode()+",");
            }
            logger.info("disease"+disease+"===code==="+disease);
            if (StringUtils.isNoneBlank(disease)){
                diseaseName = disease.substring(0,disease.length()-1);
                diseaseCode = code.substring(0,code.length()-1);
            }
            list.get(0).put("diseaseName",diseaseName);
            list.get(0).put("diseaseCode",diseaseCode);
            return  list.get(0);
        }
        return null;
    }

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/healthCare/service/HealthCareService.java

@ -1868,7 +1868,7 @@ public class HealthCareService {
    public String getSettlementResult(String code) throws Exception{
        String funid = "N20.17.04.08";
        JSONObject data = new JSONObject();
        data.put("code",code);//参保地区划代码
        data.put("code",code);//
        String result = requestYlz(data,funid,"获取医保结算结果");
        if (result==null){
            throw new Exception("获取医保结算结果失败!");

+ 14 - 14
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java

@ -3158,7 +3158,6 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            prescriptionDao.save(prescription);
            //记录开发失败日志
            prescriptionLogService.addPrescriptionLog(prescription.getId(), 13, 2, outpatientDO.getDoctor(), outpatientDO.getDoctorName(), "", new Date());
            return result;
        }
    }
@ -3258,6 +3257,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        json.put("unit", info.getUnit());
        json.put("usage", info.getUsageCode());
        json.put("supplyCode", info.getSupplyCode());
        json.put("sfybxm",info.getSfybxm());
        if (StringUtils.isNotBlank(info.getDays())) {
            json.put("days", info.getDays());
        } else {
@ -4780,13 +4780,17 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            //医保是否有处方权
            if(healthCareService.isHospitalFlag()){
                String doctorAuthenticationUrl = entranceHealthCareUrl + "doctorAuthentication?doctorId="+doctorDO.getId();
                String infoResponse = httpClientUtil.get(doctorAuthenticationUrl,"GBK");
                com.alibaba.fastjson.JSONObject doctorAuthentication = com.alibaba.fastjson.JSONObject.parseObject(infoResponse);
                if(doctorAuthentication.getInteger("status")==200){
                    rs.put("is_prescribe", doctorAuthentication.get("obj"));//is_prescribe	是否具备处方权	1-有处方权,0无处方权
                if (wechatId.equalsIgnoreCase("xm_xzzx_wx")){
                    String doctorAuthenticationUrl = entranceHealthCareUrl + "doctorAuthentication?doctorId="+doctorDO.getId();
                    String infoResponse = httpClientUtil.get(doctorAuthenticationUrl,"GBK");
                    com.alibaba.fastjson.JSONObject doctorAuthentication = com.alibaba.fastjson.JSONObject.parseObject(infoResponse);
                    if(doctorAuthentication.getInteger("status")==200){
                        rs.put("is_prescribe", doctorAuthentication.get("obj"));//is_prescribe	是否具备处方权	1-有处方权,0无处方权
                    }else {
                        rs.put("is_prescribe",0);
                    }
                }else {
                    rs.put("is_prescribe",0);
                    rs.put("is_prescribe", healthCareService.doctorAuthentication(doctorDO.getId()));//is_prescribe	是否具备处方权	1-有处方权,0无处方权
                }
            }else{
                rs.put("is_prescribe", 0);//is_prescribe	是否具备处方权	1-有处方权,0无处方权
@ -9719,7 +9723,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
     * @param prescriptionId
     * @return
     */
    public WlyyPrescriptionCheckDO saveCheck(String operate, String operateName, String reason, Integer status, String prescriptionId, String wxId,String ip) {
    public WlyyPrescriptionCheckDO saveCheck(String operate, String operateName, String reason, Integer status, String prescriptionId, String wxId,String ip) throws Exception {
        WlyyPrescriptionCheckDO prescriptionCheckDO = new WlyyPrescriptionCheckDO();
        prescriptionCheckDO.setCreateTime(new Date());
        prescriptionCheckDO.setOperate(operate);
@ -9743,7 +9747,6 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            List<WlyyPrescriptionExpressageDO> expressageDOS = prescriptionExpressageDao.findByOutpatientId(outpatientDO.getId());
            if (wxId.equalsIgnoreCase("xm_zsyy_wx")) {
                try {
                    //his处方拼接开方条件
                    com.alibaba.fastjson.JSONArray jsonData = new com.alibaba.fastjson.JSONArray();
                    for (WlyyPrescriptionInfoDO info : infoDOS) {
@ -9830,9 +9833,6 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                    }
                    //sendHisDiagnosis(jsonData, outpatientDO, wlyyPrescriptionDO);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (wxId.equalsIgnoreCase("xm_xzzx_wx")){
                try {
@ -14421,11 +14421,11 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                    }
                }
                logger.info("电子发票开具开始");
                /*try {
                try {
                    entranceService.dzpjServer(patientMappingDO.getMappingCode(),realOrder);
                }catch (Exception e){
                    e.printStackTrace();
                }*/
                }
                logger.info("电子发票开具结束");
            }

+ 3 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/EntranceService.java

@ -1024,6 +1024,9 @@ public class EntranceService {
                if (StringUtils.isNotBlank(vo.getQuantity())) {
                    sbs.append(" quantity=\"" + vo.getQuantity() + "\"");
                }
                if (StringUtils.isNotBlank(vo.getSfybxm())) {
                    sbs.append(" sfybxm=\"" + vo.getSfybxm() + "\"");
                }
                if (StringUtils.isNotBlank(vo.getGroupNo())) {
                    sbs.append(" group_no=\"" + vo.getGroupNo() + "\"");
                }

+ 16 - 0
business/base-service/src/main/java/com/yihu/jw/wechat/dao/EnterpriseJsapiTicketDao.java

@ -0,0 +1,16 @@
package com.yihu.jw.wechat.dao;
import com.yihu.jw.entity.base.wx.EnterpriseJsApiTicket;
import com.yihu.jw.entity.base.wx.JsApiTicket;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface EnterpriseJsapiTicketDao extends PagingAndSortingRepository<EnterpriseJsApiTicket, Long> {
    @Query("select p from EnterpriseJsApiTicket p where p.acc_id = ?1 order by p.add_timestamp desc")
    Iterable<EnterpriseJsApiTicket> findJsapiTicket(String accId);
}

+ 265 - 0
business/base-service/src/main/java/com/yihu/jw/wechat/enterprise/EnterpriseService.java

@ -4,6 +4,9 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.wx.EnterpriseJsApiTicket;
import com.yihu.jw.entity.base.wx.JsApiTicket;
import com.yihu.jw.entity.base.wx.WxWechatDO;
import com.yihu.jw.entity.hospital.enterprise.WxEnterpriseDO;
import com.yihu.jw.entity.hospital.enterprise.WxEnterpriseTokenDO;
import com.yihu.jw.entity.hospital.enterprise.WxEnterpriseUserDO;
@ -14,17 +17,27 @@ import com.yihu.jw.util.wechat.wxhttp.HttpUtil;
import com.yihu.jw.wechat.enterprise.dao.WxEnterpriseDao;
import com.yihu.jw.wechat.enterprise.dao.WxEnterpriseTokenDao;
import com.yihu.jw.wechat.enterprise.dao.WxEnterpriseUserDao;
import com.yihu.jw.wechat.service.WxAccessTokenService;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.A;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Random;
/**
 * Created by Trick on 2020/2/8.
@ -42,6 +55,9 @@ public class EnterpriseService {
    private String agentId = "1000003";
    @Value("${FileTempPath.upload_temp_path}")
    private String upload_temp_path;
    @Autowired
    private WxEnterpriseTokenDao wxEnterpriseTokenDao;
    @Autowired
@ -52,6 +68,10 @@ public class EnterpriseService {
    private BaseDoctorDao baseDoctorDao;
    @Autowired
    private WlyyHttpLogDao wlyyHttpLogDao;
    @Autowired
    private WxAccessTokenService wxAccessTokenService;
    @Autowired
    protected HttpServletRequest request;
    public String getToken(String enterpriseId)throws Exception{
@ -90,6 +110,12 @@ public class EnterpriseService {
        return token.getAccessToken();
    }
    /**
     * 小程序token
     * @param enterpriseId
     * @return
     * @throws Exception
     */
    public String getXCXToken(String enterpriseId)throws Exception{
        logger.info("getXCXToken");
@ -481,7 +507,245 @@ public class EnterpriseService {
        return "ok";
    }
    /**
     * 获取企业微信的jsapi_ticket
     *
     * @return
     */
    public String getEnterpriseJsapi_ticketByToken(String wxId) throws Exception {
        try {
            System.out.println("getEnterpriseJsapi_ticketByToken="+wxId);
            Iterable<EnterpriseJsApiTicket> jsapiTickets = null;
            WxWechatDO wxWechat = null;
            //中山医院互联网医院
            if("xm_zsyy_wx".equals(wxId) || "xm_xzzx_wx".equals(wxId) || "xm_ykyy_wx".equals(wxId)||"xm_hcyy_wx".equals(wxId)){
                jsapiTickets = wxAccessTokenService.findEnterpriseJsapiTicket(wxId);
            }else{
                wxWechat = wxAccessTokenService.getWxInfo(wxId);
                jsapiTickets = wxAccessTokenService.findEnterpriseJsapiTicket(wxWechat.getAppOriginId());
            }
            if (jsapiTickets != null) {
                for (EnterpriseJsApiTicket jsApiTicket : jsapiTickets) {
                    if ((System.currentTimeMillis() - jsApiTicket.getAdd_timestamp()) < (jsApiTicket.getExpires_in() * 1000)) {
                        return jsApiTicket.getJsapi_ticket();
                    } else {
                        wxAccessTokenService.delEnterpriseJsapiTicket(jsApiTicket);
                        break;
                    }
                }
            }
            String token = "";
            //中山医院互联网医院
            token = getToken(wxId);
            System.out.println("getticket_token:"+token);
            if (token != null) {
                String token_url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?";
                String params = "access_token=" + token ;
                String result = HttpUtil.sendGet(token_url, params);
                System.out.println("result:"+result);
                org.json.JSONObject json = new org.json.JSONObject(result);
                System.out.println("getticket:"+result);
                if (json.has("ticket")) {
                    String ticket = json.get("ticket").toString();
                    String expires_in = json.get("expires_in").toString();
                    EnterpriseJsApiTicket newJsApiTicket = new EnterpriseJsApiTicket();
                    newJsApiTicket.setJsapi_ticket(ticket);
                    newJsApiTicket.setExpires_in(Long.parseLong(expires_in));
                    if("xm_zsyy_wx".equals(wxId) || "xm_xzzx_wx".equals(wxId) || "xm_ykyy_wx".equals(wxId)||"xm_hcyy_wx".equals(wxId)){
                        newJsApiTicket.setAcc_id(wxId);
                    }else{
                        newJsApiTicket.setAcc_id(wxWechat.getAppOriginId());
                    }
                    wxAccessTokenService.addEnterpriseJsapiTicket(newJsApiTicket);
                    return ticket;
                } else {
                    return null;
                }
            } else {
                return null;
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
            throw new Exception(e.getMessage());
        }
    }
    /**
     * 下载多媒体文件(请注意,视频文件不支持下载,调用该接口需http协议)
     *
     * @return
     */
    public InputStream getInputStream(String mediaId, String wechat_appid) throws Exception {
        String accessToken = getToken(wechat_appid);
        InputStream is = null;
        String url = "https://qyapi.weixin.qq.com/cgi-bin/media/get/jssdk?access_token=" + accessToken + "&media_id=" + mediaId;
//		String url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=30_OBJbMMPW9TnyGHKf32bcjkXtxWnzBrtqWlSMBnNk8MWpJ6qis2TnsecRYNZImgahdx30WrsI1bGco6K67-j4sT1QkDxYKBrVvjaYF6QgbY8dgBMzuoARKoaxtX3ehiYvdCLSUHvogrpF3n0GANIfCHAHUP&media_id=R_060hnyXAFyHD9HaOLl15xhDIzDvcA61-Wz34GkXmCakdrsFJqxrPEBHewmAEK9";
        logger.info("media/get" + url);
        try {
            URL urlGet = new URL(url);
            HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
            http.setRequestMethod("GET"); // 必须是get方式请求
            http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            http.setDoOutput(true);
            http.setDoInput(true);
            System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
            System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
            http.connect();
            // 获取文件转化为byte流
            is = http.getInputStream();
            if (is.available() <= 200) {
                logger.info("下载多媒体文件 accessToken 过期");
                accessToken=getToken(wechat_appid);
                is = getInputStreamReLoad(mediaId, wechat_appid, accessToken);
                return is;
            }
        } catch (Exception e) {
            logger.info(e.getMessage());
            e.printStackTrace();
            throw new Exception("下载失败," + e.getMessage());
        }
        return is;
    }
    /**
     * accessToken 过期时重新下载多媒体文件
     * 下载多媒体文件(请注意,视频文件不支持下载,调用该接口需http协议)
     *
     * @return
     */
    public InputStream getInputStreamReLoad(String mediaId, String wechat_appid, String accessToken) throws Exception {
        logger.info("accessToken 过期时重新下载多媒体文件:accessToken:" + accessToken);
        logger.info("accessToken 过期时重新下载多媒体文件:wechat_appid:" + wechat_appid);
        logger.info("accessToken 过期时重新下载多媒体文件:mediaId:" + mediaId);
        InputStream is = null;
        String url = "https://qyapi.weixin.qq.com/cgi-bin/media/get/jssdk?access_token=" + accessToken + "&media_id=" + mediaId;
        logger.info("media/get" + url);
        try {
            URL urlGet = new URL(url);
            HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
            http.setRequestMethod("GET"); // 必须是get方式请求
            http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            http.setDoOutput(true);
            http.setDoInput(true);
            System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
            System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
            http.connect();
            // 获取文件转化为byte流
            is = http.getInputStream();
        } catch (Exception e) {
            logger.info(e.getMessage());
            e.printStackTrace();
            throw new Exception("下载失败," + e.getMessage());
        }
        return is;
    }
    /**
     * 获取下载语音信息(jpg)
     *
     * @param mediaId 文件的id
     * @throws Exception
     */
    public String saveVoiceToDisk(String mediaId, String wechat_appid) throws Exception {
        // 文件保存的临时路径
        String tempPath = upload_temp_path + File.separator;
        System.out.println("tempPath:" + tempPath);
        // 拼接年月日路径
        String datePath = DateUtil.getStringDate("yyyy") + File.separator + DateUtil.getStringDate("MM") + File.separator + DateUtil.getStringDate("dd") + File.separator;
        System.out.println("datePath:" + datePath);
        // 重命名文件
        String fileBase = DateUtil.dateToStr(new Date(), DateUtil.YYYYMMDDHHMMSS) + "_" + new Random().nextInt(1000);
        System.out.println("fileBase:" + fileBase);
        String newFileName = fileBase + ".amr";
        String mp3FileName = fileBase + ".mp3";
        System.out.println("newFileName:" + newFileName);
        System.out.println("mp3FileName:" + mp3FileName);
        // 保存路径
        File uploadFile = new File(tempPath + datePath + newFileName);
        InputStream inputStream = null;
        FileOutputStream fileOutputStream = null;
        try {
            if (!uploadFile.getParentFile().exists()) {
                uploadFile.getParentFile().mkdirs();
            }
            inputStream = getInputStream(mediaId, wechat_appid);
            byte[] data = new byte[1024];
            int len = 0;
            fileOutputStream = new FileOutputStream(uploadFile);
            while ((len = inputStream.read(data)) != -1) {
                fileOutputStream.write(data, 0, len);
            }
            String amrFilePath = tempPath + datePath + newFileName;
            String Mp3FilePath = tempPath + datePath + mp3FileName;
            System.out.println("amrFilePath:" + amrFilePath);
            System.out.println("Mp3FilePath:" + Mp3FilePath);
//			fileUtil.changeToMp3(amrFilePath,Mp3FilePath);
            // 返回保存路径
            return amrFilePath;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fileOutputStream != null) {
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
    /**
     * 获取微信服务器语音
     *
     * @return
     */
    public String fetchWxVoices(String wecha_appid) {
        String voiceIds = "";
        try {
            String voices = request.getParameter("voices");
            System.out.println("voices" + voices);
            if (org.apache.commons.lang3.StringUtils.isEmpty(voices)) {
                return voices;
            }
            String[] mediaIds = voices.split(",");
            for (String mediaId : mediaIds) {
                if (org.apache.commons.lang3.StringUtils.isEmpty(mediaId)) {
                    continue;
                }
                String temp = saveVoiceToDisk(mediaId, wecha_appid);
                if (org.apache.commons.lang3.StringUtils.isNotEmpty(temp)) {
                    if (voiceIds.length() == 0) {
                        voiceIds = temp;
                    } else {
                        voiceIds += "," + temp;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
//			error(e);
        }
        return voiceIds;
    }
//    public String send
//    public static void main(String args[])throws Exception{
@ -608,4 +872,5 @@ public class EnterpriseService {
//    }
}

+ 31 - 8
business/base-service/src/main/java/com/yihu/jw/wechat/service/WxAccessTokenService.java

@ -1,17 +1,11 @@
package com.yihu.jw.wechat.service;
import com.yihu.jw.entity.base.wx.JsApiTicket;
import com.yihu.jw.entity.base.wx.WxAccessTokenDO;
import com.yihu.jw.entity.base.wx.WxAppletsAccessTokenDO;
import com.yihu.jw.entity.base.wx.WxWechatDO;
import com.yihu.jw.entity.base.wx.*;
import com.yihu.jw.exception.ApiException;
import com.yihu.jw.exception.code.ExceptionCode;
import com.yihu.jw.hospital.prescription.service.entrance.TnyyEntranceService;
import com.yihu.jw.rm.base.WechatRequestMapping;
import com.yihu.jw.wechat.dao.JsapiTicketDao;
import com.yihu.jw.wechat.dao.WechatDao;
import com.yihu.jw.wechat.dao.WxAccessTokenDao;
import com.yihu.jw.wechat.dao.WxAppletsAccessTokenDao;
import com.yihu.jw.wechat.dao.*;
import com.yihu.mysql.query.BaseJpaService;
import com.yihu.utils.network.HttpUtils;
import org.json.JSONObject;
@ -42,6 +36,8 @@ public class WxAccessTokenService extends BaseJpaService<WxAccessTokenDO, WxAcce
    @Autowired
    private JsapiTicketDao jsapiTicketDao;
    @Autowired
    private EnterpriseJsapiTicketDao enterpriseJsapiTicketDao;
    @Autowired
    private TnyyEntranceService tnyyEntranceService;
    @Autowired
    private WxAppletsAccessTokenDao wxAppletsAccessTokenDao;
@ -408,11 +404,29 @@ public class WxAccessTokenService extends BaseJpaService<WxAccessTokenDO, WxAcce
        return jsapiTicketDao.findJsapiTicket(accId);
    }
    /**
     * 获取企业微信凭证
     * @param accId 企业微信原始id
     * @return
     */
    public Iterable<EnterpriseJsApiTicket> findEnterpriseJsapiTicket(String accId) {
        return enterpriseJsapiTicketDao.findJsapiTicket(accId);
    }
    public void delJsapiTicket(JsApiTicket jsApiTicket) {
        jsapiTicketDao.delete(jsApiTicket);
    }
    /**
     * 企业微信Jsapi
     *
     * @param jsApiTicket
     */
    public void delEnterpriseJsapiTicket(EnterpriseJsApiTicket jsApiTicket) {
        enterpriseJsapiTicketDao.delete(jsApiTicket);
    }
    /**
     * 添加JsapiTicket
     */
@ -421,4 +435,13 @@ public class WxAccessTokenService extends BaseJpaService<WxAccessTokenDO, WxAcce
        jsApiTicket.setCzrq(new Date());
        jsapiTicketDao.save(jsApiTicket);
    }
    /**
     * 添加企业微信JsapiTicket
     */
    public void addEnterpriseJsapiTicket(EnterpriseJsApiTicket jsApiTicket) {
        jsApiTicket.setAdd_timestamp(System.currentTimeMillis());
        jsApiTicket.setCzrq(new Date());
        enterpriseJsapiTicketDao.save(jsApiTicket);
    }
}

+ 73 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/wx/EnterpriseJsApiTicket.java

@ -0,0 +1,73 @@
package com.yihu.jw.entity.base.wx;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.IntegerIdentityEntity;
import javax.persistence.Entity;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import java.util.Date;
/**
 * JavaScript API访问所需要的凭据
 */
@Entity
@Table(name = "wx_enterprise_jsapi_ticket")
@SequenceGenerator(name="id_generated", sequenceName="WX_ENTERPRISE_JSAPI_TICKET_SEQ")
public class EnterpriseJsApiTicket extends IntegerIdentityEntity {
    private static final long serialVersionUID = -3297644428262254694L;
    private String jsapi_ticket;
    private String acc_id;;
    private Long add_timestamp;
    private Long expires_in;
    private Date czrq;
    public String getAcc_id() {
        return acc_id;
    }
    public void setAcc_id(String acc_id) {
        this.acc_id = acc_id;
    }
    public String getJsapi_ticket() {
        return jsapi_ticket;
    }
    public void setJsapi_ticket(String jsapi_ticket) {
        this.jsapi_ticket = jsapi_ticket;
    }
    public Long getAdd_timestamp() {
        return add_timestamp;
    }
    public void setAdd_timestamp(Long add_timestamp) {
        this.add_timestamp = add_timestamp;
    }
    public Long getExpires_in() {
        return expires_in;
    }
    public void setExpires_in(Long expires_in) {
        this.expires_in = expires_in;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getCzrq() {
        return czrq;
    }
    public void setCzrq(Date czrq) {
        this.czrq = czrq;
    }
}

+ 13 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/prescription/WlyyPrescriptionInfoDO.java

@ -164,6 +164,19 @@ public class WlyyPrescriptionInfoDO extends UuidIdentityEntity {
     */
    private String pzwh;
    /**
     * sfybxm 是否医保项目 Y:是, N:否
     */
    private String sfybxm;
    @Column(name = "sfybxm")
    public String getSfybxm() {
        return sfybxm;
    }
    public void setSfybxm(String sfybxm) {
        this.sfybxm = sfybxm;
    }
    @Column(name = "prescription_id")
    public String getPrescriptionId() {

+ 3 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/hospital/BaseHospitalRequestMapping.java

@ -973,6 +973,9 @@ public class BaseHospitalRequestMapping {
    
        //获取微信签名
        public static final String getSign ="/getSign";
        //获取企业微信签名
        public static final String getEnterpriseSign ="/getEnterpriseSign";
        
        //获取居民-导诊的咨询对话
        public static final String getPatientGuaidenceConsult = "getPatientGuaidenceConsult";

+ 9 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/hospital/prescription/WlyyHisPrescriptionVO.java

@ -147,6 +147,15 @@ public class WlyyHisPrescriptionVO extends UuidIdentityVOWithOperator {
    private String idnoType;
    private String sfybxm;
    public String getSfybxm() {
        return sfybxm;
    }
    public void setSfybxm(String sfybxm) {
        this.sfybxm = sfybxm;
    }
    public String getIdnoType() {
        return idnoType;

+ 9 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/hospital/prescription/WlyyPrescriptionInfoVO.java

@ -160,6 +160,15 @@ public class WlyyPrescriptionInfoVO extends UuidIdentityVOWithOperator {
    private String pzwh;
    private String sfybxm;
    public String getSfybxm() {
        return sfybxm;
    }
    public void setSfybxm(String sfybxm) {
        this.sfybxm = sfybxm;
    }
    public String getPrescriptionId() {
        return prescriptionId;

+ 78 - 0
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/patient/PatientNoLoginEndPoint.java

@ -20,6 +20,8 @@ import com.yihu.jw.entity.base.wx.WxWechatDO;
import com.yihu.jw.entity.hospital.article.KnowledgeArticleDO;
import com.yihu.jw.entity.hospital.article.KnowledgeArticleUserDO;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.entity.hospital.enterprise.WxEnterpriseDO;
import com.yihu.jw.entity.hospital.enterprise.WxEnterpriseTokenDO;
import com.yihu.jw.entity.hospital.healthCare.YlzMedicalRelationDO;
import com.yihu.jw.entity.hospital.httplog.WlyyHttpLogDO;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
@ -75,6 +77,9 @@ import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.wechat.dao.BasePatientWechatDao;
import com.yihu.jw.wechat.dao.WechatDao;
import com.yihu.jw.wechat.dao.WxTemplateConfigDao;
import com.yihu.jw.wechat.enterprise.EnterpriseService;
import com.yihu.jw.wechat.enterprise.dao.WxEnterpriseDao;
import com.yihu.jw.wechat.enterprise.dao.WxEnterpriseTokenDao;
import com.yihu.jw.wechat.service.WechatInfoService;
import com.yihu.jw.wlyy.wlyyhttp.WlyyHttpService;
import com.ylzinfo.onepay.sdk.OnepayClient;
@ -254,6 +259,10 @@ public class PatientNoLoginEndPoint extends EnvelopRestEndpoint {
    private YlzMedicailRelationDao ylzMedicailRelationDao;
    @Autowired
    private BaseDoctorHealthUploadService baseDoctorHealthUploadService;
    @Autowired
    private EnterpriseService enterpriseService;
    @Autowired
    private WxEnterpriseDao wxEnterpriseDao;
@ -980,6 +989,34 @@ public class PatientNoLoginEndPoint extends EnvelopRestEndpoint {
        return failed(PatientRequestMapping.Wechat.api_error);
    }
    @PostMapping(value = BaseHospitalRequestMapping.PatientIM.getEnterpriseSign)
    @ApiOperation(value = "获取企业微信签名", notes = "获取企业微信签名")
    public Envelop getEnterpriseSign(@ApiParam(name = "pageUrl", value = "授权页面")
                           @RequestParam(value = "pageUrl", required = true)String pageUrl,
                           @ApiParam(name = "wxId", value = "微信id")
                           @RequestParam(value = "wxId", required = true)String wxId) throws Exception {
        logger.info("pageUrl="+pageUrl);
        logger.info("wxId="+wxId);
        String ticket = enterpriseService.getEnterpriseJsapi_ticketByToken(wxId);
        WxEnterpriseDO wxEnterpriseDO = wxEnterpriseDao.findOne(wxId);
        Map<Object, Object> map = new HashMap<Object, Object>();
        if (ticket != null) {
            String noncestr = UUID.randomUUID().toString();
            long timestamp = System.currentTimeMillis() / 1000;
            String url = pageUrl;
            logger.info("getSign.url="+url);
            String str = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url;
            logger.info("getSign.str="+str);
            // sha1加密
            String signature = SHA1(str);
            map.put("noncestr", noncestr);
            map.put("timestamp", timestamp);
            map.put("signature", signature);
            map.put("appid", wxEnterpriseDO.getCorpid());
            return success(PatientRequestMapping.Wechat.api_success,map);
        }
        return failed(PatientRequestMapping.Wechat.api_error);
    }
    @GetMapping(value = BaseHospitalRequestMapping.KnowledgeArticle.setAllCode)
    @ApiOperation(value = "生成所有医生二维码")
@ -2079,6 +2116,47 @@ public class PatientNoLoginEndPoint extends EnvelopRestEndpoint {
        logger.info("object"+object.toString());
        return success(object);
    }
    @PostMapping(value = "uploadFileToEnterprise")
    @ApiOperation(value = "上传企业微信语音文件或者视频")
    public Envelop appendEnterprise(
            @ApiParam(name = "type", value = "追问内容类型:1文字,2图片,3语音  ... (im消息类型)")
            @RequestParam(value = "type",required = true) Integer type,
            @ApiParam(name = "times", value = "")
            @RequestParam(value = "times",required = false) Integer times) throws Exception {
        JSONObject object = new JSONObject();
        UploadVO uploadVO = new UploadVO();
        //处理语音文件
        if(!org.springframework.util.StringUtils.isEmpty(wxId)){
            if(3 == type){//语音文件
                String voicepath = enterpriseService.fetchWxVoices(wxId);
                logger.info("voice_path:"+voicepath);
                JSONObject obj = new JSONObject();
                String voiceurl = "";
                // 将临时语音拷贝到正式存储路径下
                if (org.apache.commons.lang3.StringUtils.isNotEmpty(voicepath)) {
                    if("xm_ihealth_wx".equals(wxId)){
                        logger.info("voice_wx_type:"+wxId);
                        voiceurl = fileUploadService.uploadWxVoice(voicepath);
//					uploadVO.setFullUri(map.get("accessory").toString());
                    }else {
                        if(isClose.equals("2")){
                            voiceurl = fileUploadService.uploadInLocalWxVoice(voicepath,remote_inner_url);
                        }else {
                            voiceurl = fileUtil.copyTempVoice(voicepath,fastdfs_file_url);
                        }
                    }
                    obj.put("path", voiceurl);
                    obj.put("times", times);
                }
                object.put("path",voiceurl);
            }
        }
        logger.info("object"+object.toString());
        return success(object);
    }
    @GetMapping(value = BaseHospitalRequestMapping.Prescription.testJpush)
    @ApiOperation(value = "根据身份证号查询医生", notes = "")
    public Envelop testJPush(@ApiParam(name = "outpatientId", value = "")

+ 1 - 1
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/prescription/PrescriptionEndpoint.java

@ -2666,7 +2666,7 @@ public class PrescriptionEndpoint extends EnvelopRestEndpoint {
            String doctorId = getUID();
            if (wxId.equalsIgnoreCase("xm_xzzx_wx")) {
                return ObjEnvelop.getSuccess("ok", xzzxEntranceService.selectHistoryEmrFromEntrance(patient, null));
            } else if (wxId.equalsIgnoreCase("xm_xzzx_wx")) {
            } else if (wxId.equalsIgnoreCase("xm_hcyy_wx")) {
                return ObjEnvelop.getSuccess("ok", hcyyPrescriptionService.selectHistoryEmrFromEntrance(patient, null));
            } else {
                return ObjEnvelop.getSuccess("ok", prescriptionService.outpatient(patient, doctorId));

+ 1 - 1
wlyy-parent-pom/pom.xml

@ -85,7 +85,7 @@
        <!-- Version start -->
        <version.wlyy-common>2.0.0</version.wlyy-common>
        <version.jackson>2.8.1</version.jackson>
        <verion.fastjson>1.2.76</verion.fastjson>
        <verion.fastjson>1.2.83</verion.fastjson>
        <version.json>20160212</version.json>
        <version.net-json>2.4</version.net-json>
        <version.logback>1.2.3</version.logback>