|
|
@@ -0,0 +1,137 @@
|
|
|
+package com.wx.blink.backend.handler;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.cloud.sa.flow.commom.domain.virentity.StInstanceEvent;
|
|
|
+import com.wx.blink.backend.domain.dataobject.BlinkCustomerDO;
|
|
|
+import com.wx.blink.backend.domain.dataobject.BlinkCustomerSeniorDO;
|
|
|
+import com.wx.blink.backend.domain.dto.MBlinkCustomerSeniorVO;
|
|
|
+import com.wx.blink.backend.domain.dto.lBlinkCustomerRegisterVO;
|
|
|
+import com.wx.blink.backend.objectmapper.BlinkCustomerMapper;
|
|
|
+import com.wx.blink.backend.objectmapper.BlinkCustomerSeniorMapper;
|
|
|
+import com.wx.blink.backend.service.IBlinkCustomerSeniorService;
|
|
|
+import com.wx.blink.backend.service.IBlinkCustomerService;
|
|
|
+import com.wx.blink.base.common.domain.ResponseDTO;
|
|
|
+import com.wx.blink.base.common.util.BlinkSpringUtil;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.context.ApplicationContext;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 服务商登记发起进行中事件-业务动作
|
|
|
+ */
|
|
|
+public class CustomerRegisterProcessSubmitEventHandler implements CustomizeProcessEventHandler {
|
|
|
+ private BlinkCustomerMapper customerMapper;
|
|
|
+ private IBlinkCustomerService customerService;
|
|
|
+ private BlinkCustomerSeniorMapper customerSeniorMapper;
|
|
|
+ private IBlinkCustomerSeniorService seniorService;
|
|
|
+
|
|
|
+ public CustomerRegisterProcessSubmitEventHandler() {
|
|
|
+ this.customerMapper = BlinkSpringUtil.getBean(BlinkCustomerMapper.class);
|
|
|
+ this.customerService = BlinkSpringUtil.getBean(IBlinkCustomerService.class);
|
|
|
+ this.customerSeniorMapper = BlinkSpringUtil.getBean(BlinkCustomerSeniorMapper.class);
|
|
|
+ this.seniorService = BlinkSpringUtil.getBean(IBlinkCustomerSeniorService.class);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 状态
|
|
|
+ * 0:保存未提交
|
|
|
+ * 1:驳回到发起人
|
|
|
+ * 2:运行中
|
|
|
+ * 3:流程异常
|
|
|
+ * 4:完成
|
|
|
+ * 5:取消
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseDTO<String> process(StInstanceEvent event) {
|
|
|
+ int state = event.getState();
|
|
|
+ //获取表单数据
|
|
|
+ lBlinkCustomerRegisterVO registerDo = JSONObject.parseObject(event.getMainFormData().toJSONString(), lBlinkCustomerRegisterVO.class);
|
|
|
+ //获取表单子表数据
|
|
|
+ String flowId ="";
|
|
|
+ if(registerDo.getFlowId()!=null)flowId=registerDo.getFlowId();
|
|
|
+ List<MBlinkCustomerSeniorVO> seniorVOs= seniorService.flowCustomerSeniorQueryByPid(flowId);
|
|
|
+ //生成明细DO
|
|
|
+ List<BlinkCustomerSeniorDO> seniorDOs = new ArrayList<>();
|
|
|
+ if (seniorVOs != null && !seniorVOs.isEmpty()) {
|
|
|
+ for (MBlinkCustomerSeniorVO seniorVO : seniorVOs) {
|
|
|
+ seniorDOs.add(customerSeniorMapper.customerSeniorVOtoDomain(seniorVO));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //生成DO
|
|
|
+ BlinkCustomerDO customerDO = customerMapper.customerCreateVOtoDomain(registerDo);
|
|
|
+ customerDO.setSourceFlowId(registerDo.getFlowId());
|
|
|
+ //处理省市区
|
|
|
+ Map<String, String> customerSsq = getProvinceCityDistrict(registerDo.getCustomerSsq());
|
|
|
+ customerDO.setProvince(customerSsq.get("Province"));
|
|
|
+ customerDO.setCity(customerSsq.get("City"));
|
|
|
+ customerDO.setDistrict(customerSsq.get("District"));
|
|
|
+ Map<String, String> workSsq = getProvinceCityDistrict(registerDo.getWorkSsq());
|
|
|
+ customerDO.setWorkProvince(workSsq.get("Province"));
|
|
|
+ customerDO.setWorkCity(workSsq.get("City"));
|
|
|
+ customerDO.setWorkDistrict(workSsq.get("District"));
|
|
|
+
|
|
|
+ //运行中状态调用时,为初步写入客户库
|
|
|
+ //客户状态:01-审核中,02-有效客户,03-无效客户
|
|
|
+ if (state == 2) {
|
|
|
+ //流程开始时,状态为审核中
|
|
|
+ customerDO.setAuditStatus("01");
|
|
|
+ }
|
|
|
+ if (state == 4) {
|
|
|
+ //流程结束时,状态为有效
|
|
|
+ customerDO.setAuditStatus("02");
|
|
|
+ }
|
|
|
+ if (state == 5) {
|
|
|
+ //取消时,状态为失效
|
|
|
+ customerDO.setAuditStatus("03");
|
|
|
+ }
|
|
|
+ if (registerDo.getIsProviderSend() != null && registerDo.getIsProviderSend() == 1) {
|
|
|
+ //数据来源为服务商列表发起的流程时,会同步获取到客户id
|
|
|
+ if (registerDo.getProviderSendCusid() == null) {
|
|
|
+ return ResponseDTO.userErrorParam("未获取到对应客户");
|
|
|
+ }
|
|
|
+ customerDO.setId(registerDo.getProviderSendCusid());
|
|
|
+ if (registerDo.getInitialScreeningResult() != null && registerDo.getInitialScreeningResult().equals("02")) {
|
|
|
+ //初筛结果为不通过时,客户状态为失效
|
|
|
+ customerDO.setAuditStatus("03");
|
|
|
+ }
|
|
|
+ //如果是从服务商列表发起的,只进行更新操作
|
|
|
+ customerDO.setUpdateTime(registerDo.getUpDate());
|
|
|
+ customerDO.setUpdateUserId(registerDo.getUpdateBy());
|
|
|
+ return customerService.supportsCustomerUpdate(customerDO, seniorDOs);
|
|
|
+ } else {
|
|
|
+ //用flow_id查询对应的客户
|
|
|
+ BlinkCustomerDO validateCustomer = customerService.queryByCustomerFlowId(registerDo.getFlowId());
|
|
|
+ //判断是否已经写入一次了
|
|
|
+ if (!Objects.nonNull(validateCustomer) || validateCustomer.getId() == null) {
|
|
|
+ //第一次写入保存数据
|
|
|
+ customerDO.setCreateTime(registerDo.getCreateTime());
|
|
|
+ customerDO.setCreateUserId(registerDo.getCreateBy());
|
|
|
+ return customerService.supportsCustomerCreate(customerDO, seniorDOs);
|
|
|
+ } else {
|
|
|
+ //写入过则更新
|
|
|
+ customerDO.setId(validateCustomer.getId());
|
|
|
+ customerDO.setUpdateTime(registerDo.getUpDate());
|
|
|
+ customerDO.setUpdateUserId(registerDo.getUpdateBy());
|
|
|
+ return customerService.supportsCustomerUpdate(customerDO, seniorDOs);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public Map<String, String> getProvinceCityDistrict(String ssq) {
|
|
|
+ Map<String, String> provinceCityDistrict = new HashMap<>();
|
|
|
+ provinceCityDistrict.put("Province", "");
|
|
|
+ provinceCityDistrict.put("City", "");
|
|
|
+ provinceCityDistrict.put("District", "");
|
|
|
+ if (ssq != null) {
|
|
|
+ String[] strs = ssq.replace("[", "").replace("]", "").split(",");
|
|
|
+ for (int i = 0; i < strs.length; i++) {
|
|
|
+ if (i == 0) provinceCityDistrict.put("Province", strs[i]);
|
|
|
+ if (i == 1) provinceCityDistrict.put("City", strs[i]);
|
|
|
+ if (i == 2) provinceCityDistrict.put("District", strs[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return provinceCityDistrict;
|
|
|
+ }
|
|
|
+}
|