Переглянути джерело

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

trick9191 7 роки тому
батько
коміт
bd4e770dd0

+ 4 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/interceptors/GateWayInterceptor.java

@ -62,6 +62,7 @@ public class GateWayInterceptor implements HandlerInterceptor {
                //没权限
                BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.statusEm.token_null.getCode(), BaseResultModel.statusEm.token_null.getMessage());
                response.getOutputStream().write(JSONObject.fromObject(baseResultModel).toString().getBytes());
                flag = false;
            }
            GcToken gcToken = gcTokenDaoDao.findByToken(accesstoken);
            if (gcToken == null) {
@ -69,18 +70,21 @@ public class GateWayInterceptor implements HandlerInterceptor {
                //没权限
                BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.statusEm.token_no_power.getCode(), BaseResultModel.statusEm.token_no_power.getMessage());
                response.getOutputStream().write(JSONObject.fromObject(baseResultModel).toString().getBytes());
                flag = false;
            }
            if (gcToken.getDel() == null || gcToken.getDel() == 0) {
                saveHttpLog(ip, JSONObject.fromObject(request.getParameterMap()).toString(), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.statusEm.token_out_effect.getMessage());
                //token无效
                BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.statusEm.token_out_effect.getCode(), BaseResultModel.statusEm.token_out_effect.getMessage());
                response.getOutputStream().write(JSONObject.fromObject(baseResultModel).toString().getBytes());
                flag = false;
            }
            if (System.currentTimeMillis() > gcToken.getOutTime().getTime()) {
                saveHttpLog(ip, JSONObject.fromObject(request.getParameterMap()).toString(), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.statusEm.token_out_time.getMessage());
                //token过期
                BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.statusEm.token_out_time.getCode(), BaseResultModel.statusEm.token_out_time.getMessage());
                response.getOutputStream().write(JSONObject.fromObject(baseResultModel).toString().getBytes());
                flag = false;
            }
        } catch (Exception e) {
            saveHttpLog(ip, JSONObject.fromObject(request.getParameterMap()).toString(), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), e.getMessage());

+ 3 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/kit/KitDrugDetailDao.java

@ -5,10 +5,12 @@ import com.yihu.wlyy.entity.kit.KitDrugUseRecord;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by yeshijie on 2017/8/11.
 */
public interface KitDrugDetailDao extends PagingAndSortingRepository<KitDrugDetail, Long>, JpaSpecificationExecutor<KitDrugDetail> {
    List<KitDrugDetail> findByRelationCodeAndType(String relationCode,Integer type);
}

+ 18 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/kit/KitDrugUseRecordDao.java

@ -1,13 +1,31 @@
package com.yihu.wlyy.repository.kit;
import com.yihu.wlyy.entity.followup.Followup;
import com.yihu.wlyy.entity.kit.KitDrugUseRecord;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.Date;
import java.util.List;
/**
 * Created by yeshijie on 2017/8/11.
 */
public interface KitDrugUseRecordDao extends PagingAndSortingRepository<KitDrugUseRecord, Long>, JpaSpecificationExecutor<KitDrugUseRecord> {
    @Query(" select count(1) from KitDrugUseRecord u where u.patientCode=?1 and u.useDrugStatus=?2 and u.deviceSn=?3 and u.useTime>=?4 and u.useTime<=?5")
    int findStatisticsCount(String patientCode,Integer useDrugStatus,String deviceSn,Date monthStart,Date monthEnd);
    @Query(value = " select u.* from kit_drug_use_record u where u.patient_code=?1 and u.use_drug_status=?2 and u.device_sn=?3 and u.use_time>=?4 and u.use_time<=?5 order by DATE_FORMAT(u.use_time,'%c-%d') desc,u.use_drug_status desc",nativeQuery = true)
    List<KitDrugUseRecord> findStatistics(String patientCode,Integer useDrugStatus,String deviceSn,Date monthStart,Date monthEnd);
    @Query(value = " select u.* from kit_drug_use_record u where u.patient_code=?1 and u.device_sn=?2 and u.use_time>=?3 and u.use_time<=?4 order by DATE_FORMAT(u.use_time,'%c-%d') desc,u.use_drug_status desc",nativeQuery = true)
    List<KitDrugUseRecord> findStatistics(String patientCode,String deviceSn,Date monthStart,Date monthEnd);
    @Query("SELECT a FROM KitDrugUseRecord a WHERE a.patientCode = ?1  ORDER BY a.useTime DESC")
    Page<KitDrugUseRecord> findRecentByPatient(String patient, Pageable pageRequest);
}

+ 3 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/patient/PatientDeviceDao.java

@ -20,6 +20,9 @@ public interface PatientDeviceDao extends PagingAndSortingRepository<PatientDevi
    @Query("select a from PatientDevice a where a.user = ?1 ")
    List<PatientDevice> findByPatient(String user);
    @Query("select a from PatientDevice a where a.user = ?1 and a.del=0 and a.deviceName like '%药盒%'")
    List<PatientDevice> findByPatientAndDel(String user);
    @Query("select a from PatientDevice a where a.user = ?1 and a.deviceSn=?2 ")
    List<PatientDevice> findByPatientAndDeviceSn(String user, String deviceSn);

