Jelajahi Sumber

app推送功能

bmmx 1 tahun lalu
induk
melakukan
b4eea19565

+ 6 - 0
src/main/java/com/om/constant/DeviceConstant.java

@@ -0,0 +1,6 @@
+package com.om.constant;
+
+public class DeviceConstant {
+
+    public final static String[] DEVICE_TOKENS = {""};
+}

+ 6 - 0
src/main/java/com/om/controller/admin/AppsController.java

@@ -103,4 +103,10 @@ public class AppsController {
             return Result.fail("软件版本插入失败!");
         }
     }
+
+    @GetMapping("/push")
+    @ApiOperation("推送应用软件")
+    public Result pushApps(@RequestParam Integer id) {
+        return appsService.push(id);
+    }
 }

+ 1 - 1
src/main/java/com/om/controller/admin/UtilController.java

@@ -110,7 +110,7 @@ public class UtilController {
     }
 
     @ApiOperation("视频上传接口")
-    @PostMapping("/video")
+    @PostMapping(value = "/video",headers="content-type=multipart/form-data")
     public Result video(@RequestParam("file") MultipartFile file,
                         HttpServletRequest request,
                         @RequestParam("prefix") String prefix) throws IOException {

+ 3 - 0
src/main/java/com/om/entity/dto/UserLoginDTO.java

@@ -16,6 +16,9 @@ public class UserLoginDTO {
     @ApiModelProperty(value = "密码")
     private String password;
 
+    @ApiModelProperty(value = "deviceToken")
+    private String deviceToken;
+
     @ApiModelProperty(value = "新密码")
     private String rePassword;
 

+ 3 - 0
src/main/java/com/om/entity/po/Client.java

@@ -38,6 +38,9 @@ public class Client implements Serializable {
     @ApiModelProperty(value = "描述信息")
     private String description;
 
+    @ApiModelProperty(value = "deviceToken")
+    private String deviceToken;
+
     @ApiModelProperty(value = "客户端编号")
     private String number;
 

+ 2 - 0
src/main/java/com/om/service/IAppsService.java

@@ -20,4 +20,6 @@ public interface IAppsService extends IService<Apps> {
     Page<Apps> findApps(Page<Apps> objectPage, String code, String title);
 
     Result<AppUpdateVO> AppUpdate(AppDTO dto);
+
+    Result push(Integer id);
 }

+ 77 - 8
src/main/java/com/om/service/impl/AppsServiceImpl.java

@@ -1,25 +1,27 @@
 package com.om.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.om.entity.dto.AppDTO;
-import com.om.entity.dto.GuidDTO;
+import com.om.entity.dto.*;
 import com.om.entity.po.Apps;
 import com.om.entity.po.AppsClients;
 import com.om.entity.po.AppsDesc;
+import com.om.entity.po.Client;
 import com.om.entity.vo.AppUpdateVO;
+import com.om.exception.BadReqException;
+import com.om.exception.BizException;
 import com.om.mapper.AppsMapper;
 import com.om.service.IAppsClientsService;
 import com.om.service.IAppsDescService;
 import com.om.service.IAppsService;
-import com.om.utils.AesUtil;
-import com.om.utils.HuaweiObsUtil;
-import com.om.utils.Result;
-import com.om.utils.VersionComparator;
+import com.om.service.IClientService;
+import com.om.utils.*;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Optional;
@@ -51,6 +53,11 @@ public class AppsServiceImpl extends ServiceImpl<AppsMapper, Apps> implements IA
     @Resource
     private HuaweiObsUtil obsUtil;
 
+    @Resource
+    private IClientService clientService;
+    @Resource
+    private PushUtil pushUtil;
+
     @Override
     public Page<Apps> findApps(Page<Apps> objectPage, String code, String title) {
         return appsMapper.findApps(objectPage, code, title);
@@ -77,7 +84,7 @@ public class AppsServiceImpl extends ServiceImpl<AppsMapper, Apps> implements IA
 
                 int result = VersionComparator.compareVersions(version, apps1.getVersion());
                 if (result >= 0 ){
-                    return Result.error().message("没有APP更新").result(24001);
+                    return Result.ok().message("没有APP更新").result(24001);
                 }
                 vo.setFileName(apps1.getFileName());
                 vo.setFileSize((long) (Double.valueOf(apps1.getFileSize()) * 1024 * 1024));
@@ -95,8 +102,70 @@ public class AppsServiceImpl extends ServiceImpl<AppsMapper, Apps> implements IA
                 vo.setUrl(uploadUrl);
                 vo.setIsUpdate("1");
             }
+            return Result.ok(vo);
+        }
+
+        return Result.ok().message("没有APP更新").result(24001);
+    }
+
+    @Override
+    public Result push(Integer id) {
+        //根据id查询
+        Apps apps = this.getById(id);
+        if (BeanUtil.isEmpty(apps)) {
+            throw new BadReqException("该应用软件不存在");
+        }
+        PushInfo pushInfo = new PushInfo();
+        pushInfo.setPushInfoType(1);
+
+        AppInfo appInfo = new AppInfo();
+        appInfo.setFileName(apps.getFileName());
+        appInfo.setVersion(apps.getVersion());
+        appInfo.setFileSize((long) (Double.valueOf(apps.getFileName())*1024*1024));
+        appInfo.setUrl(apps.getSavePath());
+
+        List<Describe> describeList = new ArrayList<>();
+
+        List<AppsDesc> appsDescList = appsDescService.lambdaQuery()
+                .eq(AppsDesc::getAppId, id)
+                .list();
+        if (!appsDescList.isEmpty()){
+            for (AppsDesc appsDesc : appsDescList) {
+                Describe describe = new Describe();
+                describe.setLanguage(appsDesc.getLanguage());
+                describe.setDescription(appsDesc.getDescription());
+                describeList.add(describe);
+            }
+        }
+        appInfo.setDescribeList(describeList);
+
+        List<AppsClients> appsClientsList = appsClientsService.lambdaQuery()
+                .eq(AppsClients::getAppId, id)
+                .list();
+
+
+        if (!appsClientsList.isEmpty()) {
+            List<String> clientNums = appsClientsList.stream().map(c -> c.getClientNum()).collect(Collectors.toList());
+            String[] tokens = new String[clientNums.size()];
+            for (String clientNum : clientNums) {
+                int i = 0;
+                Client client = clientService.lambdaQuery()
+                        .eq(Client::getNumber, clientNum)
+                        .one();
+                if (BeanUtil.isNotEmpty(client)) {
+                    tokens[i] = client.getDeviceToken();
+                    i++;
+                }
+            }
+            //调用工具类
+            pushInfo.setJson(JSONUtil.parseObj(appInfo));
+            try {
+                pushUtil.sendAndroidListcastJSON(tokens,pushInfo);
+            } catch (Exception e) {
+                throw new BizException("推送失败!!!");
+            }
         }
 
-        return Result.ok(vo);
+        return Result.ok();
     }
 }

