Browse Source

移除钉钉

master
luyan 2 years ago
parent
commit
b9d9fdbee7
  1. 2
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/EpmetThirdApplication.java
  2. 179
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/dingtalk/CallbackController.java
  3. 8
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/DingTalkService.java
  4. 61
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/DingTalkServiceImpl.java
  5. 2
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/CustomerProjectParameterDao.java

2
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/EpmetThirdApplication.java

@ -1,7 +1,6 @@
package com.epmet;
import com.epmet.mq.properties.RocketMQProperties;
import com.taobao.dingtalk.spring.annotations.EnableDingTalk;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@ -9,7 +8,6 @@ import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableDingTalk
@EnableConfigurationProperties(RocketMQProperties.class)
@SpringBootApplication
@EnableDiscoveryClient

179
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/dingtalk/CallbackController.java

@ -1,29 +1,14 @@
package com.epmet.controller.dingtalk;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dingtalk.util.DingCallbackCrypto;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.dto.form.DingMiniInfoFormDTO;
import com.epmet.commons.tools.redis.common.bean.DingMiniInfoCache;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dao.OpenSyncBizDataDao;
import com.epmet.dto.DingMiniInfoDTO;
import com.epmet.dto.form.ExemptLoginUserDetailFormDTO;
import com.epmet.entity.OpenSyncBizDataEntity;
import com.epmet.redis.DingDingCallbackRedis;
import com.epmet.service.DingTalkService;
import com.epmet.service.OpenSyncBizDataService;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* ISV 小程序回调信息处理
@ -65,81 +50,81 @@ public class CallbackController {
@Autowired
private DingTalkService dingTalkService;
@PostMapping(value = "dingCallback")
public Object dingCallback(
@RequestParam(value = "signature") String signature,
@RequestParam(value = "timestamp") Long timestamp,
@RequestParam(value = "nonce") String nonce,
@RequestParam(value = "suiteKey") String suiteKey,
@RequestBody(required = false) JSONObject body
) {
String params = "signature:" + signature + " timestamp:" + timestamp + " nonce:" + nonce + " body:" + body + "suiteKey::"+suiteKey;
try {
log.info("begin callback:" + params);
DingMiniInfoDTO dingMiniInfo = openSyncBizDataDao.getDingMiniInfo(suiteKey);
DingCallbackCrypto dingTalkEncryptor = new DingCallbackCrypto(dingMiniInfo.getToken(), dingMiniInfo.getAesKey(), suiteKey);
// 从post请求的body中获取回调信息的加密数据进行解密处理
String encrypt = body.getString("encrypt");
String plainText = dingTalkEncryptor.getDecryptMsg(signature, timestamp.toString(), nonce, encrypt);
JSONObject callBackContent = JSON.parseObject(plainText);
log.info("推来的消息体:"+plainText);
// 根据回调事件类型做不同的业务处理
String eventType = callBackContent.getString("EventType");
if (EVENT_CHECK_CREATE_SUITE_URL.equals(eventType)) {
log.info("验证新创建的回调URL有效性: " + plainText);
} else if (EVENT_CHECK_UPADTE_SUITE_URL.equals(eventType)) {
log.info("验证更新回调URL有效性: " + plainText);
} else if (EVENT_SUITE_TICKET.equals(eventType)) {
// suite_ticket用于用签名形式生成accessToken(访问钉钉服务端的凭证),需要保存到应用的db。
// 钉钉会定期向本callback url推送suite_ticket新值用以提升安全性。
// 应用在获取到新的时值时,保存db成功后,返回给钉钉success加密串(如本demo的return)
log.info("应用suite_ticket数据推送: " + plainText);
} else if (EVENT_TMP_AUTH_CODE.equals(eventType)) {
// 本事件应用应该异步进行授权开通企业的初始化,目的是尽最大努力快速返回给钉钉服务端。用以提升企业管理员开通应用体验
// 即使本接口没有收到数据或者收到事件后处理初始化失败都可以后续再用户试用应用时从前端获取到corpId并拉取授权企业信息,进而初始化开通及企业。
log.info("企业授权开通应用事件: " + plainText);
} else if (EVENT_SYNC_HTTP_PUSH_HIGH.equals(eventType)){
List<Map<String, Object>> bizData = (List<Map<String, Object>>) callBackContent.get("bizData");
if (CollectionUtils.isNotEmpty(bizData)){
List<OpenSyncBizDataEntity> list = new ArrayList<>();
bizData.forEach(b -> {
OpenSyncBizDataEntity e = new OpenSyncBizDataEntity();
e.setSuiteKey(suiteKey);
e.setSubscribeId(b.get("subscribe_id").toString());
e.setCorpId(b.get("corp_id").toString());
e.setBizId(b.get("biz_id").toString());
e.setBizData(b.get("biz_data").toString());
e.setBizType(b.get("biz_type").toString());
list.add(e);
openSyncBizDataService.delete(e);
if (e.getBizType().equals(NumConstant.TWO_STR)){
Map<String,String> ticketMap = JSON.parseObject(e.getBizData(), Map.class);
dingCallbackRedis.set(suiteKey,ticketMap.get("suiteTicket"));
}
});
openSyncBizDataService.insertBatch(list);
}
} else{
// 其他类型事件处理
}
// 返回success的加密信息表示回调处理成功
return dingTalkEncryptor.getEncryptedMap("success", timestamp, nonce);
} catch (Exception e) {
//失败的情况,应用的开发者应该通过告警感知,并干预修复
log.error("process callback fail." + params, e);
return "fail";
}
}
@PostMapping("getExemptLoginUserDetail")
public Result<Object> getExemptLoginUserDetail(@RequestBody ExemptLoginUserDetailFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO, ExemptLoginUserDetailFormDTO.ExemptLoginUserDetailForm.class);
return new Result<Object>().ok(dingTalkService.getExemptLoginUserDetail(formDTO));
}
// @PostMapping(value = "dingCallback")
// public Object dingCallback(
// @RequestParam(value = "signature") String signature,
// @RequestParam(value = "timestamp") Long timestamp,
// @RequestParam(value = "nonce") String nonce,
// @RequestParam(value = "suiteKey") String suiteKey,
// @RequestBody(required = false) JSONObject body
// ) {
// String params = "signature:" + signature + " timestamp:" + timestamp + " nonce:" + nonce + " body:" + body + "suiteKey::"+suiteKey;
// try {
// log.info("begin callback:" + params);
// DingMiniInfoDTO dingMiniInfo = openSyncBizDataDao.getDingMiniInfo(suiteKey);
// DingCallbackCrypto dingTalkEncryptor = new DingCallbackCrypto(dingMiniInfo.getToken(), dingMiniInfo.getAesKey(), suiteKey);
//
// // 从post请求的body中获取回调信息的加密数据进行解密处理
// String encrypt = body.getString("encrypt");
// String plainText = dingTalkEncryptor.getDecryptMsg(signature, timestamp.toString(), nonce, encrypt);
// JSONObject callBackContent = JSON.parseObject(plainText);
//
// log.info("推来的消息体:"+plainText);
//
// // 根据回调事件类型做不同的业务处理
// String eventType = callBackContent.getString("EventType");
// if (EVENT_CHECK_CREATE_SUITE_URL.equals(eventType)) {
// log.info("验证新创建的回调URL有效性: " + plainText);
// } else if (EVENT_CHECK_UPADTE_SUITE_URL.equals(eventType)) {
// log.info("验证更新回调URL有效性: " + plainText);
// } else if (EVENT_SUITE_TICKET.equals(eventType)) {
// // suite_ticket用于用签名形式生成accessToken(访问钉钉服务端的凭证),需要保存到应用的db。
// // 钉钉会定期向本callback url推送suite_ticket新值用以提升安全性。
// // 应用在获取到新的时值时,保存db成功后,返回给钉钉success加密串(如本demo的return)
// log.info("应用suite_ticket数据推送: " + plainText);
// } else if (EVENT_TMP_AUTH_CODE.equals(eventType)) {
// // 本事件应用应该异步进行授权开通企业的初始化,目的是尽最大努力快速返回给钉钉服务端。用以提升企业管理员开通应用体验
// // 即使本接口没有收到数据或者收到事件后处理初始化失败都可以后续再用户试用应用时从前端获取到corpId并拉取授权企业信息,进而初始化开通及企业。
// log.info("企业授权开通应用事件: " + plainText);
// } else if (EVENT_SYNC_HTTP_PUSH_HIGH.equals(eventType)){
// List<Map<String, Object>> bizData = (List<Map<String, Object>>) callBackContent.get("bizData");
// if (CollectionUtils.isNotEmpty(bizData)){
// List<OpenSyncBizDataEntity> list = new ArrayList<>();
// bizData.forEach(b -> {
// OpenSyncBizDataEntity e = new OpenSyncBizDataEntity();
// e.setSuiteKey(suiteKey);
// e.setSubscribeId(b.get("subscribe_id").toString());
// e.setCorpId(b.get("corp_id").toString());
// e.setBizId(b.get("biz_id").toString());
// e.setBizData(b.get("biz_data").toString());
// e.setBizType(b.get("biz_type").toString());
// list.add(e);
// openSyncBizDataService.delete(e);
// if (e.getBizType().equals(NumConstant.TWO_STR)){
// Map<String,String> ticketMap = JSON.parseObject(e.getBizData(), Map.class);
// dingCallbackRedis.set(suiteKey,ticketMap.get("suiteTicket"));
// }
// });
// openSyncBizDataService.insertBatch(list);
// }
// } else{
// // 其他类型事件处理
// }
//
// // 返回success的加密信息表示回调处理成功
// return dingTalkEncryptor.getEncryptedMap("success", timestamp, nonce);
// } catch (Exception e) {
// //失败的情况,应用的开发者应该通过告警感知,并干预修复
// log.error("process callback fail." + params, e);
// return "fail";
// }
// }
// @PostMapping("getExemptLoginUserDetail")
// public Result<Object> getExemptLoginUserDetail(@RequestBody ExemptLoginUserDetailFormDTO formDTO){
// ValidatorUtils.validateEntity(formDTO, ExemptLoginUserDetailFormDTO.ExemptLoginUserDetailForm.class);
// return new Result<Object>().ok(dingTalkService.getExemptLoginUserDetail(formDTO));
// }
/**
* Desc: 获取钉钉小程序信息
@ -147,9 +132,9 @@ public class CallbackController {
* @author zxc
* @date 2022/9/15 10:46
*/
@PostMapping("getDingMiniInfo")
public Result<DingMiniInfoCache> getDingMiniInfo(@RequestBody DingMiniInfoFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO, DingMiniInfoFormDTO.DingMiniInfoForm.class);
return new Result<DingMiniInfoCache>().ok(dingTalkService.getDingMiniInfo(formDTO));
}
// @PostMapping("getDingMiniInfo")
// public Result<DingMiniInfoCache> getDingMiniInfo(@RequestBody DingMiniInfoFormDTO formDTO){
// ValidatorUtils.validateEntity(formDTO, DingMiniInfoFormDTO.DingMiniInfoForm.class);
// return new Result<DingMiniInfoCache>().ok(dingTalkService.getDingMiniInfo(formDTO));
// }
}