+ 28 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/health/PatientHealthRecordService.java

@ -3,12 +3,16 @@ package com.yihu.wlyy.service.app.health;
import com.yihu.wlyy.entity.dict.Medicines;
import com.yihu.wlyy.entity.education.Sports;
import com.yihu.wlyy.entity.education.SportsType;
import com.yihu.wlyy.entity.kit.KitDrugDetail;
import com.yihu.wlyy.entity.kit.KitDrugUseRecord;
import com.yihu.wlyy.entity.patient.PatientHealthRecordDiet;
import com.yihu.wlyy.entity.patient.PatientHealthRecordMedication;
import com.yihu.wlyy.entity.patient.PatientHealthRecordSports;
import com.yihu.wlyy.repository.dict.MedicinesDao;
import com.yihu.wlyy.repository.education.SportsDao;
import com.yihu.wlyy.repository.education.SportsTypeDao;
import com.yihu.wlyy.repository.kit.KitDrugDetailDao;
import com.yihu.wlyy.repository.kit.KitDrugUseRecordDao;
import com.yihu.wlyy.repository.patient.PatientHealthRecordDietDao;
import com.yihu.wlyy.repository.patient.PatientHealthRecordMedicationDao;
import com.yihu.wlyy.repository.patient.PatientHealthRecordSportsDao;
@ -19,6 +23,7 @@ import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.jpa.domain.Specification;
@ -31,6 +36,7 @@ import org.springside.modules.persistence.SearchFilter.Operator;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
@ -55,6 +61,12 @@ public class PatientHealthRecordService extends BaseService {
	@Autowired
	private PatientHealthRecordSportsDao patientHealthRecordSportsDao;
	@Autowired
	private KitDrugUseRecordDao kitDrugUseRecordDao;
	@Autowired
	private KitDrugDetailDao kitDrugDetailDao;
	/**
	 * 更改保健记录(包括手动记录的修改和所有的删除)
	 *
@ -304,6 +316,8 @@ public class PatientHealthRecordService extends BaseService {
		Page<PatientHealthRecordMedication> medication = patientHealthRecordMedicationDao.findRecentByPatient(patient, new PageRequest(0, 1));
		// 查询最近的饮食
		Page<PatientHealthRecordDiet> diet = patientHealthRecordDietDao.findRecentByPatient(patient, new PageRequest(0, 1));
		// 查询最近的药盒使用记录
		Page<KitDrugUseRecord> kitDrugUseRecords = kitDrugUseRecordDao.findRecentByPatient(patient, new PageRequest(0, 1));
		if (sports != null && sports.getSize() > 0) {
			JSONObject sportObject = new JSONObject();
			for (PatientHealthRecordSports temp : sports) {
@ -340,6 +354,20 @@ public class PatientHealthRecordService extends BaseService {
			jsonObject.put("diet",dietObject);
		}
		if(kitDrugUseRecords!=null){
			JSONObject dietObject = new JSONObject();
			for (KitDrugUseRecord temp : kitDrugUseRecords) {
				dietObject.put("recordDate",DateUtil.dateToStr(temp.getUseTime(), DateUtil.YYYY_MM_DD));
				dietObject.put("deviceSn",temp.getDeviceSn());
				List<KitDrugDetail> kitDrugDetailList = kitDrugDetailDao.findByRelationCodeAndType(temp.getCode(),1);
				if(kitDrugDetailList.size()>0){
					dietObject.put("drugDetail",kitDrugDetailList.get(0).getDrugName());
				}else{
					dietObject.put("drugDetail","");
				}
			}
			jsonObject.put("kitDrugUseRecords",dietObject);
		}
		return jsonObject;
	}

+ 249 - 27
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/kit/KitService.java

@ -19,10 +19,19 @@ import com.yihu.wlyy.util.DateUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.*;
/**
@ -48,7 +57,8 @@ public class KitService extends BaseService {
    private PatientDeviceDao patientDeviceDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public  String format = "yyyy-MM-dd HH:mm";
    private String format = "yyyy-MM-dd HH:mm";
    private String format2 = "HH:mm" ;
    /**
     * 药盒绑定
@ -236,33 +246,245 @@ public class KitService extends BaseService {
        kitDrugDetailDao.save(result);
    }
    public static void main(String[] args) {
        String drugDetail =
                "[{" +
                "\"drugName\":\"aa\"," +
                "\"measure\":\"bb\"," +
                "\"drugImgUrl\":\"cc\"" +
                "},"+"{" +
                        "\"drugName\":\"aa\"," +
                                "\"measure\":\"bb\"," +
                                "\"drugImgUrl\":\"cc\"" +
                                "}"+"]";
//        JSONObject drugDetailJson = JSONObject.fromObject(drugDetail);
        JSONArray a = JSONArray.fromObject(drugDetail);
        for(int i = 0;i<a.size();i++){
            String drugName = a.getJSONObject(i).getString("drugName");
            String measure = a.getJSONObject(i).getString("measure");
            String drugImgUrl = a.getJSONObject(i).getString("drugImgUrl");
            System.out.println(i+","+drugName+","+measure+","+drugImgUrl);
    /**
     * 获取居民的用药记录
     * @param patientCode 居民code
     * @param recordType 记录方式 1、手动,2、设备
     * @param startTime 时间搜索的开始时间
     * @param endTime 时间搜索的结束时间
     */
    public List<Map<String,Object>> getUseDrugRecordInfo(String patientCode,Integer recordType,String startTime,String endTime,Integer page,Integer pageSize) throws Exception{
        Date startDate = DateUtil.strToDate(startTime);
        Date endDate = DateUtil.strToDate(endTime);
        Specification specification = new Specification<KitDrugUseRecord>() {
            @Override
            public Predicate toPredicate(Root<KitDrugUseRecord> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                List<Predicate> predicates = new ArrayList<>();
                predicates.add(criteriaBuilder.equal(root.get("patientCode"), patientCode));
                if(recordType!=null){
                    predicates.add(criteriaBuilder.equal(root.get("recordType"), recordType));
                }
                if(!StringUtils.isEmpty(startTime)){
                    predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get("useTime"), startDate));
                }
                if(!StringUtils.isEmpty(endTime)){
                    predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get("useTime"), endDate));
                }
                criteriaQuery.orderBy(criteriaBuilder.desc(root.get("useTime")));//按时间降序排序
                criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])));//条件
                return criteriaQuery.getRestriction();
            }
        };
        List<Map<String,Object>> reuslt = new ArrayList<>();
        List<KitDrugUseRecord> resutlList = null;
        if(page!=null&&pageSize!=null){
            page = page-1;
            Pageable pageRequest = new PageRequest(page, pageSize);
            Page<KitDrugUseRecord> resutlTemp = kitDrugUseRecordDao.findAll(specification,pageRequest);
            resutlList = resutlTemp.getContent();
//            return resutlList.getContent();
        }else{
            resutlList = kitDrugUseRecordDao.findAll(specification);
//            return resutlList;
        }
        for(KitDrugUseRecord one :resutlList){
            Map<String,Object> map = new HashMap<>();
            map.put("useTime",one.getUseTime());
            map.put("recordType",one.getRecordType());
            map.put("drugDetail",JSONArray.fromObject(one.getDrugDetail()));
            reuslt.add(map);
        }
        return reuslt;
    }
    /**
     * 获取某个居民的所绑定的所有药盒设备信息
     * @param patientCode
     */
    public List<Map<String,Object>> getAllKitDevice(String patientCode){
        List<PatientDevice> list = patientDeviceDao.findByPatientAndDel(patientCode);
        List<Map<String,Object>> result = new ArrayList<>();
        for(PatientDevice one:list){
            Map<String,Object> map = new HashMap<>();
            map.put("deviceSn",one.getDeviceSn());
            map.put("deviceName",one.getDeviceName());
            result.add(map);
        }
//        JSONArray b = drugDetailJson.getJSONArray("drug");
//        for(int i = 0;i<b.size();i++){
//            String drugName = b.getJSONObject(i).getString("drugName");
//            String measure = b.getJSONObject(i).getString("measure");
//            String drugImgUrl = b.getJSONObject(i).getString("drugImgUrl");
//            System.out.println(i+","+drugName+","+measure+","+drugImgUrl);
        return result;
    }
    /**
     * 统计分析--近期使用药品,药品用法
     * @param deviceSn
     * @return
     * @throws Exception
     */
    public Map<String,Object> drugUseRecordStatistics(String deviceSn) throws Exception{
        JSONArray dataJSONStr = jyKitService.getKitSetInfo(deviceSn);
        if(dataJSONStr.size()>0){
            JSONArray recentDrugInfo = dataJSONStr.getJSONObject(0).getJSONArray("drug_info");//近期使用药品
            JSONArray oneAlarmInfo = dataJSONStr.getJSONObject(0).getJSONArray("one_alarm_info");//一天的所有闹钟信息
            Map<String,Object> resultMap = new HashMap<>();
            List<JSONObject> list = new ArrayList<JSONObject> ();
            JSONObject jsonObj = null;
            resultMap.put("recentDrugInfo",recentDrugInfo);
            for (int i = 0; i < oneAlarmInfo.size(); i++) {
                jsonObj = (JSONObject)oneAlarmInfo.get(i);
                list.add(jsonObj);
            }
            //按闹钟时间排序
            Collections.sort(list, new Comparator<JSONObject>() {
                @Override
                public int compare(JSONObject o1, JSONObject o2) {
                    Long alarmTime1 =  DateUtil.strToDate(o1.get("alarm_time").toString(), format2).getTime();
                    Long alarmTime2 =  DateUtil.strToDate(o1.get("alarm_time").toString(), format2).getTime();
                    if(alarmTime1-alarmTime2>0){
                        return -1;
                    }else if(alarmTime1-alarmTime2<0){
                        return 1;
                    }
                    return 0;
                }
            });
            resultMap.put("oneAlarmInfo",list);
            return resultMap;
        }else{
            throw new Exception("请求的sn码巨烨无返回设备设置信息!");
        }
    }
    /**
     * 本月用药情况
     * @param useDrugStatus (1、按时,2、超时,3、漏用)
     */
    public Map<String,Object> currentMonthDrugUse(String patientCode,Integer useDrugStatus,String deviceSn) throws Exception{
        Map<String,Object> resultMap = new HashMap<>();
        Date monthStart = DateUtil.strToDate(DateUtil.getFristDayOfMonthThisDate(new Date()));
        Date monthEnd = new Date();
        Integer onTimeCount = kitDrugUseRecordDao.findStatisticsCount(patientCode,1,deviceSn,monthStart,monthEnd);//按时次数
        Integer overTimeCount = kitDrugUseRecordDao.findStatisticsCount(patientCode,2,deviceSn,monthStart,monthEnd);//超时次数
        Integer leakageCount = kitDrugUseRecordDao.findStatisticsCount(patientCode,3,deviceSn,monthStart,monthEnd);//漏用次数
        Specification specification = new Specification<KitDrugUseRecord>() {
            @Override
            public Predicate toPredicate(Root<KitDrugUseRecord> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                List<Predicate> predicates = new ArrayList<>();
                predicates.add(criteriaBuilder.equal(root.get("patientCode"), patientCode));
                predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get("useTime"), monthStart));
                predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get("useTime"), monthEnd));
                if(useDrugStatus!=null){
                    predicates.add(criteriaBuilder.equal(root.get("useDrugStatus"), useDrugStatus));
                }
                if(!StringUtils.isEmpty(deviceSn)){
                    predicates.add(criteriaBuilder.equal(root.get("deviceSn"), deviceSn));
                }
                criteriaQuery.orderBy(criteriaBuilder.desc(root.get("useDrugStatus")),criteriaBuilder.desc(root.get("useTime")));//按时间降序排序
                criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])));//条件
                return criteriaQuery.getRestriction();
            }
        };
        List<KitDrugUseRecord> list  = kitDrugUseRecordDao.findAll(specification);
