Просмотр исходного кода

Merge branch 'dev' of http://192.168.1.220:10080/Amoy/patient-co-management into dev

humingfen 7 лет назад
Родитель
Сommit
9b3df7b920
24 измененных файлов с 1104 добавлено и 230 удалено
  1. 3 1
      patient-co/patient-co-doctor-assistant/src/main/java/com/yihu/wlyy/service/common/account/PatientService.java
  2. 6 2
      patient-co/patient-co-doctor-assistant/src/main/java/com/yihu/wlyy/service/weixin/wxpay/service/OnePayService.java
  3. 5 1
      patient-co/patient-co-doctor-assistant/src/main/java/com/yihu/wlyy/web/common/account/LoginController.java
  4. 1 1
      patient-co/patient-co-doctor-assistant/src/main/java/com/yihu/wlyy/web/common/account/WechatController.java
  5. 4 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/interceptors/GateWayInterceptor.java
  6. 3 1
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/kit/KitDrugDetailDao.java
  7. 18 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/kit/KitDrugUseRecordDao.java
  8. 3 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/patient/PatientDeviceDao.java
  9. 7 6
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/health/PatientHealthIndexService.java
  10. 28 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/health/PatientHealthRecordService.java
  11. 1 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/label/SignPatientLabelInfoService.java
  12. 147 6
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java
  13. 287 76
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/SignWebService.java
  14. 120 34
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statisticsES/StatisticsESService.java
  15. 249 27
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/kit/KitService.java
  16. 60 58
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/third/kit/JyKitService.java
  17. 2 1
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/common/account/WechatController.java
  18. 105 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/kit/DoctorKitController.java
  19. 17 4
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/sign/DoctorSignController.java
  20. 9 6
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/kit/KitController.java
  21. 6 1
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/sign/FamilyContractController.java
  22. 16 2
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/kit/JyKitController.java
  23. 2 3
      patient-co/patient-co-wlyy/src/main/resources/application-devtest.yml
  24. 5 0
      patient-co/patient-co-wlyy/src/main/resources/application-prod.yml

+ 3 - 1
patient-co/patient-co-doctor-assistant/src/main/java/com/yihu/wlyy/service/common/account/PatientService.java

