LAPTOP-KB9HII50\70708 hace 3 años
padre
commit
8ee4da1420

+ 37 - 0
business/push-service/pom.xml

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.yihu.jw</groupId>
        <artifactId>wlyy-lib-parent-pom</artifactId>
        <version>2.0.0</version>
        <relativePath>../../wlyy-lib-parent-pom/pom.xml</relativePath>
    </parent>
    <groupId>com.yihu.jw</groupId>
    <artifactId>push-service</artifactId>
    <version>${parent.version}</version>
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>common-entity</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- 个推v2sdk -->
        <dependency>
            <groupId>com.getui.push</groupId>
            <artifactId>restful-sdk</artifactId>
            <version>1.0.0.1</version>
        </dependency>
    </dependencies>
</project>

+ 6 - 0
business/push-service/readme.MD

@ -0,0 +1,6 @@
推送服务
GetuiUil  个推推送服务
个推参数在字典表 缓存在redis中

+ 26 - 0
business/push-service/src/main/java/com/yihu/jw/push/dao/PushHospitalSysDictDao.java

@ -0,0 +1,26 @@
package com.yihu.jw.push.dao;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Trick on 2019/6/17.
 */
public interface PushHospitalSysDictDao extends PagingAndSortingRepository<WlyyHospitalSysDictDO, String>, JpaSpecificationExecutor<WlyyHospitalSysDictDO> {
    WlyyHospitalSysDictDO findByHospitalAndDictCode(String hospital, String dictCode);
    List<WlyyHospitalSysDictDO> findByHospitalAndDictNameOrderBySortAsc(String hospital, String dictName);
    WlyyHospitalSysDictDO findById(String id);
    List<WlyyHospitalSysDictDO> findByDictName(String dictName);
    @Query("from WlyyHospitalSysDictDO where 1=1")
    List<WlyyHospitalSysDictDO> findAlldict();
    @Query("from WlyyHospitalSysDictDO where dictCode = ?1")
    List<WlyyHospitalSysDictDO> findByDictCode(String dictCode);
}

+ 229 - 0
business/push-service/src/main/java/com/yihu/jw/push/service/GetuiService.java

@ -0,0 +1,229 @@
package com.yihu.jw.push.service;
import com.alibaba.fastjson.JSONObject;
import com.getui.push.v2.sdk.ApiHelper;
import com.getui.push.v2.sdk.GtApiConfiguration;
import com.getui.push.v2.sdk.api.PushApi;
import com.getui.push.v2.sdk.common.ApiResult;
import com.getui.push.v2.sdk.dto.req.Audience;
import com.getui.push.v2.sdk.dto.req.Settings;
import com.getui.push.v2.sdk.dto.req.Strategy;
import com.getui.push.v2.sdk.dto.req.message.PushChannel;
import com.getui.push.v2.sdk.dto.req.message.PushDTO;
import com.getui.push.v2.sdk.dto.req.message.PushMessage;
import com.getui.push.v2.sdk.dto.req.message.android.AndroidDTO;
import com.getui.push.v2.sdk.dto.req.message.android.GTNotification;
import com.getui.push.v2.sdk.dto.req.message.android.ThirdNotification;
import com.getui.push.v2.sdk.dto.req.message.android.Ups;
import com.getui.push.v2.sdk.dto.req.message.ios.Alert;
import com.getui.push.v2.sdk.dto.req.message.ios.Aps;
import com.getui.push.v2.sdk.dto.req.message.ios.IosDTO;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.push.dao.PushHospitalSysDictDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * Created with IntelliJ IDEA.
 * 个推推送工具类
 * @Author: yeshijie
 * @Date: 2021/7/8
 * @Description:
 */
