Ver código fonte

Merge branch 'online' into local/1030-music

liujc 1 ano atrás
pai
commit
72a3e15cef
21 arquivos alterados com 578 adições e 19 exclusões
  1. 1 0
      .gitignore
  2. 0 5
      audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java
  3. 11 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupController.java
  4. 50 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/open/OpenAppVersionInfoController.java
  5. 50 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/open/OpenAppVersionInfoController.java
  6. 50 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/open/OpenAppVersionInfoController.java
  7. 50 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenAppVersionInfoController.java
  8. 97 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/controller/BaseController.java
  9. 50 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/OpenAppVersionInfoController.java
  10. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/AppVersionInfoDao.java
  11. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/AppVersionInfoQueryInfo.java
  12. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/AppVersionInfoService.java
  13. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupService.java
  14. 7 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UploadFileService.java
  15. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/AppVersionInfoServiceImpl.java
  16. 5 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ContractServiceImpl.java
  17. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java
  18. 16 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/AppVersionInfoMapper.xml
  19. 50 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenAppVersionInfoController.java
  20. 50 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/open/OpenAppVersionInfoController.java
  21. 50 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenAppVersionInfoController.java

+ 1 - 0
.gitignore

@@ -61,3 +61,4 @@ target
 /toolset/audit-log/src/main/java/com/yonge/toolset/log/interceptor/AuditLogInterceptor.java
 /log/
 cooleshow-cms/src/main/resources/bootstrap-local.yaml
+/cooleshow-app/src/main/resources/logback-local.xml

+ 0 - 5
audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java

@@ -43,8 +43,6 @@ import com.yonge.netty.entity.MusicXmlNote;
 import com.yonge.netty.server.handler.NettyChannelManager;
 import com.yonge.netty.server.handler.message.MessageHandler;
 import com.yonge.netty.server.processor.WaveformWriter;
-import com.yonge.toolset.thirdparty.storage.StoragePluginContext;
-import com.yonge.toolset.thirdparty.storage.provider.KS3StoragePlugin;
 import com.yonge.toolset.utils.upload.UploadUtil;
 
 @Component