//        if(useDrugStatus==null){
//            list = kitDrugUseRecordDao.findStatistics(patientCode,deviceSn,monthStart,monthEnd);
//        }else{
//            list = kitDrugUseRecordDao.findStatistics(patientCode,useDrugStatus,deviceSn,monthStart,monthEnd);
//        }
        System.out.println("appId:"+UUID.randomUUID().toString());
        System.out.println("appSecret:"+UUID.randomUUID().toString());
        Map<String,Map<String,Object>> map = new LinkedHashMap<>();
        for(KitDrugUseRecord one:list){
            String dateStr = DateUtil.dateToStr(one.getUseTime(),"MM-dd");
            Map<String,Object> oneMap = null;
            if(map.containsKey(dateStr)){
                oneMap = map.get(dateStr);
            }else{
                oneMap = new LinkedHashMap<>();
            }
            Integer useDrugStatusTemp = one.getUseDrugStatus();
            if(oneMap.containsKey(useDrugStatusTemp.toString())){
                oneMap.put(useDrugStatusTemp.toString(),((Integer)oneMap.get(useDrugStatusTemp.toString()))+1);
            }else{
                if(!oneMap.isEmpty()){
                    continue;
                }
                oneMap.put(useDrugStatusTemp.toString(),1);
            }
            map.put(dateStr,oneMap);
        }
        List<Map<String,Object>> resultList = new ArrayList<>();
        for(String key:map.keySet()){
            Map<String,Object> temp = new HashMap<>();
            Map<String,Object> m = map.get(key);
            temp.put("day",key);
            for(String key2:m.keySet()){
                temp.put("statusType",key2);
                temp.put("count",m.get(key2));
            }
            resultList.add(temp);
        }
        //按用药日期排序
        Collections.sort(resultList, new Comparator<Map<String,Object>>() {
            @Override
            public int compare(Map<String,Object> o1, Map<String,Object> o2) {
                Long day1 =  DateUtil.strToDate(o1.get("day").toString(), "MM-dd").getTime();
                Long day2 =  DateUtil.strToDate(o2.get("day").toString(), "MM-dd").getTime();
                if(day1-day2>0){
                    return -1;
                }else if(day1-day2<0){
                    return 1;
                }
                return 0;
            }
        });
        resultMap.put("onTimeCount",onTimeCount);//按时
        resultMap.put("overTimeCount",overTimeCount);//超时
        resultMap.put("leakageCount",leakageCount);//漏用
        resultMap.put("resultList",resultList);
        return resultMap;
    }
    /**
     * 某天的用药记录
     * @param patientCode
     * @param useDrugStatus
     * @param deviceSn
     * @param date 某天的日期 格式:yyyy-MM-dd
     */
    public List<Map<String,Object>> oneDayDrugUse(String patientCode,Integer useDrugStatus,String deviceSn,String date) throws Exception{
        Date dayStart = DateUtil.strToDate(date+" 00:00:00");
        Date dayEnd = DateUtil.strToDate(date+" 23:59:59");
        Specification specification = new Specification<KitDrugUseRecord>() {
            @Override
            public Predicate toPredicate(Root<KitDrugUseRecord> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                List<Predicate> predicates = new ArrayList<>();
                predicates.add(criteriaBuilder.equal(root.get("patientCode"), patientCode));
                predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get("useTime"), dayStart));
                predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get("useTime"), dayEnd));
                if(useDrugStatus!=null){
                    predicates.add(criteriaBuilder.equal(root.get("useDrugStatus"), useDrugStatus));
                }
                if(!StringUtils.isEmpty(deviceSn)){
                    predicates.add(criteriaBuilder.equal(root.get("deviceSn"), deviceSn));
                }
                criteriaQuery.orderBy(criteriaBuilder.asc(root.get("useTime")));//按时间降序排序
                criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])));//条件
                return criteriaQuery.getRestriction();
            }
        };
        List<KitDrugUseRecord> list  = kitDrugUseRecordDao.findAll(specification);
        List<Map<String,Object>> resultList = new ArrayList<>();
        for(KitDrugUseRecord one:list){
            Map<String,Object> temp = new HashMap<>();
            temp.put("useTime",DateUtil.dateToStr(one.getUseTime(),"HH:mm"));
            temp.put("drugDetail",JSONArray.fromObject(one.getDrugDetail()));
            resultList.add(temp);
        }
        return resultList;
    }
}

