785834757 1 год назад
Родитель
Сommit
ed4cb3ae04

+ 21 - 0
src/main/java/com/ydtech/modules/scheme/aop/RuleTrajectory.java

@@ -0,0 +1,21 @@
+package com.ydtech.modules.scheme.aop;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 规则轨迹注解
+ */
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface RuleTrajectory {
+
+    String type() default "规则轨迹";
+
+}
+
+
+

+ 197 - 0
src/main/java/com/ydtech/modules/scheme/aop/aspect/RuleTrajectoryAspect.java

@@ -0,0 +1,197 @@
+package com.ydtech.modules.scheme.aop.aspect;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ydtech.constants.enums.InsuranceRisk;
+import com.ydtech.constants.enums.dict.agreement.ProductsType;
+import com.ydtech.constants.sys.SystemConstant;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.SysUserRole;
+import com.ydtech.modules.admin.service.SysUserRoleService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.esm.model.EsmInsCompany;
+import com.ydtech.modules.esm.service.EsmInsCompanyService;
+import com.ydtech.modules.fee.service.CostsCalcService;
+import com.ydtech.modules.fee.service.FeeDisplayService;
+import com.ydtech.modules.fee.service.FeeRuleSchemeNewService;
+import com.ydtech.modules.ins.model.vo.KindInfoVo;
+import com.ydtech.modules.ins.model.vo.QuoteRespVo;
+import com.ydtech.modules.ins.model.vo.RiskInfoVo;
+import com.ydtech.modules.order.components.InsOrdersComponents;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsAreaCompanyAccidentalDriving;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.po.InsAreaCompanyError;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
+import com.ydtech.modules.order.entity.vo.SubOrderExportFeeVo;
+import com.ydtech.modules.order.service.InsAreaCompanyAccidentalDrivingService;
+import com.ydtech.modules.order.service.InsAreaCompanyErrorService;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.protocol.constants.TaxSourceStatusConstants;
+import com.ydtech.modules.protocol.dao.PtlTaxSourceNewMapper;
+import com.ydtech.modules.protocol.entity.dto.TaxSourceExcludeDto;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.entity.po.PtlTaxSourceNew;
+import com.ydtech.modules.protocol.service.ITaxSourceExcludeService;
+import com.ydtech.modules.protocol.service.PtlAgreementDeptService;
+import com.ydtech.modules.protocol.service.PtlAgreementService;
+import com.ydtech.modules.protocol.service.PtlTaxSourceNewService;
+import com.ydtech.modules.protocol.service.impl.TaxSourceServiceImpl;
+import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
+import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
+import com.ydtech.modules.scheme.aop.RuleTrajectory;
+import com.ydtech.modules.scheme.constants.ExecuteStatusConstant;
+import com.ydtech.modules.scheme.entity.po.PtlSchemeRulesAttr;
+import com.ydtech.modules.scheme.entity.po.PtlSchemeRulesTrajectory;
+import com.ydtech.modules.scheme.entity.vo.RuleResultVo;
+import com.ydtech.modules.scheme.entity.vo.RuleSaveVo;
+import com.ydtech.modules.scheme.service.PtlSchemeRulesAttrService;
+import com.ydtech.modules.scheme.service.PtlSchemeRulesService;
+import com.ydtech.modules.scheme.service.PtlSchemeRulesTrajectoryService;
+import com.ydtech.utils.StringUtils;
+import com.ydtech.utils.idgen.IdGenerate;
+import lombok.RequiredArgsConstructor;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.AfterThrowing;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.dom4j.rule.Rule;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.util.*;
+
+@Aspect
+@Component
+@RequiredArgsConstructor
+public class RuleTrajectoryAspect {
+
+    @Autowired
+    PtlSchemeRulesTrajectoryService ptlSchemeRulesTrajectoryService;
+
+    @Autowired
+    PtlSchemeRulesService ptlSchemeRulesService;
+
+    @Autowired
+    PtlSchemeRulesAttrService ptlSchemeRulesAttrService;
+
+    private ThreadLocal<MethodContext> methodContext = new ThreadLocal<>();
+
+    @AfterReturning(pointcut = "@annotation(com.ydtech.modules.scheme.aop.RuleTrajectory)",returning = "result")
+    public void doAfter(JoinPoint joinPoint,HttpResult result) {
+        MethodContext context = methodContext.get();
+        if (context != null) {
+            // 在这里验证结果
+            String methodName = context.getMethodName();
+            if(joinPoint.getSignature().getName().equals(methodName)){
+                if(Objects.isNull(context.getId())){
+                    throw new SystemException("线程上下文异常,请重试");
+                }
+                PtlSchemeRulesTrajectory byId = ptlSchemeRulesTrajectoryService.getById(context.getId());
+                if(result.getCode() == 200){
+                    if(byId.getOperatorType().equals("C")){
+                        JSONObject jsonObject = JSON.parseObject(result.getData().toString());
+                        byId.setRuleId(jsonObject.getString("ruleId"));
+                    }
+                    byId.setExecuteStatus(ExecuteStatusConstant.ES1.getCode());
+                }else{
+                    byId.setExecuteStatus(ExecuteStatusConstant.ES2.getCode());
+                    byId.setErrorMsg(result.getMsg());
+                }
+                ptlSchemeRulesTrajectoryService.updateById(byId);
+            }
+        }
+        // 清除上下文
+        methodContext.remove();
+    }
+
+    //拦截异常消息
+    @AfterThrowing(pointcut = "@annotation(com.ydtech.modules.scheme.aop.RuleTrajectory)", throwing = "ex")
+    public void doAfterThrowing(JoinPoint joinPoint, Throwable ex) {
+        MethodContext context = methodContext.get();
+        if (context != null) {
+            String methodName = context.getMethodName();
+            if(joinPoint.getSignature().getName().equals(methodName)){
+                PtlSchemeRulesTrajectory byId = ptlSchemeRulesTrajectoryService.getById(context.getId());
+                byId.setExecuteStatus(ExecuteStatusConstant.ES2.getCode());
+                byId.setErrorMsg(ex.getMessage());
+                ptlSchemeRulesTrajectoryService.updateById(byId);
+            }
+        }
+        // 清除上下文
+        methodContext.remove();
+    }
+
+    @Before("@annotation(ruleTrajectory)")
+    public void doBefore(JoinPoint point,  RuleTrajectory ruleTrajectory) {
+        RuleSaveVo ruleSaveVo = null;
+        String ruleId = null;
+        if(ruleTrajectory.type().equals("C") || ruleTrajectory.type().equals("U")) {
+            //强转参数
+            ruleSaveVo = (RuleSaveVo) point.getArgs()[0];
+        }else if(ruleTrajectory.type().equals("D")){
+            ruleId = point.getArgs()[0].toString();
+        }
+        PtlSchemeRulesTrajectory trajectory = new PtlSchemeRulesTrajectory(ruleSaveVo);
+        trajectory.setId(IdGenerate.nextId());
+        trajectory.setOperatorType(ruleTrajectory.type());
+        List<PtlSchemeRulesAttr> schemeRulesAttrs = null;
+        RuleResultVo rulesInfoById = null;
+        switch(ruleTrajectory.type()){
+            //创建
+            case "C":
+                ptlSchemeRulesTrajectoryService.save(trajectory);
+                break;
+            //更新
+            case "U":
+                schemeRulesAttrs = ptlSchemeRulesAttrService.getRulesAttrList();
+                rulesInfoById = ptlSchemeRulesAttrService.getRulesInfoById(ruleSaveVo.getRule().getId(), schemeRulesAttrs);
+                trajectory.setBeforeJson(JSON.toJSONString(rulesInfoById));
+                trajectory.setRuleId(rulesInfoById.getId());
+                ptlSchemeRulesTrajectoryService.save(trajectory);
+                break;
+            //删除
+            case "D":
+                schemeRulesAttrs = ptlSchemeRulesAttrService.getRulesAttrList();
+                rulesInfoById = ptlSchemeRulesAttrService.getRulesInfoById(ruleId, schemeRulesAttrs);
+                trajectory.setBeforeJson(JSON.toJSONString(rulesInfoById));
+                trajectory.setRuleId(rulesInfoById.getId());
+                ptlSchemeRulesTrajectoryService.save(trajectory);
+                break;
+
+        }
+        // 用于验证上下文
+        methodContext.set(new MethodContext(point.getSignature().getName(), trajectory.getId()));
+    }
+
+
+    private static class MethodContext {
+        private final String methodName;
+        private final String id;
+
+        public MethodContext(String methodName, String id) {
+            this.methodName = methodName;
+            this.id = id;
+        }
+
+        public String getMethodName() {
+            return methodName;
+        }
+
+        public String getId() {
+            return id;
+        }
+    }
+}

