Procházet zdrojové kódy

Merge branch 'xq'

# Conflicts:
#	tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrdersController.java
#	tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsTaskImagesService.java
#	tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsTaskImagesServiceImpl.java
xuqiang před 1 rokem
rodič
revize
368247e3d2
37 změnil soubory, kde provedl 472 přidání a 180 odebrání
  1. 13 0
      commons/src/main/java/com/jzg/commons/aop/LogDescriptionField.java
  2. 4 6
      commons/src/main/java/com/jzg/commons/aop/OperatorTrajectory.java
  3. 53 0
      commons/src/main/java/com/jzg/commons/aop/aspect/CustomerConvert.java
  4. 46 53
      commons/src/main/java/com/jzg/commons/aop/aspect/OperatorTrajectoryAspect.java
  5. 4 0
      commons/src/main/java/com/jzg/commons/core/base/HistoryDataService.java
  6. 0 16
      commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrdersExternalPolicy.java
  7. 20 0
      commons/src/main/java/com/jzg/commons/entity/po/OperatorTrajectory.java
  8. 3 0
      commons/src/main/java/com/jzg/commons/entity/quote/vo/CustomerInfoVo.java
  9. 4 0
      commons/src/main/java/com/jzg/commons/entity/quote/vo/RiskInfoVo.java
  10. 2 0
      commons/src/main/java/com/jzg/commons/entity/vo/SysDeptVo.java
  11. 2 0
      commons/src/main/java/com/jzg/commons/entity/vo/SysRoleVo.java
  12. 3 5
      commons/src/main/java/com/jzg/commons/entity/vo/SysUserVo.java
  13. 2 5
      commons/src/main/java/com/jzg/commons/service/OperatorTrajectoryService.java
  14. 10 4
      commons/src/main/java/com/jzg/commons/service/impl/OperatorTrajectoryServiceImpl.java
  15. 69 0
      commons/src/main/java/com/jzg/commons/util/GetSelectIdDataUtils.java
  16. 7 0
      commons/src/main/java/com/jzg/commons/util/comparble/CompareResult.java
  17. 17 5
      commons/src/main/java/com/jzg/commons/util/comparble/CompatibleUtils.java
  18. 68 0
      commons/src/main/java/com/jzg/commons/util/comparble/DescriptionUtils.java
  19. 0 27
      commons/src/main/java/com/jzg/commons/util/comparble/EnumDataChangeHandedType.java
  20. 21 1
      commons/src/main/java/com/jzg/commons/util/comparble/SchemaAnnotationUtils.java
  21. 2 2
      gateway/src/main/resources/application-dev.yml
  22. 0 2
      platform/src/main/java/com/jzg/controller/QrBarcodeController.java
  23. 6 2
      platform/src/main/java/com/jzg/controller/SysDeptController.java
  24. 5 0
      platform/src/main/java/com/jzg/controller/UserRoleController.java
  25. 10 4
      platform/src/main/java/com/jzg/service/impl/SysDeptServiceImpl.java
  26. 7 1
      platform/src/main/java/com/jzg/service/impl/UserRoleServiceImpl.java
  27. 0 1
      platform/src/main/resources/application.yml
  28. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrdersController.java
  29. 3 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsTaskImagesMapper.java
  30. 1 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsTaskImagesService.java
  31. 52 22
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  32. 5 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsTaskImagesServiceImpl.java
  33. 4 2
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml
  34. 6 0
      tenant/organization/src/main/java/com/jzg/organization/controller/DeptController.java
  35. 7 7
      tenant/organization/src/main/java/com/jzg/organization/controller/OperatorTrajectoryController.java
  36. 7 6
      tenant/organization/src/main/java/com/jzg/organization/controller/UserController.java
  37. 8 8
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java

+ 13 - 0
commons/src/main/java/com/jzg/commons/aop/LogDescriptionField.java

@@ -0,0 +1,13 @@
+package com.jzg.commons.aop;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface LogDescriptionField {
+    String value();
+}

+ 4 - 6
commons/src/main/java/com/jzg/commons/aop/OperatorTrajectory.java

