素材管理功能

master
3y 3 years ago
parent 816a529c76
commit 3ddc46f5c1

@ -0,0 +1,33 @@
package com.java3y.austin.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
/**
*
*
* @author 3y
*/
@Getter
@ToString
@AllArgsConstructor
public enum FileType {
IMAGE("10", "image"),
VOICE("20", "voice"),
COMMON_FILE("30", "file"),
VIDEO("40", "video"),
;
private String code;
private String dingDingName;
public static String dingDingNameByCode(String code) {
for (FileType fileType : FileType.values()) {
if (fileType.getCode().equals(code)) {
return fileType.getDingDingName();
}
}
return null;
}
}

@ -1,6 +1,7 @@
package com.java3y.austin.handler.handler.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.dingtalk.api.DefaultDingTalkClient;
@ -25,7 +26,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
*
@ -40,17 +43,15 @@ public class DingDingWorkNoticeHandler extends BaseHandler implements Handler {
@Autowired
private AccountUtils accountUtils;
@Autowired
private StringRedisTemplate redisTemplate;
public DingDingWorkNoticeHandler() {
channelCode = ChannelType.DING_DING_WORK_NOTICE.getCode();
}
private static final String URL = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2";
private static final String DING_DING_RECALL_KEY_PREFIX = "RECALL_";
@Override
public boolean handler(TaskInfo taskInfo) {
@ -60,6 +61,9 @@ public class DingDingWorkNoticeHandler extends BaseHandler implements Handler {
String accessToken = redisTemplate.opsForValue().get(SendAccountConstant.DING_DING_ACCESS_TOKEN_PREFIX + taskInfo.getSendAccount());
OapiMessageCorpconversationAsyncsendV2Response response = new DefaultDingTalkClient(URL).execute(request, accessToken);
if (response.getErrcode() == 0) {
// 用于消息撤回(支持当天的)
redisTemplate.opsForList().leftPush(DING_DING_RECALL_KEY_PREFIX + taskInfo.getMessageTemplateId(), String.valueOf(response.getTaskId()));
redisTemplate.expire(DING_DING_RECALL_KEY_PREFIX + taskInfo.getMessageTemplateId(), (DateUtil.endOfDay(new Date()).getTime() - DateUtil.current()) / 1000, TimeUnit.SECONDS);
return true;
}
// 常见的错误 应当 关联至 AnchorState,由austin后台统一透出失败原因

@ -0,0 +1,51 @@
package com.java3y.austin.handler.receipt;
import cn.hutool.core.util.StrUtil;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiMessageCorpconversationGetsendresultRequest;
import com.dingtalk.api.response.OapiMessageCorpconversationGetsendresultResponse;
import com.java3y.austin.common.constant.SendAccountConstant;
import com.java3y.austin.common.dto.account.DingDingWorkNoticeAccount;
import com.java3y.austin.support.utils.AccountUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
/**
*
*
* @author 3y
*/
@Component
@Slf4j
public class DingDingWorkReceipt {
private static final String URL = "https://oapi.dingtalk.com/topapi/message/corpconversation/getsendresult";
@Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private AccountUtils accountUtils;
public void pull() {
// try {
// for (int index = SendAccountConstant.START; true; index = index + SendAccountConstant.STEP) {
// DingDingWorkNoticeAccount account = accountUtils.getAccount(index, SendAccountConstant.DING_DING_WORK_NOTICE_ACCOUNT_KEY, SendAccountConstant.DING_DING_WORK_NOTICE_PREFIX, DingDingWorkNoticeAccount.class);
// if (account == null) {
// break;
// }
// String accessToken = redisTemplate.opsForValue().get(SendAccountConstant.DING_DING_ACCESS_TOKEN_PREFIX + index);
// DingTalkClient client = new DefaultDingTalkClient(URL);
// OapiMessageCorpconversationGetsendresultRequest req = new OapiMessageCorpconversationGetsendresultRequest();
// req.setAgentId(Long.valueOf(account.getAgentId()));
// req.setTaskId(456L);
// OapiMessageCorpconversationGetsendresultResponse rsp = client.execute(req, accessToken);
// System.out.println(rsp.getBody());
// }
// } catch (Exception e) {
// log.error("DingDingWorkReceipt#pull");
// }
}
}

@ -31,7 +31,7 @@ import java.util.List;
*/
@Component
@Slf4j
public class SmsReceipt {
public class MessageReceipt {
@Autowired
private TencentSmsReceipt tencentSmsReceipt;
@ -45,8 +45,8 @@ public class SmsReceipt {
while (true) {
// TODO 回执这里自行打开(免得报错)
// tencentSmsReceipt.pull();
// yunPianSmsReceipt.pull();
// tencentSmsReceipt.pull();
// yunPianSmsReceipt.pull();
try {
Thread.sleep(200);
} catch (InterruptedException e) {

@ -0,0 +1,61 @@
package com.java3y.austin.web.controller;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSON;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiMediaUploadRequest;
import com.dingtalk.api.response.OapiMediaUploadResponse;
import com.java3y.austin.common.constant.SendAccountConstant;
import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.common.enums.FileType;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.web.service.MaterialService;
import com.java3y.austin.web.vo.DataParam;
import com.java3y.austin.web.vo.amis.UserTimeLineVo;
import com.taobao.api.FileItem;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
/**
*
* @author 3y
*/
@Slf4j
@RestController
@RequestMapping("/material")
@Api("素材管理接口")
@CrossOrigin(origins = "http://localhost:3000", allowCredentials = "true", allowedHeaders = "*")
public class MaterialController {
@Autowired
private MaterialService materialService;
/**
*
*
* @param file
* @param sendAccount
* @param sendChannel
* @param fileType
* @return
*/
@PostMapping("/upload")
@ApiOperation("/素材上传接口")
public BasicResultVO uploadMaterial(@RequestParam("file") MultipartFile file, String sendAccount, Integer sendChannel, String fileType) {
if (ChannelType.DING_DING_WORK_NOTICE.getCode().equals(sendChannel)) {
return materialService.dingDingMaterialUpload(file, sendAccount, fileType);
}
return BasicResultVO.success();
}
}

@ -0,0 +1,30 @@
package com.java3y.austin.web.service;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.support.domain.MessageTemplate;
import com.java3y.austin.web.vo.MessageTemplateParam;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
*
*
* @author 3y
*/
public interface MaterialService {
/**
*
* @param file
* @param sendAccount
* @param fileType
* @return
*/
BasicResultVO dingDingMaterialUpload(MultipartFile file, String sendAccount, String fileType);
}

@ -0,0 +1,57 @@
package com.java3y.austin.web.service.impl;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSON;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiMediaUploadRequest;
import com.dingtalk.api.response.OapiMediaUploadResponse;
import com.google.common.base.Throwables;
import com.java3y.austin.common.constant.SendAccountConstant;
import com.java3y.austin.common.enums.FileType;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.web.service.MaterialService;
import com.java3y.austin.web.vo.UploadResponseVo;
import com.taobao.api.FileItem;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
/**
* @author 3y
*/
@Slf4j
@Service
public class MaterialServiceImpl implements MaterialService {
@Autowired
private StringRedisTemplate redisTemplate;
private static final String DING_DING_URL = "https://oapi.dingtalk.com/media/upload";
@Override
public BasicResultVO dingDingMaterialUpload(MultipartFile file, String sendAccount, String fileType) {
OapiMediaUploadResponse rsp;
try {
String accessToken = redisTemplate.opsForValue().get(SendAccountConstant.DING_DING_ACCESS_TOKEN_PREFIX + sendAccount);
DingTalkClient client = new DefaultDingTalkClient(DING_DING_URL);
OapiMediaUploadRequest req = new OapiMediaUploadRequest();
FileItem item = new FileItem(new StringBuilder().append(IdUtil.fastSimpleUUID()).append(file.getOriginalFilename()).toString(),
file.getInputStream());
req.setMedia(item);
req.setType(FileType.dingDingNameByCode(fileType));
rsp = client.execute(req, accessToken);
if (rsp.getErrcode() == 0L) {
return new BasicResultVO(RespStatusEnum.SUCCESS, UploadResponseVo.builder().id(rsp.getMediaId()).build());
}
log.error("MaterialService#dingDingMaterialUpload fail:{}", rsp.getErrmsg());
} catch (Exception e) {
log.error("MaterialService#dingDingMaterialUpload fail:{}", Throwables.getStackTraceAsString(e));
}
return BasicResultVO.fail("未知错误,联系管理员");
}
}

@ -0,0 +1,18 @@
package com.java3y.austin.web.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Id
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UploadResponseVo {
private String id;
}
Loading…
Cancel
Save