Pārlūkot izejas kodu

app 消息推送

sunhh 2 gadi atpakaļ
vecāks
revīzija
4d29f8931c

+ 2 - 0
business-service/src/main/java/com/ozs/service/mapper/MsgAlarmMapper.java

@@ -42,4 +42,6 @@ public interface MsgAlarmMapper extends BaseMapper<MsgAlarm> {
 
 
     List<MsgAlarm> selectMsgAlarmList(MsgAlarmVo msgAlarmVo);
+
+    MsgAlarm getByAlarmId(@Param("alarmId") String alarmId);
 }

+ 2 - 0
business-service/src/main/java/com/ozs/service/service/MsgAlarmService.java

@@ -41,4 +41,6 @@ public interface MsgAlarmService extends IService<MsgAlarm> {
     MsgAlarm selectByCameraCode(String cameraCode);
 
     IPage<MsgAlarm> queryPage(MsgAlarmVo msgAlarmVo);
+
+    MsgAlarm getByAlarmId(String alarmId);
 }

+ 5 - 0
business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmServiceImpl.java

@@ -100,4 +100,9 @@ public class MsgAlarmServiceImpl extends ServiceImpl<MsgAlarmMapper, MsgAlarm> i
         return pageR;
     }
 
+    @Override
+    public MsgAlarm getByAlarmId(String alarmId) {
+        return msgAlarmMapper.getByAlarmId(alarmId);
+    }
+
 }

+ 4 - 0
business-service/src/main/resources/mapper/service/MsgAlarmMapper.xml

@@ -243,4 +243,8 @@
             </if>
         </where>
     </select>
+
+    <select id="getByAlarmId" resultType="com.ozs.service.entity.MsgAlarm" parameterType="java.lang.String">
+        select * from msg_alarm where alarm_id = #{alarmId}
+    </select>
 </mapper>

+ 32 - 0
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmController.java

@@ -177,6 +177,38 @@ public class MsgAlarmController extends BaseController {
         return AjaxResult.success(page);
     }
 