@@ -13,9 +13,6 @@ import java.lang.annotation.Target;
 @Target(ElementType.METHOD)
 public @interface OperatorTrajectory {
 
-    // 系统code
-    String systemCode() default "";
-
     //服务标识
     String serviceTag() default "";
 
@@ -28,12 +25,13 @@ public @interface OperatorTrajectory {
     //模块名称
     String moduleName() default "";
 
-    //实体类
-    String entity() default "";
-
     //是否记录日志
     String isRecorded() default "";
 
+    Class<?> entityClass();
+
+    Class<?> mapperClass();
+
 }
 
 

+ 53 - 0
commons/src/main/java/com/jzg/commons/aop/aspect/CustomerConvert.java

@@ -0,0 +1,53 @@
+package com.jzg.commons.aop.aspect;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Objects;
+
+public class CustomerConvert {
+
+    /**
+     * 类型转换
+     * @param obj
+     * @param clazz
+     * @return
+     * @throws Exception
+     */
+    public static Object convert(Object obj, Class clazz) throws Exception {
+        Object targetObj = clazz.getDeclaredConstructor().newInstance();
+        Class<?> originClass = obj.getClass();
+        Field[] fields = originClass.getDeclaredFields();
+
+        for (Field field : fields) {
+            if(notValidField(field) || isStaticModifier(field)) {
+                continue;
+            }
+            field.setAccessible(true);
+            Object fileAtr = field.get(obj);
+
+            Field field1 = null;
+            try {
+                field1 = clazz.getDeclaredField(field.getName());
+            } catch (NoSuchFieldException e) {
+                continue;
+            }
+            if(notValidField(field1)) {
+                continue;
+            }
+            field1.setAccessible(true);
+            field1.set(targetObj,fileAtr);
+        }
+
+        return targetObj;
+    }
+
+    private static boolean notValidField(Field field) {
+        return Objects.isNull(field);
+    }
+
+    private static boolean isStaticModifier(Field field) {
+        return Modifier.isStatic(field.getModifiers());
+    }
+
+}
+

+ 46 - 53
commons/src/main/java/com/jzg/commons/aop/aspect/OperatorTrajectoryAspect.java

@@ -1,18 +1,19 @@
 package com.jzg.commons.aop.aspect;
 
 
-import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.jzg.commons.aop.OperatorTrajectory;
 import com.jzg.commons.async.AsyncFactory;
 import com.jzg.commons.async.AsyncManager;
+import com.jzg.commons.constants.Crud;
 import com.jzg.commons.core.base.BaseController;
-import com.jzg.commons.core.base.HistoryDataService;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.service.OperatorTrajectoryService;
+import com.jzg.commons.util.GetSelectIdDataUtils;
 import com.jzg.commons.util.StringUtils;
+import com.jzg.commons.util.comparble.DescriptionUtils;
 import com.jzg.commons.util.idgen.IdGenerate;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -23,7 +24,6 @@ import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
@@ -43,10 +43,6 @@ public class OperatorTrajectoryAspect {
     @Lazy
     OperatorTrajectoryService operatorTrajectoryService;
 
-
-    @Autowired
-    private ApplicationContext applicationContext;
-
     @Autowired
     private BaseController baseController;
 
@@ -56,6 +52,8 @@ public class OperatorTrajectoryAspect {
     public void doAfter(JoinPoint joinPoint, HttpResult result) {
         MethodContext context = methodContext.get();
         Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
+        Object arg = joinPoint.getArgs()[0];
+
         OperatorTrajectory annotation = method.getAnnotation(OperatorTrajectory.class);
         if (context != null) {
             // 验证结果
@@ -67,57 +65,53 @@ public class OperatorTrajectoryAspect {
                 com.jzg.commons.entity.po.OperatorTrajectory byId = operatorTrajectoryService.getById(context.getId());
                 if(result.getCode() == 200){
                     if(byId.getOperatorType().equals("C")){
-                        Object data = result.getData();
-                        if (ObjectUtil.isNotEmpty(data)){
-                            JSONObject jsonObject = JSON.parseObject(data.toString());
-                            byId.setPrimaryValue(jsonObject.getString(annotation.primary()));
-                        }
+                        JSONObject agr = JSON.parseObject(JSONObject.toJSONString(arg));
+                        byId.setPrimaryValue(agr.getString(annotation.primary()));
                     }
                     byId.setExecuteStatus(1);
                 }else{
                     byId.setExecuteStatus(2);
                     byId.setErrorMsg(result.getMsg());
                 }
-//                operatorTrajectoryService.updateById(byId);
+                operatorTrajectoryService.updateById(byId);
             }
         }
         // 清除上下文
         methodContext.remove();
     }
 
+
+    public String getContent(Object obj,String type) {
+        String generated = DescriptionUtils.generateDescription(obj);
+        if (StringUtils.isNotEmpty(generated)){
+            generated = Crud.getNameByCode(type) + generated;
+        }
+        return generated;
+
+    }
+
+
     //拦截异常消息
     @AfterThrowing(pointcut = "@annotation(com.jzg.commons.aop.OperatorTrajectory)", throwing = "ex")
     public void doAfterThrowing(JoinPoint joinPoint, Throwable ex) {
         MethodContext context = methodContext.get();
-        log.info("异常信息:{}", ex.getMessage());
-        log.info("ID:{}", context.getId());
-        log.info("ID:{}", ex.toString());
-        operatorTrajectoryService.deleteById(context.getId(),baseController.getUserSystemCode());
-
-
-//        if (context != null) {
-//            String methodName = context.getMethodName();
-//            if(joinPoint.getSignature().getName().equals(methodName)){
-//                com.jzg.commons.entity.po.OperatorTrajectory byId = operatorTrajectoryService.getById(context.getId());
-//                byId.setExecuteStatus(2);
-//                byId.setErrorMsg(ex.getMessage());
-//                operatorTrajectoryService.updateById(byId);
-//            }
-//        }
+        if (context != null) {
+            String methodName = context.getMethodName();
+            if(joinPoint.getSignature().getName().equals(methodName)){
+                com.jzg.commons.entity.po.OperatorTrajectory byId = operatorTrajectoryService.getById(context.getId());
+                byId.setExecuteStatus(2);
+                byId.setErrorMsg(ex.getMessage());
+                operatorTrajectoryService.updateById(byId);
+            }
+        }
         // 清除上下文
         methodContext.remove();
     }
 
     @Before("@annotation(operatorTrajectory)")
-    public void doBefore(JoinPoint point,  OperatorTrajectory operatorTrajectory) {
-        Object obj = null;
-        String id = null;
-        if(operatorTrajectory.type().equals("C") || operatorTrajectory.type().equals("U")) {
-            //强转参数
-            obj = point.getArgs()[0];
-        }else if(operatorTrajectory.type().equals("D")){
-            id = point.getArgs()[0].toString();
-        }
+    public void doBefore(JoinPoint point,  OperatorTrajectory operatorTrajectory){
+        Object obj = point.getArgs()[0];
+        String id = JSON.parseObject(JSONObject.toJSONString(obj)).getString(operatorTrajectory.primary());
         if (isRecorded(operatorTrajectory.isRecorded(),obj)){
             return;
         }
@@ -125,41 +119,40 @@ public class OperatorTrajectoryAspect {
         String trajectoryId = IdGenerate.nextId();
         trajectory.setId(trajectoryId);
         trajectory.setOperatorType(operatorTrajectory.type());
-        trajectory.setSystemCode(operatorTrajectory.systemCode());
-        trajectory.setServiceTag(operatorTrajectory.serviceTag());
+        trajectory.setSystemCode(baseController.getUserSystemCode());
+        String className = point.getTarget().getClass().getName();
+        String methodName = point.getSignature().getName();
+        trajectory.setServiceTag(className + "." + methodName + "()");
         trajectory.setModuleName(operatorTrajectory.moduleName());
         trajectory.setCreateTime(LocalDateTime.now());
         trajectory.setCreateBy(baseController.getUserName());
-        trajectory.setSystemCode(baseController.getUserSystemCode());
-        trajectory.setEntityName(operatorTrajectory.entity());
+        trajectory.setEntityName(operatorTrajectory.entityClass().getName());
         if(!Objects.isNull(obj)) {
             trajectory.setAfterJson(JSON.toJSONString(obj));
         }
-        HistoryDataService historyDataService;
-        JSONObject jsonObject;
         Object beforeData;
-
-
         switch(operatorTrajectory.type()){
             //创建
             case "C":
+                trajectory.setOperationContent(getContent(obj,operatorTrajectory.type()));
                 operatorTrajectoryService.save(trajectory);
                 break;
             //更新
             case "U":
-                historyDataService = (HistoryDataService)applicationContext.getBean(operatorTrajectory.serviceTag() + "Impl");
-                jsonObject = JSON.parseObject(JSONObject.toJSONString(obj));
-                trajectory.setPrimaryValue(jsonObject.getString(operatorTrajectory.primary()));
-                beforeData = historyDataService.getHistoryData(jsonObject.getString(operatorTrajectory.primary()));
-                trajectory.setBeforeJson(JSON.toJSONString(beforeData));
+                beforeData = GetSelectIdDataUtils.selectById(operatorTrajectory.entityClass(), operatorTrajectory.mapperClass(), id);
+                trajectory.setPrimaryValue(id);
+                if (!Objects.isNull(beforeData)){
+                    trajectory.setBeforeJson(JSON.toJSONString(beforeData));
+                }
+                trajectory.setOperationContent(getContent(obj,operatorTrajectory.type()));
                 operatorTrajectoryService.save(trajectory);
                 break;
             //删除
             case "D":
-                historyDataService = (HistoryDataService)applicationContext.getBean(operatorTrajectory.serviceTag() + "Impl");
-                beforeData = historyDataService.getHistoryData(id);
+                beforeData = GetSelectIdDataUtils.selectById(operatorTrajectory.entityClass(), operatorTrajectory.mapperClass(), id);
                 trajectory.setPrimaryValue(id);
                 trajectory.setBeforeJson(JSON.toJSONString(beforeData));
+                trajectory.setOperationContent(getContent(beforeData,operatorTrajectory.type()));
                 operatorTrajectoryService.save(trajectory);
                 break;
 
@@ -168,6 +161,7 @@ public class OperatorTrajectoryAspect {
         methodContext.set(new MethodContext(point.getSignature().getName(), trajectoryId));
     }
 
+
     public boolean isRecorded(String isRecorded,Object obj) {
         if(StringUtils.isNotBlank(isRecorded)){
             Map<String,Object> map = JSONObject.parseObject(JSONObject.toJSONString(obj), Map.class);
@@ -183,7 +177,6 @@ public class OperatorTrajectoryAspect {
         return false;
     }
 
-
     public void saveRecord(com.jzg.commons.entity.po.OperatorTrajectory operatorTrajectory) {
         AsyncManager.getInstance().execute(AsyncFactory.saveRecord(operatorTrajectory));
     }

+ 4 - 0
commons/src/main/java/com/jzg/commons/core/base/HistoryDataService.java

@@ -7,4 +7,8 @@ import org.springframework.stereotype.Service;
 public interface HistoryDataService {
 
     public Object getHistoryData(String id);
+
+
+    //String getSaveLogContent();
+
 }

+ 0 - 16
commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrdersExternalPolicy.java

@@ -28,22 +28,6 @@ public class InsOrdersExternalPolicy extends BaseModel {
     @Schema(description = "交强电子标志")
     private String jqSign;
 
-    @Schema(description = "交强保单")
-    @TableField(exist = false)
-    private String jqPolicyPreviewUrl;
-
-    @Schema(description = "商业保单")
-    @TableField(exist = false)
-    private String syPolicyPreviewUrl;
-
-    @Schema(description = "非车保单")
-    @TableField(exist = false)
-    private String noPolicyPreviewUrl;
-
-    @Schema(description = "交强电子标志")
-    @TableField(exist = false)
-    private String jqSignPreviewUrl;
-
     @TableField(exist = false)
     private List<SysUploadFiles> uploadFiles;
 

+ 20 - 0
commons/src/main/java/com/jzg/commons/entity/po/OperatorTrajectory.java

@@ -1,9 +1,12 @@
 package com.jzg.commons.entity.po;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.jzg.commons.util.comparble.CompareResult;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 操作日志记录表 oper_log
@@ -14,22 +17,34 @@ import java.time.LocalDateTime;
 public class OperatorTrajectory{
     private String id;
 
+    @Schema(description = "模块名称")
     private String moduleName;
 
+    @Schema(description = "系统编码")
     private String systemCode;
 
+    @Schema(description = "服务标识")
     private String serviceTag;
 
+    @Schema(description = "记录轨迹的主键的value")
     private String primaryValue;
 
+    @Schema(description = "之前的数据")
     private String beforeJson;
 
+    @Schema(description = "之后的数据")
     private String afterJson;
 
+    @Schema(description = "操作内容")
+    private String operationContent;
+
+    @Schema(description = "操作人")
     private String createBy;
 
+    @Schema(description = "操作人名称")
     private String createByName;
 
+    @Schema(description = "操作时间")
     private LocalDateTime createTime;
 
     private String operatorType;
@@ -40,7 +55,12 @@ public class OperatorTrajectory{
 
     private String entityName;
 
+    @Schema(description = "操作类型")
     @TableField(exist = false)
     private String operatorName;
 
+    @TableField(exist = false)
+    @Schema(description = "比较结果")
+    private List<CompareResult> compareResultList;
+
 }

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/quote/vo/CustomerInfoVo.java

@@ -22,6 +22,9 @@ public class CustomerInfoVo implements Serializable {
     @Serial
     private static final long serialVersionUID = -6294245892491122989L;
 
+    @Schema(description = "人员类型 1 个人 2 法人")
+    private String personType;
+
     /**
      * 姓名
      */

+ 4 - 0
commons/src/main/java/com/jzg/commons/entity/quote/vo/RiskInfoVo.java

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.quote.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -23,6 +24,9 @@ public class RiskInfoVo implements Serializable {
     @Serial
     private static final long serialVersionUID = -8958183565558385154L;
 
+    @Schema(description = "ID")
+    private String id;
+
     /**
      * 险种代码
      */

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/vo/SysDeptVo.java

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.vo;
 
+import com.jzg.commons.aop.LogDescriptionField;
 import com.jzg.commons.entity.po.SysDept;
 import com.jzg.commons.util.StringUtils;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -20,6 +21,7 @@ public class SysDeptVo implements Serializable {
     @NotBlank(message = "机构名称不能为空")
     @Max(value = 50,message = "机构名称不能超过50个字符")
     @Schema(description = "机构名称")
+    @LogDescriptionField("机构")
     private String name;
 
     @NotBlank(message = "请选择上级机构")

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/vo/SysRoleVo.java

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.vo;
 
+import com.jzg.commons.aop.LogDescriptionField;
 import com.jzg.commons.core.base.PageRequest;
 import com.jzg.commons.entity.po.SysRole;
 import com.jzg.commons.entity.po.SysRolePerms;
@@ -31,6 +32,7 @@ public class SysRoleVo extends PageRequest {
     @NotBlank(message = "角色名称不能为空")
     @Size(max=100,message = "角色名称长度不能大于100")
     @Schema(description = "角色名称")
+    @LogDescriptionField("角色")
     private String name;
 
     @Size(max = 100,message="备注长度不能大于100")

+ 3 - 5
commons/src/main/java/com/jzg/commons/entity/vo/SysUserVo.java

@@ -1,12 +1,8 @@
 package com.jzg.commons.entity.vo;
 
-import com.baomidou.mybatisplus.annotation.TableField;
+import com.jzg.commons.aop.LogDescriptionField;
 import com.jzg.commons.core.base.PageRequest;
 import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Pattern;
-import jakarta.validation.constraints.Size;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -29,6 +25,7 @@ public class SysUserVo extends PageRequest {
 
     /** 用户名 */
     @Schema(description = "用户名")
+    @LogDescriptionField("成员")
     private String username;
 
     /** 密码 */
@@ -51,6 +48,7 @@ public class SysUserVo extends PageRequest {
     private String deptId;
 
     @Schema(description = "姓名")
+    @LogDescriptionField("成员")
     private String name;
 
     @Schema(description = "系统编码")

+ 2 - 5
commons/src/main/java/com/jzg/commons/service/OperatorTrajectoryService.java

@@ -4,9 +4,6 @@ package com.jzg.commons.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.entity.dto.LogParam;
 import com.jzg.commons.entity.po.OperatorTrajectory;
-import com.jzg.commons.util.comparble.CompareResult;
-
-import java.util.List;
 
 /**
  * 操作日志 服务层
@@ -23,10 +20,10 @@ public interface OperatorTrajectoryService
 
     void deleteById(String id,String systemCode);
 
-
-    List<CompareResult> selectById(String id);
+    OperatorTrajectory selectById(String id);
 
     Page<OperatorTrajectory> list(LogParam logParam);
 
 
+    void updateById(OperatorTrajectory byId);
 }

+ 10 - 4
commons/src/main/java/com/jzg/commons/service/impl/OperatorTrajectoryServiceImpl.java

@@ -15,7 +15,6 @@ import jakarta.annotation.Resource;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 
 @Service
@@ -39,13 +38,15 @@ public class OperatorTrajectoryServiceImpl implements OperatorTrajectoryService
     }
 
     @Override
-    public List<CompareResult> selectById(String id) {
+    public OperatorTrajectory selectById(String id) {
         OperatorTrajectory operatorTrajectory = operatorTrajectoryMapper.selectById(id);
         if (ObjectUtil.isEmpty(operatorTrajectory)){
-            return new ArrayList<>(0);
+            return new OperatorTrajectory();
         }
         List<CompareResult> compareResults = CompatibleUtils.compareFieldsMap(operatorTrajectory);
-        return compareResults;
+        operatorTrajectory.setCompareResultList(compareResults);
+        operatorTrajectory.setOperatorName(Crud.getNameByCode(operatorTrajectory.getOperatorType()));
+        return operatorTrajectory;
     }
 
     @Override
@@ -64,4 +65,9 @@ public class OperatorTrajectoryServiceImpl implements OperatorTrajectoryService
         }
         return page;
     }
+
+    @Override
+    public void updateById(OperatorTrajectory byId) {
+        operatorTrajectoryMapper.updateById(byId);
+    }
 }

+ 69 - 0
commons/src/main/java/com/jzg/commons/util/GetSelectIdDataUtils.java

@@ -0,0 +1,69 @@
+package com.jzg.commons.util;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.jzg.commons.util.spring.SpringUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+
+@Slf4j
+public class GetSelectIdDataUtils {
+
+    public static Object selectById(Class<?> entityClazz, Class<?> mapperClass, String id) {
+        if (entityClazz == null || mapperClass == null || id == null) {
+            throw new IllegalArgumentException("Input parameters cannot be null");
+        }
+        try {
+            Method method = mapperClass.getMethod("selectById", Serializable.class);
+            if (id.isEmpty()) {
+                return null;
+            }
+            if (id.startsWith("[") && id.endsWith("]")) {
+                // 2. 按逗号分割(处理可能存在的空格)
+                String[] elements = id.replaceAll("[\\[\\]\"]", "").split("\\s*,\\s*");
+                // 3. 转换为List
+                List<String> list = new ArrayList<>(Arrays.asList(elements));
+                List<Object> resultList = new ArrayList<>();
+                for (String l : list) {
+                    Object invoke = method.invoke(SpringUtils.getBean(mapperClass), l);
+                    if (cn.hutool.core.util.ObjectUtil.isNull(invoke)) {
+                        return null;
+                    }
+                    resultList.add(convertToObject(entityClazz, invoke));
+                }
+                return resultList;
+            } else {
+                Object invoke = method.invoke(SpringUtils.getBean(mapperClass), id);
+                if (ObjectUtil.isNull(invoke)) {
+                    return null;
+                }
+                return convertToObject(entityClazz, invoke);
+            }
+        } catch (NoSuchMethodException e) {
+            log.error("Method 'selectById' not found in {}", mapperClass.getName());
+        } catch (IllegalAccessException | InvocationTargetException e) {
+            log.error("Failed to invoke method 'selectById'", e);
+        } catch (InstantiationException e) {
+            log.error("Failed to instantiate {}", entityClazz.getName());
+        } catch (NumberFormatException e) {
+            log.error("Failed to parse ID to long: {}", id);
+        }
+        return null;
+    }
+
+    private static Object convertToObject(Class<?> entityClazz, Object source) throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
+        Object targetObj = entityClazz.getDeclaredConstructor().newInstance();
+        BeanUtil.copyProperties(source, targetObj);
+        return targetObj;
+    }
+
+
+
+}

+ 7 - 0
commons/src/main/java/com/jzg/commons/util/comparble/CompareResult.java

@@ -1,5 +1,6 @@
 package com.jzg.commons.util.comparble;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 /**
@@ -9,30 +10,36 @@ import lombok.Data;
  *
  * @author izhouy
  */
+@Schema(description = "比较结果")
 @Data
 public class CompareResult {
 
     /**
      * 名称
      */
+    @Schema(description = "名称")
     private String name;
 
     /**
      * 变更字段
      */
+    @Schema(description = "变更字段")
     private String fieldName;
 
     /**
      * 变更前类的内容容
      */
+    @Schema(description = "变更前类的内容容")
     private String fieldContent;
     /**
      * 变更后类的内容容
      */
+    @Schema(description = "变更后类的内容容")
     private String newFieldContent;
     /**
      * 变更的枚举类型
      */
+    @Schema(description = "变更的枚举类型")
     private String handedType;
 
 }

+ 17 - 5
commons/src/main/java/com/jzg/commons/util/comparble/CompatibleUtils.java

@@ -6,10 +6,12 @@ import com.alibaba.fastjson2.JSONObject;
 import com.jzg.commons.entity.po.OperatorTrajectory;
 import com.jzg.commons.util.StringUtils;
 import lombok.extern.slf4j.Slf4j;
+
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 比较器工具类
@@ -22,7 +24,7 @@ public class CompatibleUtils {
     private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
 
     private static final Set<String> IGNORED_FIELDS = new HashSet<>(Arrays.asList(
-            "id", "createBy", "createTime", "updateBy", "updateTime", "systemCode","password","pages","size","current","size","total"
+            "id", "createBy", "createTime", "updateBy", "updateTime","dataMark", "systemCode","password","pages","size","current","size","total"
     ));
 
     /**
@@ -43,8 +45,18 @@ public class CompatibleUtils {
         try {
             Map<String, Object> oldMap = parseJsonToMap(afterJson);
             Map<String, Object> sourceMap = parseJsonToMap(source);
-
-            return compareMaps(oldMap, sourceMap, operatorTrajectory.getEntityName());
+            List<CompareResult> compareResults = compareMaps(oldMap, sourceMap, operatorTrajectory.getEntityName());
+            List<CompareResult> distinctPeople = compareResults.stream()
+                    .collect(Collectors.toMap(
+                            p -> Arrays.asList(p.getFieldName(), p.getFieldContent()),
+                            p -> p,
+                            (existing, replacement) -> existing
+                    ))
+                    .values()
+                    .stream()
+                    .collect(Collectors.toList());
+
+            return distinctPeople;
         } catch (Exception e) {
             log.error("JSON解析失败: {}", e.getMessage(), e);
             return Collections.emptyList();
@@ -81,8 +93,8 @@ public class CompatibleUtils {
                     CompareResult compareResult = new CompareResult();
                     compareResult.setName(SchemaAnnotationUtils.getSchemaAnnotation(entityName, key));
                     compareResult.setFieldName(key);
-                    compareResult.setFieldContent(newValue);
-                    compareResult.setNewFieldContent(oldValue);
+                    compareResult.setFieldContent(oldValue);
+                    compareResult.setNewFieldContent(newValue);
                     compareResult.setHandedType(""); // 默认值,可根据需求调整
                     results.add(compareResult);
                 }

+ 68 - 0
commons/src/main/java/com/jzg/commons/util/comparble/DescriptionUtils.java

@@ -0,0 +1,68 @@
+package com.jzg.commons.util.comparble;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.jzg.commons.aop.LogDescriptionField;
+import lombok.extern.slf4j.Slf4j;
+
+import java.lang.reflect.Field;
+import java.util.Collection;
+
+@Slf4j
+public class DescriptionUtils {
+
+    public static String generateDescription(Object obj) {
+        if (ObjectUtil.isNull(obj)) {
+            return null;
+        }
+        StringBuilder description = new StringBuilder();
+        if (obj instanceof Collection) {
+            processCollection((Collection<?>) obj, description);
+        } else {
+            processSingleObject(obj, description);
+        }
+        return description.length() > 0 ? description.toString() : null;
+    }
+
+    private static void processCollection(Collection<?> collection, StringBuilder description) {
+        int index = 0;
+        for (Object entity : collection) {
+            if (entity == null) {
+                continue;
+            }
+            processSingleObject(entity, description, index != 0);
+            index++;
+        }
+    }
+
+    private static void processSingleObject(Object obj, StringBuilder description) {
+        processSingleObject(obj, description, false);
+    }
+
+    private static void processSingleObject(Object obj, StringBuilder description, boolean appendComma) {
+        Field[] fields = obj.getClass().getDeclaredFields();
+        try {
+            for (Field field : fields) {
+                if (!field.isAnnotationPresent(LogDescriptionField.class)) {
+                    continue;
+                }
+                field.setAccessible(true);
+                LogDescriptionField annotation = field.getAnnotation(LogDescriptionField.class);
+                String fieldDescription = annotation.value();
+                if (ObjectUtil.isEmpty(fieldDescription)) {
+                    continue;
+                }
+                Object fieldValue = field.get(obj);
+                if (fieldValue != null) {
+                    if (appendComma && description.length() > 0) {
+                        description.append(",");
+                    }
+                    description.append(fieldDescription).append(" %").append(fieldValue).append("%");
+                    appendComma = true;
+                }
+            }
+        } catch (IllegalAccessException e) {
+            log.error("Failed to access field in entity: {}", obj.getClass().getName(), e);
+        }
+    }
+
+}

+ 0 - 27
commons/src/main/java/com/jzg/commons/util/comparble/EnumDataChangeHandedType.java

@@ -1,27 +0,0 @@
-package com.jzg.commons.util.comparble;
-
-
-import lombok.Getter;
-
-/**
- * title EnumDataChangeHandedType
- * Description 属性变更类型枚举
- * CreateDate 2022/5/31 23:06
- *
- * @author izhouy
- */
-@Getter
-public enum EnumDataChangeHandedType {
-    // 属性变更类型枚举
-    DELETE("D", "删除"),
-    UPDATE("U", "修改"),
-    SAVE("C", "新增");
-
-    private String code;
-    private String name;
-
-    EnumDataChangeHandedType(String code, String name) {
-        this.code = code;
-        this.name = name;
-    }
-}

+ 21 - 1
commons/src/main/java/com/jzg/commons/util/comparble/SchemaAnnotationUtils.java

@@ -1,9 +1,11 @@
 package com.jzg.commons.util.comparble;
 
 import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.extern.slf4j.Slf4j;
 
 import java.lang.reflect.Field;
 
+@Slf4j
 public class SchemaAnnotationUtils {
 
     /**
@@ -23,7 +25,7 @@ public class SchemaAnnotationUtils {
             if (schemaAnnotation != null) {
                 return schemaAnnotation.description();
             } else {
-                System.out.println("No @Schema annotation found for field: " + fieldName);
+                log.error("No @Schema annotation found for field: {}", fieldName);
             }
             return null;
         } catch (NoSuchFieldException e) {
@@ -48,4 +50,22 @@ public class SchemaAnnotationUtils {
         return null;
     }
 
+
+
+    public static Object getObject(String entity) {
+        try {
+            return getClassByName(entity).getDeclaredConstructor().newInstance();
+        } catch (InstantiationException e) {
+            log.error("无法实例化类: {}", e.getMessage());
+        } catch (IllegalAccessException e) {
+            log.error("非法访问: {}", e.getMessage());
+        } catch (NoSuchMethodException e) {
+            log.error("找不到构造方法: {}", e.getMessage());
+        } catch (Exception e) {
+            log.error("其他异常: {}", e.getMessage());
+        }
+        return null;
+    }
+
+
 }

+ 2 - 2
gateway/src/main/resources/application-dev.yml

@@ -23,12 +23,12 @@ spring:
         - id: platform_route
           uri: http://localhost:8083/
           predicates:
-            - Path=/userRole/**,/system/**,/file/**,/user/**,/esmInsCompany/**,/jyxConfig/**,/qrBarcode/**,/sysDept/**,/manager/**,/operatorTrajectory/**
+            - Path=/userRole/**,/system/**,/file/**,/user/**,/esmInsCompany/**,/jyxConfig/**,/qrBarcode/**,/sysDept/**,/manager/**
 
         - id: tenant_route
           uri: http://localhost:8084/
           predicates:
-            - Path=/tenant/**,/dept/**,/area/**,/dict/**,/userInfo/**,/sysOrganization/**,/activity/**,/message/**,/messageNotice/**,/poster/**,/agreement/**,/pltAgreement/**,/agreementRules/**,/plt/areaLicense/**,/scheme/**,/schemeRules/**,/schemeRulesAttrLink/**,/schemeRulesAttr/**,/schemeRulesDictLable/**,/schemeRulesUndwrt/**,/schemeRulesUndwrtAttrLink/**,/schemeRulesUndwrtAttr/**,/schemeRulesUndwrtDictLable/**,/schemeRulesUndwrtRules/**,/schemeRulesUndwrtRulesAttrLink/**,/schemeRules,/ptlAgreementCost/**,/ptlAgreementCost/**,/ptlAgreementCostExternal/**
+            - Path=/tenant/**,/dept/**,/area/**,/dict/**,/userInfo/**,/sysOrganization/**,/activity/**,/message/**,/messageNotice/**,/poster/**,/agreement/**,/pltAgreement/**,/agreementRules/**,/plt/areaLicense/**,/scheme/**,/schemeRules/**,/schemeRulesAttrLink/**,/schemeRulesAttr/**,/schemeRulesDictLable/**,/schemeRulesUndwrt/**,/schemeRulesUndwrtAttrLink/**,/schemeRulesUndwrtAttr/**,/schemeRulesUndwrtDictLable/**,/schemeRulesUndwrtRules/**,/schemeRulesUndwrtRulesAttrLink/**,/schemeRules,/ptlAgreementCost/**,/ptlAgreementCost/**,/ptlAgreementCostExternal/**,/operatorTrajectory/**
 
         - id: summary_route
           uri: http://localhost:9898/

+ 0 - 2
platform/src/main/java/com/jzg/controller/QrBarcodeController.java

@@ -42,7 +42,6 @@ public class QrBarcodeController {
     }
 
 
-    @OperatorTrajectory(moduleName = "二维码配置",serviceTag = "QrBarcodeService",entity = "QrBarcodeConfig")
     @PostMapping("/save")
     @Schema(description = "二维码配置新增")
     public HttpResult save(@Valid  @RequestBody QrBarcodeConfigAdd barcodeConfigAdd) {
@@ -52,7 +51,6 @@ public class QrBarcodeController {
         return qrBarcodeService.save(BeanUtil.copyProperties(barcodeConfigAdd, QrBarcodeConfig.class)) ? HttpResult.ok("保存成功") : HttpResult.error("保存失败");
     }
 
-    @OperatorTrajectory(moduleName = "二维码配置",serviceTag = "qrBarcodeService", type = "U",entity = "QrBarcodeConfig")
     @PostMapping("/updateById")
     @Schema(description = "二维码配置修改")
     public HttpResult updateById(@Valid @RequestBody QrBarcodeConfigEnd barcodeConfigEnd) {

+ 6 - 2
platform/src/main/java/com/jzg/controller/SysDeptController.java

@@ -1,14 +1,14 @@
 package com.jzg.controller;
 
 
-import com.jzg.commons.annotation.IgnoreTenant;
+import com.jzg.commons.aop.OperatorTrajectory;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.SysDeptParam;
 import com.jzg.commons.entity.po.SysDept;
-import com.jzg.commons.entity.vo.DeptLeaderVo;
 import com.jzg.commons.entity.vo.SysDeptVo;
 import com.jzg.commons.util.StringUtils;
+import com.jzg.mapper.SysDeptMapper;
 import com.jzg.service.SysDeptService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -25,12 +25,14 @@ public class SysDeptController extends BaseController {
     @Autowired
     private SysDeptService sysDeptService;
 
+    @OperatorTrajectory(moduleName = "组织架构/机构管理/添加机构",mapperClass = SysDeptMapper.class,entityClass = SysDeptVo.class )
     @Operation(summary = "新增机构接口", description = "新增机构接口")
     @PostMapping(value = "/add")
     public HttpResult<Boolean> addDept(@RequestBody SysDeptVo sysDeptVo) {
         return sysDeptService.addDept(sysDeptVo) ? HttpResult.ok("添加机构成功") : HttpResult.error("添加机构失败");
     }
 
+    @OperatorTrajectory(moduleName = "组织架构/机构管理/修改机构",type = "U",mapperClass = SysDeptMapper.class,entityClass = SysDeptVo.class )
     @Operation(summary = "修改机构接口", description = "修改机构接口")
     @PostMapping(value = "/update")
     public HttpResult updateDept(@RequestBody SysDeptVo sysDeptVo) {
@@ -38,6 +40,7 @@ public class SysDeptController extends BaseController {
         return sysDeptService.updateDept(sysDeptVo) ? HttpResult.ok("修改成功") : HttpResult.error("修改失败");
     }
 
+    @OperatorTrajectory(moduleName = "组织架构/机构管理/删除机构",type = "D", mapperClass = SysDeptMapper.class,entityClass = SysDeptVo.class )
     @Operation(summary = "删除机构接口", description = "删除机构接口")
     @PostMapping(value = "/delete")
     public HttpResult deleteDept(@RequestBody SysDeptVo sysDeptVo) {
@@ -45,6 +48,7 @@ public class SysDeptController extends BaseController {
     }
 
 
+    @OperatorTrajectory(moduleName = "组织架构/机构管理/批量删除机构",type = "D",primary = "deptIds", mapperClass = SysDeptMapper.class,entityClass = SysDeptVo.class )
     @Operation(summary = "批量删除机构接口", description = "批量删除机构接口")
     @PostMapping(value = "/batchDeleteDept")
     public HttpResult batchDeleteDept(@RequestBody SysDeptVo sysDeptVo) {

+ 5 - 0
platform/src/main/java/com/jzg/controller/UserRoleController.java

@@ -1,6 +1,7 @@
 package com.jzg.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.jzg.commons.aop.OperatorTrajectory;
 import com.jzg.commons.constants.SystemConstants;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
@@ -8,6 +9,7 @@ import com.jzg.commons.entity.po.SysRole;
 import com.jzg.commons.entity.vo.SysRoleVo;
 import com.jzg.commons.exception.ValidateException;
 import com.jzg.commons.util.StringUtils;
+import com.jzg.mapper.SysRoleMapper;
 import com.jzg.service.UserRoleService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -46,6 +48,7 @@ public class UserRoleController extends BaseController {
         return HttpResult.ok(userRoleService.roleGet(roleId));
     }
 
+    @OperatorTrajectory(moduleName = "组织架构/角色管理/添加角色",mapperClass = SysRoleMapper.class,entityClass = SysRoleVo.class )
     @Operation(summary = "角色添加")
     @PostMapping("/roleAdd")
     public HttpResult roleAdd(@Validated @RequestBody SysRoleVo sysRoleVo){
@@ -60,6 +63,7 @@ public class UserRoleController extends BaseController {
         return userRoleService.roleAdd(sysRoleVo) ? HttpResult.ok("添加角色成功") : HttpResult.error("添加角色失败");
     }
 
+    @OperatorTrajectory(moduleName = "组织架构/角色管理/修改角色",mapperClass = SysRoleMapper.class,type = "U",entityClass = SysRoleVo.class )
     @Operation(summary = "角色修改")
     @PostMapping("/roleUpdate")
     public HttpResult roleUpdate(@Validated @RequestBody SysRoleVo sysRoleVo){
@@ -89,6 +93,7 @@ public class UserRoleController extends BaseController {
         return userRoleService.roleDeleteValid(roleVo) ? HttpResult.ok("角色可以进行删除") : HttpResult.error("删除角色前,请先移除角色内的所有成员");
     }
 
+    @OperatorTrajectory(moduleName = "组织架构/角色管理/删除角色",mapperClass = SysRoleMapper.class,type = "D", entityClass = SysRoleVo.class )
     @Operation(summary = "角色删除")
     @PostMapping("/roleDelete")
     public HttpResult roleDelete(@RequestBody SysRoleVo roleVo){

+ 10 - 4
platform/src/main/java/com/jzg/service/impl/SysDeptServiceImpl.java

@@ -3,11 +3,13 @@ package com.jzg.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.core.base.BaseController;
+import com.jzg.commons.core.base.HistoryDataService;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.SysDeptParam;
-import com.jzg.commons.entity.po.*;
-import com.jzg.commons.entity.vo.ChangeDeptVo;
-import com.jzg.commons.entity.vo.DeptLeaderVo;
+import com.jzg.commons.entity.po.SysArea;
+import com.jzg.commons.entity.po.SysDept;
+import com.jzg.commons.entity.po.SysSystem;
+import com.jzg.commons.entity.po.SysUserJzgInfo;
 import com.jzg.commons.entity.vo.SysDeptVo;
 import com.jzg.commons.entity.vo.SysUserVo;
 import com.jzg.commons.exception.SystemException;
@@ -27,7 +29,7 @@ import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Service
-public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> implements SysDeptService {
+public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> implements SysDeptService, HistoryDataService {
 
     @Autowired
     private SysDeptMapper sysDeptMapper;
@@ -226,4 +228,8 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
         return sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getSystemCode, systemCode));
     }
 
+    @Override
+    public Object getHistoryData(String id) {
+        return sysDeptMapper.selectById(id);
+    }
 }

+ 7 - 1
platform/src/main/java/com/jzg/service/impl/UserRoleServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.annotation.IgnoreTenant;
 import com.jzg.commons.constants.SystemConstants;
 import com.jzg.commons.core.base.BaseController;
+import com.jzg.commons.core.base.HistoryDataService;
 import com.jzg.commons.entity.po.*;
 import com.jzg.commons.entity.vo.RolePermissionVo;
 import com.jzg.commons.entity.vo.SysRoleDataScopeVo;
@@ -24,7 +25,7 @@ import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Service
-public class UserRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements UserRoleService {
+public class UserRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements UserRoleService, HistoryDataService {
 
     @Autowired
     SysSystemService sysSystemService;
@@ -204,4 +205,9 @@ public class UserRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> imp
     }
 
 
+    @Override
+    public Object getHistoryData(String id) {
+        SysRole sysRole = baseMapper.selectById(id);
+        return sysRole;
+    }
 }

+ 0 - 1
platform/src/main/resources/application.yml

@@ -51,7 +51,6 @@ tenant:
     - sys_system_bus_perms_link
     - sys_system_bus_perms
     - ptl_agreement_attribution_dept
-    - operator_trajectory
   ignoreLoginNames:
 
   ignoreFunction:

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrdersController.java

@@ -1,7 +1,6 @@
 package com.jzg.quotation.summary.controller;
 
 
-import com.jzg.commons.aop.OperatorTrajectory;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.InsOrdersParam;
 import com.jzg.quotation.commons.entity.vo.aggregated.InsuranceUploadImageVo;
@@ -28,6 +27,7 @@ public class InsOrdersController {
     @Resource
     private InsOrdersService insOrdersService;
 
+    //@OperatorTrajectory(moduleName = "车险订单(补录)",serviceTag = "insOrdersService",entityClass = InsOrdersAdd.class,isRecorded = "insOrders.isTemporarily")
     @Resource
     private InsTaskImagesService insTaskImagesService;
 

+ 3 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsTaskImagesMapper.java

@@ -3,6 +3,7 @@ package com.jzg.quotation.summary.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jzg.commons.entity.po.InsTaskImages;
 import com.jzg.commons.entity.vo.InsTaskImagesVo;
+import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
@@ -14,4 +15,6 @@ public interface InsTaskImagesMapper extends BaseMapper<InsTaskImages> {
     InsTaskImagesVo selectByQuoteNo(String quoteNo);
 
 
+    @Delete("delete from ins_task_images where quote_no = #{quoteNo}")
+    void removeByQuoteNo(String quoteNo);
 }

+ 1 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsTaskImagesService.java

@@ -14,6 +14,7 @@ public interface InsTaskImagesService extends IService<InsTaskImages> {
 
     InsTaskImagesVo selectByQuoteNo(String quoteNo);
 
+    void removeByQuoteNo(String quoteNo);
     boolean imageSave(InsuranceUploadImageVo insuranceUploadImageVo);
 
 

+ 52 - 22
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.summary.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -255,40 +256,47 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             insOrdersOtherService.updateById(insOrdersOther);
             // 保存其他信息
             InsOrdersCosts insOrdersCosts = BeanUtil.copyProperties(insOrdersOtherInfo, InsOrdersCosts.class);
-            insOrdersCosts.setOrderNo(insOrders.getQuoteNo());
-            insOrdersCostsService.updateById(insOrdersCosts);
-
+            if (ObjectUtil.isNotNull(insOrdersCosts.getJqPremium()) || ObjectUtil.isNotNull(insOrdersCosts.getSyPremium())
+            || ObjectUtil.isNotNull(insOrdersCosts.getJyPremium()) || ObjectUtil.isNotNull(insOrdersCosts.getSumPremium())
+                    || ObjectUtil.isNotNull(insOrdersCosts.getTaxPremium()) || ObjectUtil.isNotNull(insOrdersCosts.getJqRatio())
+            || ObjectUtil.isNotNull(insOrdersCosts.getSyRatio())){
+                insOrdersCosts.setOrderNo(quoteNo);
+                insOrdersCostsService.updateById(insOrdersCosts);
+            }
             // 保险种类信息
             List<KindInfoVo> kindInfoVo = ordersEnd.getKindInfoVo();
             List<InsOrdersKind> insOrdersKinds = BeanUtil.copyToList(kindInfoVo, InsOrdersKind.class);
             insOrdersKindService.updateBatchById(insOrdersKinds);
 
             // 税费信息
-            VehicleAndVesselTaxVo vehicleAndVesselTax = ordersEnd.getVehicleAndVesselTax();
-            InsOrdersTax insOrdersTax = BeanUtil.copyProperties(vehicleAndVesselTax, InsOrdersTax.class);
-            insOrdersTax.setOrderNo(quoteNo);
-            insOrdersTaxService.updateById(insOrdersTax);
+//            VehicleAndVesselTaxVo vehicleAndVesselTax = ordersEnd.getVehicleAndVesselTax();
+//            InsOrdersTax insOrdersTax = BeanUtil.copyProperties(vehicleAndVesselTax, InsOrdersTax.class);
+//            insOrdersTax.setOrderNo(quoteNo);
+//            insOrdersTaxService.updateById(insOrdersTax);
 
             // 交强险 险种信息
-            RiskInfoVo ciRiskInfoVo = ordersEnd.getCiRiskInfoVo();
-            InsOrdersRisk insuranceInfo = BeanUtil.copyProperties(ciRiskInfoVo, InsOrdersRisk.class);
-            insOrdersRiskService.update(insuranceInfo,new LambdaUpdateWrapper<>(InsOrdersRisk.class).eq(InsOrdersRisk::getOrderNo,quoteNo));
-            // 商业险 险种信息
-            InsOrdersRisk biRiskInfoVo = BeanUtil.copyProperties(ordersEnd.getBiRiskInfoVo(), InsOrdersRisk.class);
-            insOrdersRiskService.update(biRiskInfoVo,new LambdaUpdateWrapper<>(InsOrdersRisk.class).eq(InsOrdersRisk::getOrderNo,quoteNo));
+//            RiskInfoVo ciRiskInfoVo = ordersEnd.getCiRiskInfoVo();
+//            InsOrdersRisk insuranceInfo = BeanUtil.copyProperties(ciRiskInfoVo, InsOrdersRisk.class);
+//            insOrdersRiskService.update(insuranceInfo,new LambdaUpdateWrapper<>(InsOrdersRisk.class).eq(InsOrdersRisk::getOrderNo,quoteNo));
+//            // 商业险 险种信息
+//            InsOrdersRisk biRiskInfoVo = BeanUtil.copyProperties(ordersEnd.getBiRiskInfoVo(), InsOrdersRisk.class);
+//            insOrdersRiskService.update(biRiskInfoVo,new LambdaUpdateWrapper<>(InsOrdersRisk.class).eq(InsOrdersRisk::getOrderNo,quoteNo));
 
             InsTaskImagesAdd imagesAdds = ordersEnd.getImagesAdds();
-            if (ObjectUtil.isNotEmpty(imagesAdds)){
+            if (ObjectUtil.isNotNull(imagesAdds)) {
                 List<InsTaskImages> insTaskImages = BeanUtil.copyToList(imagesAdds.getImages(), InsTaskImages.class);
-                insTaskImages.forEach(image->{
-                    image.setQuoteNo(String.valueOf(quoteNo));
-                    insTaskImagesService.save(image);
-                });
-            }
+                if (CollectionUtil.isNotEmpty(insTaskImages)) {
+                    insTaskImagesService.removeByQuoteNo(quoteNo);
+                    insTaskImages.forEach(image -> {
+                        image.setQuoteNo(String.valueOf(quoteNo));
+                        insTaskImagesService.save(image);
+                    });
 
-            InsOrdersExternalPolicy ordersExternalPolicy = ordersEnd.getInsOrdersExternalPolicy();
-            ordersExternalPolicy.setOrderNo(String.valueOf(quoteNo));
-            policyService.updateById(ordersExternalPolicy);
+                }
+            }
+//            InsOrdersExternalPolicy ordersExternalPolicy = ordersEnd.getInsOrdersExternalPolicy();
+//            ordersExternalPolicy.setOrderNo(String.valueOf(quoteNo));
+//            policyService.updateById(ordersExternalPolicy);
 
 
             // 返回成功信息,表示订单、车辆和用户信息修改成功
@@ -332,10 +340,32 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 }
             });
         }
+        if (CollectionUtil.isNotEmpty(insOrdersVo.getInsOrdersRiskList())){
+            insOrdersVo.getInsOrdersRiskList().forEach(riskInfo -> {
+                if (StringUtils.equals(riskInfo.getRiskCode(),"0507")){
+                    insOrdersVo.setCiRiskInfoVo(getRiskInfoVo(riskInfo));
+                }else {
+                    insOrdersVo.setBiRiskInfoVo(getRiskInfoVo(riskInfo));
+                }
+            });
+        }
         setInsOrdersExternalPolicy(insOrdersVo.getInsOrdersExternalPolicy());
         return insOrdersVo;
     }
 
+    private RiskInfoVo getRiskInfoVo(InsOrdersRisk riskInfo) {
+        RiskInfoVo riskInfoVo = new RiskInfoVo();
+        riskInfoVo.setId(riskInfo.getId());
+        riskInfoVo.setRiskCode(riskInfo.getRiskCode());
+        if (ObjectUtil.isNotNull(riskInfo.getStartDate())){
+            riskInfoVo.setStartDate(riskInfo.getStartDate().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
+        }
+        if (ObjectUtil.isNotNull(riskInfo.getEndDate())){
+            riskInfoVo.setEndDate(riskInfo.getEndDate().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
+        }
+        return riskInfoVo;
+    }
+
 
     public void setInsOrdersExternalPolicy(InsOrdersExternalPolicy ordersExternalPolicy) {
         if (ObjectUtil.isNotEmpty(ordersExternalPolicy) && CollectionUtil.isNotEmpty(ordersExternalPolicy.getUploadFiles())){

+ 5 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsTaskImagesServiceImpl.java

@@ -74,5 +74,10 @@ public class  InsTaskImagesServiceImpl extends ServiceImpl<InsTaskImagesMapper,
         return !baseMapper.insert(images).isEmpty();
     }
 
+    @Override
+    public void removeByQuoteNo(String quoteNo) {
+        baseMapper.removeByQuoteNo(quoteNo);
+    }
+
 
 }

+ 4 - 2
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml

@@ -125,7 +125,8 @@
 
     <!--订单 险种-->
     <resultMap id="InsOrdersRiskMap" type="com.jzg.commons.entity.orders.po.InsOrdersRisk">
-        <id property="orderNo" column="order_no" jdbcType="VARCHAR"/>
+        <id property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="orderNo" column="order_no" jdbcType="VARCHAR"/>
         <result property="riskName" column="risk_name" jdbcType="VARCHAR"/>
         <result property="amount" column="amount" jdbcType="VARCHAR"/>
         <result property="commissionRate" column="commission_rate" jdbcType="VARCHAR"/>
@@ -277,7 +278,7 @@
     </select>
 
     <select id="selectOrdersRisk" resultMap="InsOrdersRiskMap">
-        select order_no,risk_name,amount,commission_rate,premium,risk_code,no_tax_premium,commission_amount,start_date,end_date from  ins_orders_risk where order_no = #{orderNo}
+        select id,order_no,risk_name,amount,commission_rate,premium,risk_code,no_tax_premium,commission_amount,start_date,end_date from  ins_orders_risk where order_no = #{orderNo}
     </select>
 
     <select id="selectOrdersTax" resultMap="InsOrdersTaxMap">
@@ -309,6 +310,7 @@
                 LEFT JOIN ins_orders_car_info c ON c.order_no = o.quote_no
                 LEFT JOIN ins_orders_costs s ON o.quote_no = s.order_no
         <where>
+            o.is_delete = 0
             <if test="insOrdersParam.orderNo != null and insOrdersParam.orderNo != ''">
                 AND o.quote_no = #{insOrdersParam.orderNo}
             </if>

+ 6 - 0
tenant/organization/src/main/java/com/jzg/organization/controller/DeptController.java

@@ -1,5 +1,6 @@
 package com.jzg.organization.controller;
 
+import com.jzg.commons.aop.OperatorTrajectory;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.SysDeptParam;
@@ -7,6 +8,7 @@ import com.jzg.commons.entity.po.SysDept;
 import com.jzg.commons.entity.vo.DeptLeaderVo;
 import com.jzg.commons.entity.vo.SysDeptVo;
 import com.jzg.commons.util.StringUtils;
+import com.jzg.organization.mapper.SysDeptMapper;
 import com.jzg.organization.service.SysDeptService;
 import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,12 +24,14 @@ public class DeptController extends BaseController {
     @Autowired
     private SysDeptService sysDeptService;
 
+    @OperatorTrajectory(moduleName = "组织架构/机构管理/添加机构",mapperClass = SysDeptMapper.class,entityClass = SysDeptVo.class)
     @Operation(summary = "新增机构接口", description = "新增机构接口")
     @PostMapping(value = "/add")
     public HttpResult<Boolean> addDept(@RequestBody SysDeptVo sysDeptVo) {
         return sysDeptService.addDept(sysDeptVo) ? HttpResult.ok("添加机构成功") : HttpResult.error("添加机构失败");
     }
 
+    @OperatorTrajectory(moduleName = "组织架构/机构管理/机构修改",mapperClass = SysDeptMapper.class,entityClass = SysDeptVo.class,type = "U")
     @Operation(summary = "修改机构接口", description = "修改机构接口")
     @PostMapping(value = "/update")
     public HttpResult updateDept(@RequestBody SysDeptVo sysDeptVo) {
@@ -35,6 +39,7 @@ public class DeptController extends BaseController {
         return sysDeptService.updateDept(sysDeptVo) ? HttpResult.ok("修改成功") : HttpResult.error("修改失败");
     }
 
+    @OperatorTrajectory(moduleName = "组织架构/机构管理/机构删除",mapperClass = SysDeptMapper.class,entityClass = SysDeptVo.class,type = "U")
     @Operation(summary = "删除机构接口", description = "删除机构接口")
     @PostMapping(value = "/delete")
     public HttpResult deleteDept(@RequestBody SysDeptVo sysDeptVo) {
@@ -42,6 +47,7 @@ public class DeptController extends BaseController {
     }
 
 
+    @OperatorTrajectory(moduleName = "组织架构/机构管理/机构删除",mapperClass = SysDeptMapper.class,primary = "deptIds",entityClass = SysDeptVo.class,type = "U")
     @Operation(summary = "批量删除机构接口", description = "批量删除机构接口")
     @PostMapping(value = "/batchDeleteDept")
     public HttpResult batchDeleteDept(@RequestBody SysDeptVo sysDeptVo) {

+ 7 - 7
platform/src/main/java/com/jzg/controller/OperatorTrajectoryController.java → tenant/organization/src/main/java/com/jzg/organization/controller/OperatorTrajectoryController.java

@@ -1,32 +1,32 @@
-package com.jzg.controller;
+package com.jzg.organization.controller;
 
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.LogParam;
+import com.jzg.commons.entity.po.OperatorTrajectory;
 import com.jzg.commons.service.OperatorTrajectoryService;
 import com.jzg.commons.util.spring.SpringUtils;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 @Validated
-@Tag(name="日志")
+@Tag(name="系统日志")
 @RestController
 @RequestMapping("/operatorTrajectory")
 public class OperatorTrajectoryController {
 
-
     @Operation(summary = "日志列表")
     @PostMapping("list")
-    private HttpResult list(@RequestBody LogParam logParam){
+    private HttpResult<Page<OperatorTrajectory>> list(@RequestBody LogParam logParam){
         return HttpResult.ok(SpringUtils.getBean(OperatorTrajectoryService.class).list(logParam));
     }
 
-    @Schema(description = "查询详情")
+    @Operation(summary = "查询详情")
     @GetMapping("selectById")
-    public HttpResult selectById(@RequestParam String id){
+    public HttpResult<OperatorTrajectory> selectById(@RequestParam String id){
         return HttpResult.ok(SpringUtils.getBean(OperatorTrajectoryService.class).selectById(id));
     }
 

+ 7 - 6
tenant/organization/src/main/java/com/jzg/organization/controller/UserController.java

@@ -8,6 +8,7 @@ import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.SysUserInfoParam;
 import com.jzg.commons.entity.vo.*;
 import com.jzg.commons.request.RequestSingleParam;
+import com.jzg.organization.mapper.SysUserJzgInfoMapper;
 import com.jzg.organization.service.SysDeptService;
 import com.jzg.organization.service.SysUserService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -48,21 +49,21 @@ public class UserController extends BaseController {
         return sysUserService.getUserSelect(sysUserInfoListVo);
     }
 
-    @OperatorTrajectory(moduleName = "组织架构/成员管理/添加成员",serviceTag = "sysUserService",entity = "com.jzg.commons.entity.vo.SysUserVo")
+    @OperatorTrajectory(moduleName = "组织架构/成员管理/添加成员",mapperClass = SysUserJzgInfoMapper.class,entityClass = SysUserVo.class)
     @Operation(summary = "新增业务员接口", description = "新增业务员接口")
     @PostMapping(value = "/add")
     public HttpResult addUserInfo(@RequestBody SysUserVo sysUserVo) {
         return sysUserService.addUserInfo(sysUserVo);
     }
 
-    @OperatorTrajectory(moduleName = "组织架构/成员管理/删除成员",type = "D", serviceTag = "sysUserService",entity = "com.jzg.commons.entity.vo.SysUserVo",primary = "ids")
+    @OperatorTrajectory(moduleName = "组织架构/成员管理/删除成员",type = "D",mapperClass = SysUserJzgInfoMapper.class,entityClass = SysUserVo.class,primary = "ids")
     @Operation(summary = "删除业务员接口", description = "删除业务员接口")
     @PostMapping(value = "/delete")
     public HttpResult deleteUser(@RequestBody IsDeleteVo isDeleteVo) {
         return sysUserService.deleteUserInfo(isDeleteVo);
     }
 
-    @OperatorTrajectory(moduleName = "组织架构/成员管理/启用禁用成员",type = "U", serviceTag = "sysUserService",entity = "com.jzg.commons.entity.vo.IsEnableVo")
+    @OperatorTrajectory(moduleName = "组织架构/成员管理/启用禁用成员",type = "U",mapperClass = SysUserJzgInfoMapper.class,entityClass = SysUserVo.class)
     @Operation(summary = "启用禁用业务员接口", description = "启用禁用业务员接口")
     @PostMapping(value = "/isEnable")
     public HttpResult isEnableUser(@RequestBody IsEnableVo isEnableVo) {
@@ -75,7 +76,7 @@ public class UserController extends BaseController {
         return sysUserService.batchLeader(batchLeaderVo);
     }
 
-    @OperatorTrajectory(moduleName = "组织架构/成员管理/修改成员",type = "U",serviceTag = "sysUserService",entity = "com.jzg.commons.entity.vo.SysUserVo")
+    @OperatorTrajectory(moduleName = "组织架构/成员管理/修改成员",type = "U",mapperClass = SysUserJzgInfoMapper.class,entityClass = SysUserVo.class)
     @Operation(summary = "修改业务员接口", description = "修改业务员接口")
     @PostMapping(value = "/update")
     public HttpResult updateUser(@RequestBody SysUserVo sysUserVo) {
@@ -100,7 +101,7 @@ public class UserController extends BaseController {
         return HttpResult.ok(sysUserService.getTransferInfo(userId));
     }
 
-    @OperatorTrajectory(moduleName = "组织架构/成员管理/成员转移",type = "U",serviceTag = "sysUserService",entity = "com.jzg.commons.entity.vo.UserTransferVo")
+    @OperatorTrajectory(moduleName = "组织架构/成员管理/成员转移",type = "U",mapperClass = SysUserJzgInfoMapper.class,entityClass = SysUserVo.class)
     @Operation(summary = "成员资源转移接口", description = "成员资源转移接口")
     @PostMapping(value = "/transfer")
     public HttpResult transfer(@RequestBody UserTransferVo userTransferVo) {
@@ -113,7 +114,7 @@ public class UserController extends BaseController {
         return sysDeptService.checkChangeDept(userId) ? HttpResult.ok("允许变更机构") : HttpResult.error("不允许变更机构");
     }
 
-    @OperatorTrajectory(moduleName = "组织架构/成员管理/变更机构",type = "U",serviceTag = "sysUserService",entity = "com.jzg.commons.entity.vo.ChangeDeptVo",primary = "userId")
+    @OperatorTrajectory(moduleName = "组织架构/成员管理/变更机构",type = "U",mapperClass = SysUserJzgInfoMapper.class,entityClass = SysUserVo.class,primary = "userId")
     @Operation(summary = "变更机构",description = "变更机构")
     @PostMapping(value = "/changeDept")
     public HttpResult changeDept(@RequestBody ChangeDeptVo changeDeptVo){

+ 8 - 8
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java

@@ -330,14 +330,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResult<Boolean> deleteUserInfo(IsDeleteVo isDeleteVo) {
-        for (String id : isDeleteVo.getIds()) {
-            SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoService.getById(id);
-            sysDeptService.checkChangeDept(sysUserJzgInfo.getUserId());
-            if (sysUserJzgInfo == null) {
-                throw new SystemException("该用户不存在");
-            }
-            sysUserJzgInfoService.removeById(id);
-        }
+//        for (String id : isDeleteVo.getIds()) {
+//            SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoService.getById(id);
+//            sysDeptService.checkChangeDept(sysUserJzgInfo.getUserId());
+//            if (sysUserJzgInfo == null) {
+//                throw new SystemException("该用户不存在");
+//            }
+//            sysUserJzgInfoService.removeById(id);
+//        }
         return HttpResult.ok("删除成功");
     }