Browse Source

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

huangwenjie 5 years ago
parent
commit
59de55df69
42 changed files with 1827 additions and 160 deletions
  1. 1 1
      svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/config/JpaConfig.java
  2. 16 0
      business/base-service/src/main/java/com/yihu/jw/hospital/dict/WlyyChargeDictDao.java
  3. 2 0
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/dao/PrescriptionDao.java
  4. 2 0
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/dao/PrescriptionExpressageLogDao.java
  5. 9 4
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionExpressageService.java
  6. 116 17
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java
  7. 97 37
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/EntranceService.java
  8. 1 5
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/util/SFUtils.java
  9. 20 0
      business/base-service/src/main/java/com/yihu/jw/utils/EntityUtils.java
  10. 2 0
      business/base-service/src/mqConfig/esbmq-config.xml
  11. 1 1
      business/base-service/src/mqConfig/mqdata/BS10111.json
  12. 16 8
      business/base-service/src/mqConfig/mqdata/BS16017.json
  13. 14 7
      business/base-service/src/mqConfig/mqdata/BS16017_03.json
  14. 1 0
      business/base-service/src/mqConfig/mqdata/BS20011.json
  15. 1 0
      business/base-service/src/mqConfig/mqdata/BS20019.json
  16. 1 0
      business/base-service/src/mqConfig/mqdata/BS25017.json
  17. 1 0
      business/base-service/src/mqConfig/mqdata/BS55010.json
  18. 1 1
      common/common-entity/src/main/java/com/yihu/jw/entity/base/dict/DictHospitalDeptDO.java
  19. 59 1
      common/common-entity/src/main/java/com/yihu/jw/entity/base/patient/BasePatientDO.java
  20. 66 0
      common/common-entity/src/main/java/com/yihu/jw/entity/hospital/dict/WlyyChargeDictDO.java
  21. 192 0
      common/common-entity/src/main/java/com/yihu/jw/entity/hospital/prescription/WlyyPatientExpressageAddrDO.java
  22. 14 0
      common/common-entity/src/main/java/com/yihu/jw/entity/hospital/prescription/WlyyPrescriptionInfoDO.java
  23. 95 0
      common/common-entity/src/main/java/com/yihu/jw/entity/iot/device/IotDeviceBaiyiDO.java
  24. 17 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/hospital/BaseHospitalRequestMapping.java
  25. 196 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/hospital/prescription/WlyyPatientExpressageAddrVO.java
  26. 11 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/hospital/prescription/WlyyPrescriptionInfoVO.java
  27. 184 60
      server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/jdbc/WlyyUserDetailsService.java
  28. 182 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/model/WlyyUserDetails.java
  29. 62 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/WlyyTokenGranter.java
  30. 6 4
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java
  31. 27 0
      svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/config/bean/BeanConfig.java
  32. 22 3
      svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/controller/MqSdkController.java
  33. 106 0
      svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/controller/expressage/WlyyPatientExpressageAddrEndpoint.java
  34. 1 1
      svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/controller/third/PrescriptionUpdateController.java
  35. 21 0
      svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/dao/WlyyPatientExpressageAddrDao.java
  36. 39 0
      svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/service/WlyyPatientExpressageAddrService.java
  37. 14 0
      svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/config/JpaConfig.java
  38. 35 2
      svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/prescription/PrescriptionEndpoint.java
  39. 5 0
      svr/svr-internet-hospital/src/main/resources/application.yml
  40. 147 8
      svr/svr-iot-sunnuo/src/main/java/com/yihu/iot/datainput/controller/IotAnalyzerController.java
  41. 12 0
      svr/svr-iot-sunnuo/src/main/java/com/yihu/iot/datainput/dao/IotDeviceBaiyiDao.java
  42. 12 0
      svr/svr-iot-sunnuo/src/main/java/com/yihu/iot/datainput/service/IotAnalyzerService.java

+ 1 - 1
svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/config/JpaConfig.java

@ -1,4 +1,4 @@
package com.yihu.jw.entrance.config;
package com.yihu.jw.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

+ 16 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/dict/WlyyChargeDictDao.java

@ -0,0 +1,16 @@
package com.yihu.jw.hospital.dict;
import com.yihu.jw.entity.hospital.dict.WlyyChargeDictDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import javax.transaction.Transactional;
/**
 * Created by zdm on 2019/5/28.
 */
@Transactional
public interface WlyyChargeDictDao extends PagingAndSortingRepository<WlyyChargeDictDO, String>, JpaSpecificationExecutor<WlyyChargeDictDO> {
}

+ 2 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/dao/PrescriptionDao.java

@ -28,4 +28,6 @@ public interface PrescriptionDao extends PagingAndSortingRepository<WlyyPrescrip
    void updateStatus(String id, Integer status, Date date);
    List<WlyyPrescriptionDO> findByOutpatientId(String outpatientId);
    List<WlyyPrescriptionDO> findById(String id);
}

+ 2 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/dao/PrescriptionExpressageLogDao.java

@ -1,5 +1,6 @@
package com.yihu.jw.hospital.prescription.dao;
import com.yihu.jw.entity.hospital.prescription.WlyyPrescriptionDO;
import com.yihu.jw.entity.hospital.prescription.WlyyPrescriptionExpressageLogDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
@ -12,5 +13,6 @@ import java.util.List;
public interface PrescriptionExpressageLogDao extends PagingAndSortingRepository<WlyyPrescriptionExpressageLogDO, String>, JpaSpecificationExecutor<WlyyPrescriptionExpressageLogDO> {
    List<WlyyPrescriptionExpressageLogDO> queryByOutpatientId(String outpatientId);
    List<WlyyPrescriptionExpressageLogDO> queryByOutpatientIdOrderByCreateTimeDesc(String outpatientId);
}

+ 9 - 4
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionExpressageService.java

@ -32,20 +32,17 @@ import java.util.*;
 * lith 2019.06.04
 */