@ -142,7 +142,9 @@ public class PatientService extends TokenService {
            patient.setOpenidTime(new Date());
        }
        //System.out.println("========openid=======");
        patient.setOpenid(openid);
        if(!"undefined".equals(openid)){
            patient.setOpenid(openid);
        }
        Patient ps = patientDao.save(patient);
        System.out.print(new JSONObject(ps));
        if (StringUtils.isNotEmpty(patient.getOpenid())) {

+ 6 - 2
patient-co/patient-co-doctor-assistant/src/main/java/com/yihu/wlyy/service/weixin/wxpay/service/OnePayService.java

@ -86,7 +86,9 @@ public class OnePayService {
        //更新患者信息
        if (card != null) {
            Patient p = patientDao.findByCode(patient);
            p.setOpenid(openid);
            if(!"undefined".equals(openid)){
                p.setOpenid(openid);
            }
            p.setSsc(card.getAttachCardNo());
//            增加绑定电子社保卡信息
            p.setSicardStatus(1);
@ -475,7 +477,9 @@ public class OnePayService {
                //保存到患者表
                Patient p = patientDao.findByCode(patient);
                p.setOpenid(openid);
                if(!"undefined".equals(openid)){
                    p.setOpenid(openid);
                }
//            增加绑定电子社保卡信息
                p.setSicardTime(new Date());
                patientDao.save(p);

+ 5 - 1
patient-co/patient-co-doctor-assistant/src/main/java/com/yihu/wlyy/web/common/account/LoginController.java

@ -114,6 +114,10 @@ public class LoginController extends BaseController {
                         @ApiParam(required = false, name = "platform", value = "医生端pc,取药系统 或者对外系统") @RequestParam(required = false) Integer platform,
                         @ApiParam(required = false, name = "password", value = "密码") @RequestParam(required = false) String password,
                         @ApiParam(required = false, name = "openid", value = "openid") @RequestParam(required = false) String openid) {
        if(StringUtils.isNotBlank(openid)&&"undefined".equals(openid)){
            return error(-1, "openid参数不合法");
        }
        String errorMessage;
        LoginLog loginLog = new LoginLog();
        loginLog.setCreateTime(new Date());
@ -253,7 +257,7 @@ public class LoginController extends BaseController {
                    }
                    loginLogService.saveLog(loginLog);
                    if(StringUtils.isNotBlank(openid)){
                    if(!"undefined".equals(openid)&&StringUtils.isNotBlank(openid)){
                        doctor.setOpenid(openid);
                        doctorService.save(doctor);
                    }

+ 1 - 1
patient-co/patient-co-doctor-assistant/src/main/java/com/yihu/wlyy/web/common/account/WechatController.java

@ -263,7 +263,7 @@ public class WechatController extends WeixinBaseController {
            password = StringUtils.reverse(password);
            patient.setPassword(MD5.GetMD5Code(password + salt));
            patient.setSsc(ssc);
            if (!org.springframework.util.StringUtils.isEmpty(openid)) {
            if (!org.springframework.util.StringUtils.isEmpty(openid)&&!"undefined".equals(openid)) {
                patient.setOpenid(openid);
                patient.setOpenidTime(new Date());
            }

+ 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);

+ 7 - 6
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/health/PatientHealthIndexService.java

@ -299,7 +299,7 @@ public class PatientHealthIndexService extends BaseService {
    /**
     * 推送信息
     */
    private void sendMessage(String content, Patient patient, DevicePatientHealthIndex model) {
    private void sendMessage(String content, Patient patient, DevicePatientHealthIndex model,String oldMsgContent) {
        String patientCode = patient.getCode();
        String patientName = patient.getName();
        // 消息接收者
@ -370,7 +370,7 @@ public class PatientHealthIndexService extends BaseService {
                json.put("receiver", receiver);
                json.put("type", MessageType.MESSAGE_TYPE_DOCTOR_HEALTH_INDEX.D_HI_01.name());
                json.put("title", MessageType.MESSAGE_TYPE_DOCTOR_HEALTH_INDEX.体征指标.name());
                json.put("msg", content);
                json.put("msg", oldMsgContent);
                json.put("data", "");
                array.put(json);
            }
@ -524,6 +524,7 @@ public class PatientHealthIndexService extends BaseService {
        int type = data.getType();
        String msgContent = "";
        String oldMsgContent = "";
        //血糖校验
        if (type == 1) {
            // 血糖记录,查询患者血糖预警值
@ -551,7 +552,7 @@ public class PatientHealthIndexService extends BaseService {
            // 餐后
            if (index % 2 == 0) {
                if (!checkHealthIndex(NumberUtils.toDouble(value1), maxValueAfter, minValueAfter)) {
//                    msgContent += patient.getName() + "血糖异常(" + value1 + "mmol/L)";
                    oldMsgContent += patient.getName() + "血糖异常(" + value1 + "mmol/L)";
                    if(checkHealthIndexDetail(NumberUtils.toDouble(value1), maxValueAfter ,minValueAfter)==1){
                        msgContent = "<a>"+patient.getName()+"</a><span style=\"color: #FF4C4C;\">血糖偏高</span>";
                    }else if(checkHealthIndexDetail(NumberUtils.toDouble(value1), maxValueAfter ,minValueAfter)==2){
@ -562,7 +563,7 @@ public class PatientHealthIndexService extends BaseService {
                }
            } else { //餐前
                if (!checkHealthIndex(NumberUtils.toDouble(value1), maxValueBefore, minValueBefore)) {
//                    msgContent += patient.getName() + "血糖异常(" + value1 + "mmol/L)";
                    oldMsgContent += patient.getName() + "血糖异常(" + value1 + "mmol/L)";
                    if(checkHealthIndexDetail(NumberUtils.toDouble(value1), maxValueAfter ,minValueAfter)==1){
                        msgContent = "<a>"+patient.getName()+"</a><span style=\"color: #FF4C4C;\">血糖偏高</span>";
                    }else if(checkHealthIndexDetail(NumberUtils.toDouble(value1), maxValueAfter ,minValueAfter)==2){
@ -598,7 +599,7 @@ public class PatientHealthIndexService extends BaseService {
            }
            // 收缩压/舒张压校验
            if (!checkHealthIndex(NumberUtils.toDouble(value1), maxValueSSY, minValueSSY) || !checkHealthIndex(NumberUtils.toDouble(value2), maxValueSZY, minValueSZY)) {
//                msgContent = patient.getName() + "血压异常(舒张压 " + value2 + "mmHg、收缩压 " + value1 + "mmHg)";
                oldMsgContent = patient.getName() + "血压异常(舒张压 " + value2 + "mmHg、收缩压 " + value1 + "mmHg)";
                if(checkHealthIndexDetail(NumberUtils.toDouble(value1), maxValueSSY, minValueSSY)==1||checkHealthIndexDetail(NumberUtils.toDouble(value2), maxValueSZY, minValueSZY)==1){
                    msgContent = "<a>"+patient.getName()+"</a><span style=\"color: #FF4C4C;\">血压偏高</span>";
                }else if(checkHealthIndexDetail(NumberUtils.toDouble(value1), maxValueSSY, minValueSSY)==2||checkHealthIndexDetail(NumberUtils.toDouble(value2), maxValueSZY, minValueSZY)==2){
@ -610,7 +611,7 @@ public class PatientHealthIndexService extends BaseService {
        //超标则发送消息
        if (msgContent != null && msgContent.length() > 0) {
            sendMessage(msgContent, patient, data);
            sendMessage(msgContent, patient, data,oldMsgContent);
        }
    }

+ 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;
	}

+ 1 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/label/SignPatientLabelInfoService.java

@ -1777,6 +1777,7 @@ public class SignPatientLabelInfoService extends BaseService {
     * @param custom      自定义标签
     * @return
     */
    @Deprecated
    public int setPatientLabels(String patient, String idcard, String patientName, String health, String disease, String custom, String doctor, String caller) {
        Patient p = patientDao.findByCode(patient);

+ 147 - 6
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java

@ -325,7 +325,7 @@ public class FamilyContractService extends BaseService {
     * @param patient 患者标识
     * @return
     */
    public JSONObject findDoctorMainPage(String patient, String doctor) {
        public JSONObject findDoctorMainPage(String patient, String doctor) {
        JSONObject json = new JSONObject();
        // 查询医生基本信息
        Doctor d = doctorDao.findByCode(doctor);
@ -1680,11 +1680,13 @@ public class FamilyContractService extends BaseService {
            return result;
        }
        // 患者标签设置
        if (!(labelInfoService.setPatientLabels(p.getCode(), p.getIdcard(),
                p.getName(), healthLabel, disease, customLabel, sf.getDoctor(), caller) == 1)) {
            throw new Exception("patient sign label settting error:" + p.getIdcard());
        }
        // 患者标签设置1.4.9.1
        labelInfoService.resetPatientLabels(p.getCode(),healthLabel,disease,customLabel);
//        if (!(labelInfoService.setPatientLabels(p.getCode(), p.getIdcard(),
//                p.getName(), healthLabel, disease, customLabel, sf.getDoctor(), caller) == 1)) {
//            throw new Exception("patient sign label settting error:" + p.getIdcard());
//        }
        // 推送消息消息给微信端
        if (type == 1) {
@ -3961,6 +3963,145 @@ public class FamilyContractService extends BaseService {
        return 1;
    }
    public int signRenewHealth(String doctor, String patient, String reason, String countryCode,String medicareNumber,String sevId) throws Exception {
        Patient p = patientDao.findByCode(patient);
        if (p == null) {
            return -1;
        }
        //1.4.2 设置医疗卡号
        setPatientMedicareNo(patient,medicareNumber);
        Doctor d = doctorDao.findByCode(doctor);
        if (d == null) {
            return -3;
        }
        List<SignFamily> res = signFamilyDao.findByDoctorAndPatientHossPost(patient, DateUtil.getSignYear() + "");
        if (res != null && res.size() > 0) {
            return -2;
        }
        SignFamily sf = new SignFamily();
        String sql = "SELECT t.doctor,t.team_code teamCode,t.admin_team_code adminTeamCode,t.mobile FROM wlyy_sign_family t WHERE t.patient ='" + patient + "' AND t.status=-4 AND t.expenses_status='1' AND t.sign_year ='" + (DateUtil.getSignYear() - 1) + "'";
        List<Map<String, Object>> signs = jdbcTemplate.queryForList(sql);
        if (signs == null || signs.size() == 0) {
            return -4;
        }
        Map<String, Object> sign = signs.get(0);
        //判断续签医生是否一致
        if (doctor.equals(sign.get("doctor"))) {
            //如果一致保存团队信息
            sf.setRenewFlag("1");
            sf.setTeamCode((String) sign.get("teamCode"));
            Integer c = (Integer) sign.get("adminTeamCode");
            sf.setAdminTeamId(c.longValue());
        } else {
            //如果不一致 查看医生团队
            sf.setRenewFlag("2");
        }
        sf.setCode(getCode());
        sf.setCzrq(new Date());
        sf.setPatientApplyDate(new Date());
        if (d != null) {
            sf.setDoctorHealth(doctor);
            sf.setDoctorHealthName(d.getName());
        }
        sf.setMobile((String) sign.get("mobile"));
        sf.setName(p.getName());
        sf.setIdcard(p.getIdcard());
        sf.setOpenid(p.getOpenid());
        sf.setPatient(patient);
        sf.setHospital(d.getHospital());
        sf.setHospitalName(d.getHospitalName());
        sf.setSsc(p.getSsc());
        sf.setStatus(0);//0为初始状态
        sf.setType(2);// 设置为家庭签约
        sf.setSignType("1");//用户申请
        sf.setSignSource("2");//签约来源【1 社区签约 2 移动签约】
        //******************扣费接口**********************/
        sf.setExpensesStatus("0");   //扣费状态 【0未扣费 1已扣费 2已退费】
        sf.setSignYear(DateUtil.getSignYear() + "");
        //sf.setBegin(DateUtil.stringToDate(DateUtil.getSignYear() + "-07-01 00:00:00", "yyyy-MM-dd HH:mmm:ss"));
        sf.setBegin(new Date());
        sf.setEnd(DateUtil.stringToDate(DateUtil.getSignYear() + 1 + "-06-30 23:59:59", "yyyy-MM-dd HH:mmm:ss"));
        if (StringUtils.isNotBlank(reason)) {
            sf.setRenewChangeReason(reason);
        }
        //1.3.5新增居委会字段
        signWebService.setPatientCountryFamily(countryCode, sf);
        SignFamily temp = signFamilyDao.save(sf);
        //设置居民服务类型
        //1.4.9.1版本
        signWebService.setSevId(temp,sevId);
        if (temp != null) {
            // 添加签约消息
            Message message = new Message();
            message.setCzrq(new Date());
            message.setCreateTime(new Date());
            message.setContent("您有一条新的家庭医生续签申请!");
            message.setRead(1);//设置未读
            message.setReceiver(doctor);//设置接受医生的code
            message.setSender(patient);//设置发送的用户
            message.setSenderName(p.getName());
            message.setCode(getCode());
            message.setSenderPhoto(p.getPhoto());
            message.setTitle("家庭续签申请");
            message.setType(1);//家庭签约信息
            message.setReadonly(1);//是否只读消息
            if ("1".equals(sf.getRenewFlag())) {
                message.setSignStatus("8");//续签
            } else {
                message.setSignStatus("9");//改签
            }
            //message.setSignStatus("1");//过期以后,变为1为签约
            message.setSex(p.getSex());
            message.setOver("1");//未处理
            message.setData(sf.getCode());
            messageDao.save(message);
            if(messageService.getMessageNoticeSettingByMessageType(doctor,"1",MessageNoticeSetting.MessageTypeEnum.signSwitch.getValue())){
                // 发送消息给医生
                JSONObject jsonObject = doctorWorkTimeService.isDoctorWorking(doctor);
                if (jsonObject.getString("status").equals("1")) {
                    //如果在工作时间内就推送
                    pushMsgTask.put(doctor, MessageType.MESSAGE_TYPE_DOCTOR_NEW_SIGN_WEB.D_SW_01.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_SIGN_WEB.家庭签约.name(), p.getName() + "申请与您续签家庭医生", patient);
                }
                //            新增发送医生助手模板消息 v1.4.0 by wujunjie
                if (StringUtils.isNotEmpty(d.getOpenid())){
                    String url = doctorAssistant + "/wlyy/feldsher/sendDoctorTemplates";
                    List<NameValuePair> params = new ArrayList<>();
                    params.add(new BasicNameValuePair("type", "5"));
                    params.add(new BasicNameValuePair("openId", d.getOpenid()));
                    params.add(new BasicNameValuePair("url", targetUrl));
                    params.add(new BasicNameValuePair("first", d.getName() + "医生您好,你有一条新的签约申请待处理"));
                    params.add(new BasicNameValuePair("remark", "请尽快使用厦门i健康APP处理居民的签约申请"));
                    SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
                    String date = format.format(new Date());
                    String keywords = date + "," + p.getName();
                    params.add(new BasicNameValuePair("keywords", keywords));
                    httpClientUtil.post(url, params, "UTF-8");
                }
            }
        }
        return 1;
    }
    /**
     * @param code
     * @return

+ 287 - 76
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/SignWebService.java

@ -1896,11 +1896,6 @@ public class SignWebService extends BaseService {
                                 String expenses,
                                 String refuseReason) throws Exception {
//        List<SignFamily> renews = signFamilyDao.findByDoctorAndPatientOverDue(dotorCode, patientCode, signYear);
//
//        if (renews == null || renews.size() == 0) {
//            renews = signFamilyDao.findByDoctorHealthAndPatient(dotorCode, patientCode, signYear);
//        }
        SignFamily renew = signFamilyDao.findByCode(signCode);
        if (renew != null) {
@ -2063,6 +2058,180 @@ public class SignWebService extends BaseService {
        return 1;
    }
    /**
     * 1.4.9.1健管师同意流程
     * 健康管理师同意流程
     * @param access_token 微信登录证明
     * @param dotorCode  当前登录医生
     * @param patientCode 患者code
     * @param state 同意状态
     * @param mesId 消息id
     * @param signCode 签约code
     * @param health 健康情况多条“,”分隔
     * @param disease 疾病类型 格式同上
     * @param custom 普通标签 格式同上
     * @param sevId 服务类型
     * @param doctor 全科医生编码
     * @param teamCode 团队
     * @param expenses 收费类别
     * @param refuseReason 拒绝原因
     * @return
     * @throws Exception
     */
    public int agreeRenewHealth(String access_token, String dotorCode, String patientCode, String state, Long mesId, String signCode, String health,
                                 String disease,
                                 String custom,
                                 String sevId, String doctor,
                                 Long teamCode,
                                 String expenses,
                                 String refuseReason) throws Exception {
        SignFamily renew = signFamilyDao.findByCode(signCode);
        if (renew != null) {
            int status = renew.getStatus();
            if (status == 0) {
                if (StringUtils.isNotBlank(state)) {
                    if ("0".equals(state)) {
                        renew.setStatus(-2);
                        renew.setRefuseSpeak(refuseReason);
                    } else if ("1".equals(state)) {
                        renew.setStatus(1);
                        //1.3.3.2新增需求
                        //设置居民服务类型
                        setSevId(renew, sevId);
                        //1.3.3.2新增需求
                        //设置居民标签
                        signPatientLabelInfoService.resetPatientLabels(renew.getPatient(), health, disease, custom);
                        //1.4.9.1 建管师分配医生
                        if (StringUtils.isNotBlank(doctor)) {
                            setSignFamilyDoctor(renew, doctor);
                        }
                        //1.3.3.2设置新团队
                        if (teamCode != null && teamCode != 0) {
                            renew.setAdminTeamId(teamCode);
                        }
                        renew.setExpensesType(StringUtils.isEmpty(expenses) ? "01" : expenses);//收费类别
                    }
                }
                renew.setApplyDate(new Date());
                //1.3.3.4 根据团队设置标识
                setRenewFlag(renew, teamCode);
                signFamilyDao.save(renew);
                //消息设为已读
                setMessState(mesId);
                if ("1".equals(state)) {
                    setRenewLog(renew);
                }
                //发送微信模板消息
                JSONObject data = new JSONObject();
                data.put("doctorName", renew.getDoctorName());
                data.put("date", DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
                data.put("doctor", dotorCode);
                data.put("toUser", patientCode);
                data.put("represented", patientCode);
                data.put("toName", renew.getName());
                data.put("isRenew", "1");//表示为续签操作
                data.put("signCode", signCode);
                Patient patient = patientService.findByCode(renew.getPatient());
                if (patient != null && StringUtils.isNotBlank(patient.getOpenid())) {
                    data.put("agent","0");
                    if ("0".equals(state)) {
                        if (StringUtils.isNotEmpty(refuseReason)){
                            data.put("content", refuseReason);
                        }else {
                            data.put("content", "家庭医生续签");
                        }
                        WechatTemplateConfig templateConfig = templateConfigDao.findByScene("template_sign_failed","failed");
                        String first = templateConfig.getFirst();
                        first = first.replace("key1",(renew.getName()==null?"":renew.getName())).replace("br","\n");
                        String remark = templateConfig.getRemark();
                        data.put("first", first);
                        data.put("remark", remark);
                        pushMsgTask.putWxMsg(access_token, 2, patient.getOpenid(), patient.getName(), data);
                    } else if ("1".equals(state)) {
                        WechatTemplateConfig templateConfig = templateConfigDao.findByScene("template_sign_success","success");
                        String first = templateConfig.getFirst();
                        first = first.replace("key1",(renew.getName()==null?"":renew.getName())).replace("br","\n");
                        String remark = templateConfig.getRemark();
                        String keyword4 = templateConfig.getKeyword4();
                        data.put("first", first);
                        data.put("remark", remark);
                        data.put("content", keyword4);
                        pushMsgTask.putWxMsg(access_token, 1, patient.getOpenid(), patient.getName(), data);
                    }
                }else {
                    //发送代理人
                    JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patient.getCode(), patient.getOpenid());
                    data.put("agent","1");
                    if (jsonArray != null && jsonArray.length() > 0) {
                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject j = jsonArray.getJSONObject(i);
                            Patient member = (Patient) j.get("member");
                            data.remove("toUser");
                            data.put("toUser", member.getCode());
                            //String first = (String) json.get("first");
                            if ("0".equals(state)) {
                                WechatTemplateConfig templateConfig = templateConfigDao.findByScene("template_sign_failed","failed");
                                String first = templateConfig.getFirst();
                                first = first.replace("key1",(patient.getName()==null?"":patient.getName())).replace("br","\n");
                                String remark = templateConfig.getRemark();
                                data.put("first", weiXinOpenIdUtils.getTitleMes(patient, (int) j.get("relation"), patient.getName()) + "\n" + first);
                                data.put("remark", remark);
                                pushMsgTask.putWxMsg(access_token, 2, member.getOpenid(), patient.getName(), data);
                            } else if ("1".equals(state)) {
                                WechatTemplateConfig templateConfig = templateConfigDao.findByScene("template_sign_success","success");
                                String first = templateConfig.getFirst();
                                first = first.replace("key1",(patient.getName()==null?"":patient.getName())).replace("br","\n");
                                String remark = templateConfig.getRemark();
                                data.put("first", weiXinOpenIdUtils.getTitleMes(patient, (int) j.get("relation"), patient.getName()) + "\n" + first);
                                data.put("remark", remark);
                                pushMsgTask.putWxMsg(access_token, 1, member.getOpenid(), patient.getName(), data);
                            }
                        }
                    }
                }
            } else if (status == 1) {
                //已经同意
                return 2;
            } else if (status == -1) {
                //已拒绝
                return 3;
            } else if (status == -2) {
                //已拒绝
                return 4;
            } else if (status == -3) {
                //已解约
                return 5;
            } else if (status == -4) {
                //已到期
                return 6;
            } else {
                //已取消
                return 7;
            }
        } else {
            return 0;
        }
        return 1;
    }
    /**
     * 获取年度列表
     * 团队
@ -2626,85 +2795,127 @@ public class SignWebService extends BaseService {
        renew.setDoctorHealth(hd.getCode());
    }
    public void setSignFamilyDoctor(SignFamily renew, String doctor) {
        Doctor d = doctorDao.findByCode(doctor);
        //创建团队
        DoctorTeam t = new DoctorTeam();
        String code = getCode();
        t.setCode(code);
        t.setName(renew.getDoctorName() + "," + d.getName() + "," + renew.getName());
        t.setSignType("2");
        t.setDel("1");
        t.setCzrq(new Date());
        //新建健康管理师
        DoctorTeamMember hdmb = new DoctorTeamMember();
        hdmb.setName(renew.getDoctorHealthName());
        hdmb.setMemberCode(renew.getDoctorHealth());
        hdmb.setCode(getCode());
        hdmb.setDel("1");
        hdmb.setCzrq(new Date());
        hdmb.setTeam(code);
        hdmb.setType(3);
        hdmb.setSignType("2");
        //新建全科医生成员
        DoctorTeamMember dmb = new DoctorTeamMember();
        dmb.setName(renew.getDoctorName());
        dmb.setMemberCode(renew.getDoctor());
        dmb.setCode(getCode());
        dmb.setDel("1");
        dmb.setCzrq(new Date());
        dmb.setTeam(code);
        dmb.setType(2);
        dmb.setSignType("2");
        //新建居民成员
        DoctorTeamMember pmb = new DoctorTeamMember();
        pmb.setName(renew.getName());
        pmb.setMemberCode(renew.getPatient());
        pmb.setCode(getCode());
        pmb.setDel("1");
        pmb.setCzrq(new Date());
        pmb.setTeam(code);
        pmb.setType(5);
        pmb.setSignType("2");
        //新增团队成员
        doctorTeamMemberDao.save(hdmb);
        doctorTeamMemberDao.save(dmb);
        doctorTeamMemberDao.save(pmb);
        //保存团队
        doctorTeamDao.save(t);
        //设置签约医生
        renew.setDoctor(doctor);
        renew.setDoctorName(d.getName());
        renew.setSignDoctorCode(doctor);
        renew.setSignDoctorName(d.getName());
        renew.setTeamCode(code);
        return ;
    }
    public void updateHealthDoctor(SignFamily renew, String healthDoctor) {
        DoctorTeam team = doctorTeamDao.findByCode(renew.getTeamCode());
        if (StringUtils.isNotBlank(renew.getDoctorHealth())) {
            //删除之前健管师成员
            doctorTeamMemberDao.deleteMember(renew.getDoctorHealth());
        }
        Doctor hd = doctorDao.findByCode(healthDoctor);
        if (hd == null) {
            return;
        }
        if(team!=null){
            team.setName(renew.getDoctorName() + "," + hd.getName() + "," + renew.getName());
            //新建健康管理师
            DoctorTeamMember hdmb = new DoctorTeamMember();
            hdmb.setName(hd.getName());
            hdmb.setMemberCode(healthDoctor);
            hdmb.setCode(getCode());
            hdmb.setDel("1");
            hdmb.setCzrq(new Date());
            hdmb.setTeam(team.getCode());
            hdmb.setType(3);
            hdmb.setSignType("2");
            //新增团队成员
            doctorTeamMemberDao.save(hdmb);
            //保存团队
            doctorTeamDao.save(team);
        }else{
            //创建团队
            DoctorTeam t = new DoctorTeam();
            String code = getCode();
            t.setCode(code);
            t.setName(renew.getDoctorName() + "," + hd.getName() + "," + renew.getName());
            t.setSignType("2");
            t.setDel("1");
            t.setCzrq(new Date());
            //新建健康管理师
            DoctorTeamMember hdmb = new DoctorTeamMember();
            hdmb.setName(hd.getName());
            hdmb.setMemberCode(healthDoctor);
            hdmb.setCode(getCode());
            hdmb.setDel("1");
            hdmb.setCzrq(new Date());
            hdmb.setTeam(code);
            hdmb.setType(3);
            hdmb.setSignType("2");
            //新建全科医生成员
            DoctorTeamMember dmb = new DoctorTeamMember();
            dmb.setName(renew.getDoctorName());
            dmb.setMemberCode(renew.getDoctor());
            dmb.setCode(getCode());
            dmb.setDel("1");
            dmb.setCzrq(new Date());
            dmb.setTeam(code);
            dmb.setType(2);
            dmb.setSignType("2");
            //新建居民成员
            DoctorTeamMember pmb = new DoctorTeamMember();
            pmb.setName(renew.getName());
            pmb.setMemberCode(renew.getPatient());
            pmb.setCode(getCode());
            pmb.setDel("1");
            pmb.setCzrq(new Date());
            pmb.setTeam(code);
            pmb.setType(5);
            pmb.setSignType("2");
            //新增团队成员
            doctorTeamMemberDao.save(hdmb);
            doctorTeamMemberDao.save(dmb);
            doctorTeamMemberDao.save(pmb);
            //保存团队
            doctorTeamDao.save(t);
        }
        //创建团队
        DoctorTeam t = new DoctorTeam();
        String code = getCode();
        t.setCode(code);
        t.setName(renew.getDoctorName() + "," + hd.getName() + "," + renew.getName());
        t.setSignType("2");
        t.setDel("1");
        t.setCzrq(new Date());
        //新建健康管理师
        DoctorTeamMember hdmb = new DoctorTeamMember();
        hdmb.setName(hd.getName());
        hdmb.setMemberCode(healthDoctor);
        hdmb.setCode(getCode());
        hdmb.setDel("1");
        hdmb.setCzrq(new Date());
        hdmb.setTeam(code);
        hdmb.setType(3);
        hdmb.setSignType("2");
        //新建全科医生成员
        DoctorTeamMember dmb = new DoctorTeamMember();
        dmb.setName(renew.getDoctorName());
        dmb.setMemberCode(renew.getDoctor());
        dmb.setCode(getCode());
        dmb.setDel("1");
        dmb.setCzrq(new Date());
        dmb.setTeam(code);
        dmb.setType(2);
        dmb.setSignType("2");
        //新建居民成员
        DoctorTeamMember pmb = new DoctorTeamMember();
        pmb.setName(renew.getName());
        pmb.setMemberCode(renew.getPatient());
        pmb.setCode(getCode());
        pmb.setDel("1");
        pmb.setCzrq(new Date());
        pmb.setTeam(code);
        pmb.setType(5);
        pmb.setSignType("2");
        //新增团队成员
        doctorTeamMemberDao.save(hdmb);
        doctorTeamMemberDao.save(dmb);
        doctorTeamMemberDao.save(pmb);
        //保存团队
        doctorTeamDao.save(t);
        renew.setTeamCode(code);
        renew.setDoctorHealthName(hd.getName());
        renew.setDoctorHealth(hd.getCode());
    }

+ 120 - 34
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statisticsES/StatisticsESService.java

@ -5834,44 +5834,23 @@ public class StatisticsESService {
                }
            }
        }
        Map<String, SaveModel> applyMap = new HashMap<>();
        applyAmountList.stream().forEach(one -> {
            if ("5".equals(low_level)) {
                applyMap.put(one.getTeam(), one);
            } else if ("4".equals(low_level)) {
                applyMap.put(one.getHospital(), one);
            } else if ("3".equals(low_level)) {
                applyMap.put(one.getTown(), one);
            }
        });
        //自建结果集
        List<Map<String, Object>> resultList = getLowLevelMapKey(level, low_level, area);
        List<Map<String, Object>> resultList = getActivityLowLevelMapKey(level, low_level, area,allMap,applyMap);
        if (resultList != null && resultList.size() > 0) {
            Map<String, SaveModel> applyMap = new HashMap<>();
            applyAmountList.stream().forEach(one -> {
                if ("5".equals(low_level)) {
                    applyMap.put(one.getTeam(), one);
                } else if ("4".equals(low_level)) {
                    applyMap.put(one.getHospital(), one);
                } else if ("3".equals(low_level)) {
                    applyMap.put(one.getTown(), one);
                }
            });
            for (Map<String, Object> reMap : resultList) {
                reMap.put("amount", reMap.get("amount") != null ? Long.valueOf(reMap.get("amount").toString()) : 0L);
                Integer allAmount = 0;
                int applyAmount = 0;
                //获取绑定数量
                if (applyMap != null && applyMap.size() > 0) {
                    SaveModel one = applyMap.get(reMap.get("code").toString());
                    if (one != null) {
                        applyAmount = one.getResult2().intValue();
                    }
                }
                if (allMap != null && allMap.size() > 0) {
                    allAmount = allMap.get(reMap.get("code").toString());
                    if (allAmount == null) {
                        allAmount = 0;
                    }
                }
                reMap.put("allNum", allAmount);
                reMap.put("applyNum", applyAmount);
                reMap.put("rate", getRange2(applyAmount, allAmount, 2));//参与率是 报名数/签约数
                if ((level == 2 && "5".equals(lowLevel)) || (level == 4) || (level == 3 && "5".equals(lowLevel))) {
                    translateTeamLeaderName(resultList);
                }
            if ((level == 2 && "5".equals(lowLevel)) || (level == 4) || (level == 3 && "5".equals(lowLevel))) {
                translateTeamLeaderName(resultList);
            }
            //对结果进行排序
            Collections.sort(resultList, new Comparator<Map<String, Object>>() {
@ -5899,6 +5878,113 @@ public class StatisticsESService {
        }
    }
    /**
     * 获取下级统计key
     *
     * @param level
     * @param lowLevel
     * @param area
     * @return
     */
    public List<Map<String, Object>> getActivityLowLevelMapKey(int level, String lowLevel, String area,Map<String, Integer> allMap,Map<String, SaveModel> applyMap) {
        List<Map<String, Object>> resultList = new ArrayList<>();
        if (SaveModel.townLevel.equals(lowLevel)) {
            List<Town> towns = townDao.findByCityCode(area);
            if (towns != null) {
                for (Town town : towns) {
                    Map<String, Object> obj = new HashMap<>();
                    obj.put("code", town.getCode());
                    obj.put("name", town.getName());
                    obj.put("amount", "0");
                    obj = activityRateList(obj,allMap,applyMap);
                    resultList.add(obj);
                }
            }
        } else if (lowLevel.equals("4")) {
            List<Town> towns = new ArrayList<>();
            if (SaveModel.cityLevel.equals(level + "")) {
                towns = townDao.findByCityCode(area);
            } else if (SaveModel.townLevel.equals(level + "")) {
                Town town = townDao.findByCode(area);
                if (town != null) {
                    towns.add(town);
                }
            }
            if (towns != null && towns.size() > 0) {
                for (Town town : towns) {
                    List<Hospital> hospitals = hospitalDao.findByTownCode(town.getCode());
                    for (Hospital hos : hospitals) {
                        if (hos.getCode().length() > 10) {
                            continue;
                        }
                        Map<String, Object> obj = new HashMap<>();
                        obj.put("code", hos.getCode());
                        obj.put("name", hos.getName());
                        obj.put("amount", "0");
                        obj = activityRateList(obj,allMap,applyMap);
                        resultList.add(obj);
                    }
                }
            }
        } else if (SaveModel.teamLevel.equals(lowLevel)) {
            List<Hospital> hospitals = new ArrayList<>();
            if (level == 2) {
                hospitals = hospitalDao.findByCity(area);
            } else if (SaveModel.townLevel.equals(level + "")) {
                hospitals = hospitalDao.findByTownCode(area);
            } else {
                Hospital hos = hospitalDao.findByCode(area);
                if (hos != null) {
                    hospitals.add(hos);
                }
            }
            if (hospitals != null && hospitals.size() > 0) {
                for (Hospital hos : hospitals) {
                    if (hos.getCode().length() > 10) {
                        continue;
                    }
                    List<AdminTeam> teams = adminTeamDao.findByOrgCode(hos.getCode());
                    for (AdminTeam team : teams) {
                        Map<String, Object> obj = new HashMap<>();
                        obj.put("code", String.valueOf(team.getId()));
                        obj.put("name", team.getName());
                        obj.put("amount", "0");
                        obj = activityRateList(obj,allMap,applyMap);
                        resultList.add(obj);
                    }
                }
            }
        }
        return resultList;
    }
    public Map<String, Object> activityRateList(Map<String, Object> reMap,Map<String, Integer> allMap,Map<String, SaveModel> applyMap){
        reMap.put("amount", reMap.get("amount") != null ? Long.valueOf(reMap.get("amount").toString()) : 0L);
        Integer allAmount = 0;
        int applyAmount = 0;
        //获取绑定数量
        if (applyMap != null && applyMap.size() > 0) {
            SaveModel one = applyMap.get(reMap.get("code").toString());
            if (one != null) {
                applyAmount = one.getResult2().intValue();
            }
        }
        if (allMap != null && allMap.size() > 0) {
            allAmount = allMap.get(reMap.get("code").toString());
            if (allAmount == null) {
                allAmount = 0;
            }
        }
        reMap.put("allNum", allAmount);
        reMap.put("applyNum", applyAmount);
        reMap.put("rate", getRange2(applyAmount, allAmount, 2));//参与率是 报名数/签约数
        return reMap;
    }

+ 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 秘钥失效");}
        }
    }
}

+ 2 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/common/account/WechatController.java

@ -440,7 +440,8 @@ public class WechatController extends WeixinBaseController {
                //判断d登录密码是否正确
                if (loginPassword.equals(p.getPassword())) {
                    // 绑定用户手机号和openid
                    if (StringUtils.isNotBlank(openid) && !"undefined".equals(openid)) {//undefined不更新数据库
                    if (StringUtils.isNotBlank(openid) && !"undefined".equals(openid)) {
                        //undefined不更新数据库
                        //patient.setOpenid(openid);
                        //1.判斷居民OPenid是不是空
                        if (StringUtils.isNotBlank(p.getOpenid())) {

+ 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());
        }
    }
}

+ 17 - 4
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/sign/DoctorSignController.java

@ -1,11 +1,13 @@
package com.yihu.wlyy.web.doctor.sign;
import com.yihu.wlyy.aop.ObserverRequired;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.service.app.account.DoctorInfoService;
import com.yihu.wlyy.service.app.account.PatientInfoService;
import com.yihu.wlyy.service.app.sign.FamilyContractService;
import com.yihu.wlyy.service.app.sign.SignWebService;
import com.yihu.wlyy.service.common.account.DoctorService;
import com.yihu.wlyy.service.common.account.PatientService;
import com.yihu.wlyy.service.third.jw.JwSignService;
import com.yihu.wlyy.util.CommonUtil;
@ -37,8 +39,6 @@ import java.util.*;
@Api(description = "医生端-签约管理")
public class DoctorSignController extends WeixinBaseController {
    //	@Autowired
//	private SignContractService signContractService;
    @Autowired
    private PatientInfoService patientInfoService;
    @Autowired
@ -56,6 +56,8 @@ public class DoctorSignController extends WeixinBaseController {
    private PatientService patientService;
    @Autowired
    private FamilyContractService familyContractService;
    @Autowired
    private DoctorService doctorService;
    @RequestMapping(value = "getPatientFamilyServer", method = RequestMethod.GET)
    @ResponseBody
@ -507,11 +509,22 @@ public class DoctorSignController extends WeixinBaseController {
                             @RequestParam(required = false) String healthDoctor,
                             @RequestParam(required = false) Long teamCode,
                             @RequestParam(required = false) String expenses,
                             @RequestParam(required = false) String refuseReason) {
                             @RequestParam(required = false) String refuseReason,
                             @RequestParam(required = false) String doctor) {
        try {
            //屏蔽了预签约
            int rs = 0;
            rs = signWebService.agreeRenewOverDue(getAccessToken(), getUID(), patient, state, mesId, "", signCode, health, disease, custom, sevId, healthDoctor, teamCode, expenses, refuseReason);
            //1.4.9.1新增健康管理师同意签约流程,判断当前登录的
            Doctor d = doctorService.findDoctorByCode(getUID());
            if(d.getLevel()==2){
                //全科医生处理,分配健管师及团队
                rs = signWebService.agreeRenewOverDue(getAccessToken(), getUID(), patient, state, mesId, "", signCode, health, disease, custom, sevId, healthDoctor, teamCode, expenses, refuseReason);
            }else if(d.getLevel() ==3){
                //建管师处理,分配全科医生及团队
                rs = signWebService.agreeRenewHealth(getAccessToken(), getUID(), patient, state, mesId,signCode, health, disease, custom, sevId, doctor, teamCode, expenses, refuseReason);
            }
            if (rs != 1) {
                //设置代码为已读
                signWebService.setMessState(mesId);

+ 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());
        }
    }
}

+ 6 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/sign/FamilyContractController.java

@ -499,7 +499,12 @@ public class FamilyContractController extends WeixinBaseController {
//                result = familyContractService.signRenewOverdue(doctor,healthDoctor,patient,reason,countryCode,medicareNumber);
//            }
            int result = -1;
            result = familyContractService.signRenewOverdue(doctor,healthDoctor,patient,reason,countryCode,medicareNumber,sevId);
            Doctor d = doctorService.findDoctorByCode(doctor);
            if(d.getLevel()==2){
                result = familyContractService.signRenewOverdue(doctor,healthDoctor,patient,reason,countryCode,medicareNumber,sevId);
            }else if(d.getLevel()==3){
                result = familyContractService.signRenewHealth(doctor,patient,reason,countryCode,medicareNumber,sevId);
            }
            if (result == -1) {
                return error(-1, "用户信息查询失败");

+ 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