Browse Source

上门辅导修改,安防警报部分修改

liubing 3 years ago
parent
commit
13faf82fc8
16 changed files with 489 additions and 57 deletions
  1. 4 0
      common/common-entity/sql记录
  2. 1 1
      common/common-entity/src/main/java/com/yihu/jw/entity/base/im/ConsultTeamDo.java
  3. 9 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/securitymonitoring/SecurityMonitoringOrderDO.java
  4. 5 1
      svr/svr-cloud-care/pom.xml
  5. 30 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/config/TencentSmsConfig.java
  6. 38 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doorCoach/DoctorDoorCoachOrderController.java
  7. 7 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/exam/ChildrenExaminationEndpoint.java
  8. 4 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/security/SecurityMonitoringOrderEndpoint.java
  9. 4 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/third/securrity/SecuMonOrderEndpoint.java
  10. 5 3
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/assistance/EmergencyAssistanceService.java
  11. 108 43
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/consult/ConsultTeamService.java
  12. 6 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/PatientHealthIndexService.java
  13. 56 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doorCoach/DoctorDoorCoachOrderService.java
  14. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doorCoach/PatientDoorCoachOrderService.java
  15. 69 3
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/security/SecurityMonitoringOrderService.java
  16. 142 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/TencentSmsUtil.java

+ 4 - 0
common/common-entity/sql记录