+ 21 - 0
src/main/java/com/ydtech/modules/scheme/constants/ExecuteStatusConstant.java

@@ -0,0 +1,21 @@
+package com.ydtech.modules.scheme.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+@AllArgsConstructor
+@Getter
+public enum ExecuteStatusConstant {
+
+    ES0(0, "提交"),
+    ES1(1, "成功"),
+    ES2(2, "失败");
+
+    private final Integer code;
+
+    private final String desc;
+
+
+
+}

+ 16 - 3
src/main/java/com/ydtech/modules/scheme/controller/PtlSchemeController.java

@@ -20,6 +20,7 @@ import com.ydtech.modules.order.service.InsDrivingIntentionInsuranceService;
 import com.ydtech.modules.order.service.InsDrivingIntentionInsuranceTypeService;
 import com.ydtech.modules.protocol.service.ITaxSourceService;
 import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesAttrService;
+import com.ydtech.modules.scheme.aop.RuleTrajectory;
 import com.ydtech.modules.scheme.entity.po.*;
 import com.ydtech.modules.scheme.entity.vo.*;
 import com.ydtech.modules.scheme.service.*;
@@ -107,6 +108,7 @@ public class PtlSchemeController extends BaseController {
         return HttpResult.ok(rulesInfoById);
     }
 