@Service
public class GetuiService {
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private PushHospitalSysDictDao sysDictDao;
    private static final Logger logger = LoggerFactory.getLogger(GetuiService.class);
    private static PushApi pushApi;
    private String AppID;
    private String AppKey;
    private String AppSecret;
    private String MasterSecret;
//    public static String AppID = "I6JAs97T818HD0hGzG1EH4";
//    public static String AppKey = "JC2LAW9IK27pansBB4jN87";
//    public static String AppSecret = "Sn9PLz1hA6NNgyb7WHx45";
//    public static String MasterSecret = "Rd86CP8bOy7RHyTf4ZE3R4";
    public static String cloudCareDoctor = "com.zjxl.medicalcare.doctor";
    public static String cloudCarePatientPad = "com.zjxl.medicalcare.patient.pad";
    private String key = "hz_yxyzh_push_getui";
    /**
     * 初始化接口参数
     */
    private void init(){
        if(redisTemplate.hasKey(key+ ":AppID")){
            AppID = redisTemplate.opsForValue().get(key + ":AppID");
            AppKey = redisTemplate.opsForValue().get(key + ":AppKey");
            AppSecret = redisTemplate.opsForValue().get(key + ":AppSecret");
            MasterSecret = redisTemplate.opsForValue().get(key + ":MasterSecret");
            return;
        }
        forceInit();
    }
    public void forceInit(){
        List<WlyyHospitalSysDictDO> dictDOList = sysDictDao.findByDictName(key);
        for (WlyyHospitalSysDictDO wlyyHospitalSysDictDO:dictDOList){
            if (wlyyHospitalSysDictDO.getDictCode().equalsIgnoreCase("AppID")){
                AppID=wlyyHospitalSysDictDO.getDictValue();
                redisTemplate.opsForValue().set(key + ":AppID",AppID);
            }else if (wlyyHospitalSysDictDO.getDictCode().equalsIgnoreCase("AppKey")){
                AppKey=wlyyHospitalSysDictDO.getDictValue();
                redisTemplate.opsForValue().set(key + ":AppKey",AppKey);
            }else if (wlyyHospitalSysDictDO.getDictCode().equalsIgnoreCase("AppSecret")){
                AppSecret=wlyyHospitalSysDictDO.getDictValue();
                redisTemplate.opsForValue().set(key + ":AppSecret",AppSecret);
            }else if (wlyyHospitalSysDictDO.getDictCode().equalsIgnoreCase("MasterSecret")){
                MasterSecret=wlyyHospitalSysDictDO.getDictValue();
                redisTemplate.opsForValue().set(key + ":MasterSecret",MasterSecret);
            }
        }
        pushApi = getPushApi();
    }
    private PushApi getPushApi(){
        GtApiConfiguration apiConfiguration = new GtApiConfiguration();
        //填写应用配置
        apiConfiguration.setAppId(AppID);
        apiConfiguration.setAppKey(AppKey);
        apiConfiguration.setMasterSecret(MasterSecret);
        // 接口调用前缀,请查看文档: 接口调用规范 -> 接口前缀, 可不填写appId
        apiConfiguration.setDomain("https://restapi.getui.com/v2/");
        // 实例化ApiHelper对象,用于创建接口对象
        ApiHelper apiHelper = ApiHelper.build(apiConfiguration);
        // 创建对象,建议复用。目前有PushApi、StatisticApi、UserApi
        PushApi pushApi = apiHelper.creatApi(PushApi.class);
        return pushApi;
    }
    /**
     * Rest-V2厂商推送
     * type 1 安卓 2 ios
     */
    public void push2(String cid,int type,JSONObject json){
        init();
        //根据cid进行单推
        PushDTO<Audience> pushDTO = new PushDTO<Audience>();
        // 设置推送参数
        pushDTO.setRequestId(System.currentTimeMillis() + "");//requestid需要每次变化唯一
        //配置推送条件
        // 1: 表示该消息在用户在线时推送个推通道,用户离线时推送厂商通道;
        // 2: 表示该消息只通过厂商通道策略下发,不考虑用户是否在线;
        // 3: 表示该消息只通过个推通道下发,不考虑用户是否在线;
        // 4: 表示该消息优先从厂商通道下发,若消息内容在厂商通道代发失败后会从个推通道下发。
        Strategy strategy=new Strategy();
        strategy.setDef(1);
        Settings settings=new Settings();
        settings.setStrategy(strategy);
        pushDTO.setSettings(settings);
        settings.setTtl(3600000);//消息有效期,走厂商消息需要设置该值
        PushChannel pushChannel = new PushChannel();
        if(type == 1){
            //安卓离线厂商通道推送消息体
            AndroidDTO androidDTO = new AndroidDTO();
            Ups ups = new Ups();
            ThirdNotification notification1 = new ThirdNotification();
            notification1.setTitle(json.getString("title"));
            notification1.setBody(json.getString("body"));
            notification1.setClickType("intent");
            //component 包名 调起app
            String intent = "intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;" +
                    "component="+json.getString("platform")+"/io.dcloud.PandoraEntry;S.UP-OL-SU=true;" +
                    "S.title="+json.getString("title")+";" +
                    "S.content="+json.getString("body")+";" +
                    "S.payload="+json.getString("payload")+";end";
            notification1.setIntent(intent);
            ups.setNotification(notification1);
            //各厂商自有功能单项设置
            //ups.addOption("HW", "/message/android/notification/badge/class", "io.dcloud.PandoraEntry ");
            //ups.addOption("HW", "/message/android/notification/badge/add_num", 1);
            //ups.addOption("HW", "/message/android/notification/importance", "HIGH");
            //ups.addOption("VV","classification",1);
            androidDTO.setUps(ups);
            pushChannel.setAndroid(androidDTO);
        } else{
            //推送苹果离线通知标题内容
            Alert alert=new Alert();
            alert.setTitle(json.getString("title"));
            alert.setBody(json.getString("body"));
            Aps aps = new Aps();
            //1表示静默推送(无通知栏消息),静默推送时不需要填写其他参数。
            //苹果建议1小时最多推送3条静默消息
            aps.setContentAvailable(0);
            aps.setSound("default");
            aps.setAlert(alert);
            IosDTO iosDTO = new IosDTO();
            iosDTO.setAps(aps);
            iosDTO.setType("notify");
            pushChannel.setIos(iosDTO);
        }
        pushDTO.setPushChannel(pushChannel);
        // PushMessage在线走个推通道才会起作用的消息体
        PushMessage pushMessage = new PushMessage();
//        pushMessage.setTransmission(" {title:\""+json.getString("title")+"\",content:\""+json.getString("body")+"\",payload:\""+json.getString("payload")+"\"}");
        pushMessage.setTransmission(" {\"title\":\""+json.getString("title")+"\",\"content\":\""+json.getString("body")+"\",\"url\":\""+json.getString("url")+"\"}");
        pushDTO.setPushMessage(pushMessage);
        // 设置接收人信息
        Audience audience = new Audience();
        pushDTO.setAudience(audience);
        audience.addCid(cid);
        // 进行cid单推
        ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO);
        if (apiResult.isSuccess()) {
            // success
            logger.info("发送成功:"+apiResult.getData());
        } else {
            // failed
            logger.info("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
        }
    }
    /**
     * 单推
     */
    public ApiResult<Map<String, Map<String, String>>> pushToSingleByCid(String cid, JSONObject json) {
        init();
        //根据cid进行单推
        PushDTO<Audience> pushDTO = new PushDTO<>();
        // 设置推送参数
        pushDTO.setRequestId(System.currentTimeMillis() + "");
        PushMessage pushMessage = new PushMessage();
        pushDTO.setPushMessage(pushMessage);
        GTNotification notification = new GTNotification();
        pushMessage.setNotification(notification);
        notification.setTitle(json.getString("title"));
        notification.setBody(json.getString("body"));
        notification.setClickType(json.getString("clickType"));
        notification.setUrl(json.getString("url"));
        // 设置接收人信息
        Audience audience = new Audience();
        pushDTO.setAudience(audience);
        audience.addCid(cid);
        //消息离线时间设置
        Settings settings = new Settings();
        //	消息离线时间设置,单位毫秒,-1表示不设离线,-1 ~ 3 * 24 * 3600 * 1000(3天)之间
        settings.setTtl(3 * 24 * 3600 * 1000);
        pushDTO.setSettings(settings);
        // 进行cid单推
        return pushApi.pushToSingleByCid(pushDTO);
    }
}