+ 3 - 0
src/main/java/com/om/service/impl/UserServiceImpl.java

@@ -85,6 +85,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         String deviceSn = dto.getDeviceSn();
         Integer type = dto.getType();
         String appVersion = dto.getAppVersion();
+        String deviceToken = dto.getDeviceToken();
 
         //判断数据是否为空
         if (StringUtils.isBlank(username) || StringUtils.isBlank(password) || StringUtils.isBlank(clientNum) ||
@@ -119,6 +120,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if (BeanUtil.isEmpty(client)) {
             throw new BadReqException("该客户端不存在");
         }
+        client.setDeviceToken(deviceToken);
+        clientService.updateById(client);
 
         // 生成token
         Map<String, Object> claims = new HashMap<>();

+ 6 - 2
src/main/java/com/om/utils/PushUtil.java

@@ -4,12 +4,16 @@ package com.om.utils;
 import cn.hutool.json.JSONUtil;
 import com.om.entity.dto.AppInfo;
 import com.om.entity.dto.PushInfo;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 @Component
 public class PushUtil {
-	private String appkey = "66382b804216055bc1f5acb6";
-	private String appMasterSecret = "rdoixnbigk1auk7ioxj6yvtqasr2pgkp";
+    @Value("${umeng.appkey}")
+	private String appkey;
+
+    @Value("${umeng.appMasterSecret}")
+	private String appMasterSecret;
 	private String timestamp = Long.toString(System.currentTimeMillis());
 	private PushClient client = new PushClient();
 

+ 13 - 4
src/main/resources/application-dev.yml

@@ -1,6 +1,10 @@
 server:
   port: 8888
-
+  tomcat:
+    basedir: /tmp/tomcat
+    connection-timeout: 120000
+    disable-upload-timeout: false
+  connectionUploadTimeout: 120000
 mybatis-plus:
   configuration:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 查看日志
@@ -27,8 +31,8 @@ spring:
       matching-strategy: ant_path_matcher
   servlet:
     multipart:
-      max-file-size: 50MB
-      max-request-size: 50MB
+      max-file-size: 100MB
+      max-request-size: 1000MB
 #jwt配置
 #密钥
 jwt:
@@ -53,4 +57,9 @@ obs:
   sk: XQTIcmKTZqxPfwYnINySG0LRUthy0iRBFqDdTnQ0
   bucketName: wl-resource
   endpoint: obs.cn-south-1.myhuaweicloud.com
-  path: wl-resource.obs.cn-south-1.myhuaweicloud.com
+  path: wl-resource.obs.cn-south-1.myhuaweicloud.com
+
+
+umeng:
+  appkey: 66382b804216055bc1f5acb6
+  appMasterSecret: rdoixnbigk1auk7ioxj6yvtqasr2pgkp