+ 60 - 58
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/third/kit/JyKitService.java

@ -31,10 +31,8 @@ public class JyKitService {
    @Value("${juye.companyCode}")
    private String companyCode;
//    @Value("${juye.url}")
    private String jyUrl="http://zayata.oicp.net:30080/index.php?s=/Company/Device/";
//    @Value("${juye.token}")
//    private String token;
    @Value("${juye.url}")
    private String jyUrl;
    @Autowired
    private HttpClientUtil httpClientUtil;
    @Autowired
@ -44,10 +42,9 @@ public class JyKitService {
    private String timeTermRedisKey = "juye:getToken:time_term";
    private String tokenRedisKey = "juye:getToken:token";
    /****************************************接口路径 start**************************************************/
    private String kitBinding = jyUrl+"companyBindDevice";//药盒绑定接口
//    private String getKitInfo = jyUrl+"";//获取药盒信息接口
    private String getKitSetInfo = jyUrl+"getInfoByDeviceSn";//获取药盒信息接口
    private String getKitToken = jyUrl+"getToken";//获取巨烨token
    private String kitBinding = "companyBindDevice";//药盒绑定接口
    private String getKitSetInfo = "getInfoByDeviceSn";//获取药盒设置信息接口
    private String getKitToken = "getToken";//获取巨烨token
    /****************************************接口路径 end**************************************************/
    /**
@ -64,13 +61,10 @@ public class JyKitService {
        params.add(new BasicNameValuePair("device_sn", deviceSn));
        params.add(new BasicNameValuePair("tel", tel));
        params.add(new BasicNameValuePair("type", type));
        String response = getRequestPost(params,kitBinding);
        String response = getRequestPost(params,jyUrl+kitBinding);
        JSONObject returnJson = JSONObject.fromObject(response);
        if (!"200".equals(returnJson.getString("code"))) {
//            if(){
//
//            }
            throw new Exception("jy kitBinding error status not 200");
            returnStatus(returnJson.getString("code"));
        }
        if("2".equals(type)){//解绑就不解析data数据
            return new JSONObject();
@ -83,27 +77,6 @@ public class JyKitService {
        throw new Exception("jy kitBinding error data not ");
    }
//    /**
//     * 获取药盒设备信息接口
//     * @param deviceSn
//     * @throws Exception
//     */
//    public JSONArray getKitInfo(String deviceSn) throws Exception{
//        List<NameValuePair> params = new ArrayList<>();
//        params.add(new BasicNameValuePair("device_sn", deviceSn));
//        String response = getRequestPost(params,getKitInfo);
//        JSONObject returnJson = JSONObject.fromObject(response);
//        if (returnJson.getInt("status") != 200) {
//            throw new Exception("jy kitInfo error status not 200");
//        }
//        JSONArray dataJSONStr = null ;
//        if (returnJson.containsKey("data")) {
//            dataJSONStr = returnJson.getJSONArray("data");
//            return dataJSONStr;
//        }else {
//            throw new Exception("jy kitInfo error not data");
//        }
//    }
    /**
     * 获取智能药盒的设置情况
@ -112,46 +85,57 @@ public class JyKitService {
     * @param deviceSn 多个sn以“,”分隔
     * @throws Exception
     */
    public void getKitSetInfo(String deviceSn) throws Exception{
    public JSONArray getKitSetInfo(String deviceSn) throws Exception{
        String token = tokenExpire();//获取token
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("token", token));
        params.add(new BasicNameValuePair("device_sn", deviceSn));
        String response = getRequestPost(params,getKitSetInfo);
        String response = getRequestPost(params,jyUrl+getKitSetInfo);
        JSONObject returnJson = JSONObject.fromObject(response);
        if (!"200".equals(returnJson.getString("code"))) {
            throw new Exception("jy kitInfo error status not 200");
            returnStatus(returnJson.getString("code"));
        }
        JSONArray dataJSONStr = null ;
        if (returnJson.containsKey("data")) {
            dataJSONStr = returnJson.getJSONArray("data");//多个设备信息
            for(int i=0 ;i<dataJSONStr.size();i++){
                JSONObject drugInfo = dataJSONStr.getJSONObject(i).getJSONObject("drug_info");//当前药品信息,即处方信息
                JSONArray alarmInfo = dataJSONStr.getJSONObject(i).getJSONArray("alarm_info");//闹钟信息(设置的全部闹钟列表),即当前用药详情
                for(int j=0 ;j<alarmInfo.size();j++){
                    JSONArray drugs = alarmInfo.getJSONObject(j).getJSONArray("drugs");//某个闹钟药品信息列表
                    String alarmTime = alarmInfo.getJSONObject(j).getString("alarm_time");
                    for(int k=0 ;k<drugs.size();k++){
                        String drugName = drugs.getJSONObject(k).getString("drug_name");
                        String drugAmount = drugs.getJSONObject(k).getString("drug_amount");
                        String drugImgUrl = drugs.getJSONObject(k).getString("drug_imgurl");
                    }
                }
            }
            return dataJSONStr;
        }else {
            throw new Exception("jy kitInfo error not data");
        }
    }
    /**
     * 解析智能药盒的设置情况返回的data数据
     * @param deviceSn 多个sn以“,”分隔
     */
    public void analysisKitSetInfo(String deviceSn) throws Exception{
        JSONArray dataJSONStr = getKitSetInfo(deviceSn);
        for(int i=0 ;i<dataJSONStr.size();i++){
//            JSONObject drugInfo = dataJSONStr.getJSONObject(i).getJSONObject("drug_info");//当前药品信息,即处方信息
            JSONArray recentDrugInfo = dataJSONStr.getJSONObject(i).getJSONArray("drug_info");//近期使用的药品
            JSONArray alarmInfo = dataJSONStr.getJSONObject(i).getJSONArray("alarm_info");//闹钟信息(设置的全部闹钟列表),即当前用药详情
            JSONObject oneAlarmInfo = dataJSONStr.getJSONObject(i).getJSONObject("one_alarm_info");//一天的所有闹钟信息
            for(int j=0 ;j<alarmInfo.size();j++){
                JSONArray drugs = alarmInfo.getJSONObject(j).getJSONArray("drugs");//某个闹钟药品信息列表
                String alarmTime = alarmInfo.getJSONObject(j).getString("alarm_time");
                for(int k=0 ;k<drugs.size();k++){
                    String drugName = drugs.getJSONObject(k).getString("drug_name");
                    String drugAmount = drugs.getJSONObject(k).getString("drug_amount");
                    String drugImgUrl = drugs.getJSONObject(k).getString("drug_imgurl");
                }
            }
        }
    }
    /**
     * 获取巨烨的token
     */
    public String getJuyeToken() throws Exception{
        List<NameValuePair> params = new ArrayList<>();
        String response = getRequestPost(params,getKitToken);
        String response = getRequestPost(params,jyUrl+getKitToken);
        JSONObject returnJson = JSONObject.fromObject(response);
        if (!"200".equals(returnJson.getString("code"))) {
            throw new Exception("jy kitInfo error status not 200");
            returnStatus(returnJson.getString("code"));
        }
        String token = null;
        JSONObject dataJSONStr = null ;
@ -165,9 +149,6 @@ public class JyKitService {
            //存储在redis中
            redisTemplate.opsForValue().set(timeTermRedisKey,timeTerm,overTime,TimeUnit.SECONDS);
            redisTemplate.opsForValue().set(tokenRedisKey,token,overTime,TimeUnit.SECONDS);
            System.out.println(timeTermRedisKey+":"+redisTemplate.getExpire(tokenRedisKey,TimeUnit.SECONDS));
            System.out.println(tokenRedisKey+":"+redisTemplate.getExpire(tokenRedisKey,TimeUnit.SECONDS));
//            redisTemplate.delete("juye:getToken:token");
        }else {
            throw new Exception("jy kitInfo error not data");
        }
@ -225,7 +206,28 @@ public class JyKitService {
        return response;
    }
//    public String returnStatus(){
//
//    }
    /**
     * 巨烨返回的错误code解析
     * @param code
     * @throws Exception
     */
    public void returnStatus(String code) throws Exception{
        //当秘钥token错误的时候,重新请求获取新的token,下次请求就可以
        if("601".equals(code)){
            this.getJuyeToken();
        }
        switch (code){
            case "601": {throw new Exception("601 秘钥错误");}
            case "602": {throw new Exception("602 设备编码为空");}
            case "603": {throw new Exception("603 设备编码位数不对,正确的为19位字符串(utf-8)");}
            case "604": {throw new Exception("604 设备不存在");}
            case "605": {throw new Exception("605 设备已存在于企业设备列表");}
            case "606": {throw new Exception("606 企业编码为空");}
            case "607": {throw new Exception("607 操作类型参数错误,1绑定,2解绑");}
            case "608": {throw new Exception("608 此设备不属于当前企业");}
            case "701": {throw new Exception("701 存在不属于企业的设备编码");}
            case "702": {throw new Exception("702 无效的企业编码");}
            case "703": {throw new Exception("703 秘钥失效");}
        }
    }
}

+ 105 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/kit/DoctorKitController.java

@ -0,0 +1,105 @@
package com.yihu.wlyy.web.doctor.kit;
import com.yihu.wlyy.entity.kit.KitDrugUseRecord;
import com.yihu.wlyy.service.kit.KitService;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
 * Created by 刘文彬 on 2018/7/25.
 */
@RestController
@RequestMapping(value = "/doctor/kit", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(description = "药盒医生端")
public class DoctorKitController extends BaseController {
    @Autowired
    private KitService kitService;
    @RequestMapping(value = "/getUseDrugRecordInfo", method = RequestMethod.GET)
    @ApiOperation("获取居民的用药记录")
    public String getUseDrugRecordInfo(
            @ApiParam(name = "patientCode", value = "居民code", required = true) @RequestParam(value = "patientCode", required = true) String patientCode,
            @ApiParam(name = "recordType", value = "记录方式 1、手动,2、设备", required = false) @RequestParam(value = "recordType", required = false) Integer recordType,
            @ApiParam(name = "startTime", value = "时间搜索的开始时间", required = false) @RequestParam(value = "startTime", required = false) String startTime,
            @ApiParam(name = "endTime", value = "时间搜索的结束时间", required = false) @RequestParam(value = "endTime", required = false) String endTime,
            @ApiParam(name = "page", value = "起始页数", required = false) @RequestParam(value = "page", required = false) Integer page,
            @ApiParam(name = "pageSize", value = "每页总数", required = false) @RequestParam(value = "pageSize", required = false) Integer pageSize){
        try {
            List<Map<String,Object>> result = kitService.getUseDrugRecordInfo(patientCode,recordType,startTime,endTime,page,pageSize);
            return write(200,"获取信息成功!","data",result);
        }catch (Exception e) {
            e.printStackTrace();
            return error(-1,e.getMessage());
        }
    }
    @RequestMapping(value = "/drugUseRecordStatistics", method = RequestMethod.GET)
    @ApiOperation("药盒统计分析--近期使用药品,药品用法")
    public String drugUseRecordStatistics(
            @ApiParam(name = "deviceSn", value = "药盒设备sn码", required = true) @RequestParam(value = "deviceSn", required = true) String deviceSn){
        try {
            Map<String,Object> result =  kitService.drugUseRecordStatistics(deviceSn);
            return write(200,"获取信息成功!","data",result);
        }catch (Exception e) {
            e.printStackTrace();
            return error(-1,e.getMessage());
        }
    }
    @RequestMapping(value = "/currentMonthDrugUse", method = RequestMethod.GET)
    @ApiOperation("药盒统计分析--本月用药情况")
    public String currentMonthDrugUse(
            @ApiParam(name = "patientCode", value = "居民code", required = true) @RequestParam(value = "patientCode", required = true) String patientCode,
            @ApiParam(name = "useDrugStatus", value = "居民用药记录情况(1、按时,2、超时,3、漏用)", required = false) @RequestParam(value = "useDrugStatus", required = false) Integer useDrugStatus,
            @ApiParam(name = "deviceSn", value = "药盒设备sn码", required = false) @RequestParam(value = "deviceSn", required = false) String deviceSn){
        try {
            Map<String,Object> result =  kitService.currentMonthDrugUse(patientCode,useDrugStatus,deviceSn);
            return write(200,"获取信息成功!","data",result);
        }catch (Exception e) {
            e.printStackTrace();
            return error(-1,e.getMessage());
        }
    }
    @RequestMapping(value = "/getAllKitDevice", method = RequestMethod.GET)
    @ApiOperation("药盒统计分析--获取某个居民的所绑定的所有药盒设备信息")
    public String getAllKitDevice(
            @ApiParam(name = "patientCode", value = "居民code", required = true) @RequestParam(value = "patientCode", required = true) String patientCode){
        try {
            List<Map<String,Object>> result =  kitService.getAllKitDevice(patientCode);
            return write(200,"获取信息成功!","data",result);
        }catch (Exception e) {
            e.printStackTrace();
            return error(-1,e.getMessage());
        }
    }
    @RequestMapping(value = "/oneDayDrugUse", method = RequestMethod.GET)
    @ApiOperation("药盒统计分析--获取某个居民的所绑定的所有药盒设备信息")
    public String oneDayDrugUse(
            @ApiParam(name = "patientCode", value = "居民code", required = true) @RequestParam(value = "patientCode", required = true) String patientCode,
            @ApiParam(name = "useDrugStatus", value = "居民用药记录情况(1、按时,2、超时,3、漏用)", required = false) @RequestParam(value = "useDrugStatus", required = false) Integer useDrugStatus,
            @ApiParam(name = "deviceSn", value = "药盒设备sn码", required = false) @RequestParam(value = "deviceSn", required = false) String deviceSn,
            @ApiParam(name = "date", value = "某天的日期 格式:yyyy-MM-dd", required = true) @RequestParam(value = "date", required = true) String date){
        try {
            List<Map<String,Object>> result =  kitService.oneDayDrugUse(patientCode,useDrugStatus,deviceSn,date);
            return write(200,"获取信息成功!","data",result);
        }catch (Exception e) {
            e.printStackTrace();
            return error(-1,e.getMessage());
        }
    }
}

+ 9 - 6
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/kit/KitController.java

@ -6,6 +6,7 @@ import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import net.sf.json.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
@ -19,23 +20,25 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/patient/kit", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(description = "药盒居民端")
public class KitController extends BaseController {
public class PatientKitController extends BaseController {
    @Autowired
    private KitService kitService;
    @Autowired
    private JyKitService jyKitService;
    @RequestMapping(value = "/kitBinding", method = RequestMethod.POST)
    @ApiOperation("药盒绑定 ")
    public String kitBinding(
            @ApiParam(name = "deviceSn", value = "药盒设备sn码", required = true) @RequestParam(value = "deviceSn", required = true) String deviceSn,
            @ApiParam(name = "type", value = "每页显示条数", required = true) @RequestParam(value = "type", required = true) String type){
            @ApiParam(name = "type", value = "1、绑定,2、解绑", required = true) @RequestParam(value = "type", required = true) String type){
        try {
            kitService.kitBinding(deviceSn,type,"915cc7da-5b1d-11e6-8344-fa163e8aee56");
            kitService.kitBinding(deviceSn,type,getUID());
            return write(200,"绑定成功!");
        }catch (Exception e) {
            e.printStackTrace();
            return error(-1,"绑定失败!");
            return error(-1,e.getMessage());
        }
    }
}

+ 16 - 2
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/kit/JyKitController.java

@ -7,6 +7,7 @@ import com.yihu.wlyy.service.third.kit.JyKitService;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import net.sf.json.JSONArray;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.springframework.beans.factory.annotation.Autowired;
@ -40,7 +41,7 @@ public class JyKitController extends BaseController {
            @ApiParam(name = "useDrugStatus", value = "用药状态(1、按时,2、超时,3、漏用)")@RequestParam(value = "useDrugStatus", required = true) String useDrugStatus,
            @ApiParam(name = "kitSn", value = "药盒的sn码")@RequestParam(value = "kitSn", required = true) String kitSn,
            @ApiParam(name = "kitAccountId", value = "药盒账号id")@RequestParam(value = "kitAccountId", required = true) String kitAccountId,
            @ApiParam(name = "drugDetail", value = "药品清单json串")@RequestParam(value = "drugDetail", required = true) String drugDetail) {
            @ApiParam(name = "drugDetail", value = "药品清单json串 例如:[{\"drugName\":\"\\u6c2f\\u9709\\u7d20\\u6ef4\\u773c\\u6db2\",\"measure\":\"1.0\",\"drugImgUrl\":\"\"}]")@RequestParam(value = "drugDetail", required = true) String drugDetail) {
        try {
            System.out.println("useDrugRecord-->useTime:"+useTime+"normalTime:"+normalTime+"recordType:"+recordType+"useDrugStatus:"+useDrugStatus+"kitSn:"+kitSn+"kitAccountId:"+kitAccountId+"drugDetail:"+drugDetail);
            kitService.useDrugRecord(useTime,normalTime,recordType,useDrugStatus,kitSn,kitAccountId,drugDetail);
@ -62,7 +63,7 @@ public class JyKitController extends BaseController {
            @RequestParam(value = "kitAccountId", required = true) String kitAccountId,
            @ApiParam(name = "remindType", value = "提醒类型(1、到点,2、超时,3、漏用)")
            @RequestParam(value = "remindType", required = true) String remindType,
            @ApiParam(name = "drugDetail", value = "药品清单json串")
            @ApiParam(name = "drugDetail", value = "药品清单json串 例如:[{\"drugName\":\"\\u6c2f\\u9709\\u7d20\\u6ef4\\u773c\\u6db2\",\"measure\":\"1.0\",\"drugImgUrl\":\"\"}]")
            @RequestParam(value = "drugDetail", required = true) String drugDetail) {
        try {
            System.out.println("useRemindRecord-->normalTime:"+normalTime+"kitSn:"+kitSn+"kitAccountId:"+kitAccountId+"remindType:"+remindType+"drugDetail:"+drugDetail);
@ -74,4 +75,17 @@ public class JyKitController extends BaseController {
        }
    }
    @RequestMapping(value = "/getKitSetInfo", method = RequestMethod.GET)
    @ApiOperation("获取智能药盒的设置情况")
    public String kitBinding(
            @ApiParam(name = "deviceSn", value = "药盒设备sn码", required = true) @RequestParam(value = "deviceSn", required = true) String deviceSn){
        try {
            JSONArray result = jyKitService.getKitSetInfo(deviceSn);
            return write(200,"获取信息成功!","data",result);
        }catch (Exception e) {
            e.printStackTrace();
            return error(-1,e.getMessage());
        }
    }
}

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

@ -186,8 +186,7 @@ ylz:
  gateway:
    url: http://www.mstpay.com:1300/huangsb
#药盒请求巨烨的域名以及巨烨给予的公司编号
juye:
#  url: http://api.zayata.com/index.php?s=/Company/Device/
  url: zayata.ocip.net:30080/index.php?s=/Company/Device/
  token: YTgzYjc2YWIzZjdjOTA1MTE0ODY2YjcyOGNkYWFmZWR6YXlhdGFjb21wYW55
  url: http://zayata.oicp.net:30080/index.php?s=/Company/Device/
  companyCode: 86350206000000001

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

@ -187,3 +187,8 @@ ylz:
  termId: aaa
  gateway:
    url: http://120.42.37.94:1301/ehc-empi-web/gateway
#药盒请求巨烨的域名以及巨烨给予的公司编号
juye:
  url: http://api.zayata.com/index.php?s=/Company/Device/
  companyCode: 86350206000000001