add:港务局数据同步注解与配置

pull/11/head
dearlin 2023-12-28 13:49:21 +08:00
parent 1cb56a5c82
commit fa82dc7272
7 changed files with 290 additions and 0 deletions

View File

@ -0,0 +1,18 @@
package com.zcloud.aspect;
import java.lang.annotation.*;
/**
* @Description:
* @Author: dearLin
* @Date: 2023/3/8
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DockAnnotation {
// 是否有额外数据
boolean isAdd() default false;
//是否有附件
boolean hasAnnex() default false;
}

View File

@ -0,0 +1,133 @@
package com.zcloud.aspect;
import com.alibaba.fastjson.JSON;
import com.zcloud.dto.TenCorpDto;
import com.zcloud.entity.PageData;
import com.zcloud.entity.system.User;
import com.zcloud.service.mq.DockSendMessageService;
import com.zcloud.util.Const;
import com.zcloud.util.Jurisdiction;
import com.zcloud.util.Tools;
import com.zcloud.util.UuidUtil;
import org.apache.shiro.session.Session;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
@Component
@Aspect
public class DockingAspect {
@Autowired
private DockSendMessageService sendMessageService;
@Value("${baseimgpath}")
public String baseimgpath;
@Pointcut("@annotation(com.zcloud.aspect.DockAnnotation)")
public void pointcut() {
}
public static Map<String, String> dockingRelationMap = new HashMap();
// 增强逻辑:在切点方法执行前打印日志
@Around("pointcut()")
public Object beforeApi(ProceedingJoinPoint joinPoint) throws Throwable {
try {
Object proceed = joinPoint.proceed();
HashMap<String, String> parseProceed = JSON.parseObject(JSON.toJSONString(proceed), HashMap.class);
if (parseProceed == null) {
return parseProceed;
}
// 数据同步
dataSync(parseProceed, joinPoint);
return proceed;
} catch (Exception e) {
throw e;
}
}
private void dataSync(HashMap<String, String> proceed, ProceedingJoinPoint joinPoint) throws Exception {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = joinPoint.getTarget().getClass().getDeclaredMethod(signature.getName(), signature.getParameterTypes());
DockAnnotation annotation = method.getAnnotation(DockAnnotation.class);
//获取资源映射路径servlet路径
String servletPath = getRequest().getServletPath();
//验证该数据是否需要对接
System.out.println("------------------------切面方法执行------------------------");
PageData sendData = this.getPageData();
// app 方法 不取session
PageData login_user = new PageData();
if (!servletPath.contains("/app/")) {
login_user.put("USER_ID", Jurisdiction.getUSER_ID());
login_user.put("USERNAME", Jurisdiction.getUsername());
login_user.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID());
login_user.put("DEPARTMENT_ID", Jurisdiction.getDEPARTMENT_ID());
login_user.put("NAME", Jurisdiction.getName());
login_user.put("ISSUPERVISE", Jurisdiction.getISSUPERVISE());
login_user.put("POST_ID", Jurisdiction.getPOST_ID());
login_user.put("IS_MAIN", Jurisdiction.getIS_MAIN());
Session session = Jurisdiction.getSession();
User user = (User)session.getAttribute(Const.SESSION_USER);
login_user.put("user",JSON.toJSONString(user));
sendData.put("LOGIN_USER", login_user);
} else {
// 手机app 会传递值。
login_user.put("USER_ID", Tools.notEmpty(sendData.getString("USER_ID")) ? sendData.getString("USER_ID") : "");
sendData.put("LOGIN_USER", login_user);
}
// 路径地址
sendData.put("url", servletPath);
// 有存自己表里的图片 把自己图片服务器的前缀传过去
if (annotation.hasAnnex()) {
sendData.put("BASEIMGPATH", baseimgpath);
// 自己表里的图片集合
sendData.put("sendPicturesList", proceed.get("sendPicturesList"));
proceed.remove("sendPicturesList");
}
TenCorpDto tenCorpDto = new TenCorpDto();
tenCorpDto.setMessage("港务局数据同步消息");
tenCorpDto.setData(sendData);
tenCorpDto.setId(UuidUtil.get32UUID());
tenCorpDto.setTopic("docking");
tenCorpDto.setProducer_name("qa-prevention-czks");
// 有dockData
if (Tools.notEmpty(proceed.get("dockData"))) {
sendData.put("dockData", proceed.get("dockData"));
proceed.remove("dockData");
sendMessageService.sendMessage(tenCorpDto);
} else {
System.out.println("------------------------无dockData不发消息------------------------");
}
System.out.println("------------------------切面方法结束------------------------");
}
private PageData getPageData() {
return new PageData(this.getRequest());
}
/**
* request
*
* @return
*/
private HttpServletRequest getRequest() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest();
return request;
}
}

View File

@ -0,0 +1,11 @@
package com.zcloud.service.mq;
import com.zcloud.dto.TenCorpDto;
public interface DockSendMessageService {
void sendMessage(TenCorpDto tenCorpDto) throws Exception;
void sendMessagePicture(TenCorpDto tenCorpDto) throws Exception;
void sendMessagePictureDelete(TenCorpDto tenCorpDto) throws Exception;
}

View File