+ 33 - 17
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/GetuiUtil.java

@ -1,4 +1,4 @@
package com.yihu.jw.care.util;
package com.yihu.jw.push.util;
import com.alibaba.fastjson.JSONObject;
import com.getui.push.v2.sdk.ApiHelper;
@ -38,6 +38,8 @@ public class GetuiUtil {
    public static String AppKey = "JC2LAW9IK27pansBB4jN87";
    public static String AppSecret = "Sn9PLz1hA6NNgyb7WHx45";
    public static String MasterSecret = "Rd86CP8bOy7RHyTf4ZE3R4";
    public static String cloudCareDoctor = "com.zjxl.medicalcare.doctor";
    public static String cloudCarePatientPad = "com.zjxl.medicalcare.patient.pad";
    private static PushApi getPushApi(){
@ -68,14 +70,24 @@ public class GetuiUtil {
//        } else {
//            System.out.println("个推推送失败:code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
//        }
        String cid = "d0e395d2e04b1da6f45a4f700883297d";
        String cid = "d2fee750dcdf7a2567444b1d4f629305";
        String title = "ios11:49标题";
        String body = "安卓离线展示的内容";
//        String url = "https://www.baidu.com/";
        String url = "/archives/index";
        JSONObject payload = new JSONObject();
        payload.put("title",title);
        payload.put("body",body);
        payload.put("url",url);
        JSONObject json = new JSONObject();
        json.put("title","安卓11:38标题");
        json.put("body","安卓离线展示的内容");
        json.put("url","https://www.baidu.com/");
        json.put("clickType","url");
        json.put("platform","patient");
        json.put("payload","payload");
        json.put("title",title);
        json.put("body",body);
        json.put("url",url);
//        json.put("clickType","url");
        json.put("platform",cloudCareDoctor);
        json.put("payload",payload.toString());
        push2(cid,1,json);
    }
@ -105,17 +117,20 @@ public class GetuiUtil {
            //安卓离线厂商通道推送消息体
            AndroidDTO androidDTO = new AndroidDTO();
            Ups ups = new Ups();
            ThirdNotification notification1 = new ThirdNotification();;
            ups.setNotification(notification1);
            notification1.setTitle("安卓11:38标题");
            notification1.setBody("安卓离线展示的内容");
            ThirdNotification notification1 = new ThirdNotification();
            notification1.setTitle(json.getString("title"));
            notification1.setBody(json.getString("body"));
            notification1.setUrl(json.getString("url"));
            notification1.setClickType("intent");
            //component 包名 调起app
            String intent = "intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;" +
                    "component=com.xmeye.ehospital."+json.getString("platform")+"/io.dcloud.PandoraEntry;S.UP-OL-SU=true;" +
                    "component="+json.getString("platform")+"/io.dcloud.PandoraEntry;S.UP-OL-SU=true;" +
                    "S.title="+json.getString("title")+";" +
                    "S.content="+json.getString("body")+";" +
                    "S.payload="+json.getString("payload")+";end";
                    "S.url="+json.getString("url")+";end";
            notification1.setIntent(intent);
            ups.setNotification(notification1);
            //各厂商自有功能单项设置
            //ups.addOption("HW", "/message/android/notification/badge/class", "io.dcloud.PandoraEntry ");
            //ups.addOption("HW", "/message/android/notification/badge/add_num", 1);
@ -143,8 +158,9 @@ public class GetuiUtil {
        pushDTO.setPushChannel(pushChannel);
        // PushMessage在线走个推通道才会起作用的消息体
        PushMessage pushMessage = new PushMessage();
//        pushMessage.setTransmission(" {\"title\":\""+json.getString("title")+"\",\"content\":\""+json.getString("body")+"\",\"payload\":\""+json.getString("payload")+"\"}");
        pushMessage.setTransmission(" {\"title\":\""+json.getString("title")+"\",\"content\":\""+json.getString("body")+"\",\"url\":\""+json.getString("url")+"\"}");
        pushDTO.setPushMessage(pushMessage);
        pushMessage.setTransmission(" {title:\""+json.getString("title")+"\",content:\""+json.getString("body")+"\",payload:\""+json.getString("payload")+"\"}");
        // 设置接收人信息
        Audience audience = new Audience();
        pushDTO.setAudience(audience);
@ -154,10 +170,10 @@ public class GetuiUtil {
        ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO);
        if (apiResult.isSuccess()) {
            // success
            System.out.println("发送成功:"+apiResult.getData());
            logger.info("发送成功:"+apiResult.getData());
        } else {
            // failed
            System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
            logger.info("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
        }
    }

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

@ -663,7 +663,7 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
                e.printStackTrace();
            }
        }
        if(StringUtils.isNotBlank(clientId)&&isPateint<3){
        if(StringUtils.isNotBlank(clientId)&&StringUtils.isNotBlank(clientType)&&isPateint<3){
            try {
                List<GetuiClientDO> list = baseGetuiClientDao.findByUser(id,isPateint,clientId,clientType);
                if(list.size() == 0){

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

@ -243,13 +243,11 @@
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
        </dependency>
        <!-- 个推v2sdk -->
        <dependency>
            <groupId>com.getui.push</groupId>
            <artifactId>restful-sdk</artifactId>
            <version>1.0.0.1</version>
            <groupId>com.yihu.jw</groupId>
            <artifactId>push-service</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>im-service</artifactId>