@Service
public class PrescriptionExpressageService extends BaseJpaService<WlyyPrescriptionExpressageDO, PrescriptionExpressageDao> {
    private static Logger logger = LoggerFactory.getLogger(PrescriptionExpressageService.class);
    //顺丰快递接口请求地址
    @Value("${express.sf_url}")
    private String sf_url;
    //顺丰快递接口接入编码
    @Value("${express.sf_code}")
    private String sf_code;
    //顺丰快递接口checkword
    @Value("${express.sf_check_word}")
    private String sf_check_word;
    @Autowired
@ -76,6 +73,14 @@ public class PrescriptionExpressageService extends BaseJpaService<WlyyPrescripti
    @Autowired
    private OutpatientDao outpatientDao;
    private PrescriptionExpressageService(){}
    public PrescriptionExpressageService(String sf_url,String sf_code,String sf_check_word){
        this.sf_url = sf_url;
        this.sf_code = sf_code;
        this.sf_check_word = sf_check_word;
    }
    /**
     * 组装请求参数,发送请求

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

@ -31,10 +31,14 @@ import com.yihu.jw.rm.hospital.BaseHospitalRequestMapping;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.mysql.query.BaseJpaService;
import jxl.*;
import jxl.write.*;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
@ -42,6 +46,9 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.Boolean;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -126,15 +133,10 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    }
    /**
     * 原处方记录列表
     * @param registerSn
     * @param patNo
     * @param admNo
     * @param demoFlag
     * @return
     * @throws Exception
     *
     */
    public List<WlyyPrescriptionVO> findOriginPrescriptionList(String registerSn,String patNo,String admNo,boolean demoFlag)throws Exception{
    public List<WlyyPrescriptionVO> findOriginPrescriptionList(String registerSn,String patient,String admNo,boolean demoFlag)throws Exception{
        String patNo =patientMappingService.findHisPatNoByPatient(patient);
        return entranceService.BS16017(registerSn,patNo,admNo,null,demoFlag);
    }
@ -194,7 +196,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                " o.origin_register_no AS originRegisterNo, " +
                " o.hospital," +
                " o.hospital_name AS hospitalName," +
                " o.winNo," +
                " o.win_no AS winNo," +
                " o.type," +
                " o.dept AS dept, " +
                " o.dept_name AS deptName, " +
@ -237,7 +239,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
     * @param outpatientId
     * @return
     */
    public com.alibaba.fastjson.JSONObject findReOutpatientInfo(String outpatientId){
    public com.alibaba.fastjson.JSONObject findReOutpatientInfo(String outpatientId,String prescriptionId){
        com.alibaba.fastjson.JSONObject rs = new com.alibaba.fastjson.JSONObject();
        //复诊信息
@ -257,7 +259,13 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        rs.put("mobile",basePatientDO.getMobile());
        //获取处方信息
        List<WlyyPrescriptionDO> prescriptionDOs = prescriptionDao.findByOutpatientId(outpatientId);
        List<WlyyPrescriptionDO> prescriptionDOs = null;
        if(StringUtils.isNotBlank(prescriptionId)){
            prescriptionDOs = prescriptionDao.findById(prescriptionId);
        }else{
            prescriptionDOs = prescriptionDao.findByOutpatientId(outpatientId);
        }
        List<WlyyPrescriptionVO> prescriptionVOs = new ArrayList<>();
        if(prescriptionDOs!=null&&prescriptionDOs.size()>0){
            convertToModels(prescriptionDOs,prescriptionVOs,WlyyPrescriptionVO.class);
@ -283,9 +291,9 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        }
        //物流配送新
        List<WlyyPrescriptionExpressageLogDO>  expressageLogDOs = prescriptionExpressageLogDao.queryByOutpatientId(outpatientId);
        List<WlyyPrescriptionExpressageLogDO>  expressageLogDOs = prescriptionExpressageLogDao.queryByOutpatientIdOrderByCreateTimeDesc(outpatientId);
        List<WlyyPrescriptionExpressageLogVO> expressageLogVOs = new ArrayList<>();
        if(expressageLogDOs!=null&&expressageLogVOs.size()>0){
        if(expressageLogDOs!=null&&expressageLogDOs.size()>0){
            rs.put("expressageLogs",convertToModels(expressageLogDOs,expressageLogVOs, WlyyPrescriptionExpressageLogVO.class));
        }else{
            rs.put("expressageLogs",null);
@ -580,12 +588,16 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
     */
    public boolean updatePrescriptionByHisStatu(String admNo,String realOrder,String status)throws Exception {
        String sql = "";
        //status 处方流程状态 ,11 药师审核失败 / 调整中,12  药师审核完成,已完成:100 已完成
        //status 处方流程状态 ,13  开方失败/调整中,20 诊断完成/开方成功/待支付,已完成:100 已完成
        //pay_status`:处方结算状态,0为未结算,1为结算成功,默认为0',
        String outPatientSql="";
        if ("1".equals(status)) {
            sql = "UPDATE base.wlyy_prescription p SET p.`status`='11' WHERE p.adm_no='" + admNo + "' AND p.real_order='" + realOrder + "' ";
            sql = "UPDATE base.wlyy_prescription p SET p.`status`='13' WHERE p.adm_no='" + admNo + "' AND p.real_order='" + realOrder + "' ";
        } else if ("2".equals(status)) {
            sql = "UPDATE base.wlyy_prescription p SET p.`status`='12' WHERE p.adm_no='" + admNo + "' AND p.real_order='" + realOrder + "' ";
            sql = "UPDATE base.wlyy_prescription p SET p.`status`='20' WHERE p.adm_no='" + admNo + "' AND p.real_order='" + realOrder + "' ";
            //变更门诊状态
            outPatientSql="UPDATE base.wlyy_outpatient p SET p.`status`='2' WHERE p.adm_no='" + admNo + "'";
            jdbcTemplate.execute(outPatientSql);
        } else if ("3".equals(status)) {
            sql = "UPDATE base.wlyy_prescription p SET p.`status`='100',p.pay_status='1' WHERE p.adm_no='" + admNo + "' AND p.real_order='" + realOrder + "' ";
        }
@ -932,7 +944,8 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                " o.id AS outpatientId, " +
                " o.icd10_name AS icd10Name, " +
                " p.`status`, " +
                " p.id AS prescriptionId " +
                " p.id AS prescriptionId ," +
                " e.id AS expressageId" +
                " FROM " +
                " wlyy_outpatient o " +
                " JOIN wlyy_prescription p ON p.outpatient_id = o.id " +
@ -961,4 +974,90 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, count);
    }
    public Boolean setMailno(String mailno, String expressageId){
        WlyyPrescriptionExpressageDO expressageDO =  prescriptionExpressageDao.findOne(expressageId);
        expressageDO.setMailno(mailno);
        prescriptionExpressageDao.save(expressageDO);
        return true;
    }
    public void pushListWrite(OutputStream os, List<Map<String,Object>> ls) throws Exception{
        WritableWorkbook wwb = jxl.Workbook.createWorkbook(os);
        try {
            WritableSheet ws;
            ws = wwb.createSheet("sheet",1);
            String[] header = {"订单日期","收货人","诊断结果","配送方式", "订单状态"};
            int k = 0;
            for (String h : header) {
                addCell(ws, 0, k, h);//表名,行,列,header
                k++;
            }
            int i = 1;
            for (Map<String,Object> m : ls) {
                addCell(ws, i, 0, DateUtil.dateToStr((Date)m.get("createTime"),"yyyy-MM-dd HH:mm:ss"),"");
                addCell(ws, i, 1, (String)m.get("name"),"");
                addCell(ws, i, 2, (String)m.get("icd10Name"),"");
                addCell(ws, i, 3, getOneselfPickupFlgString((Integer)m.get("oneselfPickupFlg")),"");
                addCell(ws, i, 4, getStatusName((Integer)m.get("status")),"");
                i++;
            }
            wwb.write();
            wwb.close();
        } catch (IOException e) {
            e.printStackTrace();
            if (wwb != null) wwb.close();
            throw e;
        }
    }
    /**
     *
     * @return
     */
    public String getOneselfPickupFlgString(Integer oneselfPickupFlg){
        if(1 == oneselfPickupFlg){
            return "自取";
        }else if(0 == oneselfPickupFlg){
            return "快递";
        }else{
            return "其他";
        }
    }
    /**
     *
     * @param status
     * @return
     */
    public String getStatusName(Integer status){
        if(31==status){
            return "待配送";
        }else if(32==status){
            return "配送中";
        }else if(100==status){
            return "已完成";
        }else{
            return "其他";
        }
    }
    //添加单元格内容
    public void addCell(WritableSheet ws, int row, int column,  String data) throws WriteException {
        Label label = new Label(column ,row, data);
        ws.addCell(label);
    }
    //添加单元格内容
    public void addCell(WritableSheet ws, int row, int column, String data, String memo) throws WriteException {
        Label label = new Label(column ,row, data);
        if(!org.springframework.util.StringUtils.isEmpty(memo)){
            WritableCellFeatures cellFeatures = new WritableCellFeatures();
            cellFeatures.setComment(memo);
            label.setCellFeatures(cellFeatures);
        }
        ws.addCell(label);
    }
}

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

@ -6,8 +6,10 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.dict.dao.DictHospitalDeptDao;
import com.yihu.jw.dict.service.DictHospitalDeptService;
import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
import com.yihu.jw.entity.hospital.dict.WlyyChargeDictDO;
import com.yihu.jw.entity.hospital.mapping.HospitalDeptMappingDO;
import com.yihu.jw.entity.hospital.mapping.PatientMappingDO;
import com.yihu.jw.hospital.dict.WlyyChargeDictDao;
import com.yihu.jw.hospital.mapping.dao.HospitalDeptMappingDao;
import com.yihu.jw.hospital.mapping.dao.PatientMappingDao;
import com.yihu.jw.hospital.prescription.service.entrance.util.ConvertUtil;
@ -79,6 +81,8 @@ public class EntranceService {
    private DictHospitalDeptDao dictHospitalDeptDao;
    @Autowired
    private PatientMappingDao patientMappingDao;
    @Autowired
    private WlyyChargeDictDao wlyyChargeDictDao;
    /**
     * 获取本地示例返参
@ -362,9 +366,9 @@ public class EntranceService {
        String patientName=null != jsonObjectBody.get("UOM") ? jsonObjectBody.get("UOM").toString() : "";
        PatientMappingDO patientMappingDo=new PatientMappingDO();
        if(StringUtils.isNotBlank(patNo)){
            patientMappingDo=  patientMappingDao.findByMappingCodeAndSource(patNo,"1");
            patNo=StringUtils.isBlank(patientMappingDo.getPatient())?patNo:patientMappingDo.getPatient();
            patientName=StringUtils.isBlank(patientMappingDo.getPatientName())?patientName:patientMappingDo.getPatientName();
            patientMappingDo=  patientMappingDao.findByMappingCodeAndSource(patNo.trim(),"1");
            patNo=null==patientMappingDo?null:patientMappingDo.getPatient();
            patientName=null==patientMappingDo?null:patientMappingDo.getPatientName();
        }
        wlyyPrescriptionVO.setPatientCode(patNo);
@ -406,7 +410,7 @@ public class EntranceService {
     * @return
     * @throws Exception
     */
    public  List<WlyyOutpatientVO> BS30025(String PAT_NO,String admNo,String registerSn,String startTime,String endTime,boolean demoFlag) throws Exception {
    public  List<WlyyOutpatientVO> BS30025(String PAT_NO,String conNo,String admNo,String registerSn,String startTime,String endTime,boolean demoFlag) throws Exception {
        String fid = BS30025;
        String resp = "";
        if (demoFlag) {
@ -422,6 +426,9 @@ public class EntranceService {
            if (StringUtils.isNotBlank(PAT_NO)) {
                sbs.append("<query compy=\"=\" item=\"PAT_NO\" splice=\"and\" value=\"'" + PAT_NO + "'\"/>");
            }
            if (StringUtils.isNotBlank(conNo)) {
                sbs.append("<query compy=\"=\" item=\"CON_NO\" splice=\"and\" value=\"'" + conNo + "'\"/>");
            }
            if (StringUtils.isNotBlank(admNo)) {
                sbs.append("<query compy=\"=\" item=\"ADM_NO\" splice=\"and\" value=\"'" + admNo + "'\"/>");
            }
@ -456,9 +463,9 @@ public class EntranceService {
                String patientName=null != jsonObjectMgsInfo.get("PAT_NAME") ? jsonObjectMgsInfo.get("PAT_NAME").toString() : "";
                PatientMappingDO patientMappingDo=new PatientMappingDO();
                if(StringUtils.isNotBlank(patNo)){
                    patientMappingDo=  patientMappingDao.findByMappingCodeAndSource(patNo,"1");
                    patNo=StringUtils.isBlank(patientMappingDo.getPatient())?patNo:patientMappingDo.getPatient();
                    patientName=StringUtils.isBlank(patientMappingDo.getPatientName())?patientName:patientMappingDo.getPatientName();
                    patientMappingDo=  patientMappingDao.findByMappingCodeAndSource(patNo.trim(),"1");
                    patNo=null==patientMappingDo?null:patientMappingDo.getPatient();
                    patientName=null==patientMappingDo?null:patientMappingDo.getPatientName();
                }
                wlyyOutpatientVO.setPatient(patNo);
                wlyyOutpatientVO.setPatientName(patientName);
@ -811,22 +818,21 @@ public class EntranceService {
     * @return
     * @throws Exception
     */
    public JSONArray MS02013(boolean demoFlag) throws Exception {
    public net.sf.json.JSONArray MS02013(String code) throws Exception {
        String fid=MS02013;
        String resp="";
        if (demoFlag) {
            resp = getJosnFileResullt(fid);
        } else {
            StringBuffer sbs = new StringBuffer();
            //AccessControl :用户、密码、服务id
            sbs.append("<ESBEntry><AccessControl><Fid>" + fid + "</Fid><UserName>"+mqUser+"</UserName><Password>"+mqPwd+"</Password></AccessControl>");
            //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
            sbs.append("<MessageHeader><Fid>" + fid + "</Fid><MsgDate>" + DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS) + "</MsgDate><SourceSysCode>"+sourceSysCode+"</SourceSysCode><TargetSysCode>"+targetSysCode+"</TargetSysCode></MessageHeader>");
           //查询信息拼接
            sbs.append("<MsgInfo><endNum>20000</endNum><Msg/><startNum>1</startNum></MsgInfo></ESBEntry>");
            resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid);
            resp = MqSdkUtil.xml2jsonArrayRootRow(resp);
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><endNum>20000</endNum><Msg/>");
        if(StringUtils.isNotBlank(code)){
            sbs.append("<query compy=\"=\" item=\"code\" splice=\"and\" value=\"'"+code+"'\"/>");
        }
        sbs.append("<startNum>1</startNum></MsgInfo></ESBEntry>");
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return ConvertUtil.convertListEnvelopInBodyRow(resp);
    }
@ -1065,12 +1071,6 @@ public class EntranceService {
                sbs.append("<query compy=\"=\" item=\"times\" splice=\"and\" value=\"'" + conNo + "'\"/>");
            }
             sbs.append("<order item=\"apply_date\" sort=\"desc\"/>");
            //<ESBEntry><AccessControl><Fid>BS25017</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>
            // <MessageHeader><Fid>BS25017</Fid><MsgDate>2019-06-03 13:52:39</MsgDate><SourceSysCode>S47</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>
            // <MsgInfo><endNum>20000</endNum><Msg/>
            // <query compy="=" item="inpatient_no" splice="and" value="'P10728535-0'"/>
            // <query compy="=" item="times" splice="and" value="'62'"/>
            // <order item="apply_date" sort="desc"/><startNum>1</startNum></MsgInfo></ESBEntry>
            sbs.append("<startNum>1</startNum></MsgInfo></ESBEntry>");
            resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid);
            resp = MqSdkUtil.xml2jsonArrayRootRow(resp);
@ -1124,6 +1124,7 @@ public class EntranceService {
    public JSONArray BS20019(String patNo,String  conNo,boolean demoFlag) throws Exception {
        String fid="BS20019";
        String resp="";
        net.sf.json.JSONArray jsonArrayLast=new net.sf.json.JSONArray();
        if (demoFlag) {
            resp = getJosnFileResullt(fid);
        } else {
@ -1131,8 +1132,6 @@ public class EntranceService {
            JSONArray jsonArray= BS20010(patNo,conNo,demoFlag);
            for(Object object:jsonArray){
                net.sf.json.JSONObject jsonObjectBody=(net.sf.json.JSONObject)object;
                jsonObjectBody= (net.sf.json.JSONObject)jsonObjectBody.get("body");
                jsonObjectBody=null==jsonObjectBody?jsonObjectBody:(net.sf.json.JSONObject)jsonObjectBody.get("row");
                if(null!=jsonObjectBody){
                    String applyno=null==jsonObjectBody.get("applyno")?"":jsonObjectBody.get("applyno").toString();
                    if(StringUtils.isNotBlank(applyno)){
@ -1150,15 +1149,15 @@ public class EntranceService {
                        sbs.append("</MsgInfo></ESBEntry>");
                        resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid);
                        resp = MqSdkUtil.xml2jsonArrayRootRow(resp);
                        ConvertUtil.convertListEnvelopInBodyRow(resp);
                        net.sf.json.JSONArray jsonArray1= ConvertUtil.convertListEnvelopInBodyRow(resp);
                        jsonArrayLast.add(jsonArray1);
                    }
                }
                return null;
            }
        }
        return ConvertUtil.convertListEnvelopInBodyRow(resp);
        return jsonArrayLast;
    }
    /**
@ -1172,6 +1171,7 @@ public class EntranceService {
    public JSONArray BS20011(String patNo,String  conNo,boolean demoFlag) throws Exception {
        String fid="BS20011";
        String resp="";
        net.sf.json.JSONArray jsonArrayLast=new net.sf.json.JSONArray();
        if (demoFlag) {
            resp = getJosnFileResullt(fid);
        } else {
@ -1192,20 +1192,18 @@ public class EntranceService {
                        //查询信息拼接
                        sbs.append("<MsgInfo><endNum>20000</endNum><Msg/>");
                        if (StringUtils.isNotBlank(applyno)) {
                            //TODO 是ApplyNo?
                            sbs.append("<query compy=\"=\" item=\"applyno\" splice=\"and\" value=\"'" + applyno + "'\"/>");
                        }
                        sbs.append("<order item=\"ResultTime\" sort=\"desc\"/>");
                        sbs.append("<startNum>1</startNum></MsgInfo></ESBEntry>");
                        resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid);
                        resp = MqSdkUtil.xml2jsonArrayRootRow(resp);
                        ConvertUtil.convertListEnvelopInBodyRow(resp);
                        net.sf.json.JSONArray jsonArray1= ConvertUtil.convertListEnvelopInBodyRow(resp);
                        jsonArrayLast.add(jsonArray1);
                    }
                }
                return null;
            }
        }
        return ConvertUtil.convertListEnvelopInBodyRow(resp);
        return jsonArrayLast;
    }
    /**
@ -1244,4 +1242,66 @@ public class EntranceService {
    }
    public List<WlyyChargeDictDO> BS55010(String windowsNo,String code,String chargeType,boolean demoFlag) throws Exception {
        String fid="BS55010";
        String resp="";
        Map<String,Object> map=new HashMap<>();
        List<WlyyChargeDictDO> wlyyChargeDictDOS=new ArrayList<>();
        if (demoFlag) {
            resp = getJosnFileResullt(fid);
        } else {
            StringBuffer sbs = new StringBuffer();
            //AccessControl :用户、密码、服务id
            sbs.append("<ESBEntry><AccessControl><Fid>" + fid + "</Fid><UserName>"+mqUser+"</UserName><Password>"+mqPwd+"</Password></AccessControl>");
            //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
            sbs.append("<MessageHeader><Fid>" + fid + "</Fid><MsgDate>" + DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS) + "</MsgDate><SourceSysCode>"+sourceSysCode+"</SourceSysCode><TargetSysCode>"+targetSysCode+"</TargetSysCode></MessageHeader>");
            //查询信息拼接
            sbs.append("<MsgInfo><endNum>20000</endNum><Msg/>");
            if (StringUtils.isNotBlank(windowsNo)) {
                sbs.append("<query compy=\"=\" item=\"windows_no\" splice=\"and\" value=\"'"+windowsNo+"'\"/>");
            }
            if (StringUtils.isNotBlank(chargeType)) {
                sbs.append("<query compy=\"=\" item=\"charge_type\" splice=\"and\" value=\"'"+chargeType+"'\"/>");
            }
            if (StringUtils.isNotBlank(code)) {
                sbs.append("<query compy=\"=\" item=\"code\" splice=\"and\" value=\"'"+code+"'\"/>");
            }
            sbs.append("<startNum>1</startNum></MsgInfo></ESBEntry>");
            resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid);
            resp = MqSdkUtil.xml2jsonArrayRootRow(resp);
        }
        net.sf.json.JSONArray jsonArray= ConvertUtil.convertListEnvelopInBodyRow(resp);
        for(Object object:jsonArray){
            net.sf.json.JSONObject jsonObjectBody=(net.sf.json.JSONObject)object;
            String chareName="";
            if(null!=jsonObjectBody){
                String chareCode=null==jsonObjectBody.get("charge_type")?"":jsonObjectBody.get("charge_type").toString();
                String winNo=null==jsonObjectBody.get("windows_no")?"":jsonObjectBody.get("windows_no").toString();
                //WlyyChargeDictDO
                if(!map.containsKey(chareCode+"_"+winNo)){
                    //查询号别
                    net.sf.json.JSONArray chares= MS02013(chareCode);
                    for(Object object1:chares) {
                        net.sf.json.JSONObject jsonObjectBody1 = (net.sf.json.JSONObject) object1;
                        chareName=null==jsonObjectBody1.get("name")?"":jsonObjectBody1.get("name").toString();
                        System.out.println(chareCode+chareName);
                        WlyyChargeDictDO wlyyChargeDictDO=new WlyyChargeDictDO();
                        wlyyChargeDictDO.setChargeType(chareCode);
                        wlyyChargeDictDO.setChargeName(chareName);
                        wlyyChargeDictDO.setDeptTypeCode(winNo);
                        Double free=null==jsonObjectBody.get("req_fee")?0:Double.parseDouble(jsonObjectBody.get("req_fee").toString());
                        wlyyChargeDictDO.setReqFee(free);
                        wlyyChargeDictDO.setCreateTime(new Date());
                        map.put(chareCode+"_"+winNo,chareName);
                        wlyyChargeDictDO=wlyyChargeDictDao.save(wlyyChargeDictDO);
                        wlyyChargeDictDOS.add(wlyyChargeDictDO);
                    }
                }
            }
        }
        return wlyyChargeDictDOS;
    }
}

+ 1 - 5
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/util/SFUtils.java

@ -10,6 +10,7 @@ import org.apache.commons.lang.StringUtils;
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.Component;
import org.springframework.util.CollectionUtils;
import sun.misc.BASE64Encoder;
@ -35,11 +36,6 @@ public class SFUtils {
    @Autowired
    private PrescriptionInfoDao prescriptionInfoDao;
    /**
     * 生成接口校验码
     * 1.先把XML报文与checkword前后连接。

+ 20 - 0
business/base-service/src/main/java/com/yihu/jw/utils/EntityUtils.java

@ -0,0 +1,20 @@
package com.yihu.jw.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
public class EntityUtils {
    protected static ObjectMapper objectMapper = new ObjectMapper();
    public static <T> T jsonToEntity(String json,Class<T> target){
        T entity = null;
        try {
            entity  = objectMapper.readValue(json,target);
        } catch (Exception e) {
           throw new RuntimeException("Json字符串转换成【"+target.getName()+"】实体类异常:" + e.getMessage());
        }
        return entity;
    }
}

+ 2 - 0
business/base-service/src/mqConfig/esbmq-config.xml

@ -55,6 +55,8 @@
				<BS20018_1>EwellQ.S60.BS20018.GET</BS20018_1>
				<BS20011_0>EwellQ.S60.BS20011.PUT</BS20011_0>
				<BS20011_1>EwellQ.S60.BS20011.GET</BS20011_1>
				<BS55010_0>EwellQ.S60.BS55010.PUT</BS55010_0>
				<BS55010_1>EwellQ.S60.BS55010.GET</BS55010_1>
			</QUEUES>
		</QMGR.S60>
	</MQCONFIG>

+ 1 - 1
business/base-service/src/mqConfig/mqdata/BS10111.json

@ -1 +1 @@
{"code":"1","MsgInfo":[{"resquest":{"@RESULT":"0","@MSG":"完成","@serial_no":"47147412"}}]}
{"code":"1","MsgInfo":[{"resquest":{"@RESULT":"0","@MSG":"完成","@serial_no":"47310714","@times":"66"}}]}

+ 16 - 8
business/base-service/src/mqConfig/mqdata/BS16017.json

@ -48,7 +48,8 @@
				"diag_five": [],
				"real_order": "401934082",
				"drug_win": "1",
				"frequency": "无组"
				"frequency": "无组",
				"SETTLE_FLAG": "1"
			}
		}
	},
@ -100,7 +101,8 @@
					"diag_five": [],
					"real_order": "401934082",
					"drug_win": "1",
					"frequency": "无组"
					"frequency": "无组",
					"SETTLE_FLAG": "1"
				}
			}
		},
@ -152,7 +154,8 @@
					"diag_five": [],
					"real_order": "401934081",
					"drug_win": "1",
					"frequency": "无组"
					"frequency": "无组",
					"SETTLE_FLAG": "1"
				}
			}
		},
@ -204,7 +207,8 @@
					"diag_five": [],
					"real_order": "401934082",
					"drug_win": "1",
					"frequency": "无组"
					"frequency": "无组",
					"SETTLE_FLAG": "1"
				}
			}
		},
@ -256,7 +260,8 @@
					"diag_five": [],
					"real_order": "401934082",
					"drug_win": "1",
					"frequency": "无组"
					"frequency": "无组",
					"SETTLE_FLAG": "1"
				}
			}
		},
@ -308,7 +313,8 @@
					"diag_five": [],
					"real_order": "401934082",
					"drug_win": "1",
					"frequency": "无组"
					"frequency": "无组",
					"SETTLE_FLAG": "1"
				}
			}
		},
@ -360,7 +366,8 @@
					"diag_five": [],
					"real_order": "401934082",
					"drug_win": "1",
					"frequency": "无组"
					"frequency": "无组",
					"SETTLE_FLAG": "1"
				}
			}
		},
@ -412,7 +419,8 @@
					"diag_five": [],
					"real_order": "401934082",
					"drug_win": "1",
					"frequency": "无组"
					"frequency": "无组",
					"SETTLE_FLAG": "1"
				}
			}
		}]

+ 14 - 7
business/base-service/src/mqConfig/mqdata/BS16017_03.json

@ -48,7 +48,8 @@
				"diag_five": [],
				"real_order": "401934082",
				"drug_win": "1",
				"frequency": "无组"
				"frequency": "无组",
				"SETTLE_FLAG": "1"
			}
		}
	},
@ -100,7 +101,8 @@
				"diag_five": [],
				"real_order": "401934082",
				"drug_win": "1",
				"frequency": "无组"
				"frequency": "无组",
				"SETTLE_FLAG": "1"
			}
		}
	},
@ -152,7 +154,8 @@
				"diag_five": [],
				"real_order": "401934082",
				"drug_win": "1",
				"frequency": "无组"
				"frequency": "无组",
				"SETTLE_FLAG": "1"
			}
		}
	},
@ -204,7 +207,8 @@
				"diag_five": [],
				"real_order": "401934082",
				"drug_win": "1",
				"frequency": "无组"
				"frequency": "无组",
				"SETTLE_FLAG": "1"
			}
		}
	},
@ -256,7 +260,8 @@
				"diag_five": [],
				"real_order": "401934082",
				"drug_win": "1",
				"frequency": "无组"
				"frequency": "无组",
				"SETTLE_FLAG": "1"
			}
		}
	},
@ -308,7 +313,8 @@
				"diag_five": [],
				"real_order": "401934082",
				"drug_win": "1",
				"frequency": "无组"
				"frequency": "无组",
				"SETTLE_FLAG": "1"
			}
		}
	},
@ -360,7 +366,8 @@
				"diag_five": [],
				"real_order": "401934082",
				"drug_win": "1",
				"frequency": "无组"
				"frequency": "无组",
				"SETTLE_FLAG": "1"
			}
		}
	}]

File diff suppressed because it is too large
+ 1 - 0
business/base-service/src/mqConfig/mqdata/BS20011.json


File diff suppressed because it is too large
+ 1 - 0
business/base-service/src/mqConfig/mqdata/BS20019.json


File diff suppressed because it is too large
+ 1 - 0
business/base-service/src/mqConfig/mqdata/BS25017.json


File diff suppressed because it is too large
+ 1 - 0
business/base-service/src/mqConfig/mqdata/BS55010.json


+ 1 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/base/dict/DictHospitalDeptDO.java

@ -44,7 +44,6 @@ public class DictHospitalDeptDO extends IntegerIdentityEntity {
    /**
     * 6总部7金榜8夏禾
     */
    @Autowired
    private String deptTypeCode;
@ -80,6 +79,7 @@ public class DictHospitalDeptDO extends IntegerIdentityEntity {
        this.createTime = createTime;
    }
    @Column(name = "dept_type_code")
    public String getDeptTypeCode() {
        return deptTypeCode;
    }

+ 59 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/base/patient/BasePatientDO.java

@ -13,7 +13,6 @@ import java.util.Date;
 * 居民信息(居民就是患者)实体
 *
 * @author Administrator on  2018年09月05日
 *
 */
@Entity
@Table(name = "base_patient")
@ -181,6 +180,18 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
     */
    private String openid;
    /**
     * i健康微信编号
     */
    private String ihealthOpenid;
    /**
     * i健康微信编号添加时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date ihealthOpenidTime;
    /**
     * 用户状态:1正常,0禁用,-1恶意注册,2审核中
     */
@ -252,6 +263,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getSaasId() {
        return saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
@ -260,6 +272,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getIdcard() {
        return idcard;
    }
    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }
@ -268,6 +281,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
@ -276,6 +290,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getSalt() {
        return salt;
    }
    public void setSalt(String salt) {
        this.salt = salt;
    }
@ -284,6 +299,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
@ -292,6 +308,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
@ -300,6 +317,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public Integer getSex() {
        return sex;
    }
    public void setSex(Integer sex) {
        this.sex = sex;
    }
@ -308,6 +326,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
@ -316,6 +335,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getPhoto() {
        return photo;
    }
    public void setPhoto(String photo) {
        this.photo = photo;
    }
@ -324,6 +344,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getProvinceCode() {
        return provinceCode;
    }
    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }
@ -332,6 +353,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getProvinceName() {
        return provinceName;
    }
    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }
@ -340,6 +362,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getCityCode() {
        return cityCode;
    }
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
@ -348,6 +371,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
@ -356,6 +380,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getTownCode() {
        return townCode;
    }
    public void setTownCode(String townCode) {
        this.townCode = townCode;
    }
@ -364,6 +389,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getTownName() {
        return townName;
    }
    public void setTownName(String townName) {
        this.townName = townName;
    }
@ -372,6 +398,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getStreetCode() {
        return streetCode;
    }
    public void setStreetCode(String streetCode) {
        this.streetCode = streetCode;
    }
@ -380,6 +407,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getStreetName() {
        return streetName;
    }
    public void setStreetName(String streetName) {
        this.streetName = streetName;
    }
@ -415,6 +443,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getPoints() {
        return points;
    }
    public void setPoints(String points) {
        this.points = points;
    }
@ -423,6 +452,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getRecordAmount() {
        return recordAmount;
    }
    public void setRecordAmount(String recordAmount) {
        this.recordAmount = recordAmount;
    }
@ -431,6 +461,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getOpenid() {
        return openid;
    }
    public void setOpenid(String openid) {
        this.openid = openid;
    }
@ -439,6 +470,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getPatientStatus() {
        return patientStatus;
    }
    public void setPatientStatus(String patientStatus) {
        this.patientStatus = patientStatus;
    }
@ -447,6 +479,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getMobileRemarks() {
        return mobileRemarks;
    }
    public void setMobileRemarks(String mobileRemarks) {
        this.mobileRemarks = mobileRemarks;
    }
@ -455,6 +488,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public Date getOpenidTime() {
        return openidTime;
    }
    public void setOpenidTime(Date openidTime) {
        this.openidTime = openidTime;
    }
@ -463,6 +497,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getPrincipalCode() {
        return principalCode;
    }
    public void setPrincipalCode(String principalCode) {
        this.principalCode = principalCode;
    }
@ -471,6 +506,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public Integer getStandardStatus() {
        return standardStatus;
    }
    public void setStandardStatus(Integer standardStatus) {
        this.standardStatus = standardStatus;
    }
@ -479,6 +515,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getUnionid() {
        return unionid;
    }
    public void setUnionid(String unionid) {
        this.unionid = unionid;
    }
@ -487,6 +524,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getDel() {
        return del;
    }
    public void setDel(String del) {
        this.del = del;
    }
@ -494,6 +532,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getRemark() {
        return remark;
    }
    @Column(name = "remark")
    public void setRemark(String remark) {
        this.remark = remark;
@ -555,6 +594,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public void setLiveStreetCode(String liveStreetCode) {
        this.liveStreetCode = liveStreetCode;
    }
    @Column(name = "live_street_name")
    public String getLiveStreetName() {
        return liveStreetName;
@ -603,4 +643,22 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public void setLoginDate(Date loginDate) {
        this.loginDate = loginDate;
    }
    @Column(name = "ihealth_openid")
    public String getIhealthOpenid() {
        return ihealthOpenid;
    }
    public void setIhealthOpenid(String ihealthOpenid) {
        this.ihealthOpenid = ihealthOpenid;
    }
    @Column(name = "ihealth_openid_time")
    public Date getIhealthOpenidTime() {
        return ihealthOpenidTime;
    }
    public void setIhealthOpenidTime(Date ihealthOpenidTime) {
        this.ihealthOpenidTime = ihealthOpenidTime;
    }
}

+ 66 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/dict/WlyyChargeDictDO.java

@ -0,0 +1,66 @@
package com.yihu.jw.entity.hospital.dict;
import com.yihu.jw.entity.IntegerIdentityEntity;
import com.yihu.jw.entity.UuidIdentityEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by zdm on 2019/5/28.
 */
@Entity
@Table(name = "wlyy_charge_dict")
public class WlyyChargeDictDO extends UuidIdentityEntity {
    /**号别code*/
    private String chargeType;
    /**号别名称*/
    private String chargeName;
    /**诊查费,单位元*/
    private double reqFee;
    /**创建时间*/
    private Date createTime;
    /**6总部7金榜8夏禾*/
    private String deptTypeCode;
    public String getChargeType() {
        return chargeType;
    }
    public void setChargeType(String chargeType) {
        this.chargeType = chargeType;
    }
    public String getChargeName() {
        return chargeName;
    }
    public void setChargeName(String chargeName) {
        this.chargeName = chargeName;
    }
    public double getReqFee() {
        return reqFee;
    }
    public void setReqFee(double reqFee) {
        this.reqFee = reqFee;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getDeptTypeCode() {
        return deptTypeCode;
    }
    public void setDeptTypeCode(String deptTypeCode) {
        this.deptTypeCode = deptTypeCode;
    }
}

+ 192 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/prescription/WlyyPatientExpressageAddrDO.java

@ -0,0 +1,192 @@
package com.yihu.jw.entity.hospital.prescription;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
* 居民收获地址实体
*
* @author Administrator on  2019年06月12日
*
*/
@Entity
@Table(name = "wlyy_patient_expressage_addr")
public class WlyyPatientExpressageAddrDO extends UuidIdentityEntityWithOperator {
    /**
	 * 居民标识
	 */
	private String patient;
    /**
	 * 省编码
	 */
	private String provinceCode;
    /**
	 * 省名称
	 */
	private String provinceName;
    /**
	 * 市编码
	 */
	private String cityCode;
    /**
	 * 城市名称
	 */
	private String cityName;
    /**
	 * 区县编码
	 */
	private String townCode;
    /**
	 * 区县名称
	 */
	private String townName;
    /**
	 * 街道编码
	 */
	private String streetCode;
    /**
	 * 街道名称
	 */
	private String streetName;
    /**
	 * 居住居委会代码
	 */
	private String committeeCode;
    /**
	 * 居住居委会名称
	 */
	private String committeeName;
    /**
	 * 具体详细地址
	 */
	private String address;
    /**
	 * 作废标识,1正常,0作废
	 */
	private String del;
	@Column(name = "patient")
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
	@Column(name = "province_code")
    public String getProvinceCode() {
        return provinceCode;
    }
    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }
	@Column(name = "province_name")
    public String getProvinceName() {
        return provinceName;
    }
    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }
	@Column(name = "city_code")
    public String getCityCode() {
        return cityCode;
    }
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
	@Column(name = "city_name")
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
	@Column(name = "town_code")
    public String getTownCode() {
        return townCode;
    }
    public void setTownCode(String townCode) {
        this.townCode = townCode;
    }
	@Column(name = "town_name")
    public String getTownName() {
        return townName;
    }
    public void setTownName(String townName) {
        this.townName = townName;
    }
	@Column(name = "street_code")
    public String getStreetCode() {
        return streetCode;
    }
    public void setStreetCode(String streetCode) {
        this.streetCode = streetCode;
    }
	@Column(name = "street_name")
    public String getStreetName() {
        return streetName;
    }
    public void setStreetName(String streetName) {
        this.streetName = streetName;
    }
	@Column(name = "committee_code")
    public String getCommitteeCode() {
        return committeeCode;
    }
    public void setCommitteeCode(String committeeCode) {
        this.committeeCode = committeeCode;
    }
	@Column(name = "committee_name")
    public String getCommitteeName() {
        return committeeName;
    }
    public void setCommitteeName(String committeeName) {
        this.committeeName = committeeName;
    }
	@Column(name = "address")
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
	@Column(name = "del")
    public String getDel() {
        return del;
    }
    public void setDel(String del) {
        this.del = del;
    }
}

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

@ -82,6 +82,11 @@ public class WlyyPrescriptionInfoDO extends UuidIdentityEntity {
     */
    private String groupNo;
    /**
     * 规格
     */
    private String specification;
    /**
     * 1可用 0删除
     */
@ -194,6 +199,15 @@ public class WlyyPrescriptionInfoDO extends UuidIdentityEntity {
        this.groupNo = groupNo;
    }
    @Column(name = "specification")
    public String getSpecification() {
        return specification;
    }
    public void setSpecification(String specification) {
        this.specification = specification;
    }
    @Column(name = "del")
    public Integer getDel() {
        return del;

+ 95 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/iot/device/IotDeviceBaiyiDO.java

@ -0,0 +1,95 @@
package com.yihu.jw.entity.iot.device;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
/**
 * @author zdm on 2019/6/11.
 */
@Entity
@Table(name = "iot_device_baiyi")
public class IotDeviceBaiyiDO extends UuidIdentityEntityWithOperator implements Serializable {
    /** 15位设备唯一序号*/
    @Column(name = "imei")
    private String imei;
    /** 发生时间*/
    @Column(name = "time_begin")
    private String timeBegin;
    /**心率/舒张压*/
    @Column(name = "value1")
    private Integer value1;
    /** 心率阈值上限/舒张压报警下限*/
    @Column(name = "value2")
    private Integer value2;
    /** 心率阈值下限/收缩压*/
    @Column(name = "value3")
    private Integer value3;
    /** 测量数据种类名称/收缩压报警上限*/
    @Column(name = "value4")
    private Integer value4;
    /** 类型:1血压、5心率*/
    @Column(name = "type")
    private Integer type;
    public String getImei() {
        return imei;
    }
    public void setImei(String imei) {
        this.imei = imei;
    }
    public String getTimeBegin() {
        return timeBegin;
    }
    public void setTimeBegin(String timeBegin) {
        this.timeBegin = timeBegin;
    }
    public Integer getValue1() {
        return value1;
    }
    public void setValue1(Integer value1) {
        this.value1 = value1;
    }
    public Integer getValue2() {
        return value2;
    }
    public void setValue2(Integer value2) {
        this.value2 = value2;
    }
    public Integer getValue3() {
        return value3;
    }
    public void setValue3(Integer value3) {
        this.value3 = value3;
    }
    public Integer getValue4() {
        return value4;
    }
    public void setValue4(Integer value4) {
        this.value4 = value4;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
}

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

@ -109,6 +109,16 @@ public class BaseHospitalRequestMapping {
         * 获取订单列表
         */
        public static final String findExpressageList="/findExpressageList";
        /**
         * 设置订单
         */
        public static final String setMailno="/setMailno";
        /**
         * 订单导出
         */
        public static final String pushListWrite="/pushListWrite";
        //=================end=======================================
        /**
@ -207,4 +217,11 @@ public class BaseHospitalRequestMapping {
        
    }
    /**
     * 居民收获地址
     */
    public static class WlyyPatientExpressageAddr extends Basic {
        public static final String PREFIX  = "/expressageAddr";
    }
}

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

@ -0,0 +1,196 @@
package com.yihu.jw.restmodel.hospital.prescription;
import com.yihu.jw.restmodel.UuidIdentityVOWithOperator;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
/**
 * 
 * 居民收获地址vo
 * 
 * @version 
 * <pre>
 * Author	Version		Date		Changes
 * Administrator 	1.0  2019年06月12日 Created
 *
 * </pre>
 * @since 1.
 */
@ApiModel(value = "WlyyPatientExpressageAddrVO", description = "居民收获地址")
public class WlyyPatientExpressageAddrVO extends UuidIdentityVOWithOperator {
    /**
	 * 居民标识
	 */
	@ApiModelProperty(value = "居民标识", example = "模块1")
    private String patient;
    /**
	 * 省编码
	 */
	@ApiModelProperty(value = "省编码", example = "模块1")
    private String provinceCode;
    /**
	 * 省名称
	 */
	@ApiModelProperty(value = "省名称", example = "模块1")
    private String provinceName;
    /**
	 * 市编码
	 */
	@ApiModelProperty(value = "市编码", example = "模块1")
    private String cityCode;
    /**
	 * 城市名称
	 */
	@ApiModelProperty(value = "城市名称", example = "模块1")
    private String cityName;
    /**
	 * 区县编码
	 */
	@ApiModelProperty(value = "区县编码", example = "模块1")
    private String townCode;
    /**
	 * 区县名称
	 */
	@ApiModelProperty(value = "区县名称", example = "模块1")
    private String townName;
    /**
	 * 街道编码
	 */
	@ApiModelProperty(value = "街道编码", example = "模块1")
    private String streetCode;
    /**
	 * 街道名称
	 */
	@ApiModelProperty(value = "街道名称", example = "模块1")
    private String streetName;
    /**
	 * 居住居委会代码
	 */
	@ApiModelProperty(value = "居住居委会代码", example = "模块1")
    private String committeeCode;
    /**
	 * 居住居委会名称
	 */
	@ApiModelProperty(value = "居住居委会名称", example = "模块1")
    private String committeeName;
    /**
	 * 具体详细地址
	 */
	@ApiModelProperty(value = "具体详细地址", example = "模块1")
    private String address;
    /**
	 * 作废标识,1正常,0作废
	 */
	@ApiModelProperty(value = "作废标识,1正常,0作废", example = "模块1")
    private String del;
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    public String getProvinceCode() {
        return provinceCode;
    }
    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }
    public String getProvinceName() {
        return provinceName;
    }
    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }
    public String getCityCode() {
        return cityCode;
    }
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
    public String getTownCode() {
        return townCode;
    }
    public void setTownCode(String townCode) {
        this.townCode = townCode;
    }
    public String getTownName() {
        return townName;
    }
    public void setTownName(String townName) {
        this.townName = townName;
    }
    public String getStreetCode() {
        return streetCode;
    }
    public void setStreetCode(String streetCode) {
        this.streetCode = streetCode;
    }
    public String getStreetName() {
        return streetName;
    }
    public void setStreetName(String streetName) {
        this.streetName = streetName;
    }
    public String getCommitteeCode() {
        return committeeCode;
    }
    public void setCommitteeCode(String committeeCode) {
        this.committeeCode = committeeCode;
    }
    public String getCommitteeName() {
        return committeeName;
    }
    public void setCommitteeName(String committeeName) {
        this.committeeName = committeeName;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getDel() {
        return del;
    }
    public void setDel(String del) {
        this.del = del;
    }
}

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

@ -99,6 +99,9 @@ public class WlyyPrescriptionInfoVO extends UuidIdentityVOWithOperator {
     */
    @ApiModelProperty(value = "库房号", example = "模块1")
    private String groupNo;
    @ApiModelProperty(value = "规格", example = "模块1")
    private String specification;
    /**
     * 1可用 0删除
     */
@ -205,4 +208,12 @@ public class WlyyPrescriptionInfoVO extends UuidIdentityVOWithOperator {
    public void setGroupNo(String groupNo) {
        this.groupNo = groupNo;
    }
    public String getSpecification() {
        return specification;
    }
    public void setSpecification(String specification) {
        this.specification = specification;
    }
}

+ 184 - 60
server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/jdbc/WlyyUserDetailsService.java

@ -1,10 +1,14 @@
package com.yihu.jw.security.core.userdetails.jdbc;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.security.core.userdetails.SaltUser;
import com.yihu.jw.security.model.WlyyUserDetails;
import com.yihu.jw.security.model.WlyyUserSimple;
import com.yihu.jw.util.http.HttpClientKit;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
@ -16,6 +20,8 @@ import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.ClientDetails;
import org.springframework.security.oauth2.provider.ClientDetailsService;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@ -36,6 +42,13 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
    private static final String DEFAULT_DOCTOR_DETAILS_STATEMENT = "SELECT * FROM base_doctor d WHERE d.mobile = ? OR d.idcard = ?";
    private static final String DEFAULT_PATIENT_DETAILS_STATEMENT = "SELECT * FROM base_patient p WHERE p.mobile = ? OR p.idcard = ?";
    private static final String DEFAULT_PATIENT_DETAILS_ID_STATEMENT = "SELECT * FROM base_patient p WHERE p.id = ? ";
    private static final String DEFAULT_PATIENT_INSERT_STATEMENT =
            "INSERT into base_patient (`id`,`ihealth_openid`,`ihealth_openid_time`,`idcard`,`password`,`salt`,`name`,`birthday`,`sex`,`mobile`," +
                    "`province_code`,`province_name`,`city_code`,`city_name`,`town_code`,`town_name`,`street_code`,`street_name`,`address`," +
                    "`del`,`locked`,`enabled`,`login_failure_count`,`login_date`) " +
                    " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    private static final String BespeakRegist = "bespeakRegist:";
@ -48,6 +61,13 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
    @Value("${user.tryLoginTimes}")
    private Integer tryLoginTimes;//失败重试次数
    @Value("${iHealth.user-info-uri}")
    private String iHealthUserInfoUrl;//失败重试次数
    @Autowired
    private ClientDetailsService clientDetailsService;
    public WlyyUserDetailsService(DataSource dataSource) {
        this.setDataSource(dataSource);
    }
@ -56,6 +76,7 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
     * 用户登录判读接口
     * 判断loginType查找用户信息
     * 用户类型 1或默认为user,2:医生登录,3:患者登录
     *
     * @param username
     * @return
     * @throws UsernameNotFoundException
@ -80,61 +101,128 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
    }
    public void unlocked(String username){
    public void unlocked(String username) {
        String loginType = getLogintype();
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
        if (StringUtils.isBlank(loginType) || "1".equals(loginType)) { //1或默认查找user表,为平台管理员账号
            //解除锁定
            this.getJdbcTemplate().update("update base_user u set login_failure_count = 0, u.locked = 0 where u.username = ? or u.mobile = ? or u.idcard = ?", username, username, username);
        }else if("2".equals(loginType)){//2.为医生账号
        } else if ("2".equals(loginType)) {//2.为医生账号
            //解除锁定
            this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = 0, d.locked = 0 where d.mobile = ? or d.idcard = ?",username, username);
        }else if("3".equals(loginType)){ //3.患者账号
            this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = 0, d.locked = 0 where d.mobile = ? or d.idcard = ?", username, username);
        } else if ("3".equals(loginType)) { //3.患者账号
            //解除锁定
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 5, p.locked = 0 where p.mobile = ? or p.idcard = ?",username, username);
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 5, p.locked = 0 where p.mobile = ? or p.idcard = ?", username, username);
        } //...
    }
    /**
     * 用户登录判读接口
     * 判断loginType查找用户信息
     * 用户类型 1或默认为user,2:医生登录,3:患者登录
     * 用户类型 1或默认为user,2:医生登录,3:患者登录,4:i健康系统-患者登录(i健康患者可以不注册直接登录互联网系统,首次使用,根据i健康居民code去i健康查询居民信息,然后保存到base.base_patient)
     *
     * @param username
     * @return
     */
    public  List<WlyyUserDetails> getWlyyUserDetails(String username){
    public List<WlyyUserDetails> getWlyyUserDetails(String username) {
        String loginType = getLogintype();
        List<WlyyUserDetails> users = null;
        //1或默认查找user表,为平台管理员账号
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){
        if (StringUtils.isBlank(loginType) || "1".equals(loginType)) {
            users = this.getJdbcTemplate().query(DEFAULT_USER_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserDetails.class), username, username, username);
            //2.为医生登录账号
        }else if("2".equals(loginType)){
        } else if ("2".equals(loginType)) {
            users = this.getJdbcTemplate().query(DEFAULT_DOCTOR_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserDetails.class), username, username);
            //3.患者登录
        }else if("3".equals(loginType)){
        } else if ("3".equals(loginType)) {
            //查找是否存在预注册 用户
            String userName = redisTemplate.opsForValue().get(BespeakRegist + username);
            if(StringUtils.isNotBlank(userName)){
            if (StringUtils.isNotBlank(userName)) {
                //保存到数据库
                this.getJdbcTemplate().execute("update base_patient set del=1 where mobile='"+username+"'");
                this.getJdbcTemplate().execute("update base_patient set del=1 where mobile='" + username + "'");
                redisTemplate.opsForValue().get(BespeakRegist + username);
                redisTemplate.delete(BespeakRegist+username);
                redisTemplate.delete(BespeakRegist + username);
            }
            users = this.getJdbcTemplate().query(DEFAULT_PATIENT_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserDetails.class), username, username);
        }//..
            // 去i健康查询用户
        }else if("4".equals(loginType)){
            users = this.getJdbcTemplate().query(DEFAULT_PATIENT_DETAILS_ID_STATEMENT, new BeanPropertyRowMapper(WlyyUserDetails.class), username);
            if ((null == users || users.size() == 0) && "4".equals(loginType)) {
                List<NameValuePair> params = new ArrayList<>();
                params.add(new BasicNameValuePair("clientId", getClientId()));
                ClientDetails clientDetails = clientDetailsService.loadClientByClientId(getClientId());
                params.add(new BasicNameValuePair("clientSecret", clientDetails.getClientSecret()));
                params.add(new BasicNameValuePair("code", username));
                params.add(new BasicNameValuePair("openid", getOpenid()));
                String res = HttpClientKit.post(iHealthUserInfoUrl, params, "UTF-8");
                JSONObject patient = JSONObject.parseObject(res);
                if(patient.getInteger("status") == -1){
                    logger.error("去i健康查询用户信息失败:" + patient.getString("error"));
                    return users;
                }
                try {
                    this.getJdbcTemplate().update(DEFAULT_PATIENT_INSERT_STATEMENT,
                            new Object[]{patient.getString("code"),
                                    patient.getString("openid"),
                                    new Date(),
                                    patient.getString("idcard"),
                                    patient.getString("password"),
                                    patient.getString("salt"),
                                    patient.getString("name"),
                                    patient.getDate("birthday"),
                                    patient.getInteger("sex"),
                                    patient.getString("mobile"),
                                    patient.getString("province"),
                                    patient.getString("provinceName"),
                                    patient.getString("city"),
                                    patient.getString("cityName"),
                                    patient.getString("town"),
                                    patient.getString("townName"),
                                    patient.getString("street"),
                                    patient.getString("streetName"),
                                    patient.getString("address"),
                                    1,
                                    0,
                                    1,
                                    0,
                                    new Date()
                            }
                    );
                }catch (Exception e){
                    e.printStackTrace();
                }
                WlyyUserDetails user = new WlyyUserDetails();
                user.setName(patient.getString("name"));
                user.setPassword(patient.getString("password"));
                if(patient.getInteger("sex") == 1){
                    user.setGender(WlyyUserDetails.Gender.male);
                }else if(patient.getInteger("sex") == 2){
                    user.setGender(WlyyUserDetails.Gender.female);
                }
                user.setId(username);
                user.setIdcard(patient.getString("idcard"));
                user.setMobile(patient.getString("mobile"));
                user.setEnabled(true);
                user.setLocked(false);
                user.setLockedDate(null);
                users.add(user);
            }
        }
        return users;
    }
    /**
     * 设置用户登录时间,返回登录信息
     * 判断loginType,用户类型 1或默认为user,2:医生登录,3:患者登录
     *
     * @param username
     * @return
     * @throws UsernameNotFoundException
     */
    public WlyyUserSimple authSuccess (String username) throws UsernameNotFoundException {
    public WlyyUserSimple authSuccess(String username) throws UsernameNotFoundException {
        //加载用户简略信息
        List<WlyyUserSimple> users = getWlyyUserSimple(username);
        if (users == null || users.size() == 0) {
@ -143,16 +231,16 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
        return users.get(0);
    }
    public String authFailure () throws UsernameNotFoundException {
    public String authFailure() throws UsernameNotFoundException {
        //获取失败次数
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String username = request.getParameter("username");
        Map<String,Object> map = getLoginFailureCount(username);
        Integer loginFailureCount = Integer.valueOf(map.get("login_failure_count").toString());
        Map<String, Object> map = getLoginFailureCount(username);
        Integer loginFailureCount = null == map.get("login_failure_count") ? 0 : Integer.valueOf(map.get("login_failure_count").toString());
        Object timeObj = map.get("last_login_failure_time");
        if(timeObj == null){
        if (timeObj == null) {
            loginFailureCount = 0;
        }else{
        } else {
            Timestamp timestamp = (Timestamp) timeObj;
            //判断是否得重置登陆次数
            Date date = new Date(timestamp.getTime());
@ -161,49 +249,50 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
                loginFailureCount = 0;
            }
        }
        loginFailureCount ++;
        loginFailureCount++;
        if (loginFailureCount >= tryLoginTimes) {
            locked(username);
            return "账号已被锁定,请"+autoUnlockTime+"分钟后重试!";
            return "账号已被锁定,请" + autoUnlockTime + "分钟后重试!";
        } else {
            addFailureCount(username,loginFailureCount);
            addFailureCount(username, loginFailureCount);
            return "账号或密码错误,还可以再试" + (tryLoginTimes - loginFailureCount) + "次!";
        }
    }
    /**
     * 获取失败次数 返回 map  key1: login_failure_count   失败次数
     *                       key2: last_login_failure_time 上次登录失败时间 /可能为null
     * key2: last_login_failure_time 上次登录失败时间 /可能为null
     *
     * @param username
     * @return
     */
    public Map<String, Object> getLoginFailureCount(String username){
    public Map<String, Object> getLoginFailureCount(String username) {
        Map<String, Object> result = new HashMap<>();
        String loginType = getLogintype();
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
        if (StringUtils.isBlank(loginType) || "1".equals(loginType)) { //1或默认查找user表,为平台管理员账号
            result = this.getJdbcTemplate().queryForMap("select u.login_failure_count,u.last_login_failure_time from base_user u where u.username = ? or u.mobile = ? or u.idcard = ?", username, username, username);
        }else if("2".equals(loginType)){//2.为医生账号
        } else if ("2".equals(loginType)) {//2.为医生账号
            result = this.getJdbcTemplate().queryForMap("select d.login_failure_count,d.last_login_failure_time from base_doctor d where d.mobile = ? or d.idcard = ?", username, username);
        }else if("3".equals(loginType)){ //3.患者账号
            result = this.getJdbcTemplate().queryForMap("select p.login_failure_count,p.last_login_failure_time from base_patient p where p.mobile = ? or p.idcard = ?",username, username);
        } else if ("3".equals(loginType)) { //3.患者账号
            result = this.getJdbcTemplate().queryForMap("select p.login_failure_count,p.last_login_failure_time from base_patient p where p.mobile = ? or p.idcard = ?", username, username);
        }
        return result;
    }
    /**
     * 锁定账号
     *
     * @param username
     */
    public void locked(String username){
    public void locked(String username) {
        String loginType = getLogintype();
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
        if (StringUtils.isBlank(loginType) || "1".equals(loginType)) { //1或默认查找user表,为平台管理员账号
            //账号锁定
            this.getJdbcTemplate().update("update base_user u set u.login_failure_count = 5, u.locked = 1, u.locked_date = ? where u.username = ? or u.mobile = ? or u.idcard = ?", new Date(), username, username, username);
        }else if("2".equals(loginType)){//2.为医生账号
        } else if ("2".equals(loginType)) {//2.为医生账号
            //账号锁定
            this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = 5, d.locked = 1, d.locked_date = ? where d.mobile = ? or d.idcard = ?", new Date(), username, username);
        }else if("3".equals(loginType)){ //3.患者账号
        } else if ("3".equals(loginType)) { //3.患者账号
            //账号锁定
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 5, p.locked = 1, p.locked_date = ?  where p.mobile = ? or p.idcard = ?", new Date(), username, username);
        } //...
@ -211,20 +300,21 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
    /**
     * 更新登录失败次数
     *
     * @param username
     * @param loginFailureCount
     */
    public void addFailureCount(String username,Integer loginFailureCount){
    public void addFailureCount(String username, Integer loginFailureCount) {
        String loginType = getLogintype();
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
        if (StringUtils.isBlank(loginType) || "1".equals(loginType)) { //1或默认查找user表,为平台管理员账号
            //更新失败次数
            this.getJdbcTemplate().update("update base_user u set u.login_failure_count = ? ,u.last_login_failure_time = ? where u.username = ? or u.mobile = ? or u.idcard = ?", loginFailureCount,new Date(), username, username, username);
        }else if("2".equals(loginType)){//2.为医生账号
            this.getJdbcTemplate().update("update base_user u set u.login_failure_count = ? ,u.last_login_failure_time = ? where u.username = ? or u.mobile = ? or u.idcard = ?", loginFailureCount, new Date(), username, username, username);
        } else if ("2".equals(loginType)) {//2.为医生账号
            //更新失败次数
            this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = ?, d.last_login_failure_time = ?  where d.mobile = ? or d.idcard = ?", loginFailureCount,new Date(), username, username);
        }else if("3".equals(loginType)){ //3.患者账号
            this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = ?, d.last_login_failure_time = ?  where d.mobile = ? or d.idcard = ?", loginFailureCount, new Date(), username, username);
        } else if ("3".equals(loginType)) { //3.患者账号
            //更新失败次数
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = ? ,p.last_login_failure_time = ? where p.mobile = ? or p.idcard = ?", loginFailureCount,new Date(),username, username);
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = ? ,p.last_login_failure_time = ? where p.mobile = ? or p.idcard = ?", loginFailureCount, new Date(), username, username);
        } //...
    }
@ -237,40 +327,46 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
    /**
     * 设置用户登录时间,返回登录信息
     * 判断loginType,用户类型 1或默认为user,2:医生登录,3:患者登录
     *
     * @param username
     * @return
     */
    public List<WlyyUserSimple> getWlyyUserSimple(String username){
    public List<WlyyUserSimple> getWlyyUserSimple(String username) {
        String loginType = getLogintype();
        List<WlyyUserSimple> users = null;
        //1或默认查找user表,为平台管理员账号
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){
        if (StringUtils.isBlank(loginType) || "1".equals(loginType)) {
            //更新登录时间
            this.getJdbcTemplate().update("update base_user u set u.login_failure_count = 0, u.login_date = ? where u.username = ? or u.mobile = ? or u.idcard = ?", new Date(), username, username, username);
            users = this.getJdbcTemplate().query(DEFAULT_USER_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserSimple.class), username, username, username);
            //2.为医生登录账号
        }else if("2".equals(loginType)){
        } else if ("2".equals(loginType)) {
            //更新登录时间
            this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = 0, d.login_date = ? where d.mobile = ? or d.idcard = ?", new Date(), username, username);
            users = this.getJdbcTemplate().query(DEFAULT_DOCTOR_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserSimple.class), username, username);
            //3.患者登录
        }else if("3".equals(loginType)){
        } else if ("3".equals(loginType)) {
            //更新登录时间
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 0, p.login_date = ? where p.mobile = ? or p.idcard = ?", new Date(), username, username);
            users = this.getJdbcTemplate().query(DEFAULT_PATIENT_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserSimple.class), username, username);
        } //...
        } else if("4".equals(loginType)){
            //更新登录时间
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 0, p.login_date = ? where p.mobile = ? or p.idcard = ?", new Date(), username, username);
            users = this.getJdbcTemplate().query(DEFAULT_PATIENT_DETAILS_ID_STATEMENT, new BeanPropertyRowMapper(WlyyUserSimple.class), username);
        }
        return users;
    }
    /**
     * 获取用户登录类型
     *
     * @return
     */
    public String getLogintype(){
    public String getLogintype() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
@ -279,26 +375,54 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
        return loginType;
    }
    /**
     * 获取i健康用户登录openid型
     *
     * @return
     */
    public String getOpenid() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String openid = request.getParameter("openid");
        return openid;
    }
    /**
     * 获取i健康用户登录openid型
     *
     * @return
     */
    public String getClientId() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    public boolean setRolePhth(String loginType, OAuth2AccessToken token, String id, StringRedisTemplate redisTemplate){
        String clientId = request.getParameter("client_id");
        if(org.apache.commons.lang.StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
            String key = "wlyy2:auth:token:"+token.getValue();
            redisTemplate.opsForValue().set(key,"/**");
            redisTemplate.expire(key,token.getExpiresIn(), TimeUnit.SECONDS);
        }else if("2".equals(loginType)){//2.为医生账号
        return clientId;
    }
    public boolean setRolePhth(String loginType, OAuth2AccessToken token, String id, StringRedisTemplate redisTemplate) {
        }else if("3".equals(loginType)){ //3.患者账号
            String key = "wlyy2:auth:token:"+token.getValue();
            redisTemplate.opsForValue().set(key,"/**");
            redisTemplate.expire(key,token.getExpiresIn(), TimeUnit.SECONDS);
        }else{
        if (org.apache.commons.lang.StringUtils.isBlank(loginType) || "1".equals(loginType)) { //1或默认查找user表,为平台管理员账号
            String key = "wlyy2:auth:token:" + token.getValue();
            redisTemplate.opsForValue().set(key, "/**");
            redisTemplate.expire(key, token.getExpiresIn(), TimeUnit.SECONDS);
        } else if ("2".equals(loginType)) {//2.为医生账号
        } else if ("3".equals(loginType) || "4".equals(loginType)) { //3.患者账号
            String key = "wlyy2:auth:token:" + token.getValue();
            redisTemplate.opsForValue().set(key, "/**");
            redisTemplate.expire(key, token.getExpiresIn(), TimeUnit.SECONDS);
        } else {
            return false;
        }
        return true;
    }
    public void updateOpenId(String openid,String userId){
        this.getJdbcTemplate().update("update base_patient p set p.openid = ? where p.id= ?",openid ,userId);
    public void updateOpenId(String openid, String userId) {
        this.getJdbcTemplate().update("update base_patient p set p.openid = ? where p.id= ?", openid, userId);
    }
}

+ 182 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/model/WlyyUserDetails.java

@ -1,5 +1,8 @@
package com.yihu.jw.security.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import javax.persistence.Column;
import java.io.Serializable;
import java.util.Date;
@ -58,6 +61,161 @@ public class WlyyUserDetails implements Serializable {
    //登陆失败次数
    private Integer loginFailureCount;
    /**
     * 生日
     */
//	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date birthday;
    // 性別,1男,2女
    private Integer sex;
    /**
     * 省代码
     */
    private String provinceCode;
    /**
     * 省名称
     */
    private String provinceName;
    /**
     * 市代码
     */
    private String cityCode;
    /**
     * 市名称
     */
    private String cityName;
    /**
     * 区县代码
     */
    private String townCode;
    /**
     * 区县名称
     */
    private String townName;
    /**
     * 街道代码
     */
    private String streetCode;
    /**
     * 街道名称
     */
    private String streetName;
    /**
     * 地址
     */
    private String address;
    /**
     * i健康微信编号
     */
    private String ihealthOpenid;
    /**
     * i健康微信编号添加时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date ihealthOpenidTime;
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getProvinceCode() {
        return provinceCode;
    }
    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }
    public String getProvinceName() {
        return provinceName;
    }
    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }
    public String getCityCode() {
        return cityCode;
    }
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
    public String getTownCode() {
        return townCode;
    }
    public void setTownCode(String townCode) {
        this.townCode = townCode;
    }
    public String getTownName() {
        return townName;
    }
    public void setTownName(String townName) {
        this.townName = townName;
    }
    public String getStreetCode() {
        return streetCode;
    }
    public void setStreetCode(String streetCode) {
        this.streetCode = streetCode;
    }
    public String getStreetName() {
        return streetName;
    }
    public void setStreetName(String streetName) {
        this.streetName = streetName;
    }
    public String getIhealthOpenid() {
        return ihealthOpenid;
    }
    public void setIhealthOpenid(String ihealthOpenid) {
        this.ihealthOpenid = ihealthOpenid;
    }
    public Date getIhealthOpenidTime() {
        return ihealthOpenidTime;
    }
    public void setIhealthOpenidTime(Date ihealthOpenidTime) {
        this.ihealthOpenidTime = ihealthOpenidTime;
    }
    public String getId() {
        return id;
    }
@ -217,4 +375,28 @@ public class WlyyUserDetails implements Serializable {
    public void setLoginFailureCount(Integer loginFailureCount) {
        this.loginFailureCount = loginFailureCount;
    }
    public Boolean getEnabled() {
        return enabled;
    }
    public Boolean getLocked() {
        return locked;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public Integer getSex() {
        return sex;
    }
    public void setSex(Integer sex) {
        this.sex = sex;
    }
}

+ 62 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/WlyyTokenGranter.java

@ -4,6 +4,8 @@ import com.yihu.jw.security.core.userdetails.SaltUser;
import com.yihu.jw.security.oauth2.core.redis.WlyyRedisVerifyCodeService;
import org.springframework.security.authentication.*;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.core.authority.mapping.NullAuthoritiesMapper;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
@ -77,6 +79,15 @@ public class WlyyTokenGranter implements TokenGranter {
                        wlyyRedisVerifyCodeService,
                        userDetailsService
                ));
        tokenGranters.put(IhealthOwnerCodeTokenGranter.GRANT_TYPE,
                new IhealthOwnerCodeTokenGranter(
                        authenticationManager,
                        tokenServices,
                        clientDetailsService,
                        requestFactory,
                        userDetailsService
                ));
    }
    public OAuth2AccessToken grant(String grantType, TokenRequest tokenRequest) {
@ -333,5 +344,56 @@ public class WlyyTokenGranter implements TokenGranter {
        }
    }
    /**
     * i健康居民code模式Token授权器。
     */
    public static class IhealthOwnerCodeTokenGranter extends AbstractTokenGranter {
        private static final String GRANT_TYPE = "ihealthCode";
        private final AuthenticationManager authenticationManager;
        private final UserDetailsService userDetailsService;
        private GrantedAuthoritiesMapper authoritiesMapper = new NullAuthoritiesMapper();
        public IhealthOwnerCodeTokenGranter(AuthenticationManager authenticationManager,
                                       AuthorizationServerTokenServices tokenServices,
                                       ClientDetailsService clientDetailsService,
                                       OAuth2RequestFactory requestFactory,
                                       UserDetailsService userDetailsService) {
            this(authenticationManager, tokenServices, clientDetailsService, requestFactory, userDetailsService, GRANT_TYPE);
        }
        protected IhealthOwnerCodeTokenGranter(AuthenticationManager authenticationManager,
                                          AuthorizationServerTokenServices tokenServices,
                                          ClientDetailsService clientDetailsService,
                                          OAuth2RequestFactory requestFactory,
                                          UserDetailsService userDetailsService,
                                          String grantType) {
            super(tokenServices, clientDetailsService, requestFactory, grantType);
            this.authenticationManager = authenticationManager;
            this.userDetailsService = userDetailsService;
        }
        @Override
        protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
            Map<String, String> parameters = new LinkedHashMap<String, String>(tokenRequest.getRequestParameters());
            String username = parameters.get("username");
            SaltUser userDetails = (SaltUser)userDetailsService.loadUserByUsername(username);
            if (!userDetails.isEnabled()) {
                throw new InvalidGrantException("User is disabled");
            }
            if (!userDetails.isAccountNonLocked()) {
                throw new InvalidGrantException("User account is locked");
            }
//            parameters.put("password",userDetails.getPassword());
            Authentication userAuth = new UsernamePasswordAuthenticationToken(username,userDetails.getPassword(),  this.authoritiesMapper.mapAuthorities(userDetails.getAuthorities()));
            ((AbstractAuthenticationToken) userAuth).setDetails(parameters);
            OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
            return new OAuth2Authentication(storedOAuth2Request, userAuth);
        }
    }
}

+ 6 - 4
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java

@ -129,17 +129,19 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
                String password = com.yihu.jw.security.utils.RSAUtils.decryptBase64(parameters.get("password"),keyPair);
                parameters.put("password",password);
//                parameters.put("password", RSAUtils.decryptByPrivateKey(parameters.get("password"), rsaPrivateKey));
            }else {
                parameters.put("grant_type", "ihealthCode");
            }
        } else {
            parameters.put("grant_type", "captcha");
        }
        ClientDetails authenticatedClient = clientDetailsService.loadClientByClientId(client_id);
        TokenRequest tokenRequest = oAuth2RequestFactory.createTokenRequest(parameters, authenticatedClient);
        if (authenticatedClient != null) {
            oAuth2RequestValidator.validateScope(tokenRequest, authenticatedClient);
        if(null == authenticatedClient){
            throw new InvalidRequestException("client_id");
        }
        TokenRequest tokenRequest = oAuth2RequestFactory.createTokenRequest(parameters, authenticatedClient);
        oAuth2RequestValidator.validateScope(tokenRequest, authenticatedClient);
        OAuth2AccessToken token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);
        if (token == null) {
            throw new UnsupportedGrantTypeException("Unsupported grant type: " + tokenRequest.getGrantType());

+ 27 - 0
svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/config/bean/BeanConfig.java

@ -0,0 +1,27 @@
package com.yihu.jw.entrance.config.bean;
import com.yihu.jw.hospital.prescription.service.PrescriptionExpressageService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanConfig {
    //顺丰快递接口请求地址
    @Value("${express.sf_url}")
    private String sf_url;
    //顺丰快递接口接入编码
    @Value("${express.sf_code}")
    private String sf_code;
    //顺丰快递接口checkword
    @Value("${express.sf_check_word}")
    private String sf_check_word;
    @Bean(name = "prescriptionExpressageService")
    PrescriptionExpressageService prescriptionExpressageService(){
        return new PrescriptionExpressageService(sf_url,sf_code,sf_check_word);
    }
}

+ 22 - 3
svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/controller/MqSdkController.java

@ -2,6 +2,7 @@ package com.yihu.jw.entrance.controller;
import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
import com.yihu.jw.entity.hospital.dict.WlyyChargeDictDO;
import com.yihu.jw.entity.hospital.mapping.HospitalDeptMappingDO;
import com.yihu.jw.hospital.prescription.service.entrance.EntranceService;
import com.yihu.jw.restmodel.hospital.prescription.WlyyOutpatientVO;
@ -78,6 +79,8 @@ public class MqSdkController extends EnvelopRestEndpoint {
    @ApiOperation(value = " 查询某个时间段的患者门诊就诊记录 V1.00")
    public ListEnvelop BS30025(@ApiParam(name = "patNo", value = "居民id")
                               @RequestParam(value = "patNo", required = false) String patNo,
                               @ApiParam(name = "conNo", value = "就诊次数")
                               @RequestParam(value = "conNo", required = false) String conNo,
                               @ApiParam(name = "admNo", value = "就诊唯一号")
                               @RequestParam(value = "admNo", required = false) String admNo,
                               @ApiParam(name = "registerSn", value = "流水号(处方号)")
@ -86,7 +89,7 @@ public class MqSdkController extends EnvelopRestEndpoint {
                               @RequestParam(value = "startTime", required = false) String startTime,
                               @ApiParam(name = "endTime", value = "结束时间")
                               @RequestParam(value = "endTime", required = false) String endTime) throws Exception {
        List<WlyyOutpatientVO> obj = entranceService.BS30025(patNo,admNo,registerSn, startTime, endTime, demoFlag);
        List<WlyyOutpatientVO> obj = entranceService.BS30025(patNo,conNo,admNo,registerSn, startTime, endTime, demoFlag);
        return success(obj);
    }
@ -180,8 +183,11 @@ public class MqSdkController extends EnvelopRestEndpoint {
    @GetMapping(value = "/MS02013")
    @ApiOperation(value = "号别字典接口   ")
    public ListEnvelop MS02013() throws Exception {
        JSONArray obj = entranceService.MS02013(demoFlag);
    public ListEnvelop MS02013(
            @ApiParam(name = "code", value = "号别字典")
            @RequestParam(value = "code", required = false) String code
    ) throws Exception {
        JSONArray obj = entranceService.MS02013(code);
        return success(obj);
    }
@ -310,4 +316,17 @@ public class MqSdkController extends EnvelopRestEndpoint {
        return success(obj);
    }
    @GetMapping(value = "/BS55010")
    @ApiOperation(value = "医生号别及诊查费")
    public ListEnvelop BS55010(@ApiParam(name = "windowsNo", value = "分部号")
                               @RequestParam(value = "windowsNo", required = false) String windowsNo,
                               @ApiParam(name = "chargeType", value = "号别")
                               @RequestParam(value = "chargeType", required = false) String chargeType,
                               @ApiParam(name = "code", value = "医生编码")
                               @RequestParam(value = "code", required = false) String code) throws Exception {
        List<WlyyChargeDictDO> obj = entranceService.BS55010(windowsNo, code,chargeType, demoFlag);
        return success(obj);
    }
}

+ 106 - 0
svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/controller/expressage/WlyyPatientExpressageAddrEndpoint.java

@ -0,0 +1,106 @@
package com.yihu.jw.entrance.controller.expressage;
import com.yihu.jw.entrance.service.WlyyPatientExpressageAddrService;
import com.yihu.jw.restmodel.hospital.prescription.WlyyPatientExpressageAddrVO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.hospital.BaseHospitalRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import com.yihu.jw.entity.hospital.prescription.WlyyPatientExpressageAddrDO;
/**
 * 居民收获地址控制器
 *
 * @version <pre>
 * Author	Version		Date		Changes
 * Administrator 	1.0  		2019年06月12日 	Created
 *
 * </pre>
 * @since 1.
 */
@RestController
@RequestMapping(value = BaseHospitalRequestMapping.WlyyPatientExpressageAddr.PREFIX)
@Api(value = "居民收获地址管理", description = "居民收获地址管理服务接口", tags = {"wlyy基础服务 - 居民收获地址管理服务接口"})
public class WlyyPatientExpressageAddrEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private WlyyPatientExpressageAddrService wlyyPatientExpressageAddrService;
    @PostMapping(value = BaseHospitalRequestMapping.WlyyPatientExpressageAddr.CREATE)
    @ApiOperation(value = "创建")
    public Envelop create(
            @ApiParam(name = "jsonData", value = "Json数据", required = true)
            @RequestParam String jsonData) throws Exception {
        StringBuilder log = new StringBuilder();
        WlyyPatientExpressageAddrDO addrDO = wlyyPatientExpressageAddrService.createAddr(jsonData,log);
        if(!StringUtils.isEmpty(log.toString())){
            return failed(log.toString());
        }
        return success(addrDO, WlyyPatientExpressageAddrVO.class);
    }
    @PostMapping(value = BaseHospitalRequestMapping.WlyyPatientExpressageAddr.DELETE)
    @ApiOperation(value = "删除")
    public Envelop delete(
            @ApiParam(name = "ids", value = "id串,中间用,分隔", required = true)
            @RequestParam(value = "ids") String ids) {
        wlyyPatientExpressageAddrService.delete(ids.split(","));
        return success("删除成功");
    }
    @PostMapping(value = BaseHospitalRequestMapping.WlyyPatientExpressageAddr.UPDATE)
    @ApiOperation(value = "更新")
    public ObjEnvelop<WlyyPatientExpressageAddrVO> update(
            @ApiParam(name = "jsonData", value = "Json数据", required = true)
            @RequestParam String jsonData) throws Exception {
        WlyyPatientExpressageAddrDO wlyyPatientExpressageAddr = toEntity(jsonData, WlyyPatientExpressageAddrDO.class);
        if (null == wlyyPatientExpressageAddr.getId()) {
            return failed("ID不能为空", ObjEnvelop.class);
        }
        wlyyPatientExpressageAddr = wlyyPatientExpressageAddrService.save(wlyyPatientExpressageAddr);
        return success(wlyyPatientExpressageAddr, WlyyPatientExpressageAddrVO.class);
    }
    @GetMapping(value = BaseHospitalRequestMapping.WlyyPatientExpressageAddr.PAGE)
    @ApiOperation(value = "获取分页")
    public PageEnvelop<WlyyPatientExpressageAddrVO> page(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        List<WlyyPatientExpressageAddrDO> wlyyPatientExpressageAddrs = wlyyPatientExpressageAddrService.search(fields, filters, sorts, page, size);
        int count = (int) wlyyPatientExpressageAddrService.getCount(filters);
        return success(wlyyPatientExpressageAddrs, count, page, size, WlyyPatientExpressageAddrVO.class);
    }
    @GetMapping(value = BaseHospitalRequestMapping.WlyyPatientExpressageAddr.LIST)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<WlyyPatientExpressageAddrVO> list(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        List<WlyyPatientExpressageAddrDO> wlyyPatientExpressageAddrs = wlyyPatientExpressageAddrService.search(fields, filters, sorts);
        return success(wlyyPatientExpressageAddrs, WlyyPatientExpressageAddrVO.class);
    }
}

+ 1 - 1
svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/controller/third/PrescriptionUpdateController.java

@ -29,7 +29,7 @@ public class PrescriptionUpdateController extends EnvelopRestEndpoint {
    @GetMapping(value = "/preUpdate")
    @ApiOperation(value = "药房配药his提示处方变更")
    public ObjEnvelop prescriptionUpdate(
            @ApiParam(name = "admNo", value = "卡号", required = true)
            @ApiParam(name = "admNo", value = "门诊就诊唯一号", required = true)
            @RequestParam(value = "admNo") String admNo,
            @ApiParam(name = "realOrder", value = "处方号", required = true)
            @RequestParam(value = "realOrder") String realOrder,

+ 21 - 0
svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/dao/WlyyPatientExpressageAddrDao.java

@ -0,0 +1,21 @@
package com.yihu.jw.entrance.dao;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.yihu.jw.entity.hospital.prescription.WlyyPatientExpressageAddrDO;
/**
 * 
 * 居民收获地址 数据库访问层
 * 
 * @version 
 * <pre>
 * Author	Version		Date		Changes
 * Administrator 	1.0  		2019年06月12日 	Created
 *
 * </pre>
 * @since 1.
 */
public interface WlyyPatientExpressageAddrDao extends PagingAndSortingRepository<WlyyPatientExpressageAddrDO, String>, JpaSpecificationExecutor<WlyyPatientExpressageAddrDO>  {
}

+ 39 - 0
svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/service/WlyyPatientExpressageAddrService.java

@ -0,0 +1,39 @@
package com.yihu.jw.entrance.service;
import com.yihu.jw.entrance.dao.WlyyPatientExpressageAddrDao;
import com.yihu.jw.utils.EntityUtils;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.stereotype.Service;
import com.yihu.jw.entity.hospital.prescription.WlyyPatientExpressageAddrDO;
/**
 * 居民收获地址服务service
 *
 * @version <pre>
 * Author	Version		Date		Changes
 * Administrator    1.0  2019年06月12日 Created
 *
 * </pre>
 * @since 1.
 */
@Service
public class WlyyPatientExpressageAddrService extends BaseJpaService<WlyyPatientExpressageAddrDO, WlyyPatientExpressageAddrDao> {
    /**
     * 新增居民收货地址
     * @param jsonData
     * @param error
     * @return
     */
    public WlyyPatientExpressageAddrDO createAddr(String jsonData, StringBuilder error) {
        WlyyPatientExpressageAddrDO addrDO = null;
        try {
            addrDO = EntityUtils.jsonToEntity(jsonData,WlyyPatientExpressageAddrDO.class);
        } catch (Exception e) {
            error.append(e.getMessage());
            return null;
        }
        this.save(addrDO);
        return addrDO;
    }
}

+ 14 - 0
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/config/JpaConfig.java

@ -0,0 +1,14 @@
package com.yihu.jw.hospital.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
@Configuration
public class JpaConfig {
    @Bean
    public JpaTransactionManager transactionManager(){
        return new JpaTransactionManager();
    }
}

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

@ -19,6 +19,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
@ -127,8 +129,10 @@ public class PrescriptionEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = BaseHospitalRequestMapping.Prescription.findReOutpatientInfo)
    @ApiOperation(value = "查询复诊记录,处方,居民信息,物流(单条)", notes = "查询复诊记录,处方,居民信息,物流(单条)")
    public ObjEnvelop findReOutpatientInfo(@ApiParam(name = "outpatientId", value = "复诊ID")
                                           @RequestParam(value = "outpatientId", required = true) String outpatientId)throws Exception{
        com.alibaba.fastjson.JSONObject obj =  prescriptionService.findReOutpatientInfo(outpatientId);
                                           @RequestParam(value = "outpatientId", required = true) String outpatientId,
                                           @ApiParam(name = "prescriptionId", value = "处方ID")
                                           @RequestParam(value = "prescriptionId", required = false) String prescriptionId)throws Exception{
        com.alibaba.fastjson.JSONObject obj =  prescriptionService.findReOutpatientInfo(outpatientId,prescriptionId);
        return success(obj);
    }
@ -269,6 +273,35 @@ public class PrescriptionEndpoint extends EnvelopRestEndpoint {
        return prescriptionService.findExpressageList(status,oneselfPickupFlg,nameKey,startTime,endTime,page,size);
    }
    @GetMapping(value = BaseHospitalRequestMapping.Prescription.setMailno)
    @ApiOperation(value = "设置订单编号", notes = "设置订单编号")
    public ObjEnvelop setMailno(@ApiParam(name = "mailno", value = "订单号")
                                @RequestParam(value = "mailno", required = false)String mailno,
                                @ApiParam(name = "expressageId", value = "订单id")
                                @RequestParam(value = "expressageId", required = false)String expressageId) {
        return success(prescriptionService.setMailno(mailno,expressageId));
    }
    @GetMapping(value = BaseHospitalRequestMapping.Prescription.pushListWrite)
    @ApiOperation(value = "订单导出", notes = "订单导出")
    public void pushListWrite(@ApiParam(name = "status", value = "流程状态,多状态用‘,’分割")
                                    @RequestParam(value = "status", required = false)String status,
                                    @ApiParam(name = "oneselfPickupFlg", value = "是否自取 1是 0否")
                                    @RequestParam(value = "oneselfPickupFlg", required = false)String oneselfPickupFlg,
                                    @ApiParam(name = "nameKey", value = "配送员名称")
                                    @RequestParam(value = "nameKey", required = false)String nameKey,
                                    @ApiParam(name = "startTime", value = "开始时间,yyyy-MM-dd")
                                    @RequestParam(value = "startTime", required = false)String startTime,
                                    @ApiParam(name = "endTime", value = "结束时间,yyyy-MM-dd")
                                    @RequestParam(value = "endTime", required = false)String endTime,
                                    HttpServletResponse response) throws Exception{
        MixEnvelop expressages = prescriptionService.findExpressageList(status,oneselfPickupFlg,nameKey,startTime,endTime,1,10000);
        List<Map<String,Object>> list = expressages.getDetailModelList();
        response.setContentType("octets/stream");
        response.setHeader("Content-Disposition", "attachment; filename="+ new String( "pushDataList.xls"));
        OutputStream os = response.getOutputStream();
        prescriptionService.pushListWrite(os,list);
    }
    //===========

+ 5 - 0
svr/svr-internet-hospital/src/main/resources/application.yml

@ -72,6 +72,11 @@ fast-dfs:
configDefault: # 默认配置
  saasId: xmjkzl_saasId
express:
  sf_url: http://bsp-oisp.sf-express.com/bsp-oisp/sfexpressService
  sf_code: JKZL
  sf_check_word: QkeIfIvQdheqIv2cVSgAUnBU29lfNbVk
---
spring:
  profiles: jwdev

+ 147 - 8
svr/svr-iot-sunnuo/src/main/java/com/yihu/iot/datainput/controller/IotAnalyzerController.java

@ -3,24 +3,19 @@ package com.yihu.iot.datainput.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.iot.datainput.dao.IotDeviceBaiyiDao;
import com.yihu.iot.datainput.service.DataInputService;
import com.yihu.iot.datainput.util.ConstantUtils;
import com.yihu.jw.entity.iot.device.IotDeviceBaiyiDO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.util.date.DateUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.util.Date;
@ -43,6 +38,8 @@ public class IotAnalyzerController extends EnvelopRestEndpoint {
    @Autowired
    ObjectMapper objectMapper;
    @Autowired
    private IotDeviceBaiyiDao iotDeviceBaiyiDao;
    /**
     * 基于奕拓小屋上传的体征数据,进行解析入库
@ -160,4 +157,146 @@ public class IotAnalyzerController extends EnvelopRestEndpoint {
            return strResult;
        }
    }
    @PostMapping(value = "/heartRate" /*,consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE*/)
    @ApiOperation(value = "柏颐心率数据接收", notes = "柏颐心率数据接收")
    public String heartRate(
            @ApiParam(name = "imei", value = "15位设备唯一序号")
            @RequestParam(value = "imei",required = true)String imei,
            @ApiParam(name = "time_begin", value = "发生时间YYYY-MM-DD HH:mm:SS")
            @RequestParam(value = "time_begin",required = true)String time_begin,
            @ApiParam(name = "heartrate", value = "心率")
            @RequestParam(value = "heartrate",required = true)int heartrate,
            @ApiParam(name = "theshold_heartrate_h", value = "心率阈值上限")
            @RequestParam(value = "theshold_heartrate_h",required = true)int theshold_heartrate_h,
            @ApiParam(name = "theshold_heartrate_l", value = "心率阈值下限")
            @RequestParam(value = "theshold_heartrate_l",required = true)int theshold_heartrate_l) throws Exception{
        String strResult = "";
        Map res = new HashMap();
        IotDeviceBaiyiDO iotDeviceBaiyiDO=new IotDeviceBaiyiDO();
        iotDeviceBaiyiDO.setImei(imei);
        iotDeviceBaiyiDO.setType(1);
        iotDeviceBaiyiDO.setTimeBegin(time_begin);
        iotDeviceBaiyiDO.setValue1(heartrate);
        iotDeviceBaiyiDO.setValue2(theshold_heartrate_h);
        iotDeviceBaiyiDO.setValue3(theshold_heartrate_l);
        iotDeviceBaiyiDao.save(iotDeviceBaiyiDO);
        try {
            String info  = "imei="+imei+";time_begin="+time_begin+";heartrate="+heartrate+";theshold_heartrate_h="+theshold_heartrate_h+";theshold_heartrate_l="+theshold_heartrate_l;
            logger.info("info="+info);
            return BaiyiDataParam(iotDeviceBaiyiDO);
        } catch (Exception e) {
            e.printStackTrace();
            res.put("statusCode", "03");
            res.put("desc", "服务异常,体征信息上传失败。");
            strResult = objectMapper.writeValueAsString(res);
            logger.error(strResult);
            return strResult;
        }
    }
    @PostMapping(value = "/bloodPressure" /*,consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE*/)
    @ApiOperation(value = "柏颐血压数据接收", notes = "柏颐血压数据接收")
    public String bloodPressure(
            @ApiParam(name = "imei", value = "15位设备唯一序号", required = true)
            @RequestParam(value = "imei",required = true)String imei,
            @ApiParam(name = "time_begin", value = "发生时间YYYY-MM-DD HH:mm:SS", required = true)
            @RequestParam(value = "time_begin",required = true)String time_begin,
            @ApiParam(name = "dbp", value = "舒张压", required = true)
            @RequestParam(value = "dbp",required = true)int dbp,
            @ApiParam(name = "dbp_l", value = "舒张压报警下限", required = true)
            @RequestParam(value = "dbp_l",required = true)int dbp_l,
            @ApiParam(name = "sbp", value = "收缩压", required = true)
            @RequestParam(value = "sbp",required = true)int sbp,
            @ApiParam(name = "sbp_h", value = "收缩压报警上限", required = true)
            @RequestParam(value = "sbp_h",required = true)int sbp_h) throws Exception{
        String strResult = "";
        Map res = new HashMap();
        IotDeviceBaiyiDO iotDeviceBaiyiDO=new IotDeviceBaiyiDO();
        iotDeviceBaiyiDO.setImei(imei);
        iotDeviceBaiyiDO.setTimeBegin(time_begin);
        iotDeviceBaiyiDO.setType(2);
        iotDeviceBaiyiDO.setValue1(dbp);
        iotDeviceBaiyiDO.setValue2(dbp_l);
        iotDeviceBaiyiDO.setValue3(sbp);
        iotDeviceBaiyiDO.setValue4(sbp_h);
        iotDeviceBaiyiDao.save(iotDeviceBaiyiDO);
        try {
            String info= "imei="+imei+";time_begin="+time_begin+";dbp="+dbp+";dbp_l="+dbp_l+";sbp="+sbp+";sbp_h="+sbp_h;
            logger.info("info="+info);
            return BaiyiDataParam(iotDeviceBaiyiDO);
        } catch (Exception e) {
            e.printStackTrace();
            res.put("statusCode", "03");
            res.put("desc", "服务异常,体征信息上传失败。");
            strResult = objectMapper.writeValueAsString(res);
            logger.error(strResult);
            return strResult;
        }
    }
    /**
     * 封装数据上传至i健康
     * @param iotDeviceBaiyiDO 设备数据实体
     * @return
     * @throws Exception
     */
    public String BaiyiDataParam(IotDeviceBaiyiDO iotDeviceBaiyiDO)throws Exception {
        JSONArray jsonArray = new JSONArray();
        JSONObject params = new JSONObject();
        JSONObject data = new JSONObject();
        Map res = new HashMap();
        // 增加判断,当测量值小于1时,定义为异常值,不进行数据的存储。
        if (iotDeviceBaiyiDO.getValue1() < 1) {
            res.put("statusCode", "00");
            res.put("desc", iotDeviceBaiyiDO.getImei() + "体征数据异常(小于正常值)。");
            return objectMapper.writeValueAsString(res);
        } else {
            if (2 == iotDeviceBaiyiDO.getType()) {
                //血压测量数据
                data.put("data", iotDeviceBaiyiDO.getValue3() + "," + iotDeviceBaiyiDO.getValue1());
                //单位
                data.put("unit", "mmHg");
            } else {
                //心率测量数据
                data.put("data", iotDeviceBaiyiDO.getValue1());
                //单位
                data.put("unit", "bpm");
            }
        }
        //按键号
        data.put("button", "-1");
        //设备唯一码
        data.put("deviceSn", iotDeviceBaiyiDO.getImei());
        //设备类型1:血压 5:心率
        data.put("deviceType", "4");
        data.put("measurementType",iotDeviceBaiyiDO.getType());
        //厂商代码
        data.put("manufacturerCode", "baiyi");
        //厂商名称
        data.put("manufacturerName", "柏颐设备");
        //发送时间yyyy-MM-dd HH:mm:ss
        data.put("sendTime", iotDeviceBaiyiDO.getTimeBegin());
        data.put("state", 0);
        //单位mmol/L,mmHg
        data.put("unit", "");
        //体征上传时间yyyy-MM-dd HH:mm:ss
        data.put("uploadTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        jsonArray.add(data);
        params.put("data", jsonArray);
        //体征信息上传成功后,同步到厦门I健康
        data.put("id", "");
        boolean synFlag = dataInputService.synXMIjk(data);
        if (synFlag) {
            res.put("statusCode", "00");
            res.put("desc", iotDeviceBaiyiDO.getImei() + "体征信息上传厦门I健康成功。");
        } else {
            res.put("statusCode", "02");
            res.put("desc", iotDeviceBaiyiDO.getImei() + "体征信息上传厦门I健康失败。");
        }
        String strResult = objectMapper.writeValueAsString(res);
        logger.info(strResult);
        return strResult;
    }
}

+ 12 - 0
svr/svr-iot-sunnuo/src/main/java/com/yihu/iot/datainput/dao/IotDeviceBaiyiDao.java

@ -0,0 +1,12 @@
package com.yihu.iot.datainput.dao;
import com.yihu.jw.entity.iot.device.IotDeviceBaiyiDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * @author zdm on 2019/6/11.
 */
public interface IotDeviceBaiyiDao extends PagingAndSortingRepository<IotDeviceBaiyiDO,String>,JpaSpecificationExecutor<IotDeviceBaiyiDO> {
}

+ 12 - 0
svr/svr-iot-sunnuo/src/main/java/com/yihu/iot/datainput/service/IotAnalyzerService.java

@ -0,0 +1,12 @@
package com.yihu.iot.datainput.service;
import org.springframework.stereotype.Service;
/**
 * Created by zdm on 2019/6/11.
 */
@Service
public class IotAnalyzerService {
}