@ -0,0 +1,111 @@
package com.zcloud.service.mq.impl;
import com.alibaba.fastjson.JSONObject;
import com.zcloud.dto.TenCorpDto;
import com.zcloud.entity.PageData;
import com.zcloud.mapper.datasource.mq.MqErrorMessageLogMapper;
import com.zcloud.mapper.datasource.mq.MqMessageLogMapper;
import com.zcloud.service.mq.DockSendMessageService;
import com.zcloud.service.mq.LogService;
import com.zcloud.util.DateUtil;
import com.zcloud.util.Warden;
import com.zcloud.util.mq.MqUtil;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class DockSendMessageServiceImpl implements DockSendMessageService {
@Value("${mq.gwj.data.topic}")
private String gwjDataTopic;
@Value("${mq.gwj.file.topic}")
private String gwjFileTopic;
@Resource
private RocketMQTemplate rocketMQTemplate;
@Resource
private MqErrorMessageLogMapper mqErrorMessageLogMapper;
@Resource
private LogService logService;
@Resource
private MqMessageLogMapper mqMessageLogMapper;
@Override
public void sendMessage(TenCorpDto tenCorpDto) throws Exception {
try {
PageData log = tenCorpDto.getPd();
log.put("MESSAGE_LOG_ID", Warden.get32UUID());
log.put("CREATE_TIME", DateUtil.getTime());
mqMessageLogMapper.save(log);
System.out.println("生产者:" + tenCorpDto.toString());
SendResult sendResult = rocketMQTemplate.syncSend(this.gwjDataTopic, tenCorpDto.toString());
if (!sendResult.getSendStatus().equals(SendStatus.SEND_OK)) {
throw new RuntimeException("产品入栈失败");
}
} catch (Exception e) {
e.printStackTrace();
PageData log = tenCorpDto.getPd();
log.put("MESSAGE_ERROR_LOG_ID", Warden.get32UUID());
log.put("ERROR_MESSAGE", e.getMessage());
log.put("TYPE", "0");
log.put("TIME", DateUtil.getTime());
mqErrorMessageLogMapper.save(log);
}
}
@Override
public void sendMessagePicture(TenCorpDto tenCorpDto) throws Exception {
try {
PageData log = tenCorpDto.getPd();
log.put("MESSAGE_LOG_ID", Warden.get32UUID());
log.put("CREATE_TIME", DateUtil.getTime());
mqMessageLogMapper.save(log);
System.out.println("生产者:" + tenCorpDto.toString());
SendResult sendResult = rocketMQTemplate.syncSend(this.gwjFileTopic, tenCorpDto.toString());
if (!sendResult.getSendStatus().equals(SendStatus.SEND_OK)) {
throw new RuntimeException("产品入栈失败");
}
} catch (Exception e) {
e.printStackTrace();
PageData log = tenCorpDto.getPd();
log.put("MESSAGE_ERROR_LOG_ID", Warden.get32UUID());
log.put("ERROR_MESSAGE", e.getMessage());
log.put("TYPE", "0");
log.put("TIME", DateUtil.getTime());
mqErrorMessageLogMapper.save(log);
}
}
@Override
public void sendMessagePictureDelete(TenCorpDto tenCorpDto) throws Exception {
try {
PageData log = tenCorpDto.getPd();
log.put("MESSAGE_LOG_ID", Warden.get32UUID());
log.put("CREATE_TIME", DateUtil.getTime());
mqMessageLogMapper.save(log);
System.out.println("生产者:" + tenCorpDto.toString());
SendResult sendResult = rocketMQTemplate.syncSend(this.gwjFileTopic, tenCorpDto.toString());
if (!sendResult.getSendStatus().equals(SendStatus.SEND_OK)) {
throw new RuntimeException("产品入栈失败");
}
} catch (Exception e) {
e.printStackTrace();
PageData log = tenCorpDto.getPd();
log.put("MESSAGE_ERROR_LOG_ID", Warden.get32UUID());
log.put("ERROR_MESSAGE", e.getMessage());
log.put("TYPE", "0");
log.put("TIME", DateUtil.getTime());
mqErrorMessageLogMapper.save(log);
}
}
}

View File

@ -89,3 +89,10 @@ mq.topic.info=info
mq.topic.eightWork=eightWork
mq.group.info=scheduled_tasks
mq.group.eightWork=scheduled_tasks_eightWork
#数据同步topic
mq.gwj.data.topic=czks_docking
mq.gwj.file.topic=czks_dockingPicture
#港务局文件服务器前缀
baseimgpath=https://qgqy.qhdsafety.com/file/

View File

@ -93,3 +93,8 @@ mq.group.eightWork=scheduled_tasks_eightWork
corp.default.pic-path=https://qgqy.qhdsafety.com/file/
corp.default.back-end-path=http://192.168.151.57:8092/
#数据同步topic
mq.gwj.data.topic=czks_docking
mq.gwj.file.topic=czks_dockingPicture
#港务局文件服务器前缀
baseimgpath=https://qgqy.qhdsafety.com/file/

View File

@ -87,3 +87,8 @@ mq.group.eightWork=scheduled_tasks_eightWork
corp.default.pic-path=https://qgqy.qhdsafety.com/file/
corp.default.back-end-path=https://skqhdg.porthebei.com:9004/file/
#数据同步topic
mq.gwj.data.topic=czks_docking
mq.gwj.file.topic=czks_dockingPicture
#港务局文件服务器前缀
baseimgpath=https://qgqy.qhdsafety.com/file/