diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/EpmetThirdApplication.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/EpmetThirdApplication.java index 21c518e033..3efd642c87 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/EpmetThirdApplication.java +++ b/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 diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/dingtalk/CallbackController.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/dingtalk/CallbackController.java index 8164c4cdbe..a978ece6eb 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/dingtalk/CallbackController.java +++ b/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> bizData = (List>) callBackContent.get("bizData"); - if (CollectionUtils.isNotEmpty(bizData)){ - List 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 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 getExemptLoginUserDetail(@RequestBody ExemptLoginUserDetailFormDTO formDTO){ - ValidatorUtils.validateEntity(formDTO, ExemptLoginUserDetailFormDTO.ExemptLoginUserDetailForm.class); - return new Result().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> bizData = (List>) callBackContent.get("bizData"); +// if (CollectionUtils.isNotEmpty(bizData)){ +// List 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 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 getExemptLoginUserDetail(@RequestBody ExemptLoginUserDetailFormDTO formDTO){ +// ValidatorUtils.validateEntity(formDTO, ExemptLoginUserDetailFormDTO.ExemptLoginUserDetailForm.class); +// return new Result().ok(dingTalkService.getExemptLoginUserDetail(formDTO)); +// } /** * Desc: 获取钉钉小程序信息 @@ -147,9 +132,9 @@ public class CallbackController { * @author zxc * @date 2022/9/15 10:46 */ - @PostMapping("getDingMiniInfo") - public Result getDingMiniInfo(@RequestBody DingMiniInfoFormDTO formDTO){ - ValidatorUtils.validateEntity(formDTO, DingMiniInfoFormDTO.DingMiniInfoForm.class); - return new Result().ok(dingTalkService.getDingMiniInfo(formDTO)); - } +// @PostMapping("getDingMiniInfo") +// public Result getDingMiniInfo(@RequestBody DingMiniInfoFormDTO formDTO){ +// ValidatorUtils.validateEntity(formDTO, DingMiniInfoFormDTO.DingMiniInfoForm.class); +// return new Result().ok(dingTalkService.getDingMiniInfo(formDTO)); +// } } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/DingTalkService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/DingTalkService.java index ca0ba390f8..1d282c1749 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/DingTalkService.java +++ b/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); } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/DingTalkServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/DingTalkServiceImpl.java index ec239a3ee9..ab2357d109 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/DingTalkServiceImpl.java +++ b/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 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 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 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 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; +// } } diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/CustomerProjectParameterDao.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/CustomerProjectParameterDao.java index 1aebe7b1d7..8d1f5b826e 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/CustomerProjectParameterDao.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/CustomerProjectParameterDao.java @@ -87,5 +87,5 @@ public interface CustomerProjectParameterDao extends BaseDao