@@ -65,9 +63,6 @@ public class AudioCompareHandler implements MessageHandler {
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
-    private StoragePluginContext storagePluginContext;
-
-    @Autowired
     private OssPluginContext ossPluginContext;
 
 	/**

+ 11 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupController.java

@@ -1,6 +1,8 @@
 package com.yonge.cooleshow.admin.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
+import com.microsvc.toolkit.common.response.template.R;
 import com.yonge.cooleshow.biz.dal.dto.ImGroupSearchDto;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.entity.ImHistoryMessage;
@@ -197,6 +199,15 @@ public class ImGroupController extends BaseController {
     }
 
 
+    @ApiOperation("群头像更新")
+    @PostMapping(value = "/groupAvatarUpdate")
+    public R<JSONObject> groupAvatarUpdate() {
+        CompletableFuture.runAsync(() -> {
+            imGroupService.groupAvatarUpdate();
+        });
+        return R.defaultR();
+    }
+
 
 }
 

+ 50 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/open/OpenAppVersionInfoController.java

@@ -0,0 +1,50 @@
+package com.yonge.cooleshow.admin.controller.open;
+
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.biz.dal.entity.AppVersionInfo;
+import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.admin:}/open/appVersionInfo")
+@Api(tags = "app版本信息管理")
+public class OpenAppVersionInfoController {
+
+    @Autowired
+    private AppVersionInfoService appVersionInfoService;
+
+
+    @ApiOperation("根据app客户端查询最近的app版本")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "platform", value = "平台名称", required = true, dataType = "String", paramType = "path"),
+        @ApiImplicitParam(name = "status", value = "状态", required = true, dataType = "String",
+            paramType = "newest/history")
+    })
+    @GetMapping(value = "/queryLatestByPlatform")
+    public R<AppVersionInfo> queryLatestByPlatform(String platform, String status) {
+        String appStatus = Optional.ofNullable(status).orElse("newest");
+        if ("history".equals(appStatus)) {
+            appStatus = "newest,history";
+        }
+        List<AppVersionInfo> list = appVersionInfoService.queryLatestByPlatform(platform, appStatus);
+        if (list.size() > 0) {
+            return R.from(list.get(0));
+        }
+        throw BizException.from("未找到数据");
+    }
+}

+ 50 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/open/OpenAppVersionInfoController.java

@@ -0,0 +1,50 @@
+package com.yonge.cooleshow.student.controller.open;
+
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.biz.dal.entity.AppVersionInfo;
+import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.student:}/open/appVersionInfo")
+@Api(tags = "app版本信息管理")
+public class OpenAppVersionInfoController {
+
+    @Autowired
+    private AppVersionInfoService appVersionInfoService;
+
+
+    @ApiOperation("根据app客户端查询最近的app版本")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "platform", value = "平台名称", required = true, dataType = "String", paramType = "path"),
+        @ApiImplicitParam(name = "status", value = "状态", required = true, dataType = "String",
+            paramType = "newest/history")
+    })
+    @GetMapping(value = "/queryLatestByPlatform")
+    public R<AppVersionInfo> queryLatestByPlatform(String platform, String status) {
+        String appStatus = Optional.ofNullable(status).orElse("newest");
+        if ("history".equals(appStatus)) {
+            appStatus = "newest,history";
+        }
+        List<AppVersionInfo> list = appVersionInfoService.queryLatestByPlatform(platform, appStatus);
+        if (list.size() > 0) {
+            return R.from(list.get(0));
+        }
+        throw BizException.from("未找到数据");
+    }
+}

+ 50 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/open/OpenAppVersionInfoController.java

@@ -0,0 +1,50 @@
+package com.yonge.cooleshow.teacher.controller.open;
+
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.biz.dal.entity.AppVersionInfo;
+import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.teacher:}/open/appVersionInfo")
+@Api(tags = "app版本信息管理")
+public class OpenAppVersionInfoController {
+
+    @Autowired
+    private AppVersionInfoService appVersionInfoService;
+
+
+    @ApiOperation("根据app客户端查询最近的app版本")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "platform", value = "平台名称", required = true, dataType = "String", paramType = "path"),
+        @ApiImplicitParam(name = "status", value = "状态", required = true, dataType = "String",
+            paramType = "newest/history")
+    })
+    @GetMapping(value = "/queryLatestByPlatform")
+    public R<AppVersionInfo> queryLatestByPlatform(String platform, String status) {
+        String appStatus = Optional.ofNullable(status).orElse("newest");
+        if ("history".equals(appStatus)) {
+            appStatus = "newest,history";
+        }
+        List<AppVersionInfo> list = appVersionInfoService.queryLatestByPlatform(platform, appStatus);
+        if (list.size() > 0) {
+            return R.from(list.get(0));
+        }
+        throw BizException.from("未找到数据");
+    }
+}

+ 50 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenAppVersionInfoController.java

@@ -0,0 +1,50 @@
+package com.yonge.cooleshow.tenant.controller.open;
+
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.biz.dal.entity.AppVersionInfo;
+import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.tenant:}/open/appVersionInfo")
+@Api(tags = "app版本信息管理")
+public class OpenAppVersionInfoController {
+
+    @Autowired
+    private AppVersionInfoService appVersionInfoService;
+
+
+    @ApiOperation("根据app客户端查询最近的app版本")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "platform", value = "平台名称", required = true, dataType = "String", paramType = "path"),
+        @ApiImplicitParam(name = "status", value = "状态", required = true, dataType = "String",
+            paramType = "newest/history")
+    })
+    @GetMapping(value = "/queryLatestByPlatform")
+    public R<AppVersionInfo> queryLatestByPlatform(String platform, String status) {
+        String appStatus = Optional.ofNullable(status).orElse("newest");
+        if ("history".equals(appStatus)) {
+            appStatus = "newest,history";
+        }
+        List<AppVersionInfo> list = appVersionInfoService.queryLatestByPlatform(platform, appStatus);
+        if (list.size() > 0) {
+            return R.from(list.get(0));
+        }
+        throw BizException.from("未找到数据");
+    }
+}

+ 97 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/controller/BaseController.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.exception.ThirdpartyException;
 import com.yonge.toolset.utils.http.HttpUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
@@ -23,11 +24,17 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
 import javax.servlet.http.HttpServletRequest;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
 import java.net.URLEncoder;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
+@Slf4j
 @ControllerAdvice
 public class BaseController {
 
@@ -135,9 +142,13 @@ public class BaseController {
             return failed(errorMsg);
         }
         try {
+
+            // 机器人通知消息
+            String message = getRobotRequestLog(request);
+
             Map<String, Object> paramMap = new HashMap<>(2);
             JSONObject jsonObject = new JSONObject();
-            jsonObject.put("content", "系统繁忙请及时处理: " + request.getRequestURL() + "   " + e);
+            jsonObject.put("content", "系统繁忙请及时处理: " + message + "   " + e);
             paramMap.put("text", jsonObject.toJSONString());
             paramMap.put("msgtype", "text");
             Map<String, String> headers = new HashMap<>(1);
@@ -152,6 +163,91 @@ public class BaseController {
         return failed("系统繁忙");
     }
 
+    /**
+     * 打印异常请求日志
+     * @param request HttpServletRequest
+     * @return String
+     */
+    private String getRobotRequestLog(HttpServletRequest request){
+
+        if (Objects.isNull(request)) {
+            log.warn("getRobotRequestLog request is null");
+            return "";
+        }
+
+        StringBuilder sb = new StringBuilder();
+        // 打印请求日志或执行其他逻辑
+        sb.append("Request URI: ").append(request.getRequestURI());
+
+        // 请求参数
+        Map<String, String> requestParams = getRequestParameters(request);
+        if (!requestParams.isEmpty()) {
+            sb.append(", Request Parameters: ").append(requestParams);
+        }
+
+        // 请求头
+        Map<String, String> requestHeaders = getRequestHeaders(request);
+        if (!requestHeaders.isEmpty()) {
+            sb.append(", Request Headers: ").append(requestHeaders);
+        }
+
+        // 请求消息体
+        String requestBody = getRequestBody(request);
+        if (!requestBody.isEmpty()) {
+            sb.append(", Request JSON: ").append(requestBody);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 请求参数
+     * @param request HttpServletRequest
+     * @return Map<String, String>
+     */
+    private Map<String, String> getRequestParameters(HttpServletRequest request) {
+        Map<String, String> params = new HashMap<>();
+        request.getParameterMap().forEach((name, values) -> {
+            if (values.length > 0) {
+                params.put(name, values[0]);
+            }
+        });
+        return params;
+    }
+
+    /**
+     * 请求头
+     * @param request HttpServletRequest
+     * @return Map<String, String>
+     */
+    private Map<String, String> getRequestHeaders(HttpServletRequest request) {
+        Enumeration<String> headerNames = request.getHeaderNames();
+        Map<String, String> headers = new HashMap<>();
+        while (headerNames.hasMoreElements()) {
+            String headerName = headerNames.nextElement();
+            String headerValue = request.getHeader(headerName);
+            headers.put(headerName, headerValue);
+        }
+        return headers;
+    }
+
+    /**
+     * 请求消息体
+     * @param request HttpServletRequest
+     * @return String
+     */
+    private String getRequestBody(HttpServletRequest request) {
+        StringBuilder requestBody = new StringBuilder();
+        try (BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()))) {
+            String line;
+            while ((line = reader.readLine()) != null) {
+                requestBody.append(line);
+            }
+        } catch (IOException e) {
+            log.error("robot getRequestBody body: {}", e.getMessage());
+        }
+        return requestBody.toString();
+    }
+
     public String dingTalkRobotsSecurityParam() throws Exception {
         Long timestamp = System.currentTimeMillis();
         String secret = "SEC7371152e58a066b358afd9e9cfaad2aee4b46471218f1aeef88d43a401d8e2f2";

+ 50 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/OpenAppVersionInfoController.java

@@ -0,0 +1,50 @@
+package com.yonge.cooleshow.admin.controller.open;
+
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.biz.dal.entity.AppVersionInfo;
+import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/open/appVersionInfo")
+@Api(tags = "app版本信息管理")
+public class OpenAppVersionInfoController {
+
+    @Autowired
+    private AppVersionInfoService appVersionInfoService;
+
+
+    @ApiOperation("根据app客户端查询最近的app版本")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "platform", value = "平台名称", required = true, dataType = "String", paramType = "path"),
+        @ApiImplicitParam(name = "status", value = "状态", required = true, dataType = "String",
+            paramType = "newest/history")
+    })
+    @GetMapping(value = "/queryLatestByPlatform")
+    public R<AppVersionInfo> queryLatestByPlatform(String platform, String status) {
+        String appStatus = Optional.ofNullable(status).orElse("newest");
+        if ("history".equals(appStatus)) {
+            appStatus = "newest,history";
+        }
+        List<AppVersionInfo> list = appVersionInfoService.queryLatestByPlatform(platform, appStatus);
+        if (list.size() > 0) {
+            return R.from(list.get(0));
+        }
+        throw BizException.from("未找到数据");
+    }
+}

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/AppVersionInfoDao.java

