Procházet zdrojové kódy

增加场景计算流程日志记录

dsx před 2 roky
rodič
revize
36eb5a9f10

+ 35 - 0
.gitignore

@@ -0,0 +1,35 @@
+# Created by .ignore support plugin (hsz.mobi)
+### Java template
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+### Example user template template
+### Example user template
+
+# IntelliJ project files
+.idea
+*.iml
+out
+gen
+/**/target/

+ 81 - 0
src/main/java/com/fdkankan/modeling/entity/SceneBuildProcessLog.java

@@ -0,0 +1,81 @@
+package com.fdkankan.modeling.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 场景计算流程状态表
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-28
+ */
+@Getter
+@Setter
+@TableName("t_scene_build_process_log")
+public class SceneBuildProcessLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景码
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * 计算流程(pre-前置处理,call-计算,post-后置处理)
+     */
+    @TableField("process")
+    private String process;
+
+    /**
+     * mq消息队列名称
+     */
+    @TableField("queue_name")
+    private String queueName;
+
+    /**
+     * 处理状态(0-处理中,1-成功,-1-失败)
+     */
+    @TableField("state")
+    private Integer state;
+
+    /**
+     * 失败原因
+     */
+    @TableField("reason")
+    private String reason;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 修改时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * A-有效,I-无效
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A", delval = "I")
+    private String recStatus;
+
+
+}

+ 5 - 8
src/main/java/com/fdkankan/modeling/generate/AutoGenerate.java