+    @RuleTrajectory(type="C")
     @ApiOperation(value = "添加规则")
     @PostMapping("/ruleAdd")
     public HttpResult ruleAdd(@RequestBody RuleSaveVo ruleSaveVo){
@@ -139,11 +141,21 @@ public class PtlSchemeController extends BaseController {
             newAttrs.add(PtlSchemeRulesAttrLink.carNature(ruleSaveVo.getRule().getCarnature()));
         }
         ruleSaveVo.setAttrs(newAttrs);
-        return ptlSchemeRulesService.addRules(ruleSaveVo) ?
-                HttpResult.ok("添加规则成功"):
-                HttpResult.error("添加规则成功");
+        int ruleId = ptlSchemeRulesService.addRules(ruleSaveVo);
+        HttpResult<JSONObject> httpResult;
+        JSONObject result = new JSONObject();
+        if(ruleId > 0) {
+            result.put("ruleId", ruleId);
+            result.put("msg", "添加规则成功");
+            httpResult = HttpResult.ok(result);
+        }else{
+            result.put("msg","添加规则失败");
+            httpResult = HttpResult.error(result);
+        }
+        return httpResult;
     }
 
+    @RuleTrajectory(type="U")
     @ApiOperation(value = "修改规则")
     @PostMapping("/ruleUpdate")
     public HttpResult ruleUpdate(@RequestBody RuleSaveVo ruleSaveVo){
@@ -191,6 +203,7 @@ public class PtlSchemeController extends BaseController {
                 HttpResult.error("修改规则失败");
     }
 
+    @RuleTrajectory(type="D")
     @ApiOperation(value = "删除规则")
     @PostMapping("/ruleDelete")
     public HttpResult ruleDelete(@RequestSingleParam("ruleId") String ruleId){

+ 35 - 0
src/main/java/com/ydtech/modules/scheme/controller/SchemeTrajectoryController.java

@@ -0,0 +1,35 @@
+package com.ydtech.modules.scheme.controller;
+
+
+import com.ydtech.aop.request.RequestSingleParam;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.scheme.aop.RuleTrajectory;
+import com.ydtech.modules.scheme.service.PtlSchemeRulesTrajectoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Objects;
+
+@Api(tags = "方案轨迹管理")
+@RequestMapping("/plt/scheme/trajectory")
+@RestController
+public class SchemeTrajectoryController {
+
+    @Autowired
+    PtlSchemeRulesTrajectoryService ptlSchemeRulesTrajectoryService;
+
+    @ApiOperation(value = "获取规则轨迹")
+    @PostMapping("/ruleTrajectory")
+    public HttpResult ruleTrajectory(@RequestSingleParam("ruleId") String ruleId){
+        if(Objects.isNull(ruleId) || ruleId.isEmpty()){
+            throw new SystemException("参数出错");
+        }
+        return HttpResult.ok(ptlSchemeRulesTrajectoryService.getRuleTrajectory(ruleId));
+    }
+
+}

+ 19 - 0
src/main/java/com/ydtech/modules/scheme/dao/PtlSchemeRulesTrajectoryMapper.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.scheme.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.scheme.entity.po.PtlOptionalScheme;
+import com.ydtech.modules.scheme.entity.po.PtlSchemeRulesTrajectory;
+
+
+/**
+ * @author tz
+ * @description 自选方案mapper
+ * @createDate 2024年8月13日14:52:04
+ */
+public interface PtlSchemeRulesTrajectoryMapper extends BaseMapper<PtlSchemeRulesTrajectory> {
+
+}
+
+
+
+

+ 81 - 0
src/main/java/com/ydtech/modules/scheme/entity/po/PtlSchemeRulesTrajectory.java

@@ -0,0 +1,81 @@
+package com.ydtech.modules.scheme.entity.po;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.scheme.constants.ExecuteStatusConstant;
+import com.ydtech.modules.scheme.entity.vo.RuleSaveVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 方案规则属性
+ */
+@TableName(value = "ptl_scheme_rules_trajectory", autoResultMap = true)
+@Data
+public class PtlSchemeRulesTrajectory {
+
+    @TableId(value = "id", type = com.baomidou.mybatisplus.annotation.IdType.AUTO)
+    private String id;
+
+    @ApiModelProperty(value = "规则id")
+    @TableField(value = "rule_id")
+    private String ruleId;
+
+    @ApiModelProperty(value = "修改之前的数据")
+    @TableField(value = "before_json")
+    private String beforeJson;
+
+    @ApiModelProperty(value = "修改之后的数据")
+    @TableField(value = "after_json")
+    private String afterJson;
+
+    @ApiModelProperty(value = "操作人id")
+    @TableField(value = "operator_user")
+    private String operatorUser;
+
+    @ApiModelProperty(value = "操作人名称")
+    @TableField(value = "operator_user_name")
+    private String operatorUserName;
+
+    @ApiModelProperty(value = "操作时间")
+    @TableField(value = "operator_time")
+    private String operatorTime;
+
+    @ApiModelProperty(value = "操作类型")
+    @TableField(value = "operator_type")
+    private String operatorType;
+
+    @ApiModelProperty(value = "操作类型名称")
+    @TableField(exist = false)
+    private String operatorTypeName;
+
+    @ApiModelProperty(value = "执行状态")
+    @TableField(value = "execute_status")
+    private Integer executeStatus;
+
+    @ApiModelProperty(value = "失败消息")
+    @TableField(value = "error_msg")
+    private String errorMsg;
+
+    public PtlSchemeRulesTrajectory(){
+        this.setOperatorUser(BaseController.getUserId());
+        this.setOperatorUserName(BaseController.getUserName());
+        this.setOperatorTime(LocalDateTime.now().toString());
+        this.setExecuteStatus(ExecuteStatusConstant.ES0.getCode());
+    }
+
+    public PtlSchemeRulesTrajectory(RuleSaveVo ruleTrajectory) {
+        this.setAfterJson(JSON.toJSONString(ruleTrajectory));
+        this.setOperatorUser(BaseController.getUserId());
+        this.setOperatorUserName(BaseController.getUserName());
+        this.setOperatorTime(LocalDateTime.now().toString());
+        this.setExecuteStatus(ExecuteStatusConstant.ES0.getCode());
+    }
+
+
+}

+ 1 - 1
src/main/java/com/ydtech/modules/scheme/service/PtlSchemeRulesService.java

@@ -24,7 +24,7 @@ public interface PtlSchemeRulesService extends IService<PtlSchemeRules> {
      * @param ruleSaveVo
      * @return
      */
-    boolean addRules(RuleSaveVo ruleSaveVo);
+    int addRules(RuleSaveVo ruleSaveVo);
 
     /**
      * 修改规则

+ 22 - 0
src/main/java/com/ydtech/modules/scheme/service/PtlSchemeRulesTrajectoryService.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.scheme.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.scheme.entity.po.PtlSchemeRulesTrajectory;
+
+import java.util.List;
+
+/**
+*@author: tz
+*@description: 规则轨迹 service
+*@create: 2024-8-13 14:53:39
+*/
+public interface PtlSchemeRulesTrajectoryService extends IService<PtlSchemeRulesTrajectory> {
+
+    /**
+     * 获取规则轨迹列表
+     * @param ruleId
+     * @return
+     */
+    List<PtlSchemeRulesTrajectory> getRuleTrajectory(String ruleId);
+
+}

+ 2 - 2
src/main/java/com/ydtech/modules/scheme/service/impl/PtlSchemeRulesServiceImpl.java

@@ -66,7 +66,7 @@ public class PtlSchemeRulesServiceImpl extends ServiceImpl<PtlSchemeRulesMapper,
      */
     @Override
     @Transactional
-    public boolean addRules(RuleSaveVo ruleSaveVo){
+    public int addRules(RuleSaveVo ruleSaveVo){
         //保存 方案
         PtlSchemeRules rule = ruleSaveVo.getRule();
         this.baseMapper.insert(rule);
@@ -76,7 +76,7 @@ public class PtlSchemeRulesServiceImpl extends ServiceImpl<PtlSchemeRulesMapper,
             attr.setRulesId(String.valueOf(rule.getId()));
         });
         ptlSchemeRulesAttrLinkService.saveBatch(attrs);
-        return true;
+        return Integer.parseInt(rule.getId());
     }
 
 

+ 53 - 0
src/main/java/com/ydtech/modules/scheme/service/impl/PtlSchemeRulesTrajectoryServiceImpl.java

@@ -0,0 +1,53 @@
+package com.ydtech.modules.scheme.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.ins.model.vo.KindInfoVo;
+import com.ydtech.modules.scheme.dao.PtlSchemeInsuranceMapper;
+import com.ydtech.modules.scheme.dao.PtlSchemeRulesTrajectoryMapper;
+import com.ydtech.modules.scheme.entity.po.PtlSchemeInsurance;
+import com.ydtech.modules.scheme.entity.po.PtlSchemeRulesTrajectory;
+import com.ydtech.modules.scheme.entity.vo.SchemeKindInfoVo;
+import com.ydtech.modules.scheme.entity.vo.SchemeSaveVo;
+import com.ydtech.modules.scheme.service.PtlSchemeInsuranceService;
+import com.ydtech.modules.scheme.service.PtlSchemeRulesTrajectoryService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @description 方案规则轨迹 service实现类
+ * @createDate 2024-10-16 17:28:20
+ * @Entity
+ */
+@Service
+public class PtlSchemeRulesTrajectoryServiceImpl extends ServiceImpl<PtlSchemeRulesTrajectoryMapper, PtlSchemeRulesTrajectory>
+        implements PtlSchemeRulesTrajectoryService {
+
+    /**
+     * 获取规则轨迹列表
+     * @param ruleId
+     * @return
+     */
+    @Override
+    public List<PtlSchemeRulesTrajectory> getRuleTrajectory(String ruleId) {
+        List<PtlSchemeRulesTrajectory> list = this.list(new LambdaQueryWrapper<PtlSchemeRulesTrajectory>()
+                .eq(PtlSchemeRulesTrajectory::getRuleId, ruleId)
+                .eq(PtlSchemeRulesTrajectory::getExecuteStatus, 1)
+                .orderByAsc(PtlSchemeRulesTrajectory::getOperatorTime));
+        //清空提交的数据
+        list.forEach(item->{
+            item.setBeforeJson(null);
+            item.setAfterJson(null);
+            if(item.getOperatorType().equals("C")){
+                item.setOperatorTypeName("创建");
+            }else if(item.getOperatorType().equals("U")){
+                item.setOperatorTypeName("修改");
+            }else if(item.getOperatorType().equals("D")){
+                item.setOperatorTypeName("删除");
+            }
+        });
+
+        return list;
+    }
+}