接入文件服务器

飞书小程序
YXY 1 year ago
parent cfdcda3458
commit 5daed4d743

@ -7,7 +7,7 @@ import lombok.Data;
* @create 2023-08-16 16:58
*/
@Data
public class RequestVo {
public class LarkActiveBaseRequestVo {
/**
*

@ -1,17 +1,13 @@
package com.ruoyi.common.utils.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.ArrayUtils;
import com.ruoyi.common.utils.StringPlusUtils;
import org.springframework.web.multipart.MultipartFile;
/**
*
@ -200,4 +196,30 @@ public class FileUtils extends org.apache.commons.io.FileUtils
String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString());
return encode.replaceAll("\\+", "%20");
}
public static File multipartFile2File(MultipartFile multipartFile){
String fileName = multipartFile.getOriginalFilename();
File file = new File(fileName);
OutputStream out = null;
try{
//获取文件流,以文件流的方式输出到新文件
// InputStream in = multipartFile.getInputStream();
out = new FileOutputStream(file);
byte[] ss = multipartFile.getBytes();
for(int i = 0; i < ss.length; i++){
out.write(ss[i]);
}
}catch(IOException e){
e.printStackTrace();
}finally {
if (out != null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return file;
}
}

@ -66,7 +66,16 @@
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos-sts_api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.6.155</version>
</dependency>
</dependencies>

@ -0,0 +1,92 @@
package com.ruoyi.flyingbook.CosHelper;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.Headers;
import com.qcloud.cos.auth.AnonymousCOSCredentials;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.auth.COSSigner;
import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.http.HttpMethodName;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.Bucket;
import com.qcloud.cos.model.CannedAccessControlList;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.model.ciModel.job.DocHtmlRequest;
import com.qcloud.cos.region.Region;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.File;
import java.net.URL;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author yuxiangyong
* @create 2023-08-19 9:52
*/
@Slf4j
@Component
public class CosHelper {
private String secretId = "AKID62pQpzvd7MyVs31mV3OXUVKxNadT7Zu5";
private String secretKey = "2EXcUYQ8fz61jGahbMvISbaMxMYZO0Qg";
private COSClient buildClinet(){
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
Region region = new Region("ap-beijing");
ClientConfig clientConfig = new ClientConfig(region);
clientConfig.setHttpProtocol(HttpProtocol.https);
return new COSClient(cred, clientConfig);
}
public PutObjectResult upload(String bucketName, String key, File localFile){
COSClient cosClient = null;
try {
cosClient = buildClinet();
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
return putObjectResult;
}catch (Exception e){
log.info("upload file error",e);
}finally {
shutdown(cosClient);
}
return null;
}
/**
*
* @param bucketName
* @param key
* @return
*/
public String previewUrl(String bucketName, String key){
COSClient cosClient = null;
try {
cosClient = buildClinet();
Date expirationDate = new Date(System.currentTimeMillis() + 30 * 60 * 1000);
Map<String, String> params = new HashMap<String, String>();
Map<String, String> headers = new HashMap<String, String>();
HttpMethodName method = HttpMethodName.GET;
URL url = cosClient.generatePresignedUrl(bucketName, key, expirationDate, method, headers, params);
System.out.println(url.toString());
}catch (Exception e){
log.info("upload file error",e);
}finally {
shutdown(cosClient);
}
return null;
}
private void shutdown(COSClient cosClient){
if (cosClient != null){
cosClient.shutdown();
}
}
}

@ -0,0 +1,75 @@
package com.ruoyi.flyingbook.CosHelper;
import com.tencent.cloud.CosStsClient;
import com.tencent.cloud.Response;
import java.util.TreeMap;
/**
* @author yuxiangyong
* @create 2023-08-19 9:46
*/
public class CosStsHelper {
// 根据 github 提供的 maven 集成方法导入 java sts sdk使用 3.1.0 及更高版本
public static void main(String[] args) {
TreeMap<String, Object> config = new TreeMap<String, Object>();
try {
//这里的 SecretId 和 SecretKey 代表了用于申请临时密钥的永久身份(主账号、子账号等),子账号需要具有操作存储桶的权限。
String secretId = System.getenv("secretId");//用户的 SecretId建议使用子账号密钥授权遵循最小权限指引降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
String secretKey = System.getenv("secretKey");//用户的 SecretKey建议使用子账号密钥授权遵循最小权限指引降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
// 替换为您的云 api 密钥 SecretId
config.put("secretId", secretId);
// 替换为您的云 api 密钥 SecretKey
config.put("secretKey", secretKey);
// 设置域名:
// 如果您使用了腾讯云 cvm可以设置内部域名
//config.put("host", "sts.internal.tencentcloudapi.com");
// 临时密钥有效时长,单位是秒,默认 1800 秒,目前主账号最长 2 小时(即 7200 秒),子账号最长 36 小时(即 129600
config.put("durationSeconds", 1800);
// 换成您的 bucket
config.put("bucket", "examplebucket-1250000000");
// 换成 bucket 所在地区
config.put("region", "ap-guangzhou");
// 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径
// 列举几种典型的前缀授权场景:
// 1、允许访问所有对象"*"
// 2、允许访问指定的对象"a/a1.txt", "b/b1.txt"
// 3、允许访问指定前缀的对象"a*", "a/*", "b/*"
// 如果填写了“*”,将允许用户访问所有资源;除非业务需要,否则请按照最小权限原则授予用户相应的访问权限范围。
config.put("allowPrefixes", new String[]{
"exampleobject",
"exampleobject2"
});
// 密钥的权限列表。必须在这里指定本次临时密钥所需要的权限。
// 简单上传、表单上传和分块上传需要以下的权限,其他权限列表请参见 https://cloud.tencent.com/document/product/436/31923
String[] allowActions = new String[]{
// 简单上传
"name/cos:PutObject",
// 表单上传、小程序上传
"name/cos:PostObject",
// 分块上传
"name/cos:InitiateMultipartUpload",
"name/cos:ListMultipartUploads",
"name/cos:ListParts",
"name/cos:UploadPart",
"name/cos:CompleteMultipartUpload"
};
config.put("allowActions", allowActions);
Response response = CosStsClient.getCredential(config);
System.out.println(response.credentials.tmpSecretId);
System.out.println(response.credentials.tmpSecretKey);
System.out.println(response.credentials.sessionToken);
} catch (Exception e) {
e.printStackTrace();
throw new IllegalArgumentException("no valid secret !");
}
}
}

@ -1,5 +1,7 @@
package com.ruoyi.flyingbook.LarkHelper;
import com.alibaba.fastjson.JSONObject;
import com.lark.oapi.core.token.AccessTokenType;
import com.lark.oapi.service.approval.v4.model.GetInstanceRespBody;
import com.lark.oapi.service.authen.v1.model.CreateAccessTokenReq;
import com.lark.oapi.service.authen.v1.model.CreateAccessTokenReqBody;
@ -9,9 +11,12 @@ import com.lark.oapi.service.contact.v3.model.*;
import com.ruoyi.flyingbook.domain.lark.LarkApprovalRequest;
import com.ruoyi.flyingbook.domain.lark.LarkException;
import com.ruoyi.flyingbook.domain.lark.LarkUserRequest;
import com.ruoyi.flyingbook.domain.larkactive.LarkSessionResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
/**
* @author yuxiangyong
@ -22,12 +27,15 @@ import org.springframework.stereotype.Component;
public class LarkUserHelper extends LarkHelper{
static String openId = "ou_cd09481727e91fce1f12b7b0ed1500d2";
static String code = "ou_cd09481727e91fce1f12b7b0ed1500d2";
public static void main(String[] args) throws Exception {
LarkUserHelper bk = new LarkUserHelper();
GetUserRespBody userRespBody = bk.getUserInfoDetail(new LarkUserRequest(appId, secret, openId));
// userRespBody.getUser().getName();
System.out.println(userRespBody);
LarkSessionResponse larkSessionResponse = bk.tokenLoginValidate(new LarkUserRequest(appId, secret, openId, code));
System.out.println(larkSessionResponse);
}
@ -71,4 +79,22 @@ public class LarkUserHelper extends LarkHelper{
throw new RuntimeException(new LarkException("LarkUserHelper.getUserToken",e.getMessage(),request).getErrorMessageBody());
}
}
/**
* userToken
*/
private static final String TOKEN_LOGIN_VALIDATE = "https://open.feishu.cn/open-apis/mina/v2/tokenLoginValidate";
public LarkSessionResponse tokenLoginValidate(LarkUserRequest request) {
try {
JSONObject body = new JSONObject();
body.put("code",request.getCode());
byte[] resBody = buildClient(request)
.post(TOKEN_LOGIN_VALIDATE, body, AccessTokenType.Tenant)
.getBody();
String resStr = new String(resBody, StandardCharsets.UTF_8);
return JSONObject.parseObject(resStr, LarkSessionResponse.class);
} catch (Exception e) {
throw new RuntimeException(new LarkException("LarkUserHelper.getUserToken",e.getMessage(),request).getErrorMessageBody());
}
}
}

@ -1,30 +1,33 @@
package com.ruoyi.flyingbook.controller;
import com.ruoyi.flyingbook.CosHelper.CosHelper;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.FlagStatus;
import com.ruoyi.common.enums.LarkActiveInviteStageEnum;
import com.ruoyi.common.enums.LarkActiveStageEnum;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.flyingbook.LarkHelper.LarkUserHelper;
import com.ruoyi.flyingbook.domain.LarkActive;
import com.ruoyi.flyingbook.domain.LarkUserActiveInviteRelatoin;
import com.ruoyi.flyingbook.domain.LarkUserActiveRelatoin;
import com.ruoyi.flyingbook.domain.edi.ResponseVo;
import com.ruoyi.flyingbook.domain.larkactive.LarkActiveCountVo;
import com.ruoyi.flyingbook.domain.larkactive.LarkActiveRequest;
import com.ruoyi.flyingbook.domain.larkactive.LarkActiveUserRelationRequest;
import com.ruoyi.flyingbook.domain.larkactive.LarkActiveVo;
import com.ruoyi.flyingbook.domain.lark.LarkUserRequest;
import com.ruoyi.flyingbook.domain.larkactive.*;
import com.ruoyi.flyingbook.service.ILarkActiveService;
import com.ruoyi.flyingbook.service.ILarkUserActiveInviteRelatoinService;
import com.ruoyi.flyingbook.service.ILarkUserActiveRelatoinService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.Date;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/lark/active")
public class LarkActiveController extends BaseController {
@Autowired
@ -33,6 +36,22 @@ public class LarkActiveController extends BaseController {
private ILarkUserActiveRelatoinService larkUserActiveRelatoinService;
@Autowired
private ILarkUserActiveInviteRelatoinService larkUserActiveInviteRelatoinService;
@Autowired
private LarkUserHelper larkUserHelper;
@Autowired
private CosHelper cosHelper;
private static final String APP_ID = "cli_a482a8572cbc9013";
private static final String APP_SECRET = "lZNXbCLlOslWbwBIVc4qvgxOdnfA8Mos";
/**
*
*/
@PostMapping("/getSession")
public ResponseVo<LarkSessionDetailResponse> getSession(@RequestBody LarkSessionRequest request) {
LarkSessionResponse larkSessionResponse = larkUserHelper.tokenLoginValidate(new LarkUserRequest(APP_ID, APP_SECRET, null, request.getCode()));
return new ResponseVo<>(larkSessionResponse.getData());
}
/**
*
@ -52,43 +71,17 @@ public class LarkActiveController extends BaseController {
}
/**
* todo yxy
*
*/
@PostMapping("/uploadActiveFile")
public ResponseVo<LarkActiveVo> uploadActiveFile(@RequestBody LarkActiveRequest request) {
LarkActive larkActive = larkActiveService.selectLarkActiveById(request.getLarkActiveId());
return new ResponseVo(larkActive);
public ResponseVo<LarkUserActiveRelatoin> uploadActiveFile(@RequestParam("file") MultipartFile file,@RequestParam("userName")String userName,@RequestParam("larkActiveId") Long larkActiveId) {
LarkActiveUserRelationRequest request = new LarkActiveUserRelationRequest();
request.setFile(file);
request.setUserName(userName);
request.setLarkActiveId(larkActiveId);
return larkUserActiveRelatoinService.commitFile(request);
}
/**
*
*/
@PostMapping("/queryWaitReview")
public ResponseVo<LarkUserActiveRelatoin> queryWaitReview(@RequestBody LarkActiveUserRelationRequest request) {
request.setActiveStage(LarkActiveStageEnum.SUBMIT.getCode());
return larkUserActiveRelatoinService.queryPage(request);
}
/**
*
*/
@PostMapping("/approve")
public void approve(@RequestBody LarkUserActiveRelatoin request) {
LarkUserActiveInviteRelatoin larkUserActiveInviteRelatoin = new LarkUserActiveInviteRelatoin();
larkUserActiveInviteRelatoin.setFlag(FlagStatus.OK.getCode());
larkUserActiveInviteRelatoin.setCompanyName(request.getCompanyName());
larkUserActiveInviteRelatoin.setInviteUserName(request.getUserName());
larkUserActiveInviteRelatoin.setInviteStage(LarkActiveInviteStageEnum.INVITE.getCode());
List<LarkUserActiveInviteRelatoin> larkUserActiveInviteRelatoins = larkUserActiveInviteRelatoinService.selectLarkUserActiveInviteRelatoinList(larkUserActiveInviteRelatoin);
for (LarkUserActiveInviteRelatoin userActiveInviteRelatoin : larkUserActiveInviteRelatoins) {
userActiveInviteRelatoin.setInviteStage(LarkActiveInviteStageEnum.ACTIVE.getCode());
larkUserActiveInviteRelatoinService.updateLarkUserActiveInviteRelatoin(userActiveInviteRelatoin);
}
request.setActiveStage(LarkActiveStageEnum.ADJUST.getCode());
larkUserActiveRelatoinService.updateLarkUserActiveRelatoin(request);
}
/**
*
*/

@ -45,6 +45,11 @@ public class LarkActive extends BaseEntity {
*/
private String activeImageUrl;
/**
*
*/
private Integer activeImageCount;
/**
*
* @see com.ruoyi.common.enums.LarkActiveTypeEnum

@ -0,0 +1,36 @@
package com.ruoyi.flyingbook.domain;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* lark_user_active_image
*
* @author ruoyi
* @date 2023-08-19
*/
@Data
public class LarkUserActiveImage extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** $column.columnComment */
private Long id;
/** 用户活动关联关系id */
private Long userActiveRelatoin;
/** 存储桶路径 */
private String bucketName;
/** 文件的唯一key */
private String fileKey;
/**
* @see com.ruoyi.common.enums.FlagStatus
*/
private Long flag;
}

@ -22,4 +22,9 @@ public class LarkUserRequest extends LarkRequest{
super(appId, appSecret);
this.openId = openId;
}
public LarkUserRequest(String appId, String appSecret, String openId, String code) {
super(appId, appSecret);
this.code = code;
}
}

@ -1,6 +1,6 @@
package com.ruoyi.flyingbook.domain.larkactive;
import com.ruoyi.common.core.domain.RequestVo;
import com.ruoyi.common.core.domain.LarkActiveBaseRequestVo;
import lombok.Data;
import java.util.List;
@ -10,7 +10,7 @@ import java.util.List;
* @create 2023-08-16 16:58
*/
@Data
public class LarkActiveRequest extends RequestVo {
public class LarkActiveRequest extends LarkActiveBaseRequestVo {
private String companyName;

@ -1,20 +1,27 @@
package com.ruoyi.flyingbook.domain.larkactive;
import com.ruoyi.common.core.domain.RequestVo;
import com.ruoyi.common.core.domain.LarkActiveBaseRequestVo;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
/**
* @author yuxiangyong
* @create 2023-08-16 16:58
*/
@Data
public class LarkActiveUserRelationRequest extends RequestVo {
public class LarkActiveUserRelationRequest extends LarkActiveBaseRequestVo {
private String companyName;
private Long larkActiveId;
private String userName;
private MultipartFile file;
/**
* @see com.ruoyi.common.enums.FlagStatus
*/

@ -0,0 +1,20 @@
package com.ruoyi.flyingbook.domain.larkactive;
import lombok.Data;
/**
* @author yuxiangyong
* @create 2023-08-16 16:58
*/
@Data
public class LarkSessionDetailResponse {
private String open_id;
private String employee_id;
private String session_key;
private String tenant_key;
private String access_token;
private String expires_in;
private String refresh_token;
}

@ -0,0 +1,14 @@
package com.ruoyi.flyingbook.domain.larkactive;
import lombok.Data;
/**
* @author yuxiangyong
* @create 2023-08-16 16:58
*/
@Data
public class LarkSessionRequest {
private String code;
}

@ -0,0 +1,16 @@
package com.ruoyi.flyingbook.domain.larkactive;
import lombok.Data;
/**
* @author yuxiangyong
* @create 2023-08-16 16:58
*/
@Data
public class LarkSessionResponse {
private String code;
private String msg;
private LarkSessionDetailResponse data;
}

@ -0,0 +1,62 @@
package com.ruoyi.flyingbook.mapper;
import com.ruoyi.flyingbook.domain.LarkUserActiveImage;
import java.util.List;
/**
* Mapper
*
* @author ruoyi
* @date 2023-08-19
*/
public interface LarkUserActiveImageMapper
{
/**
*
*
* @param id ID
* @return
*/
public LarkUserActiveImage selectLarkUserActiveImageById(Long id);
/**
*
*
* @param larkUserActiveImage
* @return
*/
public List<LarkUserActiveImage> selectLarkUserActiveImageList(LarkUserActiveImage larkUserActiveImage);
/**
*
*
* @param larkUserActiveImage
* @return
*/
public int insertLarkUserActiveImage(LarkUserActiveImage larkUserActiveImage);
/**
*
*
* @param larkUserActiveImage
* @return
*/
public int updateLarkUserActiveImage(LarkUserActiveImage larkUserActiveImage);
/**
*
*
* @param id ID
* @return
*/
public int deleteLarkUserActiveImageById(Long id);
/**
*
*
* @param ids ID
* @return
*/
public int deleteLarkUserActiveImageByIds(Long[] ids);
}

@ -0,0 +1,62 @@
package com.ruoyi.flyingbook.service;
import com.ruoyi.flyingbook.domain.LarkUserActiveImage;
import java.util.List;
/**
* Service
*
* @author ruoyi
* @date 2023-08-19
*/
public interface ILarkUserActiveImageService
{
/**
*
*
* @param id ID
* @return
*/
public LarkUserActiveImage selectLarkUserActiveImageById(Long id);
/**
*
*
* @param larkUserActiveImage
* @return
*/
public List<LarkUserActiveImage> selectLarkUserActiveImageList(LarkUserActiveImage larkUserActiveImage);
/**
*
*
* @param larkUserActiveImage
* @return
*/
public int insertLarkUserActiveImage(LarkUserActiveImage larkUserActiveImage);
/**
*
*
* @param larkUserActiveImage
* @return
*/
public int updateLarkUserActiveImage(LarkUserActiveImage larkUserActiveImage);
/**
*
*
* @param ids ID
* @return
*/
public int deleteLarkUserActiveImageByIds(Long[] ids);
/**
*
*
* @param id ID
* @return
*/
public int deleteLarkUserActiveImageById(Long id);
}

@ -33,6 +33,8 @@ public interface ILarkUserActiveRelatoinService {
public List<LarkUserActiveRelatoin> selectLarkUserActiveRelatoinList(LarkUserActiveRelatoin larkUserActiveRelatoin);
public ResponseVo<LarkUserActiveRelatoin> queryPage(LarkActiveUserRelationRequest request);
public ResponseVo<LarkUserActiveRelatoin> commitFile(LarkActiveUserRelationRequest request);
/**
*
*

@ -0,0 +1,96 @@
package com.ruoyi.flyingbook.service.impl;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.flyingbook.domain.LarkUserActiveImage;
import com.ruoyi.flyingbook.mapper.LarkUserActiveImageMapper;
import com.ruoyi.flyingbook.service.ILarkUserActiveImageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* Service
*
* @author ruoyi
* @date 2023-08-19
*/
@Service
public class LarkUserActiveImageServiceImpl implements ILarkUserActiveImageService
{
@Autowired
private LarkUserActiveImageMapper larkUserActiveImageMapper;
/**
*
*
* @param id ID
* @return
*/
@Override
public LarkUserActiveImage selectLarkUserActiveImageById(Long id)
{
return larkUserActiveImageMapper.selectLarkUserActiveImageById(id);
}
/**
*
*
* @param larkUserActiveImage
* @return
*/
@Override
public List<LarkUserActiveImage> selectLarkUserActiveImageList(LarkUserActiveImage larkUserActiveImage)
{
return larkUserActiveImageMapper.selectLarkUserActiveImageList(larkUserActiveImage);
}
/**
*
*
* @param larkUserActiveImage
* @return
*/
@Override
public int insertLarkUserActiveImage(LarkUserActiveImage larkUserActiveImage)
{
larkUserActiveImage.setCreateTime(DateUtils.getNowDate());
return larkUserActiveImageMapper.insertLarkUserActiveImage(larkUserActiveImage);
}
/**
*
*
* @param larkUserActiveImage
* @return
*/
@Override
public int updateLarkUserActiveImage(LarkUserActiveImage larkUserActiveImage)
{
larkUserActiveImage.setUpdateTime(DateUtils.getNowDate());
return larkUserActiveImageMapper.updateLarkUserActiveImage(larkUserActiveImage);
}
/**
*
*
* @param ids ID
* @return
*/
@Override
public int deleteLarkUserActiveImageByIds(Long[] ids)
{
return larkUserActiveImageMapper.deleteLarkUserActiveImageByIds(ids);
}
/**
*
*
* @param id ID
* @return
*/
@Override
public int deleteLarkUserActiveImageById(Long id)
{
return larkUserActiveImageMapper.deleteLarkUserActiveImageById(id);
}
}

@ -1,9 +1,13 @@
package com.ruoyi.flyingbook.service.impl;
import com.qcloud.cos.model.PutObjectResult;
import com.ruoyi.common.enums.FlagStatus;
import com.ruoyi.common.enums.LarkActiveStageEnum;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.flyingbook.CosHelper.CosHelper;
import com.ruoyi.flyingbook.domain.LarkActive;
import com.ruoyi.flyingbook.domain.LarkUserActiveImage;
import com.ruoyi.flyingbook.domain.LarkUserActiveRelatoin;
import com.ruoyi.flyingbook.domain.edi.ResponseVo;
import com.ruoyi.flyingbook.domain.larkactive.LarkActiveCountVo;
@ -11,6 +15,7 @@ import com.ruoyi.flyingbook.domain.larkactive.LarkActiveRequest;
import com.ruoyi.flyingbook.domain.larkactive.LarkActiveUserRelationRequest;
import com.ruoyi.flyingbook.domain.larkactive.LarkActiveVo;
import com.ruoyi.flyingbook.mapper.LarkActiveMapper;
import com.ruoyi.flyingbook.mapper.LarkUserActiveImageMapper;
import com.ruoyi.flyingbook.mapper.LarkUserActiveRelatoinMapper;
import com.ruoyi.flyingbook.service.ILarkUserActiveRelatoinService;
import org.apache.commons.collections4.CollectionUtils;
@ -18,7 +23,10 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
@ -36,6 +44,13 @@ public class LarkUserActiveRelatoinServiceImpl implements ILarkUserActiveRelatoi
private LarkUserActiveRelatoinMapper larkUserActiveRelatoinMapper;
@Autowired
private LarkActiveMapper larkActiveMapper;
@Autowired
private CosHelper cosHelper;
@Autowired
private LarkUserActiveImageMapper larkUserActiveImageMapper;
private static final String BUCKET_NAME = "ruoyi-1308275795";
/**
*
@ -58,17 +73,17 @@ public class LarkUserActiveRelatoinServiceImpl implements ILarkUserActiveRelatoi
int userCount = larkUserActiveRelatoinMapper.queryUserCount(larkUserActiveRelatoin);
larkActiveCountVo.setTotalUserQty(userCount);
List<LarkActiveVo> larkActiveCountVos = larkUserActiveRelatoinMapper.queryUserCountGroupByActive(larkUserActiveRelatoin);
if (CollectionUtils.isNotEmpty(larkActiveCountVos)){
if (CollectionUtils.isNotEmpty(larkActiveCountVos)) {
List<Long> activeIdList = larkActiveCountVos.stream().map(LarkActiveVo::getId).distinct().collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(activeIdList)){
if (CollectionUtils.isNotEmpty(activeIdList)) {
LarkActiveRequest query = new LarkActiveRequest();
query.setFlag(FlagStatus.OK.getCode());
query.setLarkActiveIdList(activeIdList);
Map<Long, LarkActive> activeMap = larkActiveMapper.queryCompleteActive(query).stream().collect(Collectors.toMap(LarkActive::getId, Function.identity(), (k1, k2) -> k1));
for (LarkActiveVo activeCountVo : larkActiveCountVos) {
LarkActive larkActive = activeMap.get(activeCountVo.getId());
if (larkActive != null){
BeanUtils.copyProperties(larkActive,activeCountVo);
if (larkActive != null) {
BeanUtils.copyProperties(larkActive, activeCountVo);
}
}
}
@ -90,18 +105,71 @@ public class LarkUserActiveRelatoinServiceImpl implements ILarkUserActiveRelatoi
@Override
public ResponseVo<LarkUserActiveRelatoin> queryPage(LarkActiveUserRelationRequest request) {
if (request == null || StringUtils.isBlank(request.getCompanyName())){
return new ResponseVo(request.getCurrentPage(),request.getPageSize());
if (request == null || StringUtils.isBlank(request.getCompanyName())) {
return new ResponseVo(request.getCurrentPage(), request.getPageSize());
}
request.setFlag(FlagStatus.OK.getCode());
LarkUserActiveRelatoin larkActive = new LarkUserActiveRelatoin();
BeanUtils.copyProperties(request,larkActive);
BeanUtils.copyProperties(request, larkActive);
Integer count = larkUserActiveRelatoinMapper.count(larkActive);
if (count > 0){
if (count > 0) {
List<LarkUserActiveRelatoin> larkUserActiveRelatoins = larkUserActiveRelatoinMapper.queryPage(request);
return new ResponseVo(request.getCurrentPage(),request.getPageSize(),larkUserActiveRelatoins,count);
return new ResponseVo(request.getCurrentPage(), request.getPageSize(), larkUserActiveRelatoins, count);
}
return new ResponseVo(request.getCurrentPage(), request.getPageSize(), null, count);
}
@Override
public ResponseVo<LarkUserActiveRelatoin> commitFile(LarkActiveUserRelationRequest request) {
MultipartFile multipartFile = request.getFile();
File file = FileUtils.multipartFile2File(multipartFile);
String name = file.getName();
String[] split = name.split("\\.");
String key = String.format("%s_%s", split[0], System.currentTimeMillis());
split[0] = key;
key = String.join(".", split);
LarkUserActiveRelatoin relatoin = queryUserActiveRelation(request.getUserName(), request.getLarkActiveId());
if (relatoin == null) {
return new ResponseVo();
}
Integer totalCount = userActiveCount(relatoin) + 1;
LarkActive larkActive = larkActiveMapper.selectLarkActiveById(relatoin.getActiveId());
cosHelper.upload(BUCKET_NAME, key, file);
buildUserActiveImage(relatoin, key);
if (totalCount >= larkActive.getActiveImageCount()) {
relatoin.setActiveStage(LarkActiveStageEnum.ADJUST.getCode());
}
return new ResponseVo();
}
private void buildUserActiveImage(LarkUserActiveRelatoin relatoin, String key) {
LarkUserActiveImage larkUserActiveImage = new LarkUserActiveImage();
larkUserActiveImage.setCreateTime(new Date());
larkUserActiveImage.setCreateBy("System");
larkUserActiveImage.setUserActiveRelatoin(relatoin.getId());
larkUserActiveImage.setFlag(FlagStatus.OK.getCode());
larkUserActiveImage.setBucketName(BUCKET_NAME);
larkUserActiveImage.setFileKey(key);
larkUserActiveImageMapper.insertLarkUserActiveImage(larkUserActiveImage);
}
private Integer userActiveCount(LarkUserActiveRelatoin relatoin) {
LarkUserActiveImage larkUserActiveImage = new LarkUserActiveImage();
larkUserActiveImage.setUserActiveRelatoin(relatoin.getId());
larkUserActiveImage.setFlag(FlagStatus.OK.getCode());
return larkUserActiveImageMapper.selectLarkUserActiveImageList(larkUserActiveImage).size();
}
private LarkUserActiveRelatoin queryUserActiveRelation(String userName, Long activeId) {
LarkUserActiveRelatoin relatoin = new LarkUserActiveRelatoin();
relatoin.setUserName(userName);
relatoin.setActiveId(activeId);
relatoin.setFlag(FlagStatus.OK.getCode());
List<LarkUserActiveRelatoin> larkUserActiveRelatoins = larkUserActiveRelatoinMapper.selectLarkUserActiveRelatoinList(relatoin);
if (CollectionUtils.isNotEmpty(larkUserActiveRelatoins)) {
return larkUserActiveRelatoins.get(0);
}
return new ResponseVo(request.getCurrentPage(),request.getPageSize(),null,count);
return null;
}
/**

@ -14,6 +14,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="activeImageUrl" column="active_image_url" />
<result property="activeType" column="active_type" />
<result property="activeScore" column="active_score" />
<result property="activeImageCount" column="active_image_count" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
@ -23,7 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectLarkActiveVo">
select id, company_id, company_name, active_name, active_desc, active_content, active_image_url, active_type, active_score, create_by, create_time, update_by, update_time, flag, remark from lark_active
select id, company_id, company_name, active_name, active_desc, active_content, active_image_url, active_type, active_score,active_image_count, create_by, create_time, update_by, update_time, flag, remark from lark_active
</sql>
<select id="selectLarkActiveList" parameterType="com.ruoyi.flyingbook.domain.LarkActive" resultMap="LarkActiveResult">
@ -37,6 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="activeImageUrl != null and activeImageUrl != ''"> and active_image_url = #{activeImageUrl}</if>
<if test="activeType != null and activeType != ''"> and active_type = #{activeType}</if>
<if test="activeScore != null and activeScore != ''"> and active_score = #{activeScore}</if>
<if test="activeImageCount != null "> and active_image_count = #{activeImageCount}</if>
<if test="flag != null "> and flag = #{flag}</if>
</where>
</select>
@ -52,6 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="activeImageUrl != null and activeImageUrl != ''"> and active_image_url = #{activeImageUrl}</if>
<if test="activeType != null and activeType != ''"> and active_type = #{activeType}</if>
<if test="activeScore != null and activeScore != ''"> and active_score = #{activeScore}</if>
<if test="activeImageCount != null "> and active_image_count = #{activeImageCount}</if>
<if test="flag != null "> and flag = #{flag}</if>
</where>
</select>
@ -67,6 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="activeImageUrl != null and activeImageUrl != ''"> and active_image_url = #{activeImageUrl}</if>
<if test="activeType != null and activeType != ''"> and active_type = #{activeType}</if>
<if test="activeScore != null and activeScore != ''"> and active_score = #{activeScore}</if>
<if test="activeImageCount != null "> and active_image_count = #{activeImageCount}</if>
<if test="flag != null "> and flag = #{flag}</if>
</where>
limit #{offset},{pageSize}
@ -83,6 +87,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="activeImageUrl != null and activeImageUrl != ''"> and active_image_url = #{activeImageUrl}</if>
<if test="activeType != null and activeType != ''"> and active_type = #{activeType}</if>
<if test="activeScore != null and activeScore != ''"> and active_score = #{activeScore}</if>
<if test="activeImageCount != null "> and active_image_count = #{activeImageCount}</if>
<if test="flag != null "> and flag = #{flag}</if>
<if test="larkActiveIdList != null ">
and id in <foreach collection="larkActiveIdList" item="item" open="(" separator="," close=")">
@ -108,6 +113,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="activeImageUrl != null">active_image_url,</if>
<if test="activeType != null">active_type,</if>
<if test="activeScore != null">active_score,</if>
<if test="activeScore != null">active_image_count,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
@ -124,6 +130,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="activeImageUrl != null">#{activeImageUrl},</if>
<if test="activeType != null">#{activeType},</if>
<if test="activeScore != null">#{activeScore},</if>
<if test="activeImageCount != null">#{activeImageCount},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
@ -144,6 +151,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="activeImageUrl != null">active_image_url = #{activeImageUrl},</if>
<if test="activeType != null">active_type = #{activeType},</if>
<if test="activeScore != null">active_score = #{activeScore},</if>
<if test="activeImageCount != null">active_image_count = #{activeImageCount},</if>
<if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.flyingbook.mapper.LarkUserActiveImageMapper">
<resultMap type="com.ruoyi.flyingbook.domain.LarkUserActiveImage" id="LarkUserActiveImageResult">
<result property="id" column="id" />
<result property="userActiveRelatoin" column="user_active_relatoin" />
<result property="bucketName" column="bucket_name" />
<result property="fileKey" column="file_key" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="flag" column="flag" />
<result property="remark" column="remark" />
</resultMap>
<sql id="selectLarkUserActiveImageVo">
select id, user_active_relatoin, bucket_name, file_key, create_by, create_time, update_by, update_time, flag, remark from lark_user_active_image
</sql>
<select id="selectLarkUserActiveImageList" parameterType="com.ruoyi.flyingbook.domain.LarkUserActiveImage" resultMap="LarkUserActiveImageResult">
<include refid="selectLarkUserActiveImageVo"/>
<where>
<if test="userActiveRelatoin != null "> and user_active_relatoin = #{userActiveRelatoin}</if>
<if test="bucketName != null and bucketName != ''"> and bucket_name like concat('%', #{bucketName}, '%')</if>
<if test="fileKey != null and fileKey != ''"> and file_key = #{fileKey}</if>
<if test="flag != null "> and flag = #{flag}</if>
</where>
</select>
<select id="selectLarkUserActiveImageById" parameterType="Long" resultMap="LarkUserActiveImageResult">
<include refid="selectLarkUserActiveImageVo"/>
where id = #{id}
</select>
<insert id="insertLarkUserActiveImage" parameterType="com.ruoyi.flyingbook.domain.LarkUserActiveImage" useGeneratedKeys="true" keyProperty="id">
insert into lark_user_active_image
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="userActiveRelatoin != null">user_active_relatoin,</if>
<if test="bucketName != null">bucket_name,</if>
<if test="fileKey != null">file_key,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="flag != null">flag,</if>
<if test="remark != null">remark,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="userActiveRelatoin != null">#{userActiveRelatoin},</if>
<if test="bucketName != null">#{bucketName},</if>
<if test="fileKey != null">#{fileKey},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="flag != null">#{flag},</if>
<if test="remark != null">#{remark},</if>
</trim>
</insert>
<update id="updateLarkUserActiveImage" parameterType="com.ruoyi.flyingbook.domain.LarkUserActiveImage">
update lark_user_active_image
<trim prefix="SET" suffixOverrides=",">
<if test="userActiveRelatoin != null">user_active_relatoin = #{userActiveRelatoin},</if>
<if test="bucketName != null">bucket_name = #{bucketName},</if>
<if test="fileKey != null">file_key = #{fileKey},</if>
<if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="flag != null">flag = #{flag},</if>
<if test="remark != null">remark = #{remark},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteLarkUserActiveImageById" parameterType="Long">
delete from lark_user_active_image where id = #{id}
</delete>
<delete id="deleteLarkUserActiveImageByIds" parameterType="String">
delete from lark_user_active_image where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

@ -97,8 +97,13 @@
group by user_name
</select>
<resultMap type="com.ruoyi.flyingbook.domain.larkactive.LarkActiveCountVo" id="CountGroupResult">
<result property="id" column="id"/>
<result property="qty" column="qty"/>
</resultMap>
<select id="queryUserCountGroupByActive" parameterType="com.ruoyi.flyingbook.domain.LarkUserActiveRelatoin"
resultMap="com.ruoyi.flyingbook.domain.larkactive.LarkActiveCountVo">
resultMap="CountGroupResult">
select active_id as id ,count(id) as qty from lark_user_active_relatoin
<where>
<if test="companyId != null ">and company_id = #{companyId}</if>

@ -98,7 +98,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
.authorizeRequests()
// 对于登录login 验证码captchaImage 允许匿名访问
.antMatchers("/login", "/captchaImage", "/approval","/syncEmail","/scheduledReminders",
"/robot/callback", "/sync2Table", "/createPdf", "/cjtTicket").anonymous()
"/robot/callback", "/sync2Table", "/createPdf", "/cjtTicket", "/lark/active/**").anonymous()
.antMatchers(
HttpMethod.GET,
"/*.html",

Loading…
Cancel
Save