Browse Source

fix: 项目管理功能优化

gufj 5 months ago
parent
commit
b0a7493d5f
45 changed files with 1418 additions and 213 deletions
  1. 1 1
      bound-link-api/blink-base/src/main/java/com/cloud/sa/base/module/support/datatracer/domain/form/DataTracerForm.java
  2. 6 6
      bound-link-api/blink-base/src/main/java/com/cloud/sa/base/module/support/datatracer/service/DataTracerService.java
  3. 0 14
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/constant/MarketStageEvents.java
  4. 0 74
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/constant/MarketStageStates.java
  5. 19 21
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/controller/BlinkCustomerController.java
  6. 50 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/controller/BlinkProjectController.java
  7. 0 2
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/controller/BlinkProviderController.java
  8. 10 6
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/controller/BlinkRiskRuleController.java
  9. 57 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/dataobject/BlinkBizFileDO.java
  10. 6 3
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/dataobject/BlinkCustomerDO.java
  11. 134 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/dataobject/BlinkProjectDO.java
  12. 62 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/dto/BlinkBizFileDTO.java
  13. 83 2
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/dto/BlinkCustomerDTO.java
  14. 152 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/dto/BlinkProjectDTO.java
  15. 33 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/qry/BlinkBizFileQry.java
  16. 18 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/qry/BlinkProjectQry.java
  17. 28 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/InMemoryStateMachinePersist.java
  18. 14 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/MachineMap.java
  19. 6 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/OrderEvents.java
  20. 39 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/OrderSingleEventConfig.java
  21. 64 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/OrderStateMachineBuilder.java
  22. 7 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/OrderStates.java
  23. 27 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/PersistConfig.java
  24. 82 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/StateMachineController.java
  25. 45 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine1/FormEventConfig.java
  26. 7 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine1/FormEvents.java
  27. 56 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine1/FormStateMachineBuilder.java
  28. 8 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine1/FormStates.java
  29. 32 3
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/manager/BlinkCustomerServiceImpl.java
  30. 110 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/manager/BlinkProjectServiceImpl.java
  31. 13 2
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/manager/BlinkRiskRuleServiceImpl.java
  32. 0 39
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/manager/MarketSingleEventListeners.java
  33. 0 34
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/manager/StateMachineConfig.java
  34. 21 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/objectmapper/BlinkCustomerMapper.java
  35. 26 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/objectmapper/BlinkProjectMapper.java
  36. 2 1
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/objectmapper/BlinkRiskRuleMapper.java
  37. 24 2
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/repository/BlinkCustomerRepository.java
  38. 42 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/repository/BlinkProjectRepository.java
  39. 3 2
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/repository/BlinkRiskRuleRepository.java
  40. 29 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/service/IBlinkCustomerService.java
  41. 51 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/service/IBlinkProjectService.java
  42. 7 0
      bound-link-api/blink-management/src/main/java/com/cloud/sa/management/service/IBlinkRiskRuleService.java
  43. 20 1
      bound-link-api/blink-management/src/main/resources/mapper/BlinkCustomerRepositoryMapper.xml
  44. 23 0
      bound-link-api/blink-management/src/main/resources/mapper/BlinkProjectRepositoryMapper.xml
  45. 1 0
      bound-link-api/blink-management/src/main/resources/mapper/BlinkRiskRuleRepositoryMapper.xml

+ 1 - 1
bound-link-api/blink-base/src/main/java/com/cloud/sa/base/module/support/datatracer/domain/form/DataTracerForm.java