@ -884,3 +884,7 @@ create table base_org_notice(
ALTER table base_org_notice add column create_user varchar(50) DEFAULT NULL
-- 2021-05-20 lb
ALTER table base.base_security_monitoring_order add column `order_source` tinyint(4) DEFAULT '1' COMMENT '工单发起来源状态 1APP 2手环3居家报警'

+ 1 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/base/im/ConsultTeamDo.java

@ -23,7 +23,7 @@ public class ConsultTeamDo extends UuidIdentityEntity {
	private Integer type;           //  1、15三师咨询,2、家庭医生咨询,
	// 6、患者名医咨询 7医生名医咨询 8续方咨询 9、16在线复诊咨询(居民直接咨询专家)
	// 10医生发起的求助 11思明区上门服务在线咨询
	// 13、互联网医院专家咨询, 20紧急救助咨询, 21上门辅导咨询
	// 13、互联网医院专家咨询, 20紧急救助咨询, 21上门辅导咨询, 22安防警报咨询
	private String patient;         // 提问者标识
	private String name;            // 患者姓名
	private Integer sex;            // 患者性别

+ 9 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/securitymonitoring/SecurityMonitoringOrderDO.java

@ -319,6 +319,7 @@ public class SecurityMonitoringOrderDO extends UuidIdentityEntityWithOperator {
    private String serviceStatus;//服务类型 1-预约项目 2-即时项目
    private String orderInfo;//工单详情 0-未推送 1-未确认 2-已确认
    private String doctorConfirmFinishImg;
    private Integer orderSource;//工单发起来源状态 1APP 2手环 3居家报警
    /**
     * 医生确认医生结束服务时间
     */
@ -691,4 +692,12 @@ public class SecurityMonitoringOrderDO extends UuidIdentityEntityWithOperator {
    public void setDoctorConfirmFinishTime(Date doctorConfirmFinishTime) {
        this.doctorConfirmFinishTime = doctorConfirmFinishTime;
    }
    public Integer getOrderSource() {
        return orderSource;
    }
    public void setOrderSource(Integer orderSource) {
        this.orderSource = orderSource;
    }
}

+ 5 - 1
svr/svr-cloud-care/pom.xml

@ -268,7 +268,11 @@
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.tencentcloudapi</groupId>
            <artifactId>tencentcloud-sdk-java</artifactId>
            <version>3.1.265</version><!-- 注:这里只是示例版本号,请获取并替换为 最新的版本号 -->
        </dependency>
        <!--oracle驱动-->
        <dependency>

+ 30 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/config/TencentSmsConfig.java

@ -0,0 +1,30 @@
package com.yihu.jw.care.config;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Handler;
/**
 * 腾讯云SMS配置
 * Created by Bing on 2021/5/19.
 */
public class TencentSmsConfig {
    public static final String SecretId= "AKIDjGXYIlyua080cy3rOfgRv96mBLDo8ByU";
    public static final String SecretKey= "GEwOZS5SYNvCCuLVO0LQFm21jAKCn7Bz";
    public static final String host = "sms.tencentcloudapi.com";//
    public static final Map<String,String> templateId= new HashMap<>();
    public static final Long overTime = 24L;
    {
        templateId.put("VerificationCode","验证码模板id");//验证码模板id
    }
    public static String getTemplateId(String key){
        return templateId.get(key);
    }
}

+ 38 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doorCoach/DoctorDoorCoachOrderController.java

@ -1,5 +1,6 @@
package com.yihu.jw.care.endpoint.doorCoach;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.endpoint.BaseController;
@ -8,6 +9,7 @@ import com.yihu.jw.care.service.doorCoach.PatientDoorCoachOrderService;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.care.doorCoach.BaseDoorCoachConclusionDO;
import com.yihu.jw.entity.care.doorCoach.BaseDoorCoachOrderDO;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.restmodel.ResponseContant;
import io.swagger.annotations.Api;
@ -308,6 +310,42 @@ public class DoctorDoorCoachOrderController extends BaseController {
        }
    }
    @RequestMapping(value = "message/getWaitingMessages",method = RequestMethod.GET)
    @ApiOperation("调度员获取服务工单待接单列表")
    public String getWaitingMessages(
            @ApiParam(name = "message",value = "消息对象")
            @RequestParam(value = "message")String message,
            @ApiParam(name="types",value="消息类型")
            @RequestParam(value="types",required = true) String types,
            @ApiParam(name="page",value="第几页",defaultValue = "1")
            @RequestParam(value="page",required = true) String page,
            @ApiParam(name="pageSize",value="",defaultValue = "10")
            @RequestParam(value="pageSize",required = true) String pageSize){
        if (org.apache.commons.lang3.StringUtils.isBlank(pageSize)) {
            pageSize = "10";
        }
        if (page.equals("0")) {
            page = "1";
        }
        String[] split = org.apache.commons.lang3.StringUtils.split(types, ",");
        List<Integer> typeList = new ArrayList<>();
        for (String s : split) {
            typeList.add(Integer.valueOf(s));
        }
        SystemMessageDO message1 = new SystemMessageDO();
        com.alibaba.fastjson.JSONObject object = JSON.parseObject(message);
        message1.setOver(object.getString("over"));
        message1.setIsRead(object.get("read")+"");
        message1.setReceiver(getUID());
        try {
            org.json.JSONObject waitingMessages = doctorDoorCoachOrderService.getWaitingMessages(message1, types, Integer.valueOf(page), Integer.valueOf(pageSize));
            return write(200, "查询成功","data",waitingMessages);
        }catch (Exception e){
            error(e);
            return error( -1, "查询失败!");
        }
    }
    @GetMapping("/getDoorOrderList")
    @ApiOperation(value = "服务工单列表")
    public String getDoorOrderList(

+ 7 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/exam/ChildrenExaminationEndpoint.java

@ -1,6 +1,7 @@
package com.yihu.jw.care.endpoint.exam;
import com.yihu.jw.care.service.exam.ChildrenExaminationService;
import com.yihu.jw.care.util.TencentSmsUtil;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
@ -10,6 +11,9 @@ import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by Bing on 2021/5/18.
 */
@ -19,6 +23,8 @@ import org.springframework.web.bind.annotation.*;
public class ChildrenExaminationEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private ChildrenExaminationService examinationService;
    @Autowired
    private TencentSmsUtil tencentSmsUtil;
    @PostMapping("newRecord")
    @ApiOperation("居民居家自建记录添加")
@ -78,4 +84,5 @@ public class ChildrenExaminationEndpoint extends EnvelopRestEndpoint {
            return PageEnvelop.getError("查询失败");
        }
    }
    
}

+ 4 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/security/SecurityMonitoringOrderEndpoint.java

@ -32,9 +32,11 @@ public class SecurityMonitoringOrderEndpoint extends EnvelopRestEndpoint {
    @ApiOperation(value = "创建安防服务工单")
    @ObserverRequired
    public ObjEnvelop createOrder(@ApiParam(name="jsonData",value = "json数据",required = true)
                               @RequestParam(value = "jsonData")String jsonData){
                               @RequestParam(value = "jsonData")String jsonData,
                               @ApiParam(name="orderSource",value = "工单来源工单发起来源状态 1APP 2手环 3居家报警")
                               @RequestParam(value = "orderSource",defaultValue = "1") Integer orderSource){
        try {
            JSONObject result = securityMonitoringOrderService.createOrder(jsonData);
            JSONObject result = securityMonitoringOrderService.createOrder(jsonData,orderSource);
            if (result.getIntValue("resultFlag") == 0) {
                return ObjEnvelop.getError(result.getString("resultMsg"));
            }

+ 4 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/third/securrity/SecuMonOrderEndpoint.java

@ -29,9 +29,11 @@ public class SecuMonOrderEndpoint extends EnvelopRestEndpoint {
    @ApiOperation(value = "创建安防服务工单")
    @ObserverRequired
    public ObjEnvelop createOrder(@ApiParam(name="jsonData",value = "json数据",required = true)
                                  @RequestParam(value = "jsonData")String jsonData){
                                  @RequestParam(value = "jsonData")String jsonData,
                                  @ApiParam(name="orderSource",value = "工单来源工单发起来源状态 1APP 2手环 3居家报警")
                                  @RequestParam(value = "orderSource",defaultValue = "1") Integer orderSource){
        try {
            JSONObject result = securityMonitoringOrderService.createOrder(jsonData);
            JSONObject result = securityMonitoringOrderService.createOrder(jsonData,orderSource);
            if (result.getIntValue("resultFlag") == 0) {
                return ObjEnvelop.getError(result.getString("resultMsg"));
            }

+ 5 - 3
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/assistance/EmergencyAssistanceService.java

@ -181,7 +181,9 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
            JSONObject message = new JSONObject();
            message.put("session_id",assistanceDO.getSessionId());
            message.put("sender_name",assistanceDO.getPatientName());
            message.put("content_notice",assistanceDO.getPatientName()+" 发起紧急救助!");
            message.put("sender_code",assistanceDO.getPatient());
            message.put("OrderType",20);
            message.put("order_id",assistanceDO.getId());
            message.put("content_type",40);
            try {
@ -493,7 +495,7 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        assistanceDO.setUpdateUserName(patientDO.getName());
        assistanceDO.setUpdateTime(new Date());
        //结束救助咨询
        if (!consultTeamService.finishEmergencyConsult(assistanceDO,patient,1)){
        if (!consultTeamService.finishConsult(assistanceDO.getId(),assistanceDO.getPatient(),patient,1)){
            String failMsg = "咨询结束失败 无法取消工单";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
@ -537,7 +539,7 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        assistanceDO.setUpdateUserName(assistanceDO.getDoctorName());
        assistanceDO.setUpdateTime(new Date());
        //结束会话
        if (!consultTeamService.finishEmergencyConsult(assistanceDO,doctor,2)){
        if (!consultTeamService.finishConsult(assistanceDO.getId(),assistanceDO.getPatient(),doctor,2)){
            String failMsg = "咨询结束失败 无法完成工单";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
@ -643,7 +645,7 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        List<String> ids = jdbcTemplate.queryForList(sql,String.class);
        for (String id:ids){
            EmergencyAssistanceDO assistanceDO = emergencyAssistanceDao.findOne(orderID);
            if (!consultTeamService.finishEmergencyConsult(assistanceDO,doctor,2)){
            if (!consultTeamService.finishConsult(assistanceDO.getId(),assistanceDO.getPatient(),doctor,2)){
                String failMsg = "咨询结束失败 无法完成工单";
                return failMsg;

+ 108 - 43
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/consult/ConsultTeamService.java

@ -1,8 +1,10 @@
package com.yihu.jw.care.service.consult;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.doorCoach.BaseDoorCoachOrderDao;
import com.yihu.jw.care.dao.sign.ServicePackageSignRecordDao;
import com.yihu.jw.care.service.family.PatientFamilyMemberService;
import com.yihu.jw.care.service.sign.ServicePackageService;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
@ -12,12 +14,15 @@ import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO;
import com.yihu.jw.entity.care.assistance.EmergencyAssistanceDO;
import com.yihu.jw.entity.care.doorCoach.BaseDoorCoachOrderDO;
import com.yihu.jw.entity.care.securitymonitoring.SecurityMonitoringOrderDO;
import com.yihu.jw.im.dao.ConsultDao;
import com.yihu.jw.im.dao.ConsultTeamDao;
import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.utils.EntityUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -50,6 +55,8 @@ public class ConsultTeamService {
    private ServicePackageSignRecordDao servicePackageSignRecordDao;
    @Autowired
    private BaseDoorCoachOrderDao baseDoorCoachOrderDao;
    @Autowired
    private PatientFamilyMemberService familyMemberService;
    public JSONObject updateIMMsg(String sessionId,String sessionType,String msgId,String content){
@ -209,44 +216,6 @@ public class ConsultTeamService {
        return result;
    }
    /**
     *
     * @param assistanceDO
     * @param endOperator 操作者ID
     * @param endType 1居民 2医生
     * @return
     */
    public boolean finishEmergencyConsult(EmergencyAssistanceDO assistanceDO, String endOperator, int endType){
        ConsultTeamDo consultTeam = consultTeamDao.queryByRelationCode(assistanceDO.getId());
        ConsultDo consult = consultDao.findOne(consultTeam.getConsult());
        String sessionId = assistanceDO.getPatient() + "_" + consultTeam.getConsult() + "_" + consultTeam.getType();
        String operatorId = endOperator;
        String operatorName=null;
        if (endType==1){
            BasePatientDO patientDO = patientDao.findById(endOperator);
            operatorName = patientDO.getName();
        }else {
            BaseDoctorDO doctorDO = doctorDao.findById(endOperator);
            operatorName = doctorDO.getName();
        }
        try {
            JSONObject obj =  imUtill.endTopics(sessionId,operatorId,operatorName,consultTeam.getConsult());
            if (obj == null||obj.getInteger("status") == -1) {
                return false;
            }
            consultTeam.setEndMsgId(obj.getString("id"));
            consult.setEndTime(new Date());
            consultTeam.setEndTime(new Date());
            consultTeam.setStatus(1);
            consultDao.save(consult);
            consultTeamDao.save(consultTeam);
        }catch (Exception e){
            e.printStackTrace();
        }
        return true;
    }
    /**
     * 添加上门辅导服务咨询
     *
@ -327,21 +296,117 @@ public class ConsultTeamService {
        return result;
    }
    /**
     *
     * @param assistanceDO
     * 添加安防警报咨询
     * @param orderId
     * @return
     * @throws Exception
     */
    public JSONObject addSecurityMoConsult(String orderId,String patient,String proxyPatient,String symptoms) throws Exception {
        JSONObject result = new JSONObject();
        // 判断居民是否已经签约
        List<ServicePackageSignRecordDO> signRecordDOs = servicePackageSignRecordDao.findByStatusAndPatient(1,patient);
        if(signRecordDOs.size() == 0){
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            String failMsg = "当前居民未签约,无法进行安放救助咨询!";
            result.put(ResponseContant.resultMsg, failMsg);
            return result;
        }
        // 添加咨询记录
        BasePatientDO patientDO = patientDao.findById(patient);
        if(null == patientDO){
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            String failMsg = "当前咨询的居民不存在!";
            result.put(ResponseContant.resultMsg, failMsg);
            return result;
        }
        //咨询记录
        String title = patientDO.getName() + "疑似离开安全区域";
        ConsultDo consult = addConsult(patient,title,symptoms,patientDO.getPhone(),22);
        //咨询详细信息
        ConsultTeamDo consultTeam = new ConsultTeamDo();
        consultTeam.setType(22);  //安防警报咨询
//        consultTeam.setAdminTeamId(signFamily.getAdminTeamId());
        consultTeam.setRelationCode(orderId); //关联业务code
        consultTeam.setSymptoms(symptoms);
        consultTeam.setPatient(patient);
        consultTeam.setName(patientDO.getName());
        consultTeam.setBirthday(patientDO.getBirthday());
        consultTeam.setSex(patientDO.getSex());
        consultTeam.setPhoto(patientDO.getPhoto());
        consultTeam.setCzrq(new Date());
        consultTeam.setDel("1");
        consultTeam.setStatus(0);
        consultTeam.setEvaluate(0);
        consultTeam.setDoctorRead(1); // 医生未读数量为1
        consult.setRelationCode(orderId);//关联业务code
        consultTeam.setConsult(consult.getId()); // 设置咨询标识
        //(im创建咨询) 安防警报咨询的sessionid为居民code+咨询id+咨询类型
        String sessionId = patient + "_" + consult.getId() + "_" + consultTeam.getType();
        //4、安防警报咨询-参与者  提供服务的助老员 老人本人 家属
        JSONObject participants = new JSONObject();
        participants.put(patient, 0);
        if (StringUtils.isNotBlank(proxyPatient)&&(!proxyPatient.equals(patient))){
            participants.put(proxyPatient, 0);
        }
        //家属
        JSONArray familyArr =  familyMemberService.getPatientMembers(patient,null,null,null);
        for (int i=0;i<familyArr.size();i++){
            JSONObject tmp = familyArr.getJSONObject(0);
            String familyId = tmp.getString("id");
            participants.put(familyId, 0);
        }
        //加入团队医生
        List<Map<String,Object>> doctorList = servicePackageService.fingdDoctorByPaitenId(patient,"preventLost");
        for(Map<String,Object> map:doctorList){
            participants.put(String.valueOf(map.get("id")), 0);
        }
        String content = patientDO.getName() + "发起安防警报申请";
        JSONObject messages = imUtill.getCreateTopicMessage(patient, patientDO.getName(), consult.getTitle(), content, consult.getImages(), "");
        JSONObject imResponseJson = imUtill.createTopics(sessionId, consult.getId(), content, participants, messages, ImUtil.SESSION_TYPE_EMERGENCY_ASSISTANCE);
        if (imResponseJson == null || imResponseJson.getInteger("status") == -1) {
            String failMsg = "发起服务咨询时:IM" + imResponseJson.getString("message");
            result.put(ResponseContant.resultFlag, ResponseContant.success);
            result.put(ResponseContant.resultMsg, failMsg);
            return result;
        }
        consultTeam.setStartMsgId(imResponseJson.get("start_msg_id").toString());
        consultTeamDao.save(consultTeam);
        consultDao.save(consult);
        result.put(ResponseContant.resultFlag, ResponseContant.success);
        result.put(ResponseContant.resultMsg, consultTeam);
        return result;
    }
    /**
     * 结束咨询
     * @param relationCode
     * @param patient sessionid 组成部分
     * @param endOperator 操作者ID
     * @param endType 1居民 2医生
     * @return
     */
    public boolean finishDoorCoachConsult(BaseDoorCoachOrderDO assistanceDO, String endOperator, int endType){
        ConsultTeamDo consultTeam = consultTeamDao.queryByRelationCode(assistanceDO.getId());
    public boolean finishConsult(String relationCode,String patient, String endOperator, int endType){
        ConsultTeamDo consultTeam = consultTeamDao.queryByRelationCode(relationCode);
        if (consultTeam==null){
            return true;
        }
        ConsultDo consult = consultDao.findOne(consultTeam.getConsult());
        String sessionId = assistanceDO.getPatient() + "_" + consultTeam.getConsult() + "_" + consultTeam.getType();
        String sessionId = patient+ "_" + consultTeam.getConsult() + "_" + consultTeam.getType();
        String operatorId = endOperator;
        String operatorName=null;
        if (endType==1){

+ 6 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/PatientHealthIndexService.java

@ -639,6 +639,7 @@ public class PatientHealthIndexService extends BaseJpaService<DevicePatientHealt
     * 【血压】{"time":"2016-09-09 17:00:00","sys":"收缩压(mmHg)","dia":"舒张压(mmHg)","pul":"脉搏(次/分)","ano":"有无心率不齐0否 1是","user":"身份标识"}
     * 【体重/身高】{"time":"2016-09-09 17:00:00","weight":"体重值(kg)","height":"身高(cm)"}
     * 【腰围】{"time":"2016-09-09 17:00:00","waistline":"腰围值(cm)"}
     * 【体温】{"time":"2016-09-09 17:00:00","temperature":"温度(摄氏度)"}
     *
     * @return
     */
@ -754,6 +755,11 @@ public class PatientHealthIndexService extends BaseJpaService<DevicePatientHealt
                    obj.setValue2(map.get("hipline"));
                    break;
                }
                case "6": {
                    obj.setType(6);
                    obj.setValue1(map.get("temperature"));  //腰围
                    break;
                }
                default: {
                    throw new Exception("暂不支持该指标!");
                }

+ 56 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doorCoach/DoctorDoorCoachOrderService.java

@ -167,6 +167,61 @@ public class DoctorDoorCoachOrderService {
        return doorServiceOrder;
    }
    /**
     * 获取待接单的接口
     *
     * @param message {"read":1,"over":0}
     * @param page 页码
     * @param size 分页大小
     * @return
     * @throws Exception
     */
    public org.json.JSONObject getWaitingMessages(SystemMessageDO message, String types, Integer page, Integer size) throws Exception{
        String sqlList = " SELECT a.* ";
        String sqlCount = " select count(*) as total ";
        String sql =  " FROM base_system_message a " ;
        sql+= " where a.del='1' AND a.over = 1  ";
        if(!org.apache.commons.lang3.StringUtils.isEmpty(message.getReceiver())){
            sql+=" AND a.receiver = '"+message.getReceiver()+"'";
        }
        if(!org.apache.commons.lang3.StringUtils.isEmpty(types)){
            sql+=" AND a.type IN ('"+types.replaceAll(",","','")+"')";
        }
        List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlCount+sql);
        sql+=" ORDER BY a.create_time DESC LIMIT "+(page-1)*size+","+size;
        List<Map<String,Object>> mapList = jdbcTemplate.queryForList(sqlList+sql);
        Long count = 0L;
        if(rstotal!=null&&rstotal.size()>0){
            count = (Long) rstotal.get(0).get("total");
        }
        JSONArray jsonArray = new JSONArray();
        for(Map<String,Object> one:mapList){
            org.json.JSONObject object = new org.json.JSONObject();
            object.put("over",one.get("over"));
            object.put("receiver",one.get("receiver"));
            object.put("del",one.get("del"));
            object.put("title",one.get("title"));
            object.put("type",one.get("type"));
            object.put("content",one.get("data"));
            object.put("sender",one.get("sender"));
            object.put("id",one.get("id"));
            object.put("relation_code",one.get("relation_code"));
            object.put("has_read",one.get("is_read"));
            object.put("appliStatus",one.get("appliStatus"));
            Date date = (Date)one.get("create_time");
            object.put("create_time", DateUtil.dateToStr(date,"yyyy-MM-dd HH:mm:ss"));
            Date date1 = (Date)one.get("czrq");
            object.put("czrq", DateUtil.dateToStr(date1,"yyyy-MM-dd HH:mm:ss"));
            jsonArray.add(object);
        }
        org.json.JSONObject object = new org.json.JSONObject();
        object.put("total",count);
        object.put("waitingMessages",jsonArray);
        object.put("currPage",page);
        object.put("pageSize",size);
        return object;
    }
    /**
     * 获取工单列表
     * @param orderId
@ -564,7 +619,7 @@ public class DoctorDoorCoachOrderService {
            logger.error(e.getMessage());
        }
        //如果是调度员取消,推送IM取消工单json消息,
        if (!consultTeamService.finishDoorCoachConsult(one,one.getPatient(),1)){
        if (!consultTeamService.finishConsult(one.getId(),one.getPatient(),one.getPatient(),1)){
            throw new Exception("咨询结束失败 无法取消工单");
        }
        return doorServiceOrderDO;

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doorCoach/PatientDoorCoachOrderService.java

@ -791,7 +791,7 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
            orderDO.setDispatcherName(dispatcherName);
        }
        //如果是调度员取消,推送IM取消工单json消息,
        if (!consultTeamService.finishDoorCoachConsult(orderDO,orderDO.getPatient(),1)){
        if (!consultTeamService.finishConsult(orderDO.getId(),orderDO.getPatient(),orderDO.getPatient(),1)){
            String failMsg = "咨询结束失败 无法取消工单";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);

+ 69 - 3
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/security/SecurityMonitoringOrderService.java

@ -7,9 +7,14 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.dao.security.*;
import com.yihu.jw.care.dao.team.BaseTeamMemberDao;
import com.yihu.jw.care.service.consult.ConsultTeamService;
import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.care.service.sign.ServicePackageService;
import com.yihu.jw.care.util.CountDistance;
import com.yihu.jw.entity.base.im.ConsultDo;
import com.yihu.jw.im.dao.ConsultDao;
import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.util.common.GpsUtil;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
@ -74,10 +79,18 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
    private GpsUtil gpsUtil;
    @Autowired
    private CountDistance countDistance;
    @Autowired
    private ConsultTeamService consultTeamService;
    @Autowired
    private ConsultDao consultDao;
    @Autowired
    private BaseTeamMemberDao baseTeamMemberDao;
    @Autowired
    private ImUtil imUtil;
    private Logger logger = LoggerFactory.getLogger(SecurityMonitoringOrderService.class);
    public JSONObject createOrder(String jsonData){
    public JSONObject createOrder(String jsonData,Integer orderSource) throws Exception {
        logger.info("创建安防工单jsonData参数:" + jsonData);
        JSONObject result = new JSONObject();
@ -101,12 +114,14 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            logger.error(failMsg);
            return result;
        }
        orderDO.setStatus(1);
        orderDO.setNumber(getRandomIntStr());
        orderDO.setCreateTime(new Date());
        orderDO.setCreateUser(orderDO.getCreateUser());
        orderDO.setCreateUserName(orderDO.getCreateUserName());
        orderDO.setOrderInfo("0");
        orderDO.setOrderSource(orderSource);
        if(StringUtils.isEmpty(orderDO.getPatient())){
            result.put("resultFlag", 0);
@ -126,10 +141,10 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        }
        //签约防走失服务包
        String sql ="SELECT i.code from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i  \n" +
        String sql ="SELECT i.code,i.team_code,i.org_code,i.org_name from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i  \n" +
                "where  sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id   and i.del = 1 and sr.`status`=1 \n" +
                "and  sr.patient  = '"+orderDO.getPatient()+"' and i.code='preventLost' ";
       List<String> items = jdbcTemplate.queryForList(sql,String.class);
        List<Map<String,Object>> items = jdbcTemplate.queryForList(sql);
        if (items.size()==0) {
            result.put("resultFlag", 0);
            String failMsg = "当前服务对象未签约防走失服务,请签约后再发起预警!";
@ -154,11 +169,40 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            logger.error(failMsg);
            return result;
        }
        Map<String,Object> mapTmp = items.get(0);
        List<BaseDoctorDO> doctorDOS = baseTeamMemberDao.findAllMembers(mapTmp.get("team_code").toString());
        if (doctorDOS.size()==0){
            String failMsg = "安防警报服务项服务医生为空,不可发起救助";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        orderDO.setCreateTime(new Date());
        //判断创建预警服务类型,发起类型(1本人发起 2家人待预约 3医生代预约)
        orderDO.setType(3);//发起类型
        orderDO.setServiceStatus("2");
        this.save(orderDO);
        //创建im会话  安防警报咨询的sessionid  为居民code+(wlyy_consult_team表consult)+20
        JSONObject IMObj = consultTeamService.addSecurityMoConsult(orderDO.getId(),orderDO.getPatient(),null,null);
        String sessionId=orderDO.getPatient()+"_"+ IMObj.getJSONObject("resultMsg").getString("consult") + "_22";
        //推送socket给医生  推送紧急预警
        for (BaseDoctorDO doctorDO:doctorDOS){
            JSONObject message = new JSONObject();
            message.put("session_id",sessionId);
            message.put("sender_name",orderDO.getPatientName());
            message.put("content_notice",orderDO.getPatientName()+" 疑似离开安全区域!");
            message.put("sender_code",orderDO.getPatient());
            message.put("OrderType",22);
            message.put("order_id",orderDO.getId());
            message.put("content_type",40);
            try {
                imUtil.sendMDTSocketMessageToDoctor(doctorDO.getId(),message.toString());
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        result.put("resultFlag", 1);
        result.put("resultMsg",orderDO);
@ -210,6 +254,15 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            jsonObject.put("patientAddress",null);
        }
        jsonObject.put("statusName",statusName);
        //获取咨询
        ConsultDo consult = consultDao.queryByRelationCode(orderID);
        if (null != consult) {
            String sessionId = orderDO.getPatient() + "_" + consult.getId() + "_" + consult.getType();
            jsonObject.put("sessionId",sessionId);
        }
        else {
            jsonObject.put("sessionId",null);
        }
        result.put("resultFlag", 1);
        result.put("resultMsg",jsonObject);
@ -536,6 +589,13 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            logger.error(failMsg);
            return result;
        }
        if (!consultTeamService.finishConsult(orderDO.getId(),orderDO.getPatient(),orderDO.getPatient(),1)){
            String failMsg = "咨询结束失败 无法取消工单";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        orderDO.setDoctor(doctor);
        orderDO.setDoctorName(doctorDO.getName());
        orderDO.setCancelType(type);
@ -782,11 +842,17 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        one.setCompleteTime(one.getDoctorConfirmFinishTime());
        // 更新记录
        this.setUpdateColumnInfo(one);
        if (!consultTeamService.finishConsult(one.getId(),one.getPatient(),one.getPatient(),1)){
            String failMsg = "咨询结束失败 无法结束工单";
            throw new Exception(failMsg);
        }
        securityMonitoringOrderDao.save(one);
        SecurityMonitoringOrderDO doorServiceOrderDO = this.getDoorServiceOrderById(orderId);
        // 发送微信通知  待付款
        BasePatientDO patient = basePatientDao.findById(one.getPatient());
        // 获取微信模板 smfwdwk-上门服务待付款
//        Consult consult = consultDao.queryByRelationCode(orderId);
        try {

+ 142 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/TencentSmsUtil.java

@ -0,0 +1,142 @@
package com.yihu.jw.care.util;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.sms.v20190711.SmsClient;
import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse;
import com.yihu.jw.care.config.TencentSmsConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * Created by Bing on 2021/5/19.
 */
@Component
public class TencentSmsUtil {
    @Autowired
    private StringRedisTemplate redisTemplate;
    private TencentSmsConfig tencentSmsConfig = new TencentSmsConfig();
    /**
     *  获取短信验证码
     * @param phoneNumberList 手机列表
     * @param templateParamList 参数列表
     * @param type 模板key VerificationCode:手机验证码
     * @return
     */
    public String SendSms(List<String> phoneNumberList, List<String> templateParamList,String type) {
        try {
            Iterator<String> iterator = phoneNumberList.iterator();
            if ("VerificationCode".equals(type)){//超过10次无法再发送短信验证码
                while (iterator.hasNext()) {
                    String phone = iterator.next();
                    if (redisTemplate.hasKey("tencentSmsVFCode-" + phone)) {//验证码每天上限10次
                        Integer count = Integer.valueOf(redisTemplate.opsForValue().get("tencentSmsVFCode-" + phone));
                        if (count > 10) {
                            iterator.remove();
                        }else {
                            count++;
                            Long expire = redisTemplate.boundHashOps("tencentSmsVFCode-" + phone).getExpire();
                            redisTemplate.opsForValue().set("tencentSmsVFCode-" + phone,count+"",expire, TimeUnit.SECONDS);
                        }
                    }
                    else {
                        int count =1;
                        redisTemplate.opsForValue().set("tencentSmsVFCode-" + phone,count+"",tencentSmsConfig.overTime, TimeUnit.HOURS);
                    }
                }
            }
            String[] phoneNumbers = phoneNumberList.toArray(new String[0]);
            String[] templateParams = templateParamList!=null?templateParamList.toArray(new String[0]):null;
            Credential cred = new Credential(tencentSmsConfig.SecretId, tencentSmsConfig.SecretKey);
            HttpProfile httpProfile = new HttpProfile();
            // 设置代理
//            httpProfile.setProxyHost("host");
//            httpProfile.setProxyPort(port);
            httpProfile.setReqMethod("POST");
            httpProfile.setConnTimeout(60);
            httpProfile.setEndpoint("sms.tencentcloudapi.com");
            ClientProfile clientProfile = new ClientProfile();
            /** SDK默认用TC3-HMAC-SHA256进行签名
             * 非必要请不要修改这个字段 */
            clientProfile.setSignMethod("HmacSHA256");
            clientProfile.setHttpProfile(httpProfile);
            /** 实例化要请求产品(以sms为例)的client对象
             * 第二个参数是地域信息,可以直接填写字符串ap-guangzhou,或者引用预设的常量 */
            SmsClient client = new SmsClient(cred, "ap-guangzhou", clientProfile);
            SendSmsRequest req = new SendSmsRequest();
            /* 短信应用ID: 短信SdkAppid在 [短信控制台] 添加应用后生成的实际SdkAppid,示例如1400006666 */
            String appid = "1400009099";
            req.setSmsSdkAppid(appid);
            /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 [短信控制台] 查看 */
            String sign = "签名内容";
            req.setSign(sign);
            /* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */
            String templateID = tencentSmsConfig.getTemplateId(type);
            req.setTemplateID(templateID);
            /** 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号]
             * 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号
             * */
            req.setPhoneNumberSet(phoneNumbers);
            /** 模板参数: 若无模板参数,则设置为空
             String[] templateParams = {"5678"};*/
            req.setTemplateParamSet(templateParams);
            /** 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
             * 返回的 res 是一个 SendSmsResponse 类的实例,与请求对象对应 */
            SendSmsResponse res = client.SendSms(req);
            // 输出json格式的字符串回包
            System.out.println(SendSmsResponse.toJsonString(res));
            // 也可以取出单个值,你可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义
            System.out.println(res.getRequestId());
            return SendSmsResponse.toJsonString(null);
        } catch (TencentCloudSDKException e) {
            e.printStackTrace();
            return null;
        }
    }
}
/**        返回值
 *{
 *   "Response": {
 *     "SendStatusSet": [
 *       {
 *         "SerialNo": "5000:1045710669157053657849499619", 发送流水号。
 *         "PhoneNumber": "+8618511122233",
 *         "Fee": 1, 计费条数,计费规则请查询
 *         "SessionContext": "test",
 *         "Code": "Ok", 短信请求状态码
 *         "Message": "send success",
 *         "IsoCode": "CN"
 *       },
 *       {
 *         "SerialNo": "5000:104571066915705365784949619",
 *         "PhoneNumber": "+8618511122266",
 *         "Fee": 1,
 *         "SessionContext": "test",
 *         "Code": "Ok",
 *         "Message": "send success",
 *         "IsoCode": "CN"
 *       }
 *     ],
 *     "RequestId": "a0aabda6-cf91-4f3e-a81f-9198114a2279"
 *   }
 * }
 */