Quellcode durchsuchen

feat: 服务商增加状态机

WIN10模板\Admin vor 3 Monaten
Ursprung
Commit
f0e0cdd4de
19 geänderte Dateien mit 487 neuen und 20 gelöschten Zeilen
  1. 22 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/controller/BlickProviderController.java
  2. 6 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/dataobject/BlinkProviderDO.java
  3. 35 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/handler/ProviderRegisterProcessEventHandler.java
  4. 39 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/action/ProviderAuditAction.java
  5. 30 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/action/ProviderInterviewAction.java
  6. 28 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/action/ProviderReferralAction.java
  7. 13 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/condition/ProviderAuditCondition.java
  8. 13 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/condition/ProviderInterviewCondition.java
  9. 13 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/condition/ProviderReferralCondition.java
  10. 39 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/config/CommonStateMachineLoader.java
  11. 16 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/config/ProviderStateMachineConfig.java
  12. 13 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/context/ProviderContext.java
  13. 16 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/machineevent/ProviderEvent.java
  14. 20 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/status/ProviderState.java
  15. 109 20
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/manager/BlinkProviderServiceImpl.java
  16. 1 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/repository/BlinkProviderRepository.java
  17. 29 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/service/IBlinkProviderService.java
  18. 7 0
      bound-link-api/blink-backend/src/main/resources/mapper/BlinkProviderRepositoryMapper.xml
  19. 38 0
      bound-link-api/blink-backend/src/main/resources/statemachine-config.yaml

+ 22 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/controller/BlickProviderController.java

@@ -1,4 +1,26 @@
 package com.wx.blink.backend.controller;
 
+import com.alibaba.cola.statemachine.StateMachine;
+import com.wx.blink.backend.machinestate.context.ProviderContext;
+import com.wx.blink.backend.machinestate.machineevent.ProviderEvent;
+import com.wx.blink.backend.machinestate.status.ProviderState;
+import com.wx.blink.base.common.domain.ResponseDTO;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
 public class BlickProviderController {
+
+    @Resource
+    private StateMachine<ProviderState, ProviderEvent, ProviderContext> providerMachine;
+    @Operation(summary = "test")
+    @GetMapping("/ttt/test")
+    public ResponseDTO<String> TEST(){
+
+        providerMachine.fireEvent(ProviderState.INIT, ProviderEvent.AUDIT, new ProviderContext());
+        return ResponseDTO.ok("kkk");
+    }
 }

+ 6 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/dataobject/BlinkProviderDO.java

@@ -3,6 +3,7 @@ package com.wx.blink.backend.domain.dataobject;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.wx.blink.base.common.domain.BaseEntity;
 import lombok.Data;
 
