瀏覽代碼

fix存储服务切换腾讯

Eric 1 年之前
父節點
當前提交
092d8f4677
共有 29 個文件被更改,包括 610 次插入93 次删除
  1. 6 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java
  2. 8 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java
  3. 12 6
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/service/CustomTokenServices.java
  4. 6 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java
  5. 2 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java
  6. 18 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  7. 7 3
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  8. 11 0
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  9. 12 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OrderCreate.java
  10. 52 9
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  11. 23 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/RongyunImImport.java
  12. 45 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupController.java
  13. 15 9
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UploadFileController.java
  14. 45 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java
  15. 6 0
      cooleshow-user/user-biz/pom.xml
  16. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupDao.java
  17. 89 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImHistoryMessage.java
  18. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupService.java
  19. 23 15
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UploadFileService.java
  20. 107 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java
  21. 7 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SmsCodeServiceImpl.java
  22. 17 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupMapper.xml
  23. 15 9
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UploadFileController.java
  24. 6 2
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.java
  25. 15 9
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UploadFileController.java
  26. 2 2
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenClient.java
  27. 11 3
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/UploadFileController.java
  28. 14 15
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenClient.java
  29. 12 0
      toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/entity/UploadSign.java

+ 6 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java

@@ -168,6 +168,12 @@ public interface AdminFeignService {
     @GetMapping("/task/batchSending")
     HttpResponseResult<Boolean> batchSending();
 
+    /**
+     * 融云消息同步
+     */
+    @GetMapping("/task/rongyunImport")
+    void rongyunImport();
+
 
     @PostMapping("/open/adminClient/unionStudent")
     HttpResponseResult<StudentWrapper.UnionStudentResp> unionStudent(@RequestBody StudentWrapper.UnionStudent info);

+ 8 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java

@@ -156,6 +156,14 @@ public class AdminFeignServiceFallback implements AdminFeignService {
         return null;
     }
 
+    /**
+     * 融云消息同步
+     */
+    @Override
+    public void rongyunImport() {
+
+    }
+
 
     @Override
     public HttpResponseResult<StudentWrapper.UnionStudentResp> unionStudent(StudentWrapper.UnionStudent info) {

+ 12 - 6
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/service/CustomTokenServices.java

@@ -1,10 +1,6 @@
 package com.yonge.cooleshow.auth.core.service;
 
-import java.util.Collection;
-import java.util.Date;
-import java.util.Set;
-import java.util.UUID;
-
+import com.yonge.cooleshow.common.security.SecurityConstants;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.security.authentication.AuthenticationManager;
@@ -34,7 +30,10 @@ import org.springframework.security.web.authentication.preauth.PreAuthenticatedA
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 
-import com.yonge.cooleshow.common.security.SecurityConstants;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Set;
+import java.util.UUID;
 
 /**
  * Base implementation for token services using random UUID values for the access token and refresh token values. The
@@ -295,6 +294,13 @@ public class CustomTokenServices implements AuthorizationServerTokenServices, Re
 		return true;
 	}
 
+	public void revokeTokenByPhone(String phone) {
+		String[] clientIds = new String[] {"system", "student", "teacher","website"};
+		for (String cId : clientIds) {
+			revokeToken(cId, phone);
+		}
+	}
+
 	public boolean revokeToken(String tokenValue) {
 		OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue);
 		if (accessToken == null) {

+ 6 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java

@@ -175,4 +175,10 @@ public interface SysUserDao extends BaseDAO<Long, SysUser> {
     Long getTenantByClient(@Param("userId") Long userId, @Param("clientId") String clientId);
 
     SysUser getSysUserByOpenId(@Param("openId") String openId, @Param("clientId") String clientId);
+
+    int logoffByPhone(@Param("num") int num, @Param("phone") String phone);
+
+    void updateLockStatusByPhone(@Param("phone") String phone);
+
+    int countByPhone(@Param("phone") String phone);
 }

+ 2 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java

@@ -220,4 +220,6 @@ public interface SysUserService extends BaseService<Long, SysUser> {
      * @return SysUser
      */
     SysUser getSysUserByOpenId(String openId, String clientId);
+
+    void logoffByPhone(String phone);
 }

+ 18 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.cooleshow.auth.config.CustomerServiceConfig;
 import com.yonge.cooleshow.auth.config.RongCloudConfig;
+import com.yonge.cooleshow.auth.core.service.CustomTokenServices;
 import com.yonge.cooleshow.auth.dal.dao.SysUserDao;
 import com.yonge.cooleshow.auth.enums.EClientType;
 import com.yonge.cooleshow.auth.service.SysConfigService;
@@ -68,6 +69,8 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
     private AdminFeignService adminFeignService;
     @Autowired
     private CustomerServiceConfig customerServiceConfig;
+    @Resource
+    private CustomTokenServices tokenService;
 
     @Override
     public BaseDAO<Long, SysUser> getDAO() {
@@ -419,4 +422,19 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
     public SysUser getSysUserByOpenId(String openId, String clientId) {
         return sysUserDao.getSysUserByOpenId(openId, clientId);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void logoffByPhone(String phone) {
+        int num = sysUserDao.countByPhone(phone);
+        //冻结相关所有客户端账号
+        sysUserDao.updateLockStatusByPhone(phone);
+        //注销用户
+        int i = sysUserDao.logoffByPhone(num,phone);
+        if(i < 1){
+            throw new BizException("用户不存在或已注销");
+        }
+        //退出登录
+        tokenService.revokeTokenByPhone(phone);
+    }
 }

+ 7 - 3
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -4,7 +4,6 @@ import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
 import com.yonge.cooleshow.auth.api.dto.UpdatePasswordDto;
 import com.yonge.cooleshow.auth.api.dto.UserSetReq;
-import com.yonge.cooleshow.auth.api.entity.SysConfig;
 import com.yonge.cooleshow.auth.api.entity.SysRole;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.vo.UserSetVo;
@@ -51,7 +50,11 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 import java.text.MessageFormat;
-import java.util.*;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 @RestController()
 @RequestMapping("user")
@@ -439,7 +442,8 @@ public class UserController extends BaseController {
         if (!b) {
             throw new BadCredentialsException("验证码校验失败");
         }
-        sysUserService.logoffById(sysUser.getId());
+        sysUserService.logoffByPhone(sysUser.getPhone());
+//        sysUserService.logoffById(sysUser.getId());
         return succeed(true);
     }
 

+ 11 - 0
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -334,6 +334,17 @@
             update employee set lock_flag_ = #{lockFlag} where user_id_ = #{userId}
         </if>
     </update>
+    <update id="logoffByPhone">
+        update sys_user set del_flag_ = 1, phone_ = concat(#{num},'D', phone_),update_time_ = now() where phone_ = #{phone}
+    </update>
+    <update id="updateLockStatusByPhone">
+        update student set lock_flag_ = 1 where user_id_ = (select id_ from sys_user where phone_ = #{phone});
+        update teacher set lock_flag_ = 1 where user_id_ = (select id_ from sys_user where phone_ = #{phone});
+        update employee set lock_flag_ = 1 where user_id_ = (select id_ from sys_user where phone_ = #{phone});
+    </update>
+    <select id="countByPhone" resultType="java.lang.Integer">
+        SELECT count(1) FROM sys_user WHERE phone_ LIKE CONCAT('%',#{phone},'%')
+    </select>
 
     <select id="getSysUserByOpenId" resultType="com.yonge.cooleshow.auth.api.entity.SysUser">
         SELECT t1.*

+ 12 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OrderCreate.java

@@ -44,12 +44,24 @@ public class OrderCreate {
     @ApiModelProperty(value = "区")
     private String receiverRegion;
 
+
+    @ApiModelProperty(value = "订单来源 JMEDU: 管乐团 COOLESHOW_EDU:课堂乐器")
+    private String platformType = "JMEDU";
+
     @ApiModelProperty(value = "详细地址")
     private String receiverDetailAddress;
 
     @ApiModelProperty("商品详情")
     private List<OrderItem> orderItemList;
 
+    public String getPlatformType() {
+        return platformType;
+    }
+
+    public void setPlatformType(String platformType) {
+        this.platformType = platformType;
+    }
+
     public static class OrderItem implements Serializable {
 
 

+ 52 - 9
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -5,31 +5,65 @@ import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.github.pagehelper.PageHelper;
 import com.yonge.cooleshow.api.feign.AdminFeignService;
-import com.yonge.cooleshow.api.feign.StudentFeignService;
 import com.yonge.cooleshow.api.feign.dto.CouponInfoApi;
 import com.yonge.cooleshow.api.feign.dto.StudentWrapper;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.common.entity.ContractDto;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.entity.MallOrderItemDto;
 import com.yonge.cooleshow.common.enums.PostStatusEnum;
-import com.yonge.cooleshow.common.entity.ContractDto;
 import com.yonge.cooleshow.common.service.IdGeneratorService;
 import com.yonge.cooleshow.mall.common.api.CommonPage;
 import com.yonge.cooleshow.mall.common.enums.OrderCacheEnum;
 import com.yonge.cooleshow.mall.common.exception.Asserts;
 import com.yonge.cooleshow.mall.common.service.RedisService;
-import com.yonge.cooleshow.mbg.mapper.*;
-import com.yonge.cooleshow.mbg.model.*;
+import com.yonge.cooleshow.mbg.mapper.OmsOrderItemMapper;
+import com.yonge.cooleshow.mbg.mapper.OmsOrderMapper;
+import com.yonge.cooleshow.mbg.mapper.OmsOrderSettingMapper;
+import com.yonge.cooleshow.mbg.mapper.PmsProductMapper;
+import com.yonge.cooleshow.mbg.mapper.PmsSkuStockMapper;
+import com.yonge.cooleshow.mbg.mapper.SmsCouponHistoryMapper;
+import com.yonge.cooleshow.mbg.mapper.UmsIntegrationConsumeSettingMapper;
+import com.yonge.cooleshow.mbg.mapper.UserOrderRefundMapper;
+import com.yonge.cooleshow.mbg.model.OmsOrder;
+import com.yonge.cooleshow.mbg.model.OmsOrderCourier;
+import com.yonge.cooleshow.mbg.model.OmsOrderExample;
+import com.yonge.cooleshow.mbg.model.OmsOrderItem;
+import com.yonge.cooleshow.mbg.model.OmsOrderItemExample;
+import com.yonge.cooleshow.mbg.model.OmsOrderSetting;
+import com.yonge.cooleshow.mbg.model.OmsOrderSettingExample;
+import com.yonge.cooleshow.mbg.model.PmsProduct;
+import com.yonge.cooleshow.mbg.model.PmsSkuStock;
+import com.yonge.cooleshow.mbg.model.SmsCouponHistory;
+import com.yonge.cooleshow.mbg.model.SmsCouponHistoryExample;
+import com.yonge.cooleshow.mbg.model.SmsCouponProductCategoryRelation;
+import com.yonge.cooleshow.mbg.model.SmsCouponProductRelation;
+import com.yonge.cooleshow.mbg.model.UmsIntegrationConsumeSetting;
+import com.yonge.cooleshow.mbg.model.UmsMember;
+import com.yonge.cooleshow.mbg.model.UmsMemberReceiveAddress;
+import com.yonge.cooleshow.mbg.model.UserOrderPayment;
+import com.yonge.cooleshow.mbg.model.UserOrderRefund;
 import com.yonge.cooleshow.portal.component.CancelOrderSender;
 import com.yonge.cooleshow.portal.dao.PortalOrderDao;
 import com.yonge.cooleshow.portal.dao.PortalOrderItemDao;
 import com.yonge.cooleshow.portal.dao.PortalProductDao;
-import com.yonge.cooleshow.portal.domain.*;
+import com.yonge.cooleshow.portal.domain.CartPromotionItem;
+import com.yonge.cooleshow.portal.domain.ConfirmOrderResult;
+import com.yonge.cooleshow.portal.domain.OmsOrderDetail;
+import com.yonge.cooleshow.portal.domain.OrderParam;
+import com.yonge.cooleshow.portal.domain.ProductStock;
+import com.yonge.cooleshow.portal.domain.SmsCouponHistoryDetail;
 import com.yonge.cooleshow.portal.dto.OrderCreate;
 import com.yonge.cooleshow.portal.dto.OrderPayReq;
 import com.yonge.cooleshow.portal.dto.OrderPayRes;
-import com.yonge.cooleshow.portal.service.*;
+import com.yonge.cooleshow.portal.service.OmsCartItemService;
+import com.yonge.cooleshow.portal.service.OmsOrderCourierService;
+import com.yonge.cooleshow.portal.service.OmsPortalOrderService;
+import com.yonge.cooleshow.portal.service.UmsMemberCouponService;
+import com.yonge.cooleshow.portal.service.UmsMemberReceiveAddressService;
+import com.yonge.cooleshow.portal.service.UmsMemberService;
+import com.yonge.cooleshow.portal.service.UserOrderPaymentService;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.result.BaseResult;
 import com.yonge.toolset.base.util.StringUtil;
@@ -37,7 +71,11 @@ import com.yonge.toolset.payment.base.enums.OpenEnum;
 import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
 import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
-import com.yonge.toolset.payment.base.model.*;
+import com.yonge.toolset.payment.base.model.DeviceInfo;
+import com.yonge.toolset.payment.base.model.DivMember;
+import com.yonge.toolset.payment.base.model.OrderDetil;
+import com.yonge.toolset.payment.base.model.Payment;
+import com.yonge.toolset.payment.base.model.RefundBill;
 import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 import com.yonge.toolset.payment.core.props.PaymentProperties;
 import com.yonge.toolset.payment.core.service.PaymentClient;
@@ -55,7 +93,12 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -951,7 +994,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 
         detail = new OmsOrder();
         detail.setMemberId(umsMember.getId());
-        detail.setPlatformType("JMEDU");
+        detail.setPlatformType(order.getPlatformType());
         detail.setOrderSn(order.getOrderNo());
         detail.setCreateTime(new Date());
         detail.setMemberUsername(umsMember.getUsername());

+ 23 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/RongyunImImport.java

@@ -0,0 +1,23 @@
+package com.yonge.cooleshow.task.jobs;
+
+import com.yonge.cooleshow.api.feign.AdminFeignService;
+import com.yonge.cooleshow.task.core.BaseTask;
+import com.yonge.cooleshow.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * 同步消息
+ */
+@Service
+public class RongyunImImport extends BaseTask {
+
+    @Autowired
+    private AdminFeignService adminFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        adminFeignService.rongyunImport();
+    }
+}

+ 45 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupController.java

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.validator.ValidationKit;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -15,10 +16,18 @@ import io.swagger.annotations.ApiParam;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.BindingResult;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -65,5 +74,40 @@ public class ImGroupController extends BaseController {
         imGroupService.quit(groupId,sysUserService.getUserId(), ClientEnum.STUDENT);
         return succeed();
     }
+
+
+
+    @GetMapping(value = "/syncImHistoryMessageTask")
+    // 融云同步即时通讯聊天记录
+    public void syncImHistoryMessageTask(String date) throws Exception {
+        if (date == null) {
+            date = DateUtil.format(DateUtil.addHours(new Date(), -2), DateUtil.YEAR_MONTH_DAY_HOUR);
+        }
+        // 获取输入日期
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHH");
+        Date currentDate = format.parse(date);
+
+        // 创建Calendar对象 设置为输入时间
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(currentDate);
+
+        // 将日期减少三天
+        calendar.add(Calendar.DATE, -3);
+
+        // 获取减少三天后的日期
+        Date targetTime = calendar.getTime();
+
+        calendar.setTime(currentDate);
+
+        //按照小时递减
+        while (currentDate.after(targetTime)) {
+            imGroupService.getAndSaveImHistoryMessage(DateUtil.format(currentDate, DateUtil.YEAR_MONTH_DAY_HOUR));
+            calendar.add(Calendar.HOUR, -1);
+            currentDate = calendar.getTime();
+        }
+
+    }
+
+
 }
 

+ 15 - 9
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UploadFileController.java

@@ -1,10 +1,17 @@
 package com.yonge.cooleshow.admin.controller;
 
-import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.microsvc.toolkit.middleware.oss.wrapper.OssWrapper;
+import com.yonge.cooleshow.biz.dal.service.UploadFileService;
+import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.entity.UploadReturnBean;
 import com.yonge.toolset.thirdparty.entity.UploadSign;
-import io.swagger.annotations.*;
-
+import com.yonge.toolset.utils.upload.UploadUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -15,11 +22,6 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
-import com.yonge.cooleshow.biz.dal.service.UploadFileService;
-import com.yonge.cooleshow.common.controller.BaseController;
-import com.yonge.cooleshow.common.entity.UploadReturnBean;
-import com.yonge.toolset.utils.upload.UploadUtil;
-
 /**
  * 上传控制层
  */
@@ -55,6 +57,7 @@ public class UploadFileController extends BaseController {
             @ApiImplicitParam(name = "postData", dataType = "Map", value = "1.如果使用js sdk上传的时候设置了ACL请设置,例\"acl\":\"public-read\"值要与SDK中一致,没有则删除该项</br>" +
                     "2.提供js sdk中的key值,例\"key\":\"20150115/中文/${filename}\""),
             @ApiImplicitParam(name = "unknowValueField", dataType = "List", value = "对于用户无法确定表单值的放在unknownValueField中(比如有的上传控件会添加一些表单项,但表单项的值可能是随机的)"),
+            @ApiImplicitParam(name = "pluginName", dataType = "String", value = "插件名称,默认ks3,可选值:ks3,aliyun,tencent"),
     })
     @ApiOperation(value = "获取上传文件签名", notes = "{\n" +
             "    \"bucketName\":\"\",\n" +
@@ -66,7 +69,10 @@ public class UploadFileController extends BaseController {
             "    \"unknowValueField\":[\"test\"]\n" +
             "}")
     @PostMapping("/getUploadSign")
-    public HttpResponseResult<PostObjectFormFields> getUploadSign(@RequestBody UploadSign uploadSign) {
+    public HttpResponseResult<OssWrapper.ResponseSign> getUploadSign(@RequestParam(defaultValue = "ks3") String pluginName,
+                                                                     @RequestBody UploadSign uploadSign) {
+        // 设置默认文件存储服务方
+        uploadSign.setPluginName(pluginName);
         return succeed(uploadFileService.getUploadSign(uploadSign));
     }
 }

+ 45 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java

@@ -1,18 +1,40 @@
 package com.yonge.cooleshow.admin.task;
 
-import com.yonge.cooleshow.biz.dal.service.*;
+import com.alibaba.fastjson.JSONObject;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanEvaluationService;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.cooleshow.biz.dal.service.CustomerServiceBatchSendingService;
+import com.yonge.cooleshow.biz.dal.service.ImGroupService;
+import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
+import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.service.PlatformCashAccountRecordService;
+import com.yonge.cooleshow.biz.dal.service.TeacherStyleVideoService;
+import com.yonge.cooleshow.biz.dal.service.TenantUnbindRecordService;
+import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
+import com.yonge.cooleshow.biz.dal.service.UserBindingTeacherService;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
+import com.yonge.cooleshow.biz.dal.service.UserPaymentCoreService;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.utils.date.DateUtil;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
 import java.io.File;
+import java.net.URL;
+import java.util.Date;
 
 /**
  * @Author: liweifan
@@ -60,6 +82,9 @@ public class TaskController extends BaseController {
     @Autowired
     private TenantUnbindRecordService tenantUnbindRecordService;
 
+    @Autowired
+    private ImGroupService imGroupService;
+
     /***
      * 轮询用户订单
      * @author liweifan
@@ -186,4 +211,22 @@ public class TaskController extends BaseController {
     }
 
 
+
+
+    @GetMapping("/rongyunImport")
+    public void rongyunImport() throws Exception {
+         String currentDate = DateUtil.format(DateUtil.addHours(new Date(),-2), DateUtil.YEAR_MONTH_DAY_HOUR);
+        Object o = imGroupService.historyGet(currentDate);
+        JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(o));
+        if (jsonObject.get("code").equals(200)) {
+            String url = jsonObject.getString("url");
+            if (!StringUtils.isEmpty(url)) {
+                File file = new File(FileUtils.getTempDirectoryPath() + url.substring(url.lastIndexOf("/")));
+                URL url1 = new URL(url);
+                FileUtils.copyURLToFile(url1, file);
+                imGroupService.saveImHistoryMessage(new File(file.getAbsolutePath()));
+            }
+
+        }
+    }
 }

+ 6 - 0
cooleshow-user/user-biz/pom.xml

@@ -108,6 +108,12 @@
             <groupId>com.microsvc.toolkit.middleware</groupId>
             <artifactId>microsvc-middleware-payment</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.microsvc.toolkit.middleware</groupId>
+            <artifactId>microsvc-middleware-oss</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupDao.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yonge.cooleshow.biz.dal.dto.ImGroupResultDto;
 import com.yonge.cooleshow.biz.dal.dto.ImGroupSearchDto;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
+import com.yonge.cooleshow.biz.dal.entity.ImHistoryMessage;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -23,5 +24,8 @@ public interface ImGroupDao extends BaseMapper<ImGroup> {
 
     //更新群成员数量
     void updateMemberNum(@Param("groupId") String groupId);
+
+    //批量插入历史数据
+    void batchInsert(@Param("list") List<ImHistoryMessage> historyMessages);
 }
 

+ 89 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImHistoryMessage.java

@@ -0,0 +1,89 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Author:haonan
+ * @Date:2023/8/7 15:17
+ * @Filename:ImHistoryMessage
+ */
+@Data
+@ApiModel(" ImHistoryMessage-历史消息记录")
+@TableName("im_history_message")
+public class ImHistoryMessage implements Serializable {
+
+    @ApiModelProperty("可通过 msgUID 确定消息唯一")
+    @TableId(value = "msgUID_")
+    private String msgUID;
+
+    @ApiModelProperty("发送者 ID")
+    @TableField(value = "fromUserId_")
+    private String fromUserId;
+
+    @ApiModelProperty("接收者 ID,在消息路由中为 toUserId,当发送聊天室广播消息、全量用户落地通知时此字段为空")
+    @TableField(value = "targetId_")
+    private String targetId;
+
+    @ApiModelProperty("会话类型。1(单聊会话)、2(讨论组会话)、3(群组会话)、4(聊天室会话)、5(客服会话)、6(系统通知)、7(应用公众服务)、8(公众服务)、10(超级群会话)。targetType 在 SDK 中为 ConversationType。")
+    @TableField(value = "targetType_")
+    private Integer targetType;
+
+    @ApiModelProperty("根据不同的 targetType,可能是讨论组 Id、群组 ID、超级群 ID 或聊天室 ID ,如 targetType 为 1 时可忽略 GroupId")
+    @TableField(value = "GroupId_")
+    private String groupId;
+
+    @ApiModelProperty("	超级群频道 ID。")
+    @TableField(value = "busChannel_")
+    private String busChannel;
+
+    @ApiModelProperty("消息类型,例如文本消息 RC:TxtMsg、图片消息 RC:ImgMsg")
+    @TableField(value = "classname_")
+    private String classname;
+
+    @ApiModelProperty("消息内容")
+    @TableField(value = "content_")
+    private String content;
+
+    @ApiModelProperty("消息扩展")
+    @TableField(value = "extraContent_")
+    private String extraContent;
+
+    @ApiModelProperty("消息时间")
+    @TableField(value = "dateTime_")
+    private String dateTime;
+
+    @ApiModelProperty("消息来源,包括:iOS、Android、Websocket、MiniProgram(小程序)、PC、Server。")
+    @TableField(value = "source_")
+    private String source;
+
+    @ApiModelProperty("是否被丢弃,true 为是,false 为否,只针对聊天室会话类型存在。")
+    @TableField(value = "isDiscard_")
+    private String isDiscard;
+
+    @ApiModelProperty("是否含有屏蔽敏感词,true 为含有、false 为不含有。只针对聊天室会话类型存在。")
+    @TableField(value = "isSensitiveWord_")
+    private String isSensitiveWord;
+
+    @ApiModelProperty("是否为被禁言后发送的消息,只针对聊天室会话类型存在。")
+    @TableField(value = "isForbidden_")
+    private String isForbidden;
+
+    @ApiModelProperty("	消息是否不分发,true 为不分发、false 为分发。只针对聊天室会话类型存在。")
+    @TableField(value = "isNotForward_")
+    private String isNotForward;
+
+    @ApiModelProperty("targetType 为 3 时此参数有效,显示为群组中指定接收消息的用户 ID 数组,该条消息为群组定向消息。非定向消息时内容为空,如指定的用户不在群组中内容也为空。")
+    @TableField(value = "groupUserIds_")
+    private String groupUserIds;
+
+    @ApiModelProperty("App Key")
+    @TableField(value = "appId_")
+    private String appId;
+}

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

@@ -7,7 +7,9 @@ import com.yonge.cooleshow.biz.dal.dto.ImGroupSearchDto;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
+import io.rong.models.Result;
 
+import java.io.File;
 import java.util.List;
 import java.util.Set;
 
@@ -94,5 +96,23 @@ public interface ImGroupService extends IService<ImGroup> {
      * @param studentIdList 学生成员列表
      */
     void addGroupMember(String groupId, Set<Long> studentIdList) throws Exception;
+
+
+    /**
+     * 同步即时通讯聊天记录
+     * @param date
+     * @return
+     */
+    Result historyGet (String date)throws Exception;
+
+    /**
+     * 保存历史消息
+     * @param file
+     */
+    void saveImHistoryMessage(File file);
+
+
+    void getAndSaveImHistoryMessage(String date) throws Exception;
+
 }
 

+ 23 - 15
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UploadFileService.java

@@ -1,14 +1,14 @@
 package com.yonge.cooleshow.biz.dal.service;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.middleware.oss.OssPluginContext;
+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;
 import org.apache.commons.lang3.StringUtils;
@@ -17,11 +17,12 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
-import com.yonge.cooleshow.common.entity.UploadReturnBean;
-import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.thirdparty.storage.StoragePluginContext;
-import com.yonge.toolset.thirdparty.storage.provider.KS3StoragePlugin;
-import com.yonge.toolset.utils.upload.UploadUtil;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 
 /**
  * 上传工具服务层实现类
@@ -31,6 +32,8 @@ public class UploadFileService {
 
     @Autowired
     private StoragePluginContext storagePluginContext;
+    @Autowired
+    private OssPluginContext ossPluginContext;
 
     /**
      * 最大上传大小,单位kb
@@ -149,7 +152,12 @@ public class UploadFileService {
      * @param uploadSign
      * @return
      */
-    public PostObjectFormFields getUploadSign(UploadSign uploadSign) {
-        return storagePluginContext.getUploadSign(KS3StoragePlugin.PLUGIN_NAME, uploadSign);
+    public OssWrapper.ResponseSign getUploadSign(UploadSign uploadSign) {
+        //return storagePluginContext.getUploadSign(KS3StoragePlugin.PLUGIN_NAME, uploadSign);
+
+        // 请求授权签名
+        OssWrapper.RequestSign requestSign = JSON.parseObject(JSON.toJSONString(uploadSign), OssWrapper.RequestSign.class);
+
+        return ossPluginContext.getPluginService(uploadSign.getPluginName()).getUploadSign(requestSign);
     }
 }

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

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
@@ -15,6 +16,7 @@ import com.yonge.cooleshow.biz.dal.dto.ImGroupSearchDto;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
+import com.yonge.cooleshow.biz.dal.entity.ImHistoryMessage;
 import com.yonge.cooleshow.biz.dal.entity.StudentStar;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
@@ -30,22 +32,36 @@ import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.ThreadPool;
+import io.rong.RongCloud;
+import io.rong.methods.message.history.History;
 import io.rong.models.Result;
 import io.rong.models.group.GroupMember;
 import io.rong.models.group.GroupModel;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.text.MessageFormat;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
@@ -53,6 +69,9 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
 
 /**
  * 即时通讯群组(ImGroup)表服务实现类
@@ -92,6 +111,11 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
     @Autowired
     private StudentStarService studentStarService;
 
+    @Value("${cn.rongcloud.im.appkey}")
+    private String appKey;
+    @Value("${cn.rongcloud.im.secret}")
+    private String appSecret;
+
     @Override
     public ImGroupDao getDao() {
         return this.baseMapper;
@@ -418,5 +442,88 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
 
         return group;
     }
+
+
+
+    /**
+     * 同步即时通讯聊天记录
+     *
+     * @param date
+     * @return
+     */
+    @Override
+    public Result historyGet(String date) throws Exception {
+        return getHistory().get(date);
+
+    }
+
+    private History getHistory() {
+        RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret);
+        History history = new History(appKey, appSecret);
+        history.setRongCloud(rongCloud);
+        return history;
+    }
+
+
+    @Override
+    public void saveImHistoryMessage(File file) {
+        ZipInputStream zin = null;
+        try {
+            zin = new ZipInputStream(new FileInputStream(file), StandardCharsets.UTF_8);
+            ZipFile zf = new ZipFile(file);
+            ZipEntry ze;
+            Set<ImHistoryMessage> historyMessages = new HashSet<>();
+            while ((ze = zin.getNextEntry()) != null) {
+                BufferedReader br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze)));
+                String line;
+                while ((line = br.readLine()) != null) {
+                    try {
+                        historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")),
+                                ImHistoryMessage.class));
+//						if(historyMessages.size() >= 2000){
+//							historyMessageDao.batchInsert(new ArrayList<>(historyMessages),HistoryMessage.class);
+//							historyMessages.clear();
+//						}
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+                br.close();
+                break;
+            }
+            if (historyMessages.size() > 0) {
+                ImGroupDao dao = getDao();
+                dao.batchInsert(historyMessages.stream().sorted(Comparator.comparing(ImHistoryMessage::getDateTime)).collect(Collectors.toList()));
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (zin != null) {
+                try {
+                    zin.closeEntry();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    @Override
+    public void getAndSaveImHistoryMessage(String date) throws Exception {
+
+        Object o = imGroupService.historyGet(date);
+        JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(o));
+        if (jsonObject.get("code").equals(200)) {
+            String url = jsonObject.getString("url");
+            if (!StringUtils.isEmpty(url)) {
+                File file = new File(FileUtils.getTempDirectoryPath() + url.substring(url.lastIndexOf("/")));
+                URL url1 = new URL(url);
+                FileUtils.copyURLToFile(url1, file);
+                imGroupService.saveImHistoryMessage(new File(file.getAbsolutePath()));
+            }
+
+        }
+    }
+
 }
 

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

@@ -1,16 +1,10 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import java.util.List;
-
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.SysConfig;
 import com.yonge.cooleshow.biz.dal.entity.SysMessage;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageSendMode;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
@@ -18,6 +12,11 @@ import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 @Service
 public class SmsCodeServiceImpl implements SmsCodeService {
@@ -90,7 +89,7 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 		} else if ("PHONE".equals(type)) {
 			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_UPDATE_PHONE, mobile,platform.getMsg());
 		} else if("LOGOFF".equals(type)){
-			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_LOGOFF, mobile,platform.getMsg());
+			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_LOGOFF, mobile, "");
 		} else {
 			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE, mobile,platform.getMsg());
 		}

+ 17 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupMapper.xml

@@ -92,4 +92,21 @@
         </if>
         GROUP BY ig.id_
     </select>
+
+    <insert id="batchInsert" parameterType="com.yonge.cooleshow.biz.dal.entity.ImHistoryMessage">
+        insert ignore into im_history_message(msgUID_,fromUserId_,targetId_,targetType_,
+        GroupId_,busChannel_,classname_,content_,
+        extraContent_,dateTime_,source_,isDiscard_,
+        isSensitiveWord_,isForbidden_,isNotForward_,
+        groupUserIds_,appId_)
+        values
+        <foreach collection="list" separator="," item="item" >
+            (#{item.msgUID,jdbcType=VARCHAR},#{item.fromUserId,jdbcType=VARCHAR},#{item.targetId,jdbcType=VARCHAR},
+            #{item.targetType},#{item.groupId,jdbcType=VARCHAR},#{item.busChannel,jdbcType=VARCHAR},
+            #{item.classname,jdbcType=VARCHAR},#{item.content,jdbcType=VARCHAR},#{item.extraContent,jdbcType=VARCHAR},
+            #{item.dateTime,jdbcType=VARCHAR},#{item.source,jdbcType=VARCHAR},#{item.isDiscard,jdbcType=VARCHAR},
+            #{item.isSensitiveWord,jdbcType=VARCHAR},#{item.isForbidden,jdbcType=VARCHAR},#{item.isNotForward,jdbcType=VARCHAR},
+            #{item.groupUserIds,jdbcType=VARCHAR},#{item.appId,jdbcType=VARCHAR})
+        </foreach>
+    </insert>
 </mapper>

+ 15 - 9
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UploadFileController.java

@@ -1,10 +1,17 @@
 package com.yonge.cooleshow.student.controller;
 
-import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.microsvc.toolkit.middleware.oss.wrapper.OssWrapper;
+import com.yonge.cooleshow.biz.dal.service.UploadFileService;
+import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.entity.UploadReturnBean;
 import com.yonge.toolset.thirdparty.entity.UploadSign;
-import io.swagger.annotations.*;
-
+import com.yonge.toolset.utils.upload.UploadUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -15,11 +22,6 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
-import com.yonge.cooleshow.biz.dal.service.UploadFileService;
-import com.yonge.cooleshow.common.controller.BaseController;
-import com.yonge.cooleshow.common.entity.UploadReturnBean;
-import com.yonge.toolset.utils.upload.UploadUtil;
-
 /**
  * 上传控制层
  */
@@ -55,6 +57,7 @@ public class UploadFileController extends BaseController {
             @ApiImplicitParam(name = "postData", dataType = "Map", value = "1.如果使用js sdk上传的时候设置了ACL请设置,例\"acl\":\"public-read\"值要与SDK中一致,没有则删除该项</br>" +
                     "2.提供js sdk中的key值,例\"key\":\"20150115/中文/${filename}\""),
             @ApiImplicitParam(name = "unknowValueField", dataType = "List", value = "对于用户无法确定表单值的放在unknownValueField中(比如有的上传控件会添加一些表单项,但表单项的值可能是随机的)"),
+            @ApiImplicitParam(name = "pluginName", dataType = "String", value = "插件名称,默认ks3,可选值:ks3,aliyun,tencent"),
     })
     @ApiOperation(value = "获取上传文件签名", notes = "{\n" +
             "    \"bucketName\":\"\",\n" +
@@ -66,7 +69,10 @@ public class UploadFileController extends BaseController {
             "    \"unknowValueField\":[\"test\"]\n" +
             "}")
     @PostMapping("/getUploadSign")
-    public HttpResponseResult<PostObjectFormFields> getUploadSign(@RequestBody UploadSign uploadSign) {
+    public HttpResponseResult<OssWrapper.ResponseSign> getUploadSign(@RequestParam(defaultValue = "ks3") String pluginName,
+                                                                    @RequestBody UploadSign uploadSign) {
+        // 设置默认文件存储服务方
+        uploadSign.setPluginName(pluginName);
         return succeed(uploadFileService.getUploadSign(uploadSign));
     }
 }

+ 6 - 2
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.student.controller.open;
 
-import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.microsvc.toolkit.middleware.oss.wrapper.OssWrapper;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.MusicImgDto;
@@ -134,6 +134,7 @@ public class OpenClient extends BaseController {
             @ApiImplicitParam(name = "postData", dataType = "Map", value = "1.如果使用js sdk上传的时候设置了ACL请设置,例\"acl\":\"public-read\"值要与SDK中一致,没有则删除该项</br>" +
                     "2.提供js sdk中的key值,例\"key\":\"20150115/中文/${filename}\""),
             @ApiImplicitParam(name = "unknowValueField", dataType = "List", value = "对于用户无法确定表单值的放在unknownValueField中(比如有的上传控件会添加一些表单项,但表单项的值可能是随机的)"),
+            @ApiImplicitParam(name = "pluginName", dataType = "String", value = "插件名称,默认ks3,可选值:ks3,aliyun,tencent"),
     })
     @ApiOperation(value = "获取上传文件签名", notes = "{\n" +
             "    \"bucketName\":\"\",\n" +
@@ -145,7 +146,10 @@ public class OpenClient extends BaseController {
             "    \"unknowValueField\":[\"test\"]\n" +
             "}")
     @PostMapping("/getUploadSign")
-    public HttpResponseResult<PostObjectFormFields> getUploadSign(@RequestBody UploadSign uploadSign) {
+    public HttpResponseResult<OssWrapper.ResponseSign> getUploadSign(@RequestParam(defaultValue = "ks3") String pluginName,
+                                                                     @RequestBody UploadSign uploadSign) {
+        // 设置默认文件存储服务方
+        uploadSign.setPluginName(pluginName);
         return succeed(uploadFileService.getUploadSign(uploadSign));
     }
 

+ 15 - 9
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UploadFileController.java

@@ -1,10 +1,17 @@
 package com.yonge.cooleshow.teacher.controller;
 
-import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.microsvc.toolkit.middleware.oss.wrapper.OssWrapper;
+import com.yonge.cooleshow.biz.dal.service.UploadFileService;
+import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.entity.UploadReturnBean;
 import com.yonge.toolset.thirdparty.entity.UploadSign;
-import io.swagger.annotations.*;
-
+import com.yonge.toolset.utils.upload.UploadUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -15,11 +22,6 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
-import com.yonge.cooleshow.biz.dal.service.UploadFileService;
-import com.yonge.cooleshow.common.controller.BaseController;
-import com.yonge.cooleshow.common.entity.UploadReturnBean;
-import com.yonge.toolset.utils.upload.UploadUtil;
-
 /**
  * 上传控制层
  */
@@ -55,6 +57,7 @@ public class UploadFileController extends BaseController {
             @ApiImplicitParam(name = "postData", dataType = "Map", value = "1.如果使用js sdk上传的时候设置了ACL请设置,例\"acl\":\"public-read\"值要与SDK中一致,没有则删除该项</br>" +
                     "2.提供js sdk中的key值,例\"key\":\"20150115/中文/${filename}\""),
             @ApiImplicitParam(name = "unknowValueField", dataType = "List", value = "对于用户无法确定表单值的放在unknownValueField中(比如有的上传控件会添加一些表单项,但表单项的值可能是随机的)"),
+            @ApiImplicitParam(name = "pluginName", dataType = "String", value = "插件名称,默认ks3,可选值:ks3,aliyun,tencent"),
     })
     @ApiOperation(value = "获取上传文件签名", notes = "{\n" +
             "    \"bucketName\":\"\",\n" +
@@ -66,7 +69,10 @@ public class UploadFileController extends BaseController {
             "    \"unknowValueField\":[\"test\"]\n" +
             "}")
     @PostMapping("/getUploadSign")
-    public HttpResponseResult<PostObjectFormFields> getUploadSign(@RequestBody UploadSign uploadSign) {
+    public HttpResponseResult<OssWrapper.ResponseSign> getUploadSign(@RequestParam(defaultValue = "ks3") String pluginName,
+                                                                     @RequestBody UploadSign uploadSign) {
+        // 设置默认文件存储服务方
+        uploadSign.setPluginName(pluginName);
         return succeed(uploadFileService.getUploadSign(uploadSign));
     }
 }

+ 2 - 2
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenClient.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.tenant.controller.open;
 
-import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.microsvc.toolkit.middleware.oss.wrapper.OssWrapper;
 import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
 import com.yonge.cooleshow.biz.dal.service.UploadFileService;
 import com.yonge.cooleshow.biz.dal.vo.CheckVo;
@@ -50,7 +50,7 @@ public class OpenClient extends BaseController {
             "    \"unknowValueField\":[\"test\"]\n" +
             "}")
     @PostMapping("/getUploadSign")
-    public HttpResponseResult<PostObjectFormFields> getUploadSign(@RequestBody UploadSign uploadSign) {
+    public HttpResponseResult<OssWrapper.ResponseSign> getUploadSign(@RequestBody UploadSign uploadSign) {
         return succeed(uploadFileService.getUploadSign(uploadSign));
     }
 

+ 11 - 3
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/UploadFileController.java

@@ -1,13 +1,17 @@
 package com.yonge.cooleshow.website.controller;
 
-import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.microsvc.toolkit.middleware.oss.wrapper.OssWrapper;
 import com.yonge.cooleshow.biz.dal.service.UploadFileService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.entity.UploadReturnBean;
 import com.yonge.toolset.thirdparty.entity.UploadSign;
 import com.yonge.toolset.utils.upload.UploadUtil;
-import io.swagger.annotations.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -53,6 +57,7 @@ public class UploadFileController extends BaseController {
             @ApiImplicitParam(name = "postData", dataType = "Map", value = "1.如果使用js sdk上传的时候设置了ACL请设置,例\"acl\":\"public-read\"值要与SDK中一致,没有则删除该项</br>" +
                     "2.提供js sdk中的key值,例\"key\":\"20150115/中文/${filename}\""),
             @ApiImplicitParam(name = "unknowValueField", dataType = "List", value = "对于用户无法确定表单值的放在unknownValueField中(比如有的上传控件会添加一些表单项,但表单项的值可能是随机的)"),
+            @ApiImplicitParam(name = "pluginName", dataType = "String", value = "插件名称,默认ks3,可选值:ks3,aliyun,tencent"),
     })
     @ApiOperation(value = "获取上传文件签名", notes = "{\n" +
             "    \"bucketName\":\"\",\n" +
@@ -64,7 +69,10 @@ public class UploadFileController extends BaseController {
             "    \"unknowValueField\":[\"test\"]\n" +
             "}")
     @PostMapping("/getUploadSign")
-    public HttpResponseResult<PostObjectFormFields> getUploadSign(@RequestBody UploadSign uploadSign) {
+    public HttpResponseResult<OssWrapper.ResponseSign> getUploadSign(@RequestParam(defaultValue = "ks3") String pluginName,
+                                                                     @RequestBody UploadSign uploadSign) {
+        // 设置默认文件存储服务方
+        uploadSign.setPluginName(pluginName);
         return succeed(uploadFileService.getUploadSign(uploadSign));
     }
 }

+ 14 - 15
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenClient.java

@@ -1,25 +1,20 @@
 package com.yonge.cooleshow.website.controller.open;
 
-import com.ksyun.ks3.dto.PostObjectFormFields;
-import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.dto.MusicImgDto;
-import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.vo.MusicActivityVo;
-import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
+import com.microsvc.toolkit.middleware.oss.wrapper.OssWrapper;
+import com.yonge.cooleshow.biz.dal.service.UploadFileService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.thirdparty.entity.UploadSign;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
-import com.yonge.toolset.utils.string.ValueUtil;
-import io.swagger.annotations.*;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import java.util.Map;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 
 @RestController
@@ -37,6 +32,7 @@ public class OpenClient extends BaseController {
             @ApiImplicitParam(name = "postData", dataType = "Map", value = "1.如果使用js sdk上传的时候设置了ACL请设置,例\"acl\":\"public-read\"值要与SDK中一致,没有则删除该项</br>" +
                     "2.提供js sdk中的key值,例\"key\":\"20150115/中文/${filename}\""),
             @ApiImplicitParam(name = "unknowValueField", dataType = "List", value = "对于用户无法确定表单值的放在unknownValueField中(比如有的上传控件会添加一些表单项,但表单项的值可能是随机的)"),
+            @ApiImplicitParam(name = "pluginName", dataType = "String", value = "插件名称,默认ks3,可选值:ks3,aliyun,tencent"),
     })
     @ApiOperation(value = "获取上传文件签名", notes = "{\n" +
             "    \"bucketName\":\"\",\n" +
@@ -48,7 +44,10 @@ public class OpenClient extends BaseController {
             "    \"unknowValueField\":[\"test\"]\n" +
             "}")
     @PostMapping("/getUploadSign")
-    public HttpResponseResult<PostObjectFormFields> getUploadSign(@RequestBody UploadSign uploadSign) {
+    public HttpResponseResult<OssWrapper.ResponseSign> getUploadSign(@RequestParam(defaultValue = "ks3") String pluginName,
+                                                                     @RequestBody UploadSign uploadSign) {
+        // 设置默认文件存储服务方
+        uploadSign.setPluginName(pluginName);
         return succeed(uploadFileService.getUploadSign(uploadSign));
     }
 }

+ 12 - 0
toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/entity/UploadSign.java

@@ -3,12 +3,14 @@ package com.yonge.toolset.thirdparty.entity;
 import java.io.Serializable;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 /**
  * @Author: cy
  * @Date: 2022/4/27
  */
 public class UploadSign implements Serializable {
+
     private String bucketName;
 
     private String filename;
@@ -17,6 +19,8 @@ public class UploadSign implements Serializable {
 
     private List<String> unknowValueField;
 
+    private String pluginName;
+
     public String getBucketName() {
         return bucketName;
     }
@@ -48,5 +52,13 @@ public class UploadSign implements Serializable {
     public void setUnknowValueField(List<String> unknowValueField) {
         this.unknowValueField = unknowValueField;
     }
+
+    public String getPluginName() {
+        return Optional.ofNullable(pluginName).orElse("ks3");
+    }
+
+    public void setPluginName(String pluginName) {
+        this.pluginName = pluginName;
+    }
 }