@@ -14,13 +14,10 @@ public class AutoGenerate {
 
     public static void main(String[] args) {
 
-        System.out.println("相对路径指定到:"+ System.getProperty("user.dir"));
-
-
-        String path =System.getProperty("user.dir") + "\\4dkankan-center-modeling";
+        String path =System.getProperty("user.dir");
 
         generate(path,"modeling", getTables(new String[]{
-                "t_build_log",
+                "t_scene_build_process_log"
         }));
 
 //        generate(path,"goods", getTables(new String[]{
@@ -48,8 +45,8 @@ public class AutoGenerate {
 
 
     public static void  generate(String path,String moduleName,  List<String> tables){
-        FastAutoGenerator.create("jdbc:mysql://192.168.0.47:13306/4dkankan-center-modeling",
-                "root","4dkk2020cuikuan%")
+        FastAutoGenerator.create("jdbc:mysql://120.24.144.164:3306/4dkankan_v4",
+                "root","4Dage@4Dage#@168")
                 .globalConfig(builder -> {
                     builder.author("")               //作者
                             .outputDir(path+"\\src\\main\\java")    //输出路径(写到java目录)
@@ -80,7 +77,7 @@ public class AutoGenerate {
 
                             .entityBuilder()
                             .enableLombok()
-                            .logicDeleteColumnName("tb_status")
+                            .logicDeleteColumnName("rec_status")
                             .enableTableFieldAnnotation()
 //                            .superClass(BaseEntity.class)
 

+ 18 - 0
src/main/java/com/fdkankan/modeling/mapper/ISceneBuildProcessLogMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.modeling.mapper;
+
+import com.fdkankan.modeling.entity.SceneBuildProcessLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 场景计算流程状态表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-28
+ */
+@Mapper
+public interface ISceneBuildProcessLogMapper extends BaseMapper<SceneBuildProcessLog> {
+
+}

+ 35 - 0
src/main/java/com/fdkankan/modeling/receiver/RabbitMqListener.java

@@ -2,6 +2,7 @@ package com.fdkankan.modeling.receiver;
 
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.CommonOperStatus;
 import com.fdkankan.common.constant.ModelingBuildStatus;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.model.utils.ComputerUtil;
@@ -11,12 +12,14 @@ import com.fdkankan.modeling.entity.BuildLog;
 import com.fdkankan.modeling.exception.BuildException;
 import com.fdkankan.modeling.handler.LaserSceneObjGenerateHandler;
 import com.fdkankan.modeling.service.IBuildLogService;
+import com.fdkankan.modeling.service.ISceneBuildProcessLogService;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import com.fdkankan.redis.util.RedisLockUtil;
 import com.fdkankan.redis.util.RedisUtil;
 import com.rabbitmq.client.Channel;
+import com.fdkankan.model.constants.SceneBuildProcessType;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.time.StopWatch;
 import org.springframework.amqp.core.Message;
@@ -68,6 +71,8 @@ public class RabbitMqListener {
 
     @Autowired
     private LaserSceneObjGenerateHandler laserSceneObjGenerateHandler;
+    @Autowired
+    private ISceneBuildProcessLogService sceneBuildProcessLogService;
 
     /**
      * 场景计算
@@ -122,6 +127,13 @@ public class RabbitMqListener {
         //开始计时
         StopWatch watch = new StopWatch();
         watch.start();
+
+        String num = message.getSceneNum();
+
+        //记录流程日志
+        sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.CALL.code(), queueModelingCall);
+        sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.CALL.code(), queueModelingCall, CommonOperStatus.WAITING.code(), null);
+
         final BuildSceneResultBean buildSceneResult = new BuildSceneResultBean();
         String resultQueueName = StrUtil.isNotBlank(message.getResultReceiverMqName()) ?
                 message.getResultReceiverMqName() : queueModelingPost;
@@ -141,6 +153,7 @@ public class RabbitMqListener {
                 }
             });
             status = future.get(SysConstants.modelTimeOut, TimeUnit.HOURS);
+
             //结束计时
             watch.stop();
             buildLog.setDuration(watch.getTime(TimeUnit.SECONDS));
@@ -256,6 +269,28 @@ public class RabbitMqListener {
             buildLog.setUpdateTime(new Date());
             buildLog.setResultQuequeName(buildSceneResult.getResultQueueName());
             buildLogService.updateById(buildLog);
+
+            String reason = null;
+            Integer status = CommonOperStatus.SUCCESS.code();
+            switch (buildStatus){
+                case OVERTIME:
+                    reason = ModelingBuildStatus.OVERTIME.message();
+                    status = CommonOperStatus.FAILD.code();
+                    break;
+                case FAILED:
+                    reason = ModelingBuildStatus.FAILED.message();
+                    status = CommonOperStatus.FAILD.code();
+                    break;
+                case REPEAT:
+                    reason = ModelingBuildStatus.REPEAT.message();
+                    status = CommonOperStatus.FAILD.code();
+                    break;
+                case OTHER:
+                    reason = ModelingBuildStatus.OTHER.message();
+                    status = CommonOperStatus.FAILD.code();
+            }
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(message.getSceneNum(), SceneBuildProcessType.CALL.code(), queueModelingCall, status, reason);
+
         } catch (Exception e) {
             log.error("计算后业务处理出错!", e);
         }finally {

+ 20 - 0
src/main/java/com/fdkankan/modeling/service/ISceneBuildProcessLogService.java

@@ -0,0 +1,20 @@
+package com.fdkankan.modeling.service;
+
+import com.fdkankan.modeling.entity.SceneBuildProcessLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 场景计算流程状态表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-28
+ */
+public interface ISceneBuildProcessLogService extends IService<SceneBuildProcessLog> {
+
+    public void clearSceneBuildProcessLog(String num, String process, String queueName);
+
+    public void saveSceneBuildProcessLog(String num, String process, String queueName, int status, String reason);
+
+}

+ 50 - 0
src/main/java/com/fdkankan/modeling/service/impl/SceneBuildProcessLogServiceImpl.java

@@ -0,0 +1,50 @@
+package com.fdkankan.modeling.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.modeling.entity.SceneBuildProcessLog;
+import com.fdkankan.modeling.mapper.ISceneBuildProcessLogMapper;
+import com.fdkankan.modeling.service.ISceneBuildProcessLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.Objects;
+
+/**
+ * <p>
+ * 场景计算流程状态表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-28
+ */
+@Service
+public class SceneBuildProcessLogServiceImpl extends ServiceImpl<ISceneBuildProcessLogMapper, SceneBuildProcessLog> implements ISceneBuildProcessLogService {
+
+    @Override
+    public void clearSceneBuildProcessLog(String num, String process, String queueName) {
+        this.remove(new LambdaQueryWrapper<SceneBuildProcessLog>()
+                .eq(SceneBuildProcessLog::getNum, num)
+                .eq(SceneBuildProcessLog::getProcess, process)
+                .eq(SceneBuildProcessLog::getQueueName, queueName));
+    }
+
+    @Override
+    public void saveSceneBuildProcessLog(String num, String process, String queueName, int status, String reason) {
+
+        SceneBuildProcessLog log = this.getOne(new LambdaQueryWrapper<SceneBuildProcessLog>()
+                .eq(SceneBuildProcessLog::getNum, num)
+                .eq(SceneBuildProcessLog::getProcess,process)
+                .eq(SceneBuildProcessLog::getQueueName, queueName));
+        if(Objects.isNull(log)){
+            log = new SceneBuildProcessLog();
+        }
+        log.setNum(num);
+        log.setProcess(process);
+        log.setProcess(process);
+        log.setQueueName(queueName);
+        log.setState(status);
+        log.setReason(reason);
+        this.saveOrUpdate(log);
+    }
+
+}

+ 5 - 0
src/main/resources/mapper/modeling/SceneBuildProcessLogMapper.xml

@@ -0,0 +1,5 @@
+<?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.fdkankan.modeling.mapper.ISceneBuildProcessLogMapper">
+
+</mapper>