@@ -88,6 +89,11 @@ public class BlinkProviderDO extends BaseEntity {
      * 是否有团队
      */
     private Integer hasTeam;
+
+    /**
+     * 团队人数
+     */
+    private Long teamSize;
     /**
      * 资源来源
      */

+ 35 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/handler/ProviderRegisterProcessEventHandler.java

@@ -1,15 +1,50 @@
 package com.wx.blink.backend.handler;
 
+import com.alibaba.cola.statemachine.StateMachine;
 import com.cloud.sa.flow.commom.domain.virentity.StInstanceEvent;
+import com.wx.blink.backend.constant.ProjectStatusEnum;
+import com.wx.blink.backend.machinestate.context.ProviderContext;
+import com.wx.blink.backend.machinestate.machineevent.ProviderEvent;
+import com.wx.blink.backend.machinestate.status.ProviderState;
+import com.wx.blink.backend.service.IBlinkProviderService;
 import com.wx.blink.base.common.domain.ResponseDTO;
+import com.wx.blink.base.common.util.BlinkSpringUtil;
+import org.apache.commons.lang3.StringUtils;
 
 /**
  * 服务商登记发起进行中事件-业务动作
  */
 public class ProviderRegisterProcessEventHandler implements CustomizeProcessEventHandler {
+    private IBlinkProviderService service;
+    private StateMachine<ProviderState, ProviderEvent, ProviderContext> mechine;
+
+    public ProviderRegisterProcessEventHandler() {
+        this.service = BlinkSpringUtil.getBean(IBlinkProviderService.class);
+        this.mechine = BlinkSpringUtil.getBean(StateMachine.class);
+    }
+
     @Override
     public ResponseDTO<String> process(StInstanceEvent event) {
+        // 判断是否注册的新供应商
+        String providerId = event.getMainFormData().getOrDefault("provider_id", "").toString();
+        if (!StringUtils.isNotBlank(providerId)) {
+            // 初始化
+            this.service.registerProvider(event);
+
+        }
+        ProviderContext context=new ProviderContext();
+        context.setData(event);
+        // 服务商状态为初始化
+        context.setEvent(ProviderEvent.AUDIT);
+        context.setFrom(ProviderState.INIT);
+        mechine.fireEvent(ProviderState.INIT,ProviderEvent.AUDIT,context);
+
+        // 服务商状态为审核通过
+        mechine.fireEvent(ProviderState.AUDITED,ProviderEvent.INTERVIEW,context);
+        // 服务商状态为面试通过
+        mechine.fireEvent(ProviderState.INTERVIEWED,ProviderEvent.INTERVIEW,context);
 
+        // 服务商状态为引荐通过
         return null;
     }
 }

+ 39 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/action/ProviderAuditAction.java

@@ -0,0 +1,39 @@
+package com.wx.blink.backend.machinestate.action;
+
+import com.alibaba.cola.statemachine.Action;
+import com.cloud.sa.flow.commom.domain.virentity.StInstanceEvent;
+import com.wx.blink.backend.machinestate.context.ProviderContext;
+import com.wx.blink.backend.machinestate.machineevent.ProviderEvent;
+import com.wx.blink.backend.machinestate.status.ProviderState;
+import com.wx.blink.backend.service.IBlinkProviderService;
+import com.wx.blink.base.common.domain.ResponseDTO;
+import com.wx.blink.base.common.util.BlinkSpringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+/**
+ * 审核业务动作
+ */
+@Component
+public class ProviderAuditAction implements Action<ProviderState, ProviderEvent, ProviderContext> {
+
+    private IBlinkProviderService service;
+    public ProviderAuditAction(){
+        this.service= BlinkSpringUtil.getBean(IBlinkProviderService.class);
+    }
+
+    @Override
+    public void execute(ProviderState from, ProviderState to, ProviderEvent event, ProviderContext context) {
+        if(context!=null){
+            if(context.getData()!=null){
+                try {
+                    ResponseDTO<String> result= service.updateAuditProvider(context.getData());
+                } catch (ParseException e) {
+
+                }
+
+            }
+        }
+    }
+}

+ 30 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/action/ProviderInterviewAction.java

@@ -0,0 +1,30 @@
+package com.wx.blink.backend.machinestate.action;
+
+import com.alibaba.cola.statemachine.Action;
+import com.wx.blink.backend.machinestate.context.ProviderContext;
+import com.wx.blink.backend.machinestate.machineevent.ProviderEvent;
+import com.wx.blink.backend.machinestate.status.ProviderState;
+import com.wx.blink.backend.service.IBlinkProviderService;
+import com.wx.blink.base.common.domain.ResponseDTO;
+import com.wx.blink.base.common.util.BlinkSpringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class ProviderInterviewAction implements Action<ProviderState, ProviderEvent, ProviderContext> {
+    private IBlinkProviderService service;
+    public ProviderInterviewAction(){
+        this.service= BlinkSpringUtil.getBean(IBlinkProviderService.class);
+    }
+
+    @Override
+    public void execute(ProviderState from, ProviderState to, ProviderEvent event, ProviderContext context) {
+        if(context!=null){
+            if(context.getData()!=null){
+                ResponseDTO<String> result= service.updateInterviewProvider(context.getData());
+
+            }
+        }
+    }
+}

+ 28 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/action/ProviderReferralAction.java

@@ -0,0 +1,28 @@
+package com.wx.blink.backend.machinestate.action;
+
+import com.alibaba.cola.statemachine.Action;
+import com.wx.blink.backend.machinestate.context.ProviderContext;
+import com.wx.blink.backend.machinestate.machineevent.ProviderEvent;
+import com.wx.blink.backend.machinestate.status.ProviderState;
+import com.wx.blink.backend.service.IBlinkProviderService;
+import com.wx.blink.base.common.domain.ResponseDTO;
+import com.wx.blink.base.common.util.BlinkSpringUtil;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ProviderReferralAction implements Action<ProviderState, ProviderEvent, ProviderContext> {
+
+    private IBlinkProviderService service;
+    public ProviderReferralAction(){
+        this.service= BlinkSpringUtil.getBean(IBlinkProviderService.class);
+    }
+    @Override
+    public void execute(ProviderState from, ProviderState to, ProviderEvent event, ProviderContext context) {
+        if(context!=null){
+            if(context.getData()!=null){
+                ResponseDTO<String> result= service.updateReferrlaProvider(context.getData());
+
+            }
+        }
+    }
+}

+ 13 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/condition/ProviderAuditCondition.java

@@ -0,0 +1,13 @@
+package com.wx.blink.backend.machinestate.condition;
+
+import com.alibaba.cola.statemachine.Condition;
+import com.wx.blink.backend.machinestate.context.ProviderContext;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ProviderAuditCondition implements Condition<ProviderContext> {
+    @Override
+    public boolean isSatisfied(ProviderContext context) {
+        return true;
+    }
+}

+ 13 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/condition/ProviderInterviewCondition.java

@@ -0,0 +1,13 @@
+package com.wx.blink.backend.machinestate.condition;
+
+import com.alibaba.cola.statemachine.Condition;
+import com.wx.blink.backend.machinestate.context.ProviderContext;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ProviderInterviewCondition implements Condition<ProviderContext> {
+    @Override
+    public boolean isSatisfied(ProviderContext context) {
+        return true;
+    }
+}

+ 13 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/condition/ProviderReferralCondition.java

@@ -0,0 +1,13 @@
+package com.wx.blink.backend.machinestate.condition;
+
+import com.alibaba.cola.statemachine.Condition;
+import com.wx.blink.backend.machinestate.context.ProviderContext;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ProviderReferralCondition implements Condition<ProviderContext> {
+    @Override
+    public boolean isSatisfied(ProviderContext context) {
+        return true;
+    }
+}

+ 39 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/config/CommonStateMachineLoader.java

@@ -0,0 +1,39 @@
+package com.wx.blink.backend.machinestate.config;
+
+import com.alibaba.cola.statemachine.Action;
+import com.alibaba.cola.statemachine.Condition;
+import com.alibaba.cola.statemachine.StateMachine;
+import com.alibaba.cola.statemachine.builder.On;
+import com.alibaba.cola.statemachine.builder.StateMachineBuilder;
+import com.alibaba.cola.statemachine.builder.StateMachineBuilderFactory;
+import com.wx.blink.base.common.util.BlinkSpringUtil;
+import org.springframework.stereotype.Component;
+import org.yaml.snakeyaml.Yaml;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Function;
+
+@Component
+public class CommonStateMachineLoader {
+    public <S, E, C> StateMachine<S, E, C> load(String name, String file, Function<String, S> stateConv, Function<String, E> eventConv) {
+        StateMachineBuilder<S, E, C> builder = StateMachineBuilderFactory.create();
+        Map<String, List<Map<String, String>>> map = new Yaml().loadAs(getClass().getResourceAsStream(file), Map.class);
+        List<Map<String, String>> list = Optional.ofNullable(map.get(name)).orElse(new ArrayList<>());
+        list.forEach(a -> {
+            On<S, E, C> trans = builder.externalTransition()
+                    .from(stateConv.apply(a.get("from")))
+                    .to(stateConv.apply(a.get("to")))
+                    .on(eventConv.apply(a.get("event")));
+            Optional.ofNullable(a.get("condition"))
+                    .map(bean -> (Condition<C>) BlinkSpringUtil.getBean(bean.substring(5), Condition.class))
+                    .ifPresent(trans::when);
+            Optional.ofNullable(a.get("action"))
+                    .map(bean -> (Action<S, E, C>) BlinkSpringUtil.getBean(bean.substring(5), Action.class))
+                    .ifPresent(trans::perform);
+        });
+        return builder.build(name + "Machine");
+    }
+}

+ 16 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/config/ProviderStateMachineConfig.java

@@ -0,0 +1,16 @@
+package com.wx.blink.backend.machinestate.config;
+
+import com.alibaba.cola.statemachine.StateMachine;
+import com.wx.blink.backend.machinestate.context.ProviderContext;
+import com.wx.blink.backend.machinestate.machineevent.ProviderEvent;
+import com.wx.blink.backend.machinestate.status.ProviderState;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class ProviderStateMachineConfig {
+    @Bean
+    public StateMachine<ProviderState, ProviderEvent, ProviderContext> providerStateMachine(CommonStateMachineLoader loader) {
+        return loader.load("provider","/statemachine-config.yaml", ProviderState::valueOf, ProviderEvent::valueOf);
+    }
+}

+ 13 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/context/ProviderContext.java

@@ -0,0 +1,13 @@
+package com.wx.blink.backend.machinestate.context;
+
+import com.cloud.sa.flow.commom.domain.virentity.StInstanceEvent;
+import com.wx.blink.backend.machinestate.machineevent.ProviderEvent;
+import com.wx.blink.backend.machinestate.status.ProviderState;
+import lombok.Data;
+
+@Data
+public class ProviderContext {
+    private ProviderEvent event;
+    private ProviderState from;
+    private StInstanceEvent data;
+}

+ 16 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/machineevent/ProviderEvent.java

@@ -0,0 +1,16 @@
+package com.wx.blink.backend.machinestate.machineevent;
+
+public enum ProviderEvent {
+
+    REGISTER("服务商注册", 0),
+    AUDIT("初步审核", 1),
+    INTERVIEW("面试", 2),
+    REFERRAL("引荐", 3);
+    private Integer state;
+    private String description;
+
+    ProviderEvent(String description, Integer state) {
+        this.description = description;
+        this.state = state;
+    }
+}

+ 20 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/machinestate/status/ProviderState.java

@@ -0,0 +1,20 @@
+package com.wx.blink.backend.machinestate.status;
+
+public enum ProviderState {
+    INIT("服务商注册完成",0),
+    AUDITED("初步审核完成",1),
+    UNAUDITED("初步审核不通过",2),
+    INTERVIEWED("面试通过",3),
+    UNINTERVIEWED("面试不通过",4),
+    REFERRALING("待引荐",5),
+    REFERRALED("引荐通过",6),
+    UNREFERRALED("引荐不通过",7);
+
+
+    private Integer state;
+    private String description;
+    ProviderState(String description, Integer state) {
+        this.description = description;
+        this.state = state;
+    }
+}

+ 109 - 20
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/manager/BlinkProviderServiceImpl.java

@@ -1,35 +1,19 @@
 package com.wx.blink.backend.manager;
 
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.date.DateTime;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.wx.blink.backend.domain.dataobject.BlinkProjectDO;
+import com.cloud.sa.flow.commom.domain.virentity.StInstanceEvent;
 import com.wx.blink.backend.domain.dataobject.BlinkProviderDO;
-import com.wx.blink.backend.domain.dto.BlinkProviderProjectDTO;
-import com.wx.blink.backend.domain.dto.BlinkProviderStorageDTO;
-import com.wx.blink.backend.domain.dto.BlinkStorageMarginDTO;
-import com.wx.blink.backend.domain.qry.BlinkProviderQry;
 import com.wx.blink.backend.objectmapper.BlinkProviderMapper;
 import com.wx.blink.backend.repository.BlinkProviderRepository;
 import com.wx.blink.backend.service.IBlinkProviderService;
-import com.wx.blink.base.common.domain.PageResult;
 import com.wx.blink.base.common.domain.ResponseDTO;
-import com.wx.blink.base.common.util.BlinkEnumUtil;
-import com.wx.blink.base.common.util.BlinkPageUtil;
-import com.wx.blink.base.module.support.serialnumber.constant.SerialNumberIdEnum;
 import com.wx.blink.base.module.support.serialnumber.service.SerialNumberService;
-import com.wx.blink.common.dto.BlinkProviderDTO;
-import com.wx.blink.common.vo.BlinkProjectCombineTeamVO;
-import com.wx.blink.common.vo.BlinkProjectVO;
-import com.wx.blink.common.vo.BlinkProviderCreateVO;
+import lombok.SneakyThrows;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 
 @Service
 public class BlinkProviderServiceImpl extends ServiceImpl<BlinkProviderRepository, BlinkProviderDO> implements IBlinkProviderService {
@@ -42,4 +26,109 @@ public class BlinkProviderServiceImpl extends ServiceImpl<BlinkProviderRepositor
     private BlinkProviderMapper mapper;
 
 
+    @Override
+    public ResponseDTO<String> registerProvider(StInstanceEvent event) {
+
+
+        BlinkProviderDO provider = new BlinkProviderDO();
+        String providerType = event.getMainFormData().getOrDefault("provider_type", "01").toString();
+        provider.setProviderType(providerType);
+        String providerName = event.getMainFormData().getOrDefault("provider_name", "").toString();
+        String contactPeople = event.getMainFormData().getOrDefault("contact_people", "").toString();
+        if (providerType.equals("01")) {
+            provider.setProviderName(contactPeople);
+        }
+        // 验重
+        Integer count = repository.countProviderByName(providerName);
+        if (count > 0) {
+            return ResponseDTO.userErrorParam(providerName + "已经存在,请检查!");
+        }
+        provider.setProviderName(providerName);
+        provider.setRegionType(event.getMainFormData().getOrDefault("region_type", "").toString());
+        provider.setCountryRegion(event.getMainFormData().getOrDefault("country_region", "").toString());
+        provider.setProvinceCityDistrict(event.getMainFormData().getOrDefault("province_city_district", "").toString());
+        provider.setAddress(event.getMainFormData().getOrDefault("address", "").toString());
+        provider.setSocialCode(event.getMainFormData().getOrDefault("social_code", "").toString());
+        provider.setLegalPerson(event.getMainFormData().getOrDefault("legal_person", "").toString());
+        provider.setTeamNumber(Long.valueOf(event.getMainFormData().getOrDefault("team_number", "0").toString()));
+        provider.setUrgentAudit(Integer.valueOf(event.getMainFormData().getOrDefault("urgent_audit", "0").toString()));
+        provider.setCompanyNature(event.getMainFormData().getOrDefault("company_nature", "").toString());
+        provider.setHandState(Integer.valueOf(event.getMainFormData().getOrDefault("hand_state", "0").toString()));
+        provider.setCompanyDescription(event.getMainFormData().getOrDefault("company_description", "").toString());
+        provider.setState(0);
+        this.baseMapper.insert(provider);
+        return ResponseDTO.ok();
+    }
+
+    @Override
+    public ResponseDTO<String> updateAuditProvider(StInstanceEvent data) throws ParseException {
+        BlinkProviderDO aDo = this.baseMapper.selectById(data.getMainFormData().getOrDefault("provider_id", "").toString());
+        // todo 历史业绩插入子表
+        // todo 在手项目插入子表
+        aDo.setResourceSource(data.getMainFormData().getOrDefault("resource_source", "").toString());
+        aDo.setHasTeam(Integer.valueOf(data.getMainFormData().getOrDefault("has_team", "0").toString()));
+        aDo.setTeamSize(Long.valueOf(data.getMainFormData().getOrDefault("team_size", "0").toString()));
+        String reviewComments = data.getMainFormData().getOrDefault("review_comments", "0").toString();
+        if (reviewComments.equals("0")) {
+            aDo.setState(2);
+        } else {
+            aDo.setState(1);
+        }
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+
+        aDo.setReviewerDate(formatter.parse(data.getMainFormData().getOrDefault("review_date", "").toString()));
+        aDo.setReviewer(data.getMainFormData().getOrDefault("reviewer", "").toString());
+        aDo.setExpectedInterviewDate(formatter.parse(data.getMainFormData().getOrDefault("expected_interview_date", "").toString()));
+        aDo.setExpectedInterviewLocation(data.getMainFormData().getOrDefault("expected_interview_location", "").toString());
+        aDo.setExpectedInterviewer(data.getMainFormData().getOrDefault("expected_interviewer", "").toString());
+        this.baseMapper.updateById(aDo);
+        return ResponseDTO.ok();
+    }
+
+    @SneakyThrows
+    @Override
+    public ResponseDTO<String> updateInterviewProvider(StInstanceEvent data) {
+        String providerId = data.getMainFormData().getOrDefault("provider_id", "").toString();
+        BlinkProviderDO aDo = this.baseMapper.selectById(providerId);
+        String evaluationOpinion = data.getMainFormData().getOrDefault("evaluation_opinion", "0").toString();
+        if (evaluationOpinion.equals("1"))
+            aDo.setState(4);
+        if (evaluationOpinion.equals("0"))
+            aDo.setState(3);
+        if (evaluationOpinion.equals("2"))
+            aDo.setState(5);
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        aDo.setEvaluationDate(formatter.parse(data.getMainFormData().getOrDefault("evaluation_date", "").toString()));
+        aDo.setProviderLevel(data.getMainFormData().getOrDefault("provider_level", "").toString());
+        aDo.setNeedsDepositAmount(Double.parseDouble(data.getMainFormData().getOrDefault("needs_to_deposit_security_deposit", "0").toString()));
+        aDo.setIsPaidDeposit(Integer.valueOf(data.getMainFormData().getOrDefault("has_security_deposit_been_paid", "0").toString()));
+        aDo.setDepositReipient(data.getMainFormData().getOrDefault("security_deposit_recipient", "").toString());
+        aDo.setDepositAccount(data.getMainFormData().getOrDefault("security_deposit_collection_account", "").toString());
+        if (evaluationOpinion.equals("2")) {
+            aDo.setExpectedReferralDate(formatter.parse(data.getMainFormData().getOrDefault("expected_referral_date", "").toString()));
+            aDo.setReferralCustomerName(data.getMainFormData().getOrDefault("referral_customer_name", "").toString());
+            aDo.setReferral(data.getMainFormData().getOrDefault("referral", "").toString());
+            aDo.setReferralPosition(data.getMainFormData().getOrDefault("referral_position", "").toString());
+        }
+        this.baseMapper.updateById(aDo);
+        return ResponseDTO.ok();
+    }
+
+    @SneakyThrows
+    @Override
+    public ResponseDTO<String> updateReferrlaProvider(StInstanceEvent data) {
+        String providerId = data.getMainFormData().getOrDefault("provider_id", "").toString();
+        BlinkProviderDO aDo = this.baseMapper.selectById(providerId);
+        String evaluationOpinion = data.getMainFormData().getOrDefault("recommendation_evaluation_opinion", "").toString();
+        if (evaluationOpinion.equals("0"))
+            aDo.setState(6);
+        if (evaluationOpinion.equals("1"))
+            aDo.setState(7);
+        aDo.setProviderLevel(data.getMainFormData().getOrDefault("provider_level", "").toString());
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        aDo.setReferralDate(formatter.parse(data.getMainFormData().getOrDefault("referral_date", "").toString()));
+        aDo.setBelongsToMarketingManager(data.getMainFormData().getOrDefault("belongs_to_marketing_manager", "").toString());
+        this.updateById(aDo);
+        return ResponseDTO.ok();
+    }
 }

+ 1 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/repository/BlinkProviderRepository.java

@@ -15,4 +15,5 @@ import java.util.List;
 @Component
 public interface BlinkProviderRepository extends BaseMapper<BlinkProviderDO> {
 
+    Integer countProviderByName(String providerName);
 }

+ 29 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/service/IBlinkProviderService.java

@@ -1,5 +1,6 @@
 package com.wx.blink.backend.service;
 
+import com.cloud.sa.flow.commom.domain.virentity.StInstanceEvent;
 import com.wx.blink.backend.domain.dto.BlinkProviderStorageDTO;
 import com.wx.blink.backend.domain.dto.BlinkStorageMarginDTO;
 import com.wx.blink.backend.domain.qry.BlinkProviderQry;
@@ -8,9 +9,37 @@ import com.wx.blink.base.common.domain.ResponseDTO;
 import com.wx.blink.common.dto.BlinkProviderDTO;
 import com.wx.blink.common.vo.BlinkProviderCreateVO;
 
+import java.text.ParseException;
 import java.util.List;
 
 public interface IBlinkProviderService {
 
 
+    /**
+     * 服务商注册业务动作
+     * @param event
+     * @return
+     */
+    ResponseDTO<String> registerProvider(StInstanceEvent event);
+
+    /**
+     * 服务商审核修改服务商信息
+     * @param data
+     * @return
+     */
+    ResponseDTO<String> updateAuditProvider(StInstanceEvent data) throws ParseException;
+
+    /**
+     * 修改面试服务商信息
+     * @param data
+     * @return
+     */
+    ResponseDTO<String> updateInterviewProvider(StInstanceEvent data);
+
+    /**
+     * 修改引荐服务商信息
+     * @param data
+     * @return
+     */
+    ResponseDTO<String> updateReferrlaProvider(StInstanceEvent data);
 }

+ 7 - 0
bound-link-api/blink-backend/src/main/resources/mapper/BlinkProviderRepositoryMapper.xml

@@ -68,4 +68,11 @@
             AND id = #{id}
         </if>
     </select>
+
+    <select id="countProviderByName" resultType="java.lang.Integer">
+        select count(1)
+        from blink_provider
+        where deleted_flag = 0
+          and provider_name = #{providerName}
+    </select>
 </mapper>

+ 38 - 0
bound-link-api/blink-backend/src/main/resources/statemachine-config.yaml

@@ -0,0 +1,38 @@
+#服务商状态机配置
+provider:
+#  初始化状态到审核通过状态
+  - from: INIT
+    event: AUDIT
+    to: AUDITED
+    condition: bean:providerAuditCondition
+    action: bean:providerAuditAction
+#    初始化状态到审核不通过状态
+  - from: INIT
+    to: UNAUDITED
+    event: AUDIT
+    condition: bean:providerAuditCondition
+    action: bean:providerAuditAction
+#    审核通过状态到面试通过状态
+  - from: AUDITED
+    to: INTERVIEWED
+    event: INTERVIEW
+    condition: bean:providerInterviewCondition
+    action: bean:providerInterviewAction
+#    审核通过状态到面试不通过状态
+  - from: AUDITED
+    to: UNINTERVIEWED
+    event: INTERVIEW
+    condition: bean:providerInterviewCondition
+    action: bean:providerInterviewAction
+#    面试通过状态到引荐通过状态
+  - from: INTERVIEWED
+    to: REFERRALED
+    event: REFERRAL
+    condition: bean:providerReferralCondition
+    action: bean:providerReferralAction
+#    面试通过状态到引荐不通过状态
+  - from: INTERVIEWED
+    to: UNREFERRALED
+    event: REFERRAL
+    condition: bean:providerReferralCondition
+    action: bean:providerReferralAction