@@ -25,4 +25,5 @@ public interface AppVersionInfoDao extends BaseDAO<Long, AppVersionInfo> {
 	 */
 	AppVersionInfo selectAppVersionInfo(@Param("platform") String platform, @Param("version") String version);
 
+	List<AppVersionInfo> queryLatestByPlatform(@Param("platform") String platform, @Param("status") String status);
 }

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/AppVersionInfoQueryInfo.java

@@ -1,9 +1,13 @@
 package com.yonge.cooleshow.biz.dal.queryInfo;
 
 import com.yonge.toolset.base.page.QueryInfo;
+import lombok.Data;
 
+@Data
 public class AppVersionInfoQueryInfo extends QueryInfo {
 
+	private String keyword;
+
 	private String version;
 	
 	private String platform;

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/AppVersionInfoService.java

@@ -31,4 +31,6 @@ public interface AppVersionInfoService extends BaseService<Long, AppVersionInfo>
 	 * @return
 	 */
 	YesOrNoEnum getAppAuditVersion(String platform, String version);
+
+    List<AppVersionInfo> queryLatestByPlatform(String platform, String appStatus);
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupService.java

@@ -209,5 +209,7 @@ public interface ImGroupService extends IService<ImGroup> {
     Boolean updateImGroup(ImGroup imGroup);
 
     void clearImportIm(List<ImHistoryMessage> info);
+
+    void groupAvatarUpdate();
 }
 

+ 7 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UploadFileService.java

@@ -2,12 +2,11 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.alibaba.fastjson.JSON;
 import com.microsvc.toolkit.middleware.oss.OssPluginContext;
+import com.microsvc.toolkit.middleware.oss.impl.TencentOssPlugin;
 import com.microsvc.toolkit.middleware.oss.wrapper.OssWrapper;
 import com.yonge.cooleshow.common.entity.UploadReturnBean;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.thirdparty.entity.UploadSign;
-import com.yonge.toolset.thirdparty.storage.StoragePluginContext;
-import com.yonge.toolset.thirdparty.storage.provider.KS3StoragePlugin;
 import com.yonge.toolset.utils.upload.UploadUtil;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
@@ -31,8 +30,6 @@ import java.io.InputStream;
 public class UploadFileService {
 
     @Autowired
-    private StoragePluginContext storagePluginContext;
-    @Autowired
     private OssPluginContext ossPluginContext;
 
     /**
@@ -68,7 +65,7 @@ public class UploadFileService {
             return uploadReturn;
         }
 
-        String staticFloder = "";
+        String staticFloder = "klx";
 
         String folder = UploadUtil.getFileFloder();
         String filePath = UploadUtil.getFilePath(root, staticFloder, folder);
@@ -80,7 +77,8 @@ public class UploadFileService {
         }
 
         //String url = storagePlugin.uploadFile(staticFloder + folder, file);
-        String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, staticFloder + folder, file);
+        //String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, staticFloder + folder, file);
+        String url = ossPluginContext.getPluginService(TencentOssPlugin.PLUGIN_NAME).uploadFile(staticFloder + folder, file);
 
         FileUtils.deleteQuietly(file);
         uploadReturn.setStatus(true);
@@ -101,11 +99,12 @@ public class UploadFileService {
             return uploadReturn;
         }
 
-        String staticFloder = "";
+        String staticFloder = "klx";
         String folder = UploadUtil.getFileFloder();
         String filePath = UploadUtil.getFilePath(root, staticFloder, folder);
         File file = uploadFile(in, filePath, fileName);
-        String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, staticFloder + folder, file);
+        //String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, staticFloder + folder, file);
+        String url = ossPluginContext.getPluginService(TencentOssPlugin.PLUGIN_NAME).uploadFile(staticFloder + folder, file);
 
         FileUtils.deleteQuietly(file);
 

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/AppVersionInfoServiceImpl.java

@@ -73,4 +73,9 @@ public class AppVersionInfoServiceImpl extends BaseServiceImpl<Long, AppVersionI
 			return YesOrNoEnum.NO;
 		}
 	}
+
+    @Override
+    public List<AppVersionInfo> queryLatestByPlatform(String platform, String appStatus) {
+		return appVersionInfoDao.queryLatestByPlatform(platform, appStatus);
+	}
 }

+ 5 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ContractServiceImpl.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.microsvc.toolkit.middleware.oss.OssPluginContext;
+import com.microsvc.toolkit.middleware.oss.impl.TencentOssPlugin;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.common.enums.CertificateTypeEnum;
 import com.yonge.cooleshow.biz.dal.entity.ContractTemplate;
@@ -13,8 +15,6 @@ import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
 import com.yonge.cooleshow.common.enums.SysUserType;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.thirdparty.eseal.ESealPlugin;
-import com.yonge.toolset.thirdparty.storage.StoragePluginContext;
-import com.yonge.toolset.thirdparty.storage.provider.KS3StoragePlugin;
 import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPluginContext;
 import com.yonge.toolset.thirdparty.user.realname.provider.LinkfaceRealnameAuthenticationPlugin;
 import com.yonge.toolset.utils.date.DateUtil;
@@ -58,7 +58,7 @@ public class ContractServiceImpl implements ContractService {
     @Autowired
     private RealnameAuthenticationPluginContext realnameAuthenticationPluginContext;
     @Autowired
-    private StoragePluginContext storagePluginContext;
+    private OssPluginContext ossPluginContext;
     @Autowired
     private ESealPlugin eSealPlugin;
 
@@ -178,7 +178,8 @@ public class ContractServiceImpl implements ContractService {
         // 上传到oss
         String dateStrOss = dateFormatOss.format(date);
         dateStrOss = "product/" + dateStrOss + "/" + DateUtil.getHour(date);
-        String pdfFilePath = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, dateStrOss, srcFile);
+        String pdfFilePath = ossPluginContext.getPluginService(TencentOssPlugin.PLUGIN_NAME).uploadFile(dateStrOss, srcFile);
+        // String pdfFilePath = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, dateStrOss, srcFile);
         FileUtils.deleteQuietly(srcFile);
         return HttpResponseResult.succeed(pdfFilePath);
     }

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java

@@ -1348,6 +1348,33 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         }
     }
 
+    @Override
+    public void groupAvatarUpdate() {
+        int page = 1;
+        int size = 100;
+        List<ImGroup> imGroups = this.lambdaQuery().orderByDesc(ImGroup::getCreateTime)
+            .last("limit " + ((page - 1) * size) + "," + size).list();
+        while (!imGroups.isEmpty()) {
+            groupAvatarUpdate(imGroups);
+
+            page++;
+            imGroups = this.lambdaQuery().orderByDesc(ImGroup::getCreateTime)
+                .last("limit " + ((page - 1) * size) + "," + size).list();
+        }
+    }
+
+    private void groupAvatarUpdate(List<ImGroup> records) {
+
+        for (ImGroup imGroup : records) {
+
+            try {
+                imGroupCoreService.modifyGroupInfo(imGroup.getId(), imGroup.getName(), imGroup.getImg());
+            } catch (Exception e) {
+                log.error("群头像更新失败:" + JSON.toJSONString(imGroup), e);
+            }
+        }
+    }
+
 
     private void groupTransfer(List<ImGroup> records) {
         String fansIcon = sysConfigService.findConfigValue(SysConfigConstant.ICON_FANS_GROUP_DEFAULT);

+ 16 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/AppVersionInfoMapper.xml

@@ -91,6 +91,12 @@
 	<select id="queryPage" resultMap="AppVersionInfo" parameterType="map">
 		SELECT * FROM app_version_info
 		<where>
+			<if test="keyword != null and keyword.trim() != ''">
+				and (id_ like concat('%',#{keyword},'%') or
+				version_ like concat('%',#{keyword},'%') or
+				description_ like concat('%',#{keyword},'%')
+				)
+			</if>
 			<if test="version != null and version != ''">
 				and version_ = #{version}
 			</if>
@@ -101,7 +107,7 @@
 				and status_ = #{status}
 			</if>
 		</where>
-		ORDER BY status_ DESC
+		order by version_ desc ,status_='newest' desc , id_ desc
 		<include refid="global.limit" />
 	</select>
 
@@ -126,4 +132,13 @@
 		select avi.status_ from app_version_info avi where avi.platform_ = #{platform} and avi.version_ = #{version}
 
 	</select>
+
+	<select id="queryLatestByPlatform" resultMap="AppVersionInfo">
+		SELECT *
+		FROM app_version_info
+		WHERE platform_ = #{platform}
+		  and find_in_set(status_, #{status})
+		order by version_ desc, status_='newest' desc, id_ desc
+		limit 1
+	</select>
 </mapper>

+ 50 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenAppVersionInfoController.java

@@ -0,0 +1,50 @@
+package com.yonge.cooleshow.student.controller.open;
+
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.biz.dal.entity.AppVersionInfo;
+import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/open/appVersionInfo")
+@Api(tags = "app版本信息管理")
+public class OpenAppVersionInfoController {
+
+    @Autowired
+    private AppVersionInfoService appVersionInfoService;
+
+
+    @ApiOperation("根据app客户端查询最近的app版本")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "platform", value = "平台名称", required = true, dataType = "String", paramType = "path"),
+        @ApiImplicitParam(name = "status", value = "状态", required = true, dataType = "String",
+            paramType = "newest/history")
+    })
+    @GetMapping(value = "/queryLatestByPlatform")
+    public R<AppVersionInfo> queryLatestByPlatform(String platform, String status) {
+        String appStatus = Optional.ofNullable(status).orElse("newest");
+        if ("history".equals(appStatus)) {
+            appStatus = "newest,history";
+        }
+        List<AppVersionInfo> list = appVersionInfoService.queryLatestByPlatform(platform, appStatus);
+        if (list.size() > 0) {
+            return R.from(list.get(0));
+        }
+        throw BizException.from("未找到数据");
+    }
+}

+ 50 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/open/OpenAppVersionInfoController.java

@@ -0,0 +1,50 @@
+package com.yonge.cooleshow.teacher.controller.open;
+
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.biz.dal.entity.AppVersionInfo;
+import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/open/appVersionInfo")
+@Api(tags = "app版本信息管理")
+public class OpenAppVersionInfoController {
+
+    @Autowired
+    private AppVersionInfoService appVersionInfoService;
+
+
+    @ApiOperation("根据app客户端查询最近的app版本")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "platform", value = "平台名称", required = true, dataType = "String", paramType = "path"),
+        @ApiImplicitParam(name = "status", value = "状态", required = true, dataType = "String",
+            paramType = "newest/history")
+    })
+    @GetMapping(value = "/queryLatestByPlatform")
+    public R<AppVersionInfo> queryLatestByPlatform(String platform, String status) {
+        String appStatus = Optional.ofNullable(status).orElse("newest");
+        if ("history".equals(appStatus)) {
+            appStatus = "newest,history";
+        }
+        List<AppVersionInfo> list = appVersionInfoService.queryLatestByPlatform(platform, appStatus);
+        if (list.size() > 0) {
+            return R.from(list.get(0));
+        }
+        throw BizException.from("未找到数据");
+    }
+}

+ 50 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenAppVersionInfoController.java

@@ -0,0 +1,50 @@
+package com.yonge.cooleshow.tenant.controller.open;
+
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.biz.dal.entity.AppVersionInfo;
+import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/open/appVersionInfo")
+@Api(tags = "app版本信息管理")
+public class OpenAppVersionInfoController {
+
+    @Autowired
+    private AppVersionInfoService appVersionInfoService;
+
+
+    @ApiOperation("根据app客户端查询最近的app版本")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "platform", value = "平台名称", required = true, dataType = "String", paramType = "path"),
+        @ApiImplicitParam(name = "status", value = "状态", required = true, dataType = "String",
+            paramType = "newest/history")
+    })
+    @GetMapping(value = "/queryLatestByPlatform")
+    public R<AppVersionInfo> queryLatestByPlatform(String platform, String status) {
+        String appStatus = Optional.ofNullable(status).orElse("newest");
+        if ("history".equals(appStatus)) {
+            appStatus = "newest,history";
+        }
+        List<AppVersionInfo> list = appVersionInfoService.queryLatestByPlatform(platform, appStatus);
+        if (list.size() > 0) {
+            return R.from(list.get(0));
+        }
+        throw BizException.from("未找到数据");
+    }
+}