@@ -23,7 +23,7 @@ public class DataTracerForm {
     /**
      * 业务id
      */
-    private Long dataId;
+    private String dataId;
 
     /**
      * 业务类型

+ 6 - 6
bound-link-api/blink-base/src/main/java/com/cloud/sa/base/module/support/datatracer/service/DataTracerService.java

@@ -78,7 +78,7 @@ public class DataTracerService {
      * @param dataId
      * @param type
      */
-    public void update(Long dataId, DataTracerTypeEnum type, Object oldObject, Object newObject) {
+    public void update(String dataId, DataTracerTypeEnum type, Object oldObject, Object newObject) {
         DataTracerForm form = DataTracerForm.builder()
                 .dataId(dataId)
                 .type(type)
@@ -94,7 +94,7 @@ public class DataTracerService {
      * @param dataId
      * @param type
      */
-    public void insert(Long dataId, DataTracerTypeEnum type) {
+    public void insert(String dataId, DataTracerTypeEnum type) {
         DataTracerForm form = DataTracerForm.builder().dataId(dataId).type(type).content(DataTracerConst.INSERT).build();
         this.addTrace(form);
     }
@@ -105,7 +105,7 @@ public class DataTracerService {
      * @param dataId
      * @param type
      */
-    public void delete(Long dataId, DataTracerTypeEnum type) {
+    public void delete(String dataId, DataTracerTypeEnum type) {
         DataTracerForm form = DataTracerForm.builder().dataId(dataId).type(type).content(DataTracerConst.DELETE).build();
         this.addTrace(form);
     }
@@ -116,7 +116,7 @@ public class DataTracerService {
      * @param dataId
      * @param type
      */
-    public void delete(Long dataId, DataTracerTypeEnum type, Object object) {
+    public void delete(String dataId, DataTracerTypeEnum type, Object object) {
         DataTracerForm form = DataTracerForm.builder().dataId(dataId).type(type).content(DataTracerConst.DELETE).build();
         this.addTrace(form);
     }
@@ -127,7 +127,7 @@ public class DataTracerService {
      * @param dataIdList
      * @param type
      */
-    public void batchDelete(List<Long> dataIdList, DataTracerTypeEnum type) {
+    public void batchDelete(List<String> dataIdList, DataTracerTypeEnum type) {
         if (CollectionUtils.isEmpty(dataIdList)) {
             return;
         }
@@ -148,7 +148,7 @@ public class DataTracerService {
      * @param type
      * @param content
      */
-    public void addTrace(Long dataId, DataTracerTypeEnum type, String content) {
+    public void addTrace(String dataId, DataTracerTypeEnum type, String content) {
         DataTracerForm form = DataTracerForm.builder().dataId(dataId).type(type).content(content).build();
         this.addTrace(form);
     }

+ 0 - 14
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/constant/MarketStageEvents.java

@@ -1,14 +0,0 @@
-package com.cloud.sa.management.constant;
-
-public enum MarketStageEvents {
-
-    /**
-     * 线索备案
-     */
-    CLUEEVENTS,
-
-    /**
-     * 商机
-     */
-    RISKEVENTS,;
-}

+ 0 - 74
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/constant/MarketStageStates.java

@@ -1,74 +0,0 @@
-package com.cloud.sa.management.constant;
-
-import org.apache.commons.lang3.StringUtils;
-
-import java.util.Arrays;
-import java.util.Optional;
-
-public enum MarketStageStates {
-
-    CASE("10", "线索"),
-    RISK("20", "商机"),
-    PUBLISH("30", "立项"),
-    BID_ASSESS("40", "投标评审"),
-    BID_MANAGE("50", "投标管理"),
-    BID_WIN_NEWS("60", "中标"),
-    CONTRACT_SIGN("70", "合同签订"),
-    BID_FAILURE("80", "未中标"),
-    ABANDON("90", "放弃跟踪"),
-    ENTER_FAILURE("100", "未入围");
-
-
-    /**
-     * 状态编码
-     */
-    private String status;
-
-    /**
-     * 状态描述
-     */
-    private String desc;
-
-    MarketStageStates(String status, String desc) {
-        this.status = status;
-        this.desc = desc;
-    }
-
-    /**
-     * status是否合法
-     *
-     * @param status
-     * @return
-     */
-    public static boolean isIn(String status) {
-        return Arrays.asList(MarketStageStates.values()).parallelStream().
-                anyMatch(value -> StringUtils.equals(value.status, status));
-    }
-
-    /**
-     * 判断status是否相等
-     *
-     * @param status
-     * @param statusEnum
-     * @return
-     */
-    public static boolean equals(String status, MarketStageStates statusEnum) {
-        return StringUtils.equalsIgnoreCase(status, statusEnum.status);
-
-    }
-
-    /**
-     * status-->statusEnum
-     *
-     * @param status
-     * @return
-     */
-    public static MarketStageStates getEnumByStatus(String status) {
-        Optional<MarketStageStates> statusEnumOptional = Arrays.asList(MarketStageStates.values()).parallelStream()
-                .filter(statusEnum -> StringUtils.equalsIgnoreCase(status, statusEnum.status)).findAny();
-        if (statusEnumOptional.isPresent()) {
-            return statusEnumOptional.get();
-        }
-        return null;
-    }
-}

+ 19 - 21
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/controller/BlinkCustomerController.java

@@ -2,14 +2,13 @@ package com.cloud.sa.management.controller;
 
 import com.cloud.sa.base.common.domain.PageResult;
 import com.cloud.sa.base.common.domain.ResponseDTO;
-import com.cloud.sa.management.constant.MarketStageEvents;
 import com.cloud.sa.management.domain.dto.BlinkCustomerDTO;
+import com.cloud.sa.management.domain.dto.BlinkBizFileDTO;
+import com.cloud.sa.management.domain.qry.BlinkBizFileQry;
 import com.cloud.sa.management.domain.qry.BlinkCustomerQry;
 import com.cloud.sa.management.service.IBlinkCustomerService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.statemachine.StateMachine;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -23,8 +22,6 @@ import javax.validation.Valid;
 @RestController
 @Tag(name = "客户管理")
 public class BlinkCustomerController {
-    @Autowired
-    private StateMachine orderSingleMachine;
 
     @Resource
     private IBlinkCustomerService customerService;
@@ -36,8 +33,8 @@ public class BlinkCustomerController {
     }
 
     @Operation(summary = "客户查询列表")
-    @GetMapping("/supports/customer/queryPage")
-    public ResponseDTO<PageResult<BlinkCustomerDTO>> supportsCustomerQueryPage(BlinkCustomerQry qry) {
+    @PostMapping("/supports/customer/queryPage")
+    public ResponseDTO<PageResult<BlinkCustomerDTO>> supportsCustomerQueryPage(@RequestBody BlinkCustomerQry qry) {
         return ResponseDTO.ok(customerService.supportsCustomerQueryPage(qry));
     }
 
@@ -47,21 +44,22 @@ public class BlinkCustomerController {
         return customerService.supportsCustomerUpdate(dto);
     }
 
+    @Operation(summary = "获取客户信息")
+    @GetMapping("/supports/customer/{id}")
+    public ResponseDTO<BlinkCustomerDTO> supportsCustomerSingleQuery(@PathVariable String id) {
+        return customerService.supportsCustomerSingleQuery(id);
+    }
 
-    @RequestMapping("/testSingleOrderState")
-    public void testSingleOrderState() throws Exception {
-
-        // 创建流程
-        orderSingleMachine.start();
-
-        // 触发PAY事件
-        orderSingleMachine.sendEvent(MarketStageEvents.CLUEEVENTS);
-
-        // 触发RECEIVE事件
-        orderSingleMachine.sendEvent(MarketStageEvents.RISKEVENTS);
-
-        // 获取最终状态
-        System.out.println("最终状态:" + orderSingleMachine.getState().getId());
+    //----------------------------------------------资料------------------------------------------------------------//
+    @Operation(summary = "添加资料")
+    @PostMapping("/supports/biz/file/create")
+    public ResponseDTO<String> bizFileCreate(@RequestBody @Valid BlinkBizFileDTO dto) {
+        return customerService.bizFileCreate(dto);
     }
 
+    @Operation(summary = "资料列表")
+    @PostMapping("/supports/biz/file/queryPage")
+    public ResponseDTO<PageResult<BlinkBizFileDTO>> customerFileQueryPage(@RequestBody BlinkBizFileQry qry) {
+        return customerService.bizFileQueryPage(qry);
+    }
 }

+ 50 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/controller/BlinkProjectController.java

@@ -0,0 +1,50 @@
+package com.cloud.sa.management.controller;
+
+import com.cloud.sa.base.common.domain.PageResult;
+import com.cloud.sa.base.common.domain.ResponseDTO;
+import com.cloud.sa.management.domain.dto.BlinkProjectDTO;
+import com.cloud.sa.management.domain.qry.BlinkProjectQry;
+import com.cloud.sa.management.service.IBlinkProjectService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+
+/**
+ * @author gufj
+ * @date 2025/05/21
+ */
+@RestController
+@Tag(name = "项目管理")
+public class BlinkProjectController {
+
+    @Resource
+    private IBlinkProjectService projectService;
+
+    @Operation(summary = "新增项目")
+    @PostMapping("/supports/project/create")
+    public ResponseDTO<String> supportsProjectCreate(@RequestBody @Valid BlinkProjectDTO dto) {
+        return projectService.supportsProjectCreate(dto);
+    }
+
+    @Operation(summary = "项目查询列表")
+    @PostMapping("/supports/project/queryPage")
+    public ResponseDTO<PageResult<BlinkProjectDTO>> supportsProjectQueryPage(@RequestBody BlinkProjectQry qry) {
+        return ResponseDTO.ok(projectService.supportsProjectQueryPage(qry));
+    }
+
+    @Operation(summary = "编辑更新项目")
+    @PostMapping("/supports/project/update")
+    public ResponseDTO<String> supportsProjectUpdate(@RequestBody @Valid BlinkProjectDTO dto) {
+        return projectService.supportsProjectUpdate(dto);
+    }
+
+    @Operation(summary = "获取项目信息")
+    @GetMapping("/supports/project/{id}")
+    public ResponseDTO<BlinkProjectDTO> supportsProjectSingleQuery(@PathVariable String id) {
+        return projectService.supportsProjectSingleQuery(id);
+    }
+}

+ 0 - 2
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/controller/BlinkProviderController.java

@@ -37,6 +37,4 @@ public class BlinkProviderController {
     public ResponseDTO<String> supportsUpdateProviderStatus(BlinkProviderQry qry) {
         return providerService.supportsUpdateProviderStatus(qry);
     }
-
-
 }

+ 10 - 6
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/controller/BlinkRiskRuleController.java

@@ -1,5 +1,6 @@
 package com.cloud.sa.management.controller;
 
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.cloud.sa.base.common.domain.PageResult;
 import com.cloud.sa.base.common.domain.ResponseDTO;
 import com.cloud.sa.management.domain.dto.BlinkRiskRuleCategoryTreeDTO;
@@ -8,10 +9,7 @@ import com.cloud.sa.management.domain.qry.BlinkRiskRuleQry;
 import com.cloud.sa.management.service.IBlinkRiskRuleService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
@@ -37,8 +35,14 @@ public class BlinkRiskRuleController {
     }
 
     @Operation(summary = "查询风险列表")
-    @GetMapping("/supports/risk/rule/queryPage")
-    public ResponseDTO<PageResult<BlinkRiskRuleDTO>> supportsRiskRuleQueryPage(BlinkRiskRuleQry qry) {
+    @PostMapping("/supports/risk/rule/queryPage")
+    public ResponseDTO<PageResult<BlinkRiskRuleDTO>> supportsRiskRuleQueryPage(@RequestBody BlinkRiskRuleQry qry) {
         return riskRuleService.supportsRiskRuleQueryPage(qry);
     }
+
+    @Operation(summary = "获取风险指标信息")
+    @GetMapping("/supports/risk/rule/{id}")
+    public ResponseDTO<BlinkRiskRuleDTO> supportsRiskRuleSingleQuery(@PathVariable Long id) {
+        return riskRuleService.supportsRiskRuleSingleQuery(id);
+    }
 }

+ 57 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/dataobject/BlinkBizFileDO.java

@@ -0,0 +1,57 @@
+package com.cloud.sa.management.domain.dataobject;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.cloud.sa.base.common.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 项目文件
+ *
+ * @Author gufj
+ * @Date 2025-03-18 11:37:46
+ * @Copyright Bound Link
+ */
+
+@Data
+@TableName("blink_biz_file")
+public class BlinkBizFileDO extends BaseEntity {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 业务id
+     */
+    private String bizId;
+
+    /**
+     * 业务模块
+     */
+    private String bizModule;
+
+    /**
+     * 文件类别
+     */
+    private String fileType;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 附件
+     */
+    private String attachment;
+
+    /**
+     * 删除状态
+     */
+    private Integer deletedFlag;
+
+}

+ 6 - 3
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/dataobject/BlinkCustomerDO.java

@@ -24,7 +24,7 @@ public class BlinkCustomerDO extends BaseEntity {
      * id
      */
     @TableId(type = IdType.ASSIGN_UUID)
-    private Long id;
+    private String id;
 
     /**
      * 客户编码1
@@ -53,6 +53,11 @@ public class BlinkCustomerDO extends BaseEntity {
      */
     private Integer customerStatus;
 
+    /**
+     * 客户来源
+     */
+    private String customerSource;
+
     /**
      * 国家或地区
      */
@@ -177,6 +182,4 @@ public class BlinkCustomerDO extends BaseEntity {
      * 附件集合
      */
     private String attachment;
-
-
 }

+ 134 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/dataobject/BlinkProjectDO.java

@@ -0,0 +1,134 @@
+package com.cloud.sa.management.domain.dataobject;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.cloud.sa.base.common.domain.BaseEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 项目 实体类
+ *
+ * @Author gufj
+ * @Date 2025-05-30 15:37:26
+ * @Copyright Bound Link
+ */
+
+@Data
+@TableName("blink_project")
+public class BlinkProjectDO extends BaseEntity {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.ASSIGN_UUID)
+    private String id;
+
+    /**
+     * 客户id
+     */
+    private String customerId;
+
+    /**
+     * 项目名称
+     */
+    private String projectName;
+
+    /**
+     * 项目编码
+     */
+    private String projectCode;
+
+    /**
+     * 项目类型
+     */
+    private String projectType;
+
+    /**
+     * 专业类型
+     */
+    private String majorType;
+
+    /**
+     * 国家或地区
+     */
+    private String countryRegion;
+
+    /**
+     * 省份
+     */
+    private String province;
+
+    /**
+     * 省份名称
+     */
+    private String provinceName;
+
+    /**
+     * 城市
+     */
+    private String city;
+
+    /**
+     * 城市名称
+     */
+    private String cityName;
+
+    /**
+     * 区或县
+     */
+    private String district;
+
+    /**
+     * 区或县名称
+     */
+    private String districtName;
+
+    /**
+     * 详细地址
+     */
+    private String address;
+
+    /**
+     * 合同金额
+     */
+    private BigDecimal contractAmount;
+
+    /**
+     * 招标方式
+     */
+    private String tendersType;
+
+    /**
+     * 预计开标日期
+     */
+    private Date bidOpenDate;
+
+    /**
+     * 预计开工日期
+     */
+    private Date planStartDate;
+
+    /**
+     * 预计完工日期
+     */
+    private Date planEndDate;
+
+    /**
+     * 预计工期
+     */
+    private Integer planDays;
+
+    /**
+     * 备注
+     */
+    private String projectRemark;
+
+    /**
+     * 附件
+     */
+    private String attachment;
+}

+ 62 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/dto/BlinkBizFileDTO.java

@@ -0,0 +1,62 @@
+package com.cloud.sa.management.domain.dto;
+
+import com.cloud.sa.base.common.annoation.DataAdaptorMapping;
+import com.cloud.sa.base.common.domain.BaseEntity;
+import com.cloud.sa.base.common.json.deserializer.DictValueVoDeserializer;
+import com.cloud.sa.base.common.json.deserializer.FileKeyVoDeserializer;
+import com.cloud.sa.base.common.json.serializer.FileKeyVoSerializer;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.Data;
+
+/**
+ * 项目管理主数据
+ *
+ * @Author gufj
+ * @Date 2025-03-18 11:37:46
+ * @Copyright Bound Link
+ */
+
+@Data
+public class BlinkBizFileDTO extends BaseEntity {
+
+    /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * 业务id
+     */
+    private String bizId;
+
+    /**
+     * 业务模块
+     */
+    private String bizModule;
+
+    /**
+     * 文件类型
+     */
+    @JsonDeserialize(using = DictValueVoDeserializer.class)
+    @DataAdaptorMapping(type = "dict", value = "BLINK_CUSTOMER_FILE_TYPE")
+    private String fileType;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 附件信息
+     */
+    @JsonDeserialize(using = FileKeyVoDeserializer.class)
+    @JsonSerialize(using = FileKeyVoSerializer.class)
+    private String attachment;
+
+    /**
+     * 删除状态
+     */
+    private Integer deletedFlag;
+
+}

+ 83 - 2
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/dto/BlinkCustomerDTO.java

@@ -9,7 +9,9 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -25,7 +27,7 @@ public class BlinkCustomerDTO extends BaseEntity {
     /**
      * id
      */
-    private Long id;
+    private String id;
 
     /**
      * 客户编码
@@ -54,6 +56,13 @@ public class BlinkCustomerDTO extends BaseEntity {
      */
     private Integer customerStatus;
 
+    /**
+     * 客户来源
+     */
+    @JsonDeserialize(using = DictValueVoDeserializer.class)
+    @DataAdaptorMapping(type = "dict", value = "BLINK_CUSTOMER_SOURCE")
+    private String customerSource;
+
     /**
      * 省市区
      */
@@ -103,7 +112,7 @@ public class BlinkCustomerDTO extends BaseEntity {
      * 客户类型
      */
     @JsonDeserialize(using = DictValueVoDeserializer.class)
-    @DataAdaptorMapping(type = "dict", value = "BLINK_CUSTOMER_TYPE")
+    @DataAdaptorMapping(type = "dict", value = "BLINK_PROVIDER_TYPE")
     private String customerType;
 
     /**
@@ -195,4 +204,76 @@ public class BlinkCustomerDTO extends BaseEntity {
     @JsonDeserialize(using = FileKeyVoDeserializer.class)
     @JsonSerialize(using = FileKeyVoSerializer.class)
     private String attachment;
+
+    /**
+     * 合作标识
+     */
+    private String cooperationMark;
+
+    /**
+     * 合作金额
+     */
+    private BigDecimal cooperationAmount;
+
+    /**
+     * 合同数量
+     */
+    private Long contractQuantity;
+
+    /**
+     * 累计产值
+     */
+    private BigDecimal totalOutputValue;
+
+    /**
+     * 开票金额
+     */
+    private BigDecimal invoiceAmount;
+
+    /**
+     * 未开票金额
+     */
+    private BigDecimal unlicensedAmount;
+
+    public String getCooperationMark() {
+        if (StringUtils.isEmpty(cooperationMark)) {
+            return "否";
+        }
+        return cooperationMark;
+    }
+
+    public BigDecimal getCooperationAmount() {
+        if (cooperationAmount == null) {
+            return BigDecimal.ZERO;
+        }
+        return cooperationAmount;
+    }
+
+    public Long getContractQuantity() {
+        if (contractQuantity == null) {
+            return 10L;
+        }
+        return contractQuantity;
+    }
+
+    public BigDecimal getTotalOutputValue() {
+        if (totalOutputValue == null) {
+            return BigDecimal.TEN;
+        }
+        return totalOutputValue;
+    }
+
+    public BigDecimal getInvoiceAmount() {
+        if (invoiceAmount == null) {
+            return BigDecimal.TEN;
+        }
+        return invoiceAmount;
+    }
+
+    public BigDecimal getUnlicensedAmount() {
+        if (unlicensedAmount == null) {
+            return BigDecimal.TEN;
+        }
+        return unlicensedAmount;
+    }
 }

+ 152 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/dto/BlinkProjectDTO.java

@@ -0,0 +1,152 @@
+package com.cloud.sa.management.domain.dto;
+
+import com.cloud.sa.base.common.annoation.DataAdaptorMapping;
+import com.cloud.sa.base.common.domain.BaseEntity;
+import com.cloud.sa.base.common.json.deserializer.DictValueVoDeserializer;
+import com.cloud.sa.base.common.json.deserializer.FileKeyVoDeserializer;
+import com.cloud.sa.base.common.json.serializer.FileKeyVoSerializer;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 项目 DTO
+ *
+ * @Author gufj
+ * @Date 2025-05-30 15:37:26
+ * @Copyright Bound Link
+ */
+
+@Data
+public class BlinkProjectDTO extends BaseEntity {
+
+    /**
+     * id
+     */
+    private String id;
+
+    /**
+     * 客户id
+     */
+    private String customerId;
+
+    /**
+     * 项目名称
+     */
+    private String projectName;
+
+    /**
+     * 项目编码
+     */
+    private String projectCode;
+
+    /**
+     * 项目类型
+     */
+    @JsonDeserialize(using = DictValueVoDeserializer.class)
+    @DataAdaptorMapping(type = "dict", value = "BLINK_PROJECT_TYPE")
+    private String projectType;
+
+    /**
+     * 专业类型
+     */
+    @JsonDeserialize(using = DictValueVoDeserializer.class)
+    @DataAdaptorMapping(type = "dict", value = "BLINK_PROJECT_MAJOR_TYPE")
+    private String majorType;
+
+    /**
+     * 省市区
+     */
+    private String provinceCityDistrict;
+
+    /**
+     * 国家或地区
+     */
+    private String countryRegion;
+
+    /**
+     * 省份
+     */
+    private String province;
+
+    /**
+     * 省份名称
+     */
+    private String provinceName;
+
+    /**
+     * 城市
+     */
+    private String city;
+
+    /**
+     * 城市名称
+     */
+    private String cityName;
+
+    /**
+     * 区或县
+     */
+    private String district;
+
+    /**
+     * 区或县名称
+     */
+    private String districtName;
+
+    /**
+     * 详细地址
+     */
+    private String address;
+
+    /**
+     * 合同金额
+     */
+    private BigDecimal contractAmount;
+
+    /**
+     * 招标方式
+     */
+    @JsonDeserialize(using = DictValueVoDeserializer.class)
+    @DataAdaptorMapping(type = "dict", value = "BLINK_PROJECT_TENDERS_TYPE")
+    private String tendersType;
+
+    /**
+     * 预计开标日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date bidOpenDate;
+
+    /**
+     * 预计开工日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date planStartDate;
+
+    /**
+     * 预计完工日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date planEndDate;
+
+    /**
+     * 预计工期
+     */
+    private Integer planDays;
+
+    /**
+     * 备注
+     */
+    private String projectRemark;
+
+    /**
+     * 附件
+     */
+    @JsonDeserialize(using = FileKeyVoDeserializer.class)
+    @JsonSerialize(using = FileKeyVoSerializer.class)
+    private String attachment;
+}

+ 33 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/qry/BlinkBizFileQry.java

@@ -0,0 +1,33 @@
+package com.cloud.sa.management.domain.qry;
+
+import com.cloud.sa.base.common.domain.PageParam;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 项目管理主数据 分页查询表单
+ *
+ * @Author gufj
+ * @Date 2025-03-18 11:37:46
+ * @Copyright Bound Link
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BlinkBizFileQry extends PageParam {
+
+    /**
+     * 文件类型
+     */
+    private String fileType;
+
+    /**
+     * 业务id
+     */
+    private String bizId;
+
+    /**
+     * 业务模块
+     */
+    private String bizModule;
+}

+ 18 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/domain/qry/BlinkProjectQry.java

@@ -0,0 +1,18 @@
+package com.cloud.sa.management.domain.qry;
+
+import com.cloud.sa.base.common.domain.PageParam;
+import lombok.Data;
+
+/**
+ * 客户主数据 执行查询
+ *
+ * @Author gufj
+ * @Date 2025-05-21
+ */
+
+@Data
+public class BlinkProjectQry extends PageParam {
+
+    private String projectName;
+
+}

+ 28 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/InMemoryStateMachinePersist.java

@@ -0,0 +1,28 @@
+package com.cloud.sa.management.machine;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.statemachine.StateMachineContext;
+import org.springframework.statemachine.StateMachinePersist;
+import org.springframework.stereotype.Component;
+
+/**
+ * 在内存中持久化状态机
+ */
+@Component
+public class InMemoryStateMachinePersist implements StateMachinePersist<OrderStates, OrderEvents, String> {
+
+    private Map<String, StateMachineContext<OrderStates, OrderEvents>> map = new HashMap<String, StateMachineContext<OrderStates,OrderEvents>>();
+
+    @Override
+    public void write(StateMachineContext<OrderStates, OrderEvents> context, String contextObj) throws Exception {
+        map.put(contextObj, context);
+    }
+
+    @Override
+    public StateMachineContext<OrderStates, OrderEvents> read(String contextObj) throws Exception {
+        return map.get(contextObj);
+    }
+
+}

+ 14 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/MachineMap.java

@@ -0,0 +1,14 @@
+package com.cloud.sa.management.machine;
+
+import com.cloud.sa.management.machine1.FormEvents;
+import com.cloud.sa.management.machine1.FormStates;
+import org.springframework.statemachine.StateMachine;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MachineMap {
+    public static Map<String, StateMachine<OrderStates, OrderEvents>> orderMap = new HashMap<String,StateMachine<OrderStates, OrderEvents>>();
+    public static Map<String,StateMachine<FormStates, FormEvents>> formMap = new HashMap<String,StateMachine<FormStates, FormEvents>>();
+
+}

+ 6 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/OrderEvents.java

@@ -0,0 +1,6 @@
+package com.cloud.sa.management.machine;
+
+public enum OrderEvents {
+    PAY, // 支付
+    RECEIVE // 收货
+}

+ 39 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/OrderSingleEventConfig.java

@@ -0,0 +1,39 @@
+package com.cloud.sa.management.machine;
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.messaging.Message;
+import org.springframework.statemachine.annotation.OnTransition;
+import org.springframework.statemachine.annotation.WithStateMachine;
+
+@WithStateMachine(id = "orderMachine")
+public class OrderSingleEventConfig {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 当前状态UNPAID
+     */
+    @OnTransition(target = "UNPAID")
+    public void create() {
+        logger.info("---订单创建,待支付---");
+    }
+
+    /**
+     * UNPAID->WAITING_FOR_RECEIVE 执行的动作
+     */
+    @OnTransition(source = "UNPAID", target = "WAITING_FOR_RECEIVE")
+    public void pay(Message<OrderEvents> message) {
+        System.out.println("传递的参数:" + message.getHeaders().get("order"));
+        logger.info("---用户完成支付,待收货---");
+    }
+
+    /**
+     * WAITING_FOR_RECEIVE->DONE 执行的动作
+     */
+    @OnTransition(source = "WAITING_FOR_RECEIVE", target = "DONE")
+    public void receive() {
+        logger.info("---用户已收货,订单完成---");
+    }
+
+}

+ 64 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/OrderStateMachineBuilder.java

@@ -0,0 +1,64 @@
+package com.cloud.sa.management.machine;
+
+import java.util.EnumSet;
+
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.statemachine.StateContext;
+import org.springframework.statemachine.StateMachine;
+import org.springframework.statemachine.action.Action;
+import org.springframework.statemachine.config.StateMachineBuilder;
+import org.springframework.stereotype.Component;
+
+@Component
+public class OrderStateMachineBuilder {
+
+    private final static String MACHINEID = "orderMachine";
+
+    /**
+     * 构建状态机
+     *
+     * @param beanFactory
+     * @return
+     * @throws Exception
+     */
+    public StateMachine<OrderStates, OrderEvents> build(BeanFactory beanFactory) throws Exception {
+        StateMachineBuilder.Builder<OrderStates, OrderEvents> builder = StateMachineBuilder.builder();
+
+        System.out.println("构建订单状态机");
+
+        builder.configureConfiguration()
+                .withConfiguration()
+                .machineId(MACHINEID)
+                .beanFactory(beanFactory);
+
+        builder.configureStates()
+                .withStates()
+                .initial(OrderStates.UNPAID)
+                .states(EnumSet.allOf(OrderStates.class));
+
+        builder.configureTransitions()
+                .withExternal()
+                .source(OrderStates.UNPAID).target(OrderStates.WAITING_FOR_RECEIVE)
+                .event(OrderEvents.PAY)
+                .and()
+                .withExternal()
+                .source(OrderStates.WAITING_FOR_RECEIVE).target(OrderStates.DONE)
+                .event(OrderEvents.RECEIVE);
+
+        return builder.build();
+    }
+
+    @Bean
+    public Action<OrderStates, OrderEvents> action() {
+        return new Action<OrderStates, OrderEvents>() {
+
+            @Override
+            public void execute(StateContext<OrderStates, OrderEvents> context) {
+                System.out.println(context.getStage());
+            }
+        };
+    }
+
+
+}

+ 7 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/OrderStates.java

@@ -0,0 +1,7 @@
+package com.cloud.sa.management.machine;
+
+public enum OrderStates {
+    UNPAID, // 待支付
+    WAITING_FOR_RECEIVE, // 待收货
+    DONE // 结束
+}

+ 27 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/PersistConfig.java

@@ -0,0 +1,27 @@
+package com.cloud.sa.management.machine;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.statemachine.StateMachinePersist;
+
+import org.springframework.statemachine.persist.DefaultStateMachinePersister;
+import org.springframework.statemachine.persist.StateMachinePersister;
+@Configuration
+public class PersistConfig {
+
+
+    @Autowired
+    private InMemoryStateMachinePersist inMemoryStateMachinePersist;
+
+    /**
+     * 注入StateMachinePersister对象
+     *
+     * @return
+     */
+    @Bean(name="orderMemoryPersister")
+    public StateMachinePersister<OrderStates, OrderEvents, String> getPersister() {
+        return new DefaultStateMachinePersister<>(inMemoryStateMachinePersist);
+    }
+
+}

+ 82 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine/StateMachineController.java

@@ -0,0 +1,82 @@
+package com.cloud.sa.management.machine;
+
+import com.cloud.sa.management.machine1.FormEvents;
+import com.cloud.sa.management.machine1.FormStateMachineBuilder;
+import com.cloud.sa.management.machine1.FormStates;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.messaging.Message;
+import org.springframework.messaging.support.MessageBuilder;
+import org.springframework.statemachine.StateMachine;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/statemachine")
+public class StateMachineController {
+
+    //    @Autowired
+//    private StateMachine orderSingleMachine;
+//
+//    @RequestMapping("/testSingleOrderState1")
+//    public void testSingleOrderState() throws Exception {
+//
+//        // 创建流程
+//        orderSingleMachine.start();
+//
+//        // 触发PAY事件
+//        orderSingleMachine.sendEvent(OrderEvents.PAY);
+//
+//        // 触发RECEIVE事件
+//        orderSingleMachine.sendEvent(OrderEvents.RECEIVE);
+//
+//        // 获取最终状态
+//        System.out.println("最终状态:" + orderSingleMachine.getState().getId());
+//    }
+    @Autowired
+    private OrderStateMachineBuilder orderStateMachineBuilder;
+
+    @Autowired
+    private FormStateMachineBuilder formStateMachineBuilder;
+    @Autowired
+    private BeanFactory beanFactory;
+
+    @RequestMapping("/testOrderState")
+    public void testOrderState(String orderId) throws Exception {
+
+        StateMachine<OrderStates, OrderEvents> stateMachine = orderStateMachineBuilder.build(beanFactory);
+
+        // 创建流程
+        stateMachine.start();
+        System.out.println("当前的状态:" + stateMachine.getState().getId());
+        // 触发PAY事件
+        Message<OrderEvents> message = MessageBuilder.withPayload(OrderEvents.PAY).setHeader("order", 1).build();
+        stateMachine.sendEvent(message);
+
+        // 触发RECEIVE事件
+        stateMachine.sendEvent(OrderEvents.RECEIVE);
+
+
+        // 获取最终状态
+        System.out.println("最终状态:" + stateMachine.getState().getId());
+    }
+
+    @RequestMapping("/testFormState")
+    public void testFormState() throws Exception {
+
+        StateMachine<FormStates, FormEvents> stateMachine = formStateMachineBuilder.build(beanFactory);
+        System.out.println(stateMachine.getId());
+
+        // 创建流程
+        stateMachine.start();
+
+        stateMachine.sendEvent(FormEvents.WRITE);
+
+        stateMachine.sendEvent(FormEvents.CONFIRM);
+
+        stateMachine.sendEvent(FormEvents.SUBMIT);
+
+        // 获取最终状态
+        System.out.println("最终状态:" + stateMachine.getState().getId());
+    }
+}

+ 45 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine1/FormEventConfig.java

@@ -0,0 +1,45 @@
+package com.cloud.sa.management.machine1;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.messaging.Message;
+import org.springframework.statemachine.annotation.OnTransition;
+import org.springframework.statemachine.annotation.WithStateMachine;
+
+@WithStateMachine(id="formMachine")
+public class FormEventConfig {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 当前状态BLANK_FORM
+     */
+    @OnTransition(target = "BLANK_FORM")
+    public void create() {
+        logger.info("---空白表单---");
+    }
+
+    /**
+     * BLANK_FORM->FULL_FORM 执行的动作
+     */
+    @OnTransition(source = "BLANK_FORM", target = "FULL_FORM")
+    public void write(Message<FormEvents> message) {
+        logger.info("---填写完表单---");
+    }
+
+    /**
+     * FULL_FORM->CONFIRM_FORM 执行的动作
+     */
+    @OnTransition(source = "FULL_FORM", target = "CONFIRM_FORM")
+    public void confirm(Message<FormEvents> message) {
+        logger.info("---校验表单---");
+    }
+
+    /**
+     * CONFIRM_FORM->SUCCESS_FORM 执行的动作
+     */
+    @OnTransition(source = "CONFIRM_FORM", target = "SUCCESS_FORM")
+    public void submit(Message<FormEvents> message) {
+        logger.info("---表单提交成功---");
+    }
+
+}

+ 7 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine1/FormEvents.java

@@ -0,0 +1,7 @@
+package com.cloud.sa.management.machine1;
+
+public enum FormEvents {
+    WRITE, // 填写
+    CONFIRM, // 校验
+    SUBMIT // 提交
+}

+ 56 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine1/FormStateMachineBuilder.java

@@ -0,0 +1,56 @@
+package com.cloud.sa.management.machine1;
+
+import java.util.EnumSet;
+
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.statemachine.StateMachine;
+import org.springframework.statemachine.config.StateMachineBuilder;
+import org.springframework.stereotype.Component;
+
+/**
+ * 订单状态机构建器
+ */
+@Component
+public class FormStateMachineBuilder {
+
+    private final static String MACHINEID = "formMachine";
+
+    /**
+     * 构建状态机
+     *
+     * @param beanFactory
+     * @return
+     * @throws Exception
+     */
+    public StateMachine<FormStates, FormEvents> build(BeanFactory beanFactory) throws Exception {
+        StateMachineBuilder.Builder<FormStates, FormEvents> builder = StateMachineBuilder.builder();
+
+        System.out.println("构建表单状态机");
+
+        builder.configureConfiguration()
+                .withConfiguration()
+                .machineId(MACHINEID)
+                .beanFactory(beanFactory);
+
+        builder.configureStates()
+                .withStates()
+                .initial(FormStates.BLANK_FORM)
+                .states(EnumSet.allOf(FormStates.class));
+
+        builder.configureTransitions()
+                .withExternal()
+                .source(FormStates.BLANK_FORM).target(FormStates.FULL_FORM)
+                .event(FormEvents.WRITE)
+                .and()
+                .withExternal()
+                .source(FormStates.FULL_FORM).target(FormStates.CONFIRM_FORM)
+                .event(FormEvents.CONFIRM)
+                .and()
+                .withExternal()
+                .source(FormStates.CONFIRM_FORM).target(FormStates.SUCCESS_FORM)
+                .event(FormEvents.SUBMIT);
+
+        return builder.build();
+    }
+
+}

+ 8 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/machine1/FormStates.java

@@ -0,0 +1,8 @@
+package com.cloud.sa.management.machine1;
+
+public enum FormStates {
+    BLANK_FORM, // 空白表单
+    FULL_FORM, // 填写完表单
+    CONFIRM_FORM, // 校验表单
+    SUCCESS_FORM// 成功表单
+}

+ 32 - 3
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/manager/BlinkCustomerServiceImpl.java

@@ -7,14 +7,16 @@ import com.cloud.sa.base.common.domain.ResponseDTO;
 import com.cloud.sa.base.common.util.BlinkEntityUtil;
 import com.cloud.sa.base.common.util.BlinkEnumUtil;
 import com.cloud.sa.base.common.util.BlinkPageUtil;
-import com.cloud.sa.base.module.support.datatracer.constant.DataTracerTypeEnum;
 import com.cloud.sa.base.module.support.datatracer.service.DataTracerService;
 import com.cloud.sa.base.module.support.dict.domain.vo.DictValueVO;
 import com.cloud.sa.base.module.support.dict.service.DictCacheService;
 import com.cloud.sa.base.module.support.serialnumber.constant.SerialNumberIdEnum;
 import com.cloud.sa.base.module.support.serialnumber.service.SerialNumberService;
 import com.cloud.sa.management.domain.dataobject.BlinkCustomerDO;
+import com.cloud.sa.management.domain.dataobject.BlinkBizFileDO;
 import com.cloud.sa.management.domain.dto.BlinkCustomerDTO;
+import com.cloud.sa.management.domain.dto.BlinkBizFileDTO;
+import com.cloud.sa.management.domain.qry.BlinkBizFileQry;
 import com.cloud.sa.management.domain.qry.BlinkCustomerQry;
 import com.cloud.sa.management.objectmapper.BlinkCustomerMapper;
 import com.cloud.sa.management.repository.BlinkCustomerRepository;
@@ -61,7 +63,7 @@ public class BlinkCustomerServiceImpl extends ServiceImpl<BlinkCustomerRepositor
         //执行保存
         this.save(customerDO);
         //执行变更记录
-        dataTracerService.insert(customerDO.getId(), DataTracerTypeEnum.CUSTOMER);
+        //dataTracerService.insert(customerDO.getId(), DataTracerTypeEnum.CUSTOMER);
         return ResponseDTO.ok();
     }
 
@@ -104,7 +106,34 @@ public class BlinkCustomerServiceImpl extends ServiceImpl<BlinkCustomerRepositor
         //执行保存
         this.updateById(customerDO);
         //执行变更记录
-        dataTracerService.insert(customerDO.getId(), DataTracerTypeEnum.CUSTOMER);
+        //dataTracerService.insert(customerDO.getId(), DataTracerTypeEnum.CUSTOMER);
         return ResponseDTO.ok();
     }
+
+    @Override
+    public ResponseDTO<BlinkCustomerDTO> supportsCustomerSingleQuery(String id) {
+        //定义返回
+        BlinkCustomerDTO customerDTO = new BlinkCustomerDTO();
+        BlinkCustomerDO customerDO = this.getById(id);
+        if (Objects.nonNull(customerDO)) {
+            customerMapper.customerDTOToCustomerDO(customerDO, customerDTO);
+        }
+        return ResponseDTO.ok(customerDTO);
+    }
+
+    @Override
+    public ResponseDTO<String> bizFileCreate(BlinkBizFileDTO dto) {
+        BlinkBizFileDO fileDO = customerMapper.bizFileDTOTobizFileDO(dto);
+        BlinkEntityUtil.setCreateInfo(fileDO);
+        baseMapper.bizFileCreate(fileDO);
+        return ResponseDTO.ok();
+    }
+
+    @Override
+    public ResponseDTO<PageResult<BlinkBizFileDTO>> bizFileQueryPage(BlinkBizFileQry qry) {
+        Page<?> page = BlinkPageUtil.convert2PageQuery(qry);
+        List<BlinkBizFileDTO> list = customerRepository.bizFileQueryPage(page, qry);
+        PageResult<BlinkBizFileDTO> pageResult = BlinkPageUtil.convert2PageResult(page, list);
+        return ResponseDTO.ok(pageResult);
+    }
 }

+ 110 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/manager/BlinkProjectServiceImpl.java

@@ -0,0 +1,110 @@
+
+package com.cloud.sa.management.manager;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cloud.sa.base.common.domain.PageResult;
+import com.cloud.sa.base.common.domain.ResponseDTO;
+import com.cloud.sa.base.common.util.BlinkEntityUtil;
+import com.cloud.sa.base.common.util.BlinkEnumUtil;
+import com.cloud.sa.base.common.util.BlinkPageUtil;
+import com.cloud.sa.base.module.support.datatracer.service.DataTracerService;
+import com.cloud.sa.base.module.support.dict.service.DictCacheService;
+import com.cloud.sa.base.module.support.serialnumber.constant.SerialNumberIdEnum;
+import com.cloud.sa.base.module.support.serialnumber.service.SerialNumberService;
+import com.cloud.sa.management.domain.dataobject.BlinkProjectDO;
+import com.cloud.sa.management.domain.dto.BlinkProjectDTO;
+import com.cloud.sa.management.domain.qry.BlinkProjectQry;
+import com.cloud.sa.management.objectmapper.BlinkProjectMapper;
+import com.cloud.sa.management.repository.BlinkProjectRepository;
+import com.cloud.sa.management.service.IBlinkProjectService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * @author gufj
+ * @date 2025/05/21
+ */
+@Service
+public class BlinkProjectServiceImpl extends ServiceImpl<BlinkProjectRepository, BlinkProjectDO> implements IBlinkProjectService {
+
+    @Resource
+    private SerialNumberService serialNumberService;
+    @Resource
+    private BlinkProjectMapper mapper;
+    @Resource
+    private BlinkProjectRepository repository;
+    @Resource
+    private DataTracerService dataTracerService;
+    @Resource
+    private DictCacheService dictCacheService;
+
+    @Override
+    public ResponseDTO<String> supportsProjectCreate(BlinkProjectDTO dto) {
+        // 验证项目名称是否重复
+        BlinkProjectDO validateProject = repository.queryByProjectName(dto.getProjectName(), null, Boolean.FALSE);
+        if (Objects.nonNull(validateProject)) {
+            return ResponseDTO.userErrorParam("项目名称重复!请检查");
+        }
+        //生成项目编码
+        SerialNumberIdEnum serialNumberIdEnum = BlinkEnumUtil.getEnumByValue(4, SerialNumberIdEnum.class);
+        dto.setProjectCode(serialNumberService.generate(serialNumberIdEnum));
+        //生成DO
+        BlinkProjectDO projectDO = mapper.toDO(dto);
+        //创建人赋值
+        BlinkEntityUtil.setCreateInfo(projectDO);
+        //执行保存
+        this.save(projectDO);
+        //执行变更记录
+        //dataTracerService.insert(customerDO.getId(), DataTracerTypeEnum.CUSTOMER);
+        return ResponseDTO.ok();
+    }
+
+    @Override
+    public PageResult<BlinkProjectDTO> supportsProjectQueryPage(BlinkProjectQry qry) {
+        Page<?> page = BlinkPageUtil.convert2PageQuery(qry);
+        List<BlinkProjectDTO> list = repository.supportsProjectQueryPage(page, qry);
+        for (BlinkProjectDTO blinkCustomerDTO : list) {
+            //拼接省市区
+            String province = Optional.ofNullable(blinkCustomerDTO.getProvinceName()).orElse("");
+            String city = Optional.ofNullable(blinkCustomerDTO.getCityName()).orElse("");
+            String district = Optional.ofNullable(blinkCustomerDTO.getDistrictName()).orElse("");
+            blinkCustomerDTO.setProvinceCityDistrict(province + city + district);
+        }
+        PageResult<BlinkProjectDTO> pageResult = BlinkPageUtil.convert2PageResult(page, list);
+        return pageResult;
+    }
+
+    @Override
+    public ResponseDTO<String> supportsProjectUpdate(BlinkProjectDTO dto) {
+        // 验证项目名称是否重复
+        BlinkProjectDO validateProject = repository.queryByProjectName(dto.getProjectName(), dto.getId(), Boolean.FALSE);
+        if (Objects.nonNull(validateProject)) {
+            return ResponseDTO.userErrorParam("项目名称重复!请检查");
+        }
+        //生成DO
+        BlinkProjectDO projectDO = mapper.toDO(dto);
+        //创建人赋值
+        BlinkEntityUtil.setUpdatedInfo(projectDO);
+        //执行保存
+        this.updateById(projectDO);
+        //执行变更记录
+        //dataTracerService.insert(customerDO.getId(), DataTracerTypeEnum.CUSTOMER);
+        return ResponseDTO.ok();
+    }
+
+    @Override
+    public ResponseDTO<BlinkProjectDTO> supportsProjectSingleQuery(String id) {
+        //定义返回
+        BlinkProjectDTO projectDTO = new BlinkProjectDTO();
+        BlinkProjectDO customerDO = this.getById(id);
+        if (Objects.nonNull(customerDO)) {
+            mapper.DTOToDO(customerDO, projectDTO);
+        }
+        return ResponseDTO.ok(projectDTO);
+    }
+}

+ 13 - 2
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/manager/BlinkRiskRuleServiceImpl.java

@@ -45,8 +45,8 @@ public class BlinkRiskRuleServiceImpl extends ServiceImpl<BlinkRiskRuleRepositor
      */
     @Override
     public ResponseDTO<String> supportsRiskRuleCreate(BlinkRiskRuleDTO dto) {
-        // 验证风险指标是否重复
-        BlinkRiskRuleDO validateRiskRule = repository.queryByRiskName(dto.getRiskMetrics(), null, Boolean.FALSE);
+        // 验证统一维度下风险指标是否重复
+        BlinkRiskRuleDO validateRiskRule = repository.queryByRiskName(dto.getRiskMetrics(), dto.getRiskDimension(), null, Boolean.FALSE);
         if (Objects.nonNull(validateRiskRule)) {
             return ResponseDTO.userErrorParam("风险指标名称重复!请检查");
         }
@@ -106,4 +106,15 @@ public class BlinkRiskRuleServiceImpl extends ServiceImpl<BlinkRiskRuleRepositor
         PageResult<BlinkRiskRuleDTO> pageResult = BlinkPageUtil.convert2PageResult(page, list);
         return ResponseDTO.ok(pageResult);
     }
+
+    @Override
+    public ResponseDTO<BlinkRiskRuleDTO> supportsRiskRuleSingleQuery(Long id) {
+        //定义返回
+        BlinkRiskRuleDTO riskRuleDTO = new BlinkRiskRuleDTO();
+        BlinkRiskRuleDO riskRuleDO = this.getById(id);
+        if (Objects.nonNull(riskRuleDO)) {
+            riskMapper.RiskRuleDOToRiskRuleDTO(riskRuleDO, riskRuleDTO);
+        }
+        return ResponseDTO.ok(riskRuleDTO);
+    }
 }

+ 0 - 39
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/manager/MarketSingleEventListeners.java

@@ -1,39 +0,0 @@
-package com.cloud.sa.management.manager;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.statemachine.annotation.OnTransition;
-import org.springframework.statemachine.annotation.WithStateMachine;
-
-/**
- * 监听器
- */
-@WithStateMachine
-public class MarketSingleEventListeners {
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-     * 当前状态CASE
-     */
-    @OnTransition(target = "CASE")
-    public void create() {
-        System.out.println("---订单创建,待支付---");
-    }
-
-    /**
-     * CASE->RISK 执行的动作
-     */
-    @OnTransition(source = "CASE", target = "RISK")
-    public void pay() {
-        System.out.println("---用户完成支付,待收货---");
-    }
-
-    /**
-     * RISK->PUBLISH 执行的动作
-     */
-    @OnTransition(source = "RISK", target = "PUBLISH")
-    public void receive() {
-        System.out.println("---用户已收货,订单完成---");
-    }
-
-}

+ 0 - 34
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/manager/StateMachineConfig.java

@@ -1,34 +0,0 @@
-package com.cloud.sa.management.manager;
-
-import com.cloud.sa.management.constant.MarketStageEvents;
-import com.cloud.sa.management.constant.MarketStageStates;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.statemachine.config.EnableStateMachine;
-import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter;
-import org.springframework.statemachine.config.builders.StateMachineStateConfigurer;
-import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer;
-
-import java.util.EnumSet;
-
-@Configuration
-@EnableStateMachine
-public class StateMachineConfig extends EnumStateMachineConfigurerAdapter<MarketStageStates, MarketStageEvents> {
-
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Override
-    public void configure(StateMachineStateConfigurer<MarketStageStates, MarketStageEvents> states) throws Exception {
-        logger.info("开始进入配置文件");
-        states.withStates().initial(MarketStageStates.CASE).states(EnumSet.allOf(MarketStageStates.class));
-    }
-
-    @Override
-    public void configure(StateMachineTransitionConfigurer<MarketStageStates, MarketStageEvents> transitions) throws Exception {
-        logger.info("第二次进入配置文件");
-        transitions.withExternal().source(MarketStageStates.CASE).target(MarketStageStates.RISK).event(MarketStageEvents.CLUEEVENTS).and()
-                .withExternal().source(MarketStageStates.RISK).target(MarketStageStates.PUBLISH).event(MarketStageEvents.RISKEVENTS);
-    }
-}
-

+ 21 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/objectmapper/BlinkCustomerMapper.java

@@ -2,8 +2,11 @@ package com.cloud.sa.management.objectmapper;
 
 import com.cloud.sa.base.common.util.BlinkStringUtil;
 import com.cloud.sa.management.domain.dataobject.BlinkCustomerDO;
+import com.cloud.sa.management.domain.dataobject.BlinkBizFileDO;
 import com.cloud.sa.management.domain.dto.BlinkCustomerDTO;
+import com.cloud.sa.management.domain.dto.BlinkBizFileDTO;
 import org.mapstruct.Mapper;
+import org.mapstruct.MappingTarget;
 
 /**
  * @author gufj
@@ -19,4 +22,22 @@ public interface BlinkCustomerMapper {
      * @return
      */
     BlinkCustomerDO toDO(BlinkCustomerDTO dto);
+
+
+    /**
+     * 客户信息转DTO
+     *
+     * @param customerDO
+     * @param customerDTO
+     */
+    void customerDTOToCustomerDO(BlinkCustomerDO customerDO, @MappingTarget BlinkCustomerDTO customerDTO);
+
+
+    /**
+     * 客户文件资料转DO
+     *
+     * @param dto
+     * @return
+     */
+    BlinkBizFileDO bizFileDTOTobizFileDO(BlinkBizFileDTO dto);
 }

+ 26 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/objectmapper/BlinkProjectMapper.java

@@ -0,0 +1,26 @@
+package com.cloud.sa.management.objectmapper;
+
+import com.cloud.sa.base.common.util.BlinkStringUtil;
+import com.cloud.sa.management.domain.dataobject.BlinkProjectDO;
+import com.cloud.sa.management.domain.dto.BlinkProjectDTO;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingTarget;
+
+/**
+ * @author gufj
+ * @date 2025/05/21
+ */
+@Mapper(componentModel = "spring", imports = {BlinkStringUtil.class})
+public interface BlinkProjectMapper {
+
+    /**
+     * 客户主数据dto转do
+     *
+     * @param dto
+     * @return
+     */
+    BlinkProjectDO toDO(BlinkProjectDTO dto);
+
+
+    void DTOToDO(@MappingTarget BlinkProjectDO customerDO, BlinkProjectDTO projectDTO);
+}

+ 2 - 1
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/objectmapper/BlinkRiskRuleMapper.java

@@ -8,6 +8,7 @@ import org.mapstruct.MappingTarget;
 @Mapper(componentModel = "spring")
 public interface BlinkRiskRuleMapper {
 
-
     void blinkRiskRuleFormCopyBlinkRiskRuleDO(BlinkRiskRuleDTO dto, @MappingTarget BlinkRiskRuleDO riskRuleDO);
+
+    void RiskRuleDOToRiskRuleDTO(BlinkRiskRuleDO riskRuleDO, @MappingTarget BlinkRiskRuleDTO dto);
 }

+ 24 - 2
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/repository/BlinkCustomerRepository.java

@@ -3,7 +3,10 @@ package com.cloud.sa.management.repository;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cloud.sa.management.domain.dataobject.BlinkCustomerDO;
+import com.cloud.sa.management.domain.dataobject.BlinkBizFileDO;
 import com.cloud.sa.management.domain.dto.BlinkCustomerDTO;
+import com.cloud.sa.management.domain.dto.BlinkBizFileDTO;
+import com.cloud.sa.management.domain.qry.BlinkBizFileQry;
 import com.cloud.sa.management.domain.qry.BlinkCustomerQry;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -26,7 +29,7 @@ public interface BlinkCustomerRepository extends BaseMapper<BlinkCustomerDO> {
      * @param qry
      * @return
      */
-    List<BlinkCustomerDTO> supportsCustomerQueryPage(Page<?> page, BlinkCustomerQry qry);
+    List<BlinkCustomerDTO> supportsCustomerQueryPage(Page<?> page, @Param("query") BlinkCustomerQry qry);
 
 
     /**
@@ -37,5 +40,24 @@ public interface BlinkCustomerRepository extends BaseMapper<BlinkCustomerDO> {
      * @param deletedFlag
      * @return
      */
-    BlinkCustomerDO queryByCustomerName(@Param("customerName") String customerName, @Param("excludeCustomerId") Long excludeCustomerId, @Param("deletedFlag") Boolean deletedFlag);
+    BlinkCustomerDO queryByCustomerName(@Param("customerName") String customerName, @Param("excludeCustomerId") String excludeCustomerId, @Param("deletedFlag") Boolean deletedFlag);
+
+
+    /**
+     * 客户资料上传
+     *
+     * @param fileDO
+     * @return
+     */
+    boolean bizFileCreate(BlinkBizFileDO fileDO);
+
+
+    /**
+     * 客户资料列表
+     *
+     * @param page
+     * @param qry
+     * @return
+     */
+    List<BlinkBizFileDTO> bizFileQueryPage(Page<?> page, @Param("query") BlinkBizFileQry qry);
 }

+ 42 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/repository/BlinkProjectRepository.java

@@ -0,0 +1,42 @@
+package com.cloud.sa.management.repository;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cloud.sa.management.domain.dataobject.BlinkProjectDO;
+import com.cloud.sa.management.domain.dto.BlinkProjectDTO;
+import com.cloud.sa.management.domain.qry.BlinkProjectQry;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author gufj
+ * @date 2025/05/21
+ */
+@Mapper
+@Component
+public interface BlinkProjectRepository extends BaseMapper<BlinkProjectDO> {
+
+
+    /**
+     * 验证项目名称是否重复
+     *
+     * @param projectName
+     * @param excludeProjectId
+     * @param deletedFlag
+     * @return
+     */
+    BlinkProjectDO queryByProjectName(@Param("projectName") String projectName, @Param("excludeProjectId") String excludeProjectId, @Param("deletedFlag") Boolean deletedFlag);
+
+
+    /**
+     * 项目查询列表
+     *
+     * @param page
+     * @param qry
+     * @return
+     */
+    List<BlinkProjectDTO> supportsProjectQueryPage(Page<?> page, @Param("query") BlinkProjectQry qry);
+}

+ 3 - 2
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/repository/BlinkRiskRuleRepository.java

@@ -19,11 +19,12 @@ public interface BlinkRiskRuleRepository extends BaseMapper<BlinkRiskRuleDO> {
      * 验证风险名称是否重复
      *
      * @param riskMetrics
-     * @param deletedFlag
+     * @param riskDimension
      * @param excludeCustomerId
+     * @param deletedFlag
      * @return
      */
-    BlinkRiskRuleDO queryByRiskName(@Param("riskMetrics") String riskMetrics, @Param("excludeCustomerId") Long excludeCustomerId, @Param("deletedFlag") Boolean deletedFlag);
+    BlinkRiskRuleDO queryByRiskName(@Param("riskMetrics") String riskMetrics, @Param("riskDimension")String riskDimension, @Param("excludeCustomerId") Long excludeCustomerId, @Param("deletedFlag") Boolean deletedFlag);
 
     /**
      * 风险规则查询列表

+ 29 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/service/IBlinkCustomerService.java

@@ -5,6 +5,8 @@ import com.cloud.sa.base.common.domain.PageResult;
 import com.cloud.sa.base.common.domain.ResponseDTO;
 import com.cloud.sa.management.domain.dataobject.BlinkCustomerDO;
 import com.cloud.sa.management.domain.dto.BlinkCustomerDTO;
+import com.cloud.sa.management.domain.dto.BlinkBizFileDTO;
+import com.cloud.sa.management.domain.qry.BlinkBizFileQry;
 import com.cloud.sa.management.domain.qry.BlinkCustomerQry;
 
 import javax.validation.Valid;
@@ -40,4 +42,31 @@ public interface IBlinkCustomerService extends IService<BlinkCustomerDO> {
      * @return
      */
     ResponseDTO<String> supportsCustomerUpdate(@Valid BlinkCustomerDTO dto);
+
+
+    /**
+     * 获取客户信息
+     *
+     * @param id
+     * @return
+     */
+    ResponseDTO<BlinkCustomerDTO> supportsCustomerSingleQuery(String id);
+
+
+    /**
+     * 添加资料
+     *
+     * @param dto
+     * @return
+     */
+    ResponseDTO<String> bizFileCreate(@Valid BlinkBizFileDTO dto);
+
+
+    /**
+     * 客户资料列表
+     *
+     * @param qry
+     * @return
+     */
+    ResponseDTO<PageResult<BlinkBizFileDTO>> bizFileQueryPage(BlinkBizFileQry qry);
 }

+ 51 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/service/IBlinkProjectService.java

@@ -0,0 +1,51 @@
+package com.cloud.sa.management.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cloud.sa.base.common.domain.PageResult;
+import com.cloud.sa.base.common.domain.ResponseDTO;
+import com.cloud.sa.management.domain.dataobject.BlinkProjectDO;
+import com.cloud.sa.management.domain.dto.BlinkProjectDTO;
+import com.cloud.sa.management.domain.qry.BlinkProjectQry;
+
+/**
+ * @author gufj
+ * @date 2025/05/21
+ */
+public interface IBlinkProjectService extends IService<BlinkProjectDO> {
+
+
+    /**
+     * 新增项目
+     *
+     * @param dto
+     * @return
+     */
+    ResponseDTO<String> supportsProjectCreate(BlinkProjectDTO dto);
+
+
+    /**
+     * 项目查询列表
+     *
+     * @param qry
+     * @return
+     */
+    PageResult<BlinkProjectDTO> supportsProjectQueryPage(BlinkProjectQry qry);
+
+
+    /**
+     * 编辑更新项目
+     *
+     * @param dto
+     * @return
+     */
+    ResponseDTO<String> supportsProjectUpdate(BlinkProjectDTO dto);
+
+
+    /**
+     * 获取项目信息
+     *
+     * @param id
+     * @return
+     */
+    ResponseDTO<BlinkProjectDTO> supportsProjectSingleQuery(String id);
+}

+ 7 - 0
bound-link-api/blink-management/src/main/java/com/cloud/sa/management/service/IBlinkRiskRuleService.java

@@ -34,4 +34,11 @@ public interface IBlinkRiskRuleService {
      */
     ResponseDTO<PageResult<BlinkRiskRuleDTO>> supportsRiskRuleQueryPage(BlinkRiskRuleQry qry);
 
+    /**
+     * 获取风险指标信息
+     *
+     * @param id
+     * @return
+     */
+    ResponseDTO<BlinkRiskRuleDTO> supportsRiskRuleSingleQuery(Long id);
 }

+ 20 - 1
bound-link-api/blink-management/src/main/resources/mapper/BlinkCustomerRepositoryMapper.xml

@@ -5,6 +5,9 @@
         select *
         from blink_customer
         where deleted_flag = '0'
+        <if test="query.customerName != null and query.customerName !=''">
+            AND customer_name like concat('%', #{query.customerName}, '%')
+        </if>
         order by create_time desc
     </select>
 
@@ -13,8 +16,24 @@
         FROM blink_customer
         WHERE customer_name = #{customerName}
         AND deleted_flag = #{deletedFlag}
-        <if test="excludeCustomerId != null">
+        <if test="excludeCustomerId != null and excludeCustomerId !=''">
             AND id != #{excludeCustomerId}
         </if>
     </select>
+
+    <insert id="bizFileCreate">
+        INSERT INTO blink_biz_file(biz_id,biz_module, file_type, remark, attachment, create_user_id, create_time)
+        VALUES (#{bizId},#{bizModule}, #{fileType}, #{remark}, #{attachment}, #{createUserId}, #{createTime,jdbcType=TIMESTAMP})
+    </insert>
+
+    <select id="bizFileQueryPage" resultType="com.cloud.sa.management.domain.dto.BlinkBizFileDTO">
+        select * from blink_biz_file
+        where deleted_flag = 0
+        <if test="query.bizId != null  and query.bizId != ''">
+            and biz_id = #{query.bizId}
+        </if>
+        <if test="query.bizModule != null  and query.bizModule != ''">
+            and biz_module = #{bizModule}
+        </if>
+    </select>
 </mapper>

+ 23 - 0
bound-link-api/blink-management/src/main/resources/mapper/BlinkProjectRepositoryMapper.xml

@@ -0,0 +1,23 @@
+<?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.cloud.sa.management.repository.BlinkProjectRepository">
+    <select id="queryByProjectName" resultType="com.cloud.sa.management.domain.dataobject.BlinkProjectDO">
+        SELECT *
+        FROM blink_project
+        WHERE project_name = #{projectName}
+        AND deleted_flag = #{deletedFlag}
+        <if test="excludeProjectId != null and excludeProjectId !=''">
+            AND id != #{excludeProjectId}
+        </if>
+    </select>
+
+    <select id="supportsProjectQueryPage" resultType="com.cloud.sa.management.domain.dto.BlinkProjectDTO">
+        select *
+        from blink_project
+        where deleted_flag = '0'
+        <if test="query.projectName != null and query.projectName !=''">
+            AND project_name like concat('%', #{query.projectName}, '%')
+        </if>
+        order by create_time desc
+    </select>
+</mapper>

+ 1 - 0
bound-link-api/blink-management/src/main/resources/mapper/BlinkRiskRuleRepositoryMapper.xml

@@ -5,6 +5,7 @@
         SELECT *
         FROM blink_risk_rule
         WHERE risk_metrics = #{riskMetrics}
+        AND risk_dimension = #{riskDimension}
         AND deleted_flag = #{deletedFlag}
         <if test="excludeCustomerId != null">
             AND id != #{excludeCustomerId}