+    @GetMapping(value = "/{alarmId}")
+    @ApiOperation("根据报警信息ID获取详细信息")
+    public AjaxResult getInfo(@PathVariable String alarmId) {
+        MsgAlarm msgAlarm = msgAlarmService.getByAlarmId(alarmId);
+        if (!ObjectUtils.isEmpty(msgAlarm)) {
+            LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
+            if (!ObjectUtils.isEmpty(msgAlarm.getCameraCode())) {
+                lw.eq(BaseCameraManagement::getCameraCode, msgAlarm.getCameraCode());
+            }
+            BaseCameraManagement baseCameraManagement = baseCameraManagementService.getOne(lw);
+            LambdaQueryWrapper<BaseRailwayManagement> wrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
+            if (!ObjectUtils.isEmpty(baseCameraManagement.getRailwayCode())) {
+                wrapper.eq(BaseRailwayManagement::getRailwayCode, baseCameraManagement.getRailwayCode());
+            }
+            BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(wrapper);
+            MsgAlarmResp msgAlarmResp = new MsgAlarmResp();
+            BeanUtils.copyProperties(msgAlarm, msgAlarmResp);
+            msgAlarmResp.setRailwayName(baseRailwayManagement.getRailwayName());
+            msgAlarmResp.setDeptId(baseCameraManagement.getDeptId());
+            String begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
+            String end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
+            String endMile = begin + "-" + end;
+            msgAlarmResp.setBeginMile(endMile);
+            String mile = AppendUtils.stringAppend(baseCameraManagement.getInstallMile());
+            msgAlarmResp.setAlarmMile(mile);
+            msgAlarmResp.setInstallLongitude(baseCameraManagement.getInstallLongitude() + "," + baseCameraManagement.getInstallLatitude());
+            return AjaxResult.success(msgAlarmResp);
+        } else {
+            return success("无报警信息数据");
+        }
+    }
+
     @GetMapping(value = "/{id}")
     @ApiOperation("根据报警信息ID获取详细信息")
     public AjaxResult getInfo(@PathVariable Long id) {

+ 95 - 0
hazard-admin/src/main/java/com/ozs/web/controller/websocket/JPushUtil.java

@@ -43,6 +43,7 @@ public class JPushUtil {
         int result = 0;
         try {
             PushPayload pushPayload = JPushUtil.buildPushObjectAllAliasAlertWithTitle(alias, notification_title, msg_title, msg_content, extrasparam);
+            PushPayload pushPayload1 = JPushUtil.buildPushObjectAllAliasAlertWithTitle(alias, notification_title, msg_title, msg_content, extrasparam);
             PushResult pushResult = jPushClient.sendPush(pushPayload);
             if (pushResult.getResponseCode() == 200) {
                 result = 1;
@@ -59,6 +60,36 @@ public class JPushUtil {
         return result;
     }
 
+    /**
+     * 推送给指定设备标识参数的用户(自定义消息通知)
+     * @param alias 设备标识 用户ID 别名
+     * @param notification_title 通知内容标题
+     * @param msg_title 消息内容标题
+     * @param msg_content 消息内容
+     * @param extrasparam 扩展字段(通常传跳转的链接)
+     * @return 0推送失败,1推送成功
+     */
+    public int sendToRegistrationId(String alias, String notification_title, String msg_title, String msg_content, String extrasparam) {
+        JPushClient jPushClient = new JPushClient(MASTERSECRET, APPKER);
+        int result = 0;
+        try {
+            PushPayload pushPayload= this.buildPushObject_all_alias_alertWithTitle(alias, notification_title, msg_title, msg_content, extrasparam);
+            PushResult pushResult = jPushClient.sendPush(pushPayload);
+            if(pushResult.getResponseCode() == 200){
+                result=1;
+            }
+            log.info("[极光推送]PushResult result is " + pushResult);
+        } catch (APIConnectionException e) {
+            log.error("[极光推送]Connection error. Should retry later. ", e);
+        } catch (APIRequestException e) {
+            log.error("[极光推送]Error response from JPush server. Should review and fix it. ", e);
+            log.info("[极光推送]HTTP Status: " + e.getStatus());
+            log.info("[极光推送]Error Code: " + e.getErrorCode());
+            log.info("[极光推送]Error Message: " + e.getErrorMessage());
+        }
+        return result;
+    }
+
     /**
      * 推送给设备标识参数的用户(定时)
      */
@@ -179,6 +210,70 @@ public class JPushUtil {
         return result;
     }
 
+    /**
+     * 推送自定义消息 指定别名推送
+     * @param alias
+     * @param notification_title
+     * @param msg_title
+     * @param msg_content
+     * @param extrasparam
+     * @return
+     */
+    private PushPayload buildPushObject_all_alias_alertWithTitle(String alias, String notification_title, String msg_title, String msg_content, String extrasparam) {
+        //创建一个IosAlert对象,可指定APNs的alert、title等字段
+        //IosAlert iosAlert =  IosAlert.newBuilder().setTitleAndBody("title", "alert body").build();
+        return PushPayload.newBuilder()
+                //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
+                .setPlatform(Platform.all())
+                //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
+                .setAudience(Audience.alias(alias))
+                //.setAudience(Audience.all()) //所有人
+                //.setAudience(Audience.registrationId(registrationId)) //注册ID
+                //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
+                .setNotification(Notification.newBuilder()
+                        //指定当前推送的android通知
+                        .addPlatformNotification(AndroidNotification.newBuilder()
+                                .setAlert(msg_content)
+                                .setTitle(notification_title)
+                                //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
+                                .addExtra("url", extrasparam)
+                                .build())
+                        //指定当前推送的iOS通知
+                        .addPlatformNotification(IosNotification.newBuilder()
+                                //传一个IosAlert对象,指定apns title、title、subtitle等
+                                .setAlert(msg_content)
+                                //直接传alert
+                                //此项是指定此推送的badge自动加1
+                                .incrBadge(1)
+                                //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
+                                // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
+                                .setSound("sound.caf")
+                                //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
+                                .addExtra("url", extrasparam)
+                                //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
+                                //取消此注释,消息推送时ios将无法在锁屏情况接收
+                                // .setContentAvailable(true)
+                                .build())
+                        .build())
+                //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
+                // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
+                // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
+                .setMessage(Message.newBuilder()
+                        .setMsgContent(msg_content)
+                        .setTitle(msg_title)
+                        //.addExtra("url", extrasparam) //释放该字段会发送两次消息,第二次消息内容是扩展字段
+                        .build())
+                .setOptions(Options.newBuilder()
+                        //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
+                        .setApnsProduction(true)
+                        //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
+                        .setSendno(1)
+                        //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天; 秒为单位
+                        .setTimeToLive(1 * 60 * 60 * 24)
+                        .build())
+                .build();
+    }
+
     public static PushPayload buildPushObjectAndroidAndIos(String notification_title, String msg_title, String msg_content, String extrasparam) {
         return PushPayload.newBuilder()
                 .setPlatform(Platform.android_ios())

+ 3 - 3
hazard-admin/src/main/java/com/ozs/web/controller/websocket/WebSocketConteoller.java

@@ -107,9 +107,9 @@ public class WebSocketConteoller extends BaseController {
             JPushUtil.sendToRegistrationId(
                     alias,
                     "报警通知!", cameraName != null ? cameraName : "",
-                    content,
-                    // formatDate + "     " + (msgAlarmResp.getAlarmType() == 1 ? "泥石流" : msgAlarmResp.getAlarmType()) + "     " + (baseCameraManagement.getLineDir() == 1 ? "上行" : "下行") + "     " + mile + "     " + endMile,
-                    "");
+                    // content,
+                    formatDate + "     " + (msgAlarmResp.getAlarmType() == 1 ? "泥石流" : msgAlarmResp.getAlarmType()) + "     " + (baseCameraManagement.getLineDir() == 1 ? "上行" : "下行") + "     " + mile + "     " + endMile,
+                    content);
         }
         // 存入数据
         if (!StringUtils.isEmpty(msgAlarm.getAlarmId()) || !StringUtils.isEmpty(userIdList)) {