8
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/DingTalkService.java

@ -1,9 +1,5 @@
package com.epmet.service;
import com.epmet.commons.tools.dto.form.DingMiniInfoFormDTO;
import com.epmet.commons.tools.redis.common.bean.DingMiniInfoCache;
import com.epmet.dto.form.ExemptLoginUserDetailFormDTO;
/**
* @Author zxc
* @DateTime 2022/9/14 14:56
@ -11,7 +7,7 @@ import com.epmet.dto.form.ExemptLoginUserDetailFormDTO;
*/
public interface DingTalkService {
Object getExemptLoginUserDetail(ExemptLoginUserDetailFormDTO formDTO);
// Object getExemptLoginUserDetail(ExemptLoginUserDetailFormDTO formDTO);
/**
* Desc: 获取钉钉小程序信息
@ -19,6 +15,6 @@ public interface DingTalkService {
* @author zxc
* @date 2022/9/15 10:46
*/
DingMiniInfoCache getDingMiniInfo(DingMiniInfoFormDTO formDTO);
// DingMiniInfoCache getDingMiniInfo(DingMiniInfoFormDTO formDTO);
}

61
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/DingTalkServiceImpl.java

@ -1,24 +1,11 @@
package com.epmet.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.aliyun.dingtalk.module.DingTalkResult;
import com.epmet.commons.tools.dto.form.DingMiniInfoFormDTO;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.redis.common.bean.DingMiniInfoCache;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.dao.OpenSyncBizDataDao;
import com.epmet.dto.DingMiniInfoDTO;
import com.epmet.dto.form.ExemptLoginUserDetailFormDTO;
import com.epmet.redis.DingDingCallbackRedis;
import com.epmet.service.DingTalkService;
import com.taobao.dingtalk.client.DingTalkClientToken;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Map;
/**
* @Author zxc
@ -29,21 +16,21 @@ import java.util.Map;
@Slf4j
public class DingTalkServiceImpl implements DingTalkService {
@Autowired
private DingTalkClientToken dingTalkClientToken;
@Autowired
private OpenSyncBizDataDao openSyncBizDataDao;
// @Autowired
// private DingTalkClientToken dingTalkClientToken;
// @Autowired
// private OpenSyncBizDataDao openSyncBizDataDao;
@Autowired
private DingDingCallbackRedis dingCallbackRedis;
@Autowired
private RedisUtils redisUtils;
@Override
public Object getExemptLoginUserDetail(ExemptLoginUserDetailFormDTO formDTO) {
DingMiniInfoDTO dingMiniInfo = openSyncBizDataDao.getDingMiniInfoByAppId(formDTO.getMiniAppId());
DingTalkResult<String> exemptLoginUserDetail = dingTalkClientToken.getExemptLoginUserDetail(formDTO.getCorpId(), dingMiniInfo.getSuiteKey(), dingMiniInfo.getSuiteSecret(), dingCallbackRedis.get(dingMiniInfo.getSuiteKey()), formDTO.getCode());
return exemptLoginUserDetail.getData();
}
// @Override
// public Object getExemptLoginUserDetail(ExemptLoginUserDetailFormDTO formDTO) {
// DingMiniInfoDTO dingMiniInfo = openSyncBizDataDao.getDingMiniInfoByAppId(formDTO.getMiniAppId());
// DingTalkResult<String> exemptLoginUserDetail = dingTalkClientToken.getExemptLoginUserDetail(formDTO.getCorpId(), dingMiniInfo.getSuiteKey(), dingMiniInfo.getSuiteSecret(), dingCallbackRedis.get(dingMiniInfo.getSuiteKey()), formDTO.getCode());
// return exemptLoginUserDetail.getData();
// }
/**
* Desc: 获取钉钉小程序信息
@ -51,18 +38,18 @@ public class DingTalkServiceImpl implements DingTalkService {
* @author zxc
* @date 2022/9/15 10:46
*/
@Override
public DingMiniInfoCache getDingMiniInfo(DingMiniInfoFormDTO formDTO) {
String key = RedisKeys.getDingMiniInfoKey(formDTO.getMiniAppId());
Map<String, Object> dingMiniInfoMap = redisUtils.hGetAll(key);
if (!CollectionUtils.isEmpty(dingMiniInfoMap)) {
return ConvertUtils.mapToEntity(dingMiniInfoMap,DingMiniInfoCache.class);
}
DingMiniInfoDTO dingMiniInfo = openSyncBizDataDao.getDingMiniInfoByAppId(formDTO.getMiniAppId());
if (null != dingMiniInfo){
redisUtils.hMSet(key, BeanUtil.beanToMap(dingMiniInfo));
return ConvertUtils.sourceToTarget(dingMiniInfo,DingMiniInfoCache.class);
}
return null;
}
// @Override
// public DingMiniInfoCache getDingMiniInfo(DingMiniInfoFormDTO formDTO) {
// String key = RedisKeys.getDingMiniInfoKey(formDTO.getMiniAppId());
// Map<String, Object> dingMiniInfoMap = redisUtils.hGetAll(key);
// if (!CollectionUtils.isEmpty(dingMiniInfoMap)) {
// return ConvertUtils.mapToEntity(dingMiniInfoMap,DingMiniInfoCache.class);
// }
// DingMiniInfoDTO dingMiniInfo = openSyncBizDataDao.getDingMiniInfoByAppId(formDTO.getMiniAppId());
// if (null != dingMiniInfo){
// redisUtils.hMSet(key, BeanUtil.beanToMap(dingMiniInfo));
// return ConvertUtils.sourceToTarget(dingMiniInfo,DingMiniInfoCache.class);
// }
// return null;
// }
}

2
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/CustomerProjectParameterDao.java

@ -87,5 +87,5 @@ public interface CustomerProjectParameterDao extends BaseDao<CustomerProjectPara
* @param key
* @return java.lang.String
*/
String selectValueByKey(@Param("customerId") String customerId, @Param("key") String key);
// String selectValueByKey(@Param("customerId") String customerId, @Param("key") String key);
}

Loading…
Cancel
Save