瀏覽代碼

新增大中型评估部退单功能

wucl 4 月之前
父節點
當前提交
08cbdd4e61

+ 11 - 0
biz-base/src/main/java/com/dayou/controller/MajorController.java

@@ -167,5 +167,16 @@ public class MajorController extends BaseController {
         MajorVO xMajor =majorService.productionDetail(id,productionNo,production);
         return RestResponse.data(xMajor);
     }
+
+    /**
+     * 评估部经理修改客户反馈
+     * @param priceFeedbackDTO
+     * @return
+     */
+    @PostMapping("/feedback")
+    public RestResponse<Boolean> feedback(@RequestBody PriceFeedbackDTO priceFeedbackDTO){
+        Boolean ret = majorService.feedback(priceFeedbackDTO);
+        return RestResponse.data(ret);
+    }
 }
 

+ 12 - 0
biz-base/src/main/java/com/dayou/controller/WorkFlowLogController.java

@@ -45,5 +45,17 @@ public class WorkFlowLogController extends BaseController {
         return RestResponse.data(xWorkFlowLog);
      }
 
+    /**
+     * 查询退单记录
+     * @param businessId
+     * @param businessType
+     * @return
+     */
+     @GetMapping("/refuse")
+     public RestResponse<WorkFlowLog> getRefuse(Long businessId,String businessType){
+         WorkFlowLog log = workFlowLogService.getRefuse(businessId,businessType);
+         return RestResponse.data(log);
+     }
+
 }
 

+ 1 - 0
dao/src/main/java/com/dayou/mapper/WorkFlowLogMapper.java

@@ -21,4 +21,5 @@ public interface WorkFlowLogMapper extends CustomBaseMapper<WorkFlowLog> {
     List<WorkflowLogVO> getList(@Param("businessId") Long businessId, @Param("businessSubId") String businessSubId,
                                 @Param("businessMinId") String businessMinId,@Param("businessType") String businessType);
 
+    WorkFlowLog getRefuse(@Param("businessId") Long businessId, @Param("businessType") String businessType);
 }

+ 8 - 6
dao/src/main/resources/mapper/CommissionDeclareMapper.xml

@@ -237,11 +237,11 @@
         select
         (@i := @i + 1) AS id,bus.*,dd.name as commissionType from (SELECT
         IFNULL(cd.id,(SELECT id from commission_declare where deleted = 0 and business_id= major.businessId and production_id is null
-        AND business_type ='COMMISSION_DECLARE_MAJOR_EVALUATE') ) cId,
+        AND business_type ='COMMISSION_DECLARE_MAJOR_EVALUATE' and declare_user_id =#{evaluateUserId}) ) cId,
         IFNULL(cd.commission_rate_id,(SELECT commission_rate_id from commission_declare where deleted = 0 and business_id= major.businessId and production_id is null
-        AND business_type ='COMMISSION_DECLARE_MAJOR_EVALUATE') ) commission_rate_id,
+        AND business_type ='COMMISSION_DECLARE_MAJOR_EVALUATE' and declare_user_id =#{evaluateUserId} ) ) commission_rate_id,
         IFNULL(cd.declare_result,(SELECT declare_result from commission_declare where deleted = 0 and business_id= major.businessId and production_id is null
-        AND business_type ='COMMISSION_DECLARE_MAJOR_EVALUATE') ) declare_result,
+        AND business_type ='COMMISSION_DECLARE_MAJOR_EVALUATE' and declare_user_id =#{evaluateUserId}) ) declare_result,
         major.*
         FROM
         (
@@ -274,11 +274,13 @@
         LEFT JOIN customer_company cc2 ON cc2.id = m.clientele_sub_id
         WHERE
         m.deleted = 0
+        AND m.principal_id =#{evaluateUserId}
         ) major
-        LEFT JOIN ( SELECT id, ifnull( production_id, business_id ) AS xId, commission_rate_id,declare_result FROM commission_declare
+        INNER JOIN ( SELECT id, ifnull( production_id, business_id ) AS xId, commission_rate_id,declare_result FROM commission_declare
         WHERE deleted = 0
-        AND business_type='COMMISSION_DECLARE_MAJOR_EVALUATE'
-        ) cd ON major.mId = cd.xId) bus left join business_commission_rate bcr on
+
+        AND business_type = 'COMMISSION_DECLARE_MAJOR_EVALUATE'
+        AND declare_user_id = #{evaluateUserId}) cd ON major.mId = cd.xId) bus left join business_commission_rate bcr on
         bus.commission_rate_id = bcr.id left join dict_data dd on dd.id = bcr.business_cate_id
         LEFT JOIN (SELECT DISTINCT department.id, department.name, user_post.user_id FROM user_post,post,department WHERE user_post.post_id = post.id AND post.department_id = department.id AND department.`name` IN ('评估一部','评估二部','评估三部')) AS department ON department.user_id = principal_id
         <where>

+ 7 - 1
dao/src/main/resources/mapper/WorkFlowLogMapper.xml

@@ -29,7 +29,7 @@
     <select id="getList"  resultType="com.dayou.vo.WorkflowLogVO">
         SELECT
             wfl.id,
-            ( CASE wfl.state WHEN 'PASS' THEN '通过' WHEN 'REVERSE' THEN '退回' WHEN 'RESTART' THEN '重置' WHEN 'SKIP' THEN '跳过' WHEN 'TERMINATE' THEN '终止' END ) AS state,
+            ( CASE wfl.state WHEN 'PASS' THEN '通过' WHEN 'REVERSE' THEN '退回' WHEN 'RESTART' THEN '重置' WHEN 'SKIP' THEN '跳过' WHEN 'TERMINATE' THEN '终止' WHEN 'REFUSE' THEN '退单' END ) AS state,
             wn.NAME AS nodeName,
             wfl.handing_time,
             ifnull(wfl.comments,'-') as comments,
@@ -63,4 +63,10 @@
             wfl.created DESC
     </select>
 
+    <select id="getRefuse" resultType="com.dayou.entity.WorkFlowLog">
+        select u.name as handler,wfl.comments,wfl.created from work_flow_log wfl
+        left join user u on u.id = wfl.handler_id where wfl.business_id = #{businessId}
+        and wfl.business_type = #{businessType} AND wfl.state = 'REFUSE' order by wfl.created DESC LIMIT 1
+    </select>
+
 </mapper>

+ 2 - 1
dao/src/main/resources/mapper/WorkFlowNodeInstanceMapper.xml

@@ -62,7 +62,7 @@
             wfni.id as instanceId
         FROM
             ( SELECT id, CODE FROM work_flow WHERE CODE = #{mainBusiness} AND deleted = 0 AND state = 0 ) wf
-                LEFT JOIN ( SELECT id, privious_node_id, flow_id, NAME, CODE FROM work_node WHERE deleted = 0 ) wn ON wf.id = wn.flow_id
+                LEFT JOIN ( SELECT id, privious_node_id, flow_id, NAME, CODE FROM work_node WHERE deleted = 0 and code !='LEADER_ALLOCATION' ) wn ON wf.id = wn.flow_id
                 LEFT JOIN ( SELECT id, flow_id, node_id, state FROM work_flow_node_instance WHERE deleted = 0 AND business_id = #{businessId}
                     <if test="businessSubId!=null and businessSubId!='' and businessMinId!=null and businessMinId!=''">
                         AND (business_min_id = #{businessMinId} or business_min_id IS NULL)
@@ -81,6 +81,7 @@
                         AND business_min_id IS NULL
                     </if>
                       ) wfni ON ( wfni.flow_id = wf.id AND wfni.node_id = wn.id )
+
     </select>
 
     <resultMap id="currentInstanceNodeMap" type="com.dayou.vo.WorkNodeInstanceVO">

+ 5 - 0
domain/src/main/java/com/dayou/entity/WorkFlowLog.java

@@ -1,4 +1,5 @@
 package com.dayou.entity;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.dayou.common.BaseEntity;
 import lombok.Builder;
 import lombok.Data;
@@ -71,4 +72,8 @@ public class WorkFlowLog extends BaseEntity {
     private String comments;
 
 
+    @TableField(exist = false)
+    private String handler;
+
+
 }

+ 2 - 1
domain/src/main/java/com/dayou/enums/workflow/NodeLogEnum.java

@@ -15,7 +15,8 @@ public enum NodeLogEnum implements CodeMsgEnumInterface<String,String> {
     REVERSE("退回","REVERSE"),
     RESTART("重置","RESTART"),
     TERMINATE("终止","TERMINATE"),
-    SKIP("跳过","SKIP")
+    SKIP("跳过","SKIP"),
+    REFUSE("退单","REFUSE")
     ;
 
     private String name;

+ 3 - 1
domain/src/main/java/com/dayou/enums/workflow/WorkflowNodeEnum.java

@@ -79,7 +79,9 @@ public enum WorkflowNodeEnum implements CodeMsgEnumInterface<String,String>{
 
         GROUP_LEADER_CHECK("组长审批", "GROUP_LEADER_CHECK"),
 
-        COMMIT_ARCHIVING("提交归档","COMMIT_ARCHIVING");
+        COMMIT_ARCHIVING("提交归档","COMMIT_ARCHIVING"),
+
+        LEADER_ALLOCATION("分管领导分单","LEADER_ALLOCATION")
 
         ;
 

+ 10 - 1
service/src/main/java/com/dayou/dyoa/DyoaHistoryServiceImpl.java

@@ -2039,13 +2039,16 @@ public class DyoaHistoryServiceImpl implements IDyoaHistoryService{
 
     @Override
     public Boolean majorProductionTime() {
-        List<MajorProduction> mps = majorProductionService.list(new LambdaQueryWrapper<MajorProduction>().select(BaseEntity::getId, MajorProduction::getMajorId, MajorProduction::getProduction, MajorProduction::getRepertoryInTime)
+        List<MajorProduction> mps = majorProductionService.list(new LambdaQueryWrapper<MajorProduction>().select(BaseEntity::getId, MajorProduction::getMajorId, MajorProduction::getProduction, MajorProduction::getRepertoryInTime,MajorProduction::getRepertoryOutTime)
                 .isNull(MajorProduction::getProductionTime).eq(BaseEntity::getDeleted, Boolean.FALSE));
         for (MajorProduction mp : mps){
             if (mp.getProduction().equals(STATEMENT.name())){
                 Date majorProductionFinishedTime = workFlowNodeInstanceService.getMajorProductionFinishedTime(mp.getMajorId(), 62L);
                 if (majorProductionFinishedTime==null){
                     majorProductionFinishedTime = mp.getRepertoryInTime();
+                    if (majorProductionFinishedTime==null){
+                        majorProductionFinishedTime = mp.getRepertoryOutTime();
+                    }
                 }
                 majorProductionService.update(new LambdaUpdateWrapper<MajorProduction>().set(MajorProduction::getProductionTime,majorProductionFinishedTime).eq(BaseEntity::getId,mp.getId()));
             }
@@ -2053,6 +2056,9 @@ public class DyoaHistoryServiceImpl implements IDyoaHistoryService{
                 Date majorProductionFinishedTime = workFlowNodeInstanceService.getMajorProductionFinishedTime(mp.getMajorId(), 71L);
                 if (majorProductionFinishedTime==null){
                     majorProductionFinishedTime = mp.getRepertoryInTime();
+                    if (majorProductionFinishedTime==null){
+                        majorProductionFinishedTime = mp.getRepertoryOutTime();
+                    }
                 }
                 majorProductionService.update(new LambdaUpdateWrapper<MajorProduction>().set(MajorProduction::getProductionTime,majorProductionFinishedTime).eq(BaseEntity::getId,mp.getId()));
             }
@@ -2060,6 +2066,9 @@ public class DyoaHistoryServiceImpl implements IDyoaHistoryService{
                 Date majorProductionFinishedTime = workFlowNodeInstanceService.getMajorProductionFinishedTime(mp.getMajorId(), 78L);
                 if (majorProductionFinishedTime==null){
                     majorProductionFinishedTime = mp.getRepertoryInTime();
+                    if (majorProductionFinishedTime==null){
+                        majorProductionFinishedTime = mp.getRepertoryOutTime();
+                    }
                 }
                 majorProductionService.update(new LambdaUpdateWrapper<MajorProduction>().set(MajorProduction::getProductionTime,majorProductionFinishedTime).eq(BaseEntity::getId,mp.getId()));
             }

+ 2 - 0
service/src/main/java/com/dayou/service/IMajorService.java

@@ -50,4 +50,6 @@ public interface IMajorService extends IService<Major> {
     List<MajorSubClientDTO> findMajorSubClient();
 
     MajorVO productionDetail(Long id, String productionNo, String production);
+
+    Boolean feedback(PriceFeedbackDTO priceFeedbackDTO);
 }

+ 23 - 0
service/src/main/java/com/dayou/service/impl/MajorServiceImpl.java

@@ -225,6 +225,29 @@ public class MajorServiceImpl extends ServiceImpl<MajorMapper, Major> implements
         return majorMapper.productionDetail(id,productionNo,production);
     }
 
+    @Override
+    public Boolean feedback(PriceFeedbackDTO priceFeedbackDTO) {
+        if (priceFeedbackDTO.getPrinting()==null || CollectionUtil.isEmpty(priceFeedbackDTO.getProduction())){
+            ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"出具产品类型和打印份数不能为空。");
+        }
+
+        Major major = this.getOne(new LambdaQueryWrapper<Major>().eq(BaseEntity::getId, priceFeedbackDTO.getMajorId()).select(Major::getFeedbackInfo,BaseEntity::getId).eq(BaseEntity::getDeleted, Boolean.FALSE));
+        List<PriceFeedbackDTO> feedbackDTOS = JSON.parseArray(major.getFeedbackInfo(), PriceFeedbackDTO.class);
+        if (feedbackDTOS!=null){
+            PriceFeedbackDTO feedbackDTO = null;
+            if (StrUtil.isEmpty(priceFeedbackDTO.getReportNo())){
+                feedbackDTO = feedbackDTOS.stream().filter(x -> priceFeedbackDTO.getMajorId().equals(x.getMajorId())).findFirst().orElse(null);
+            }else{
+                feedbackDTO = feedbackDTOS.stream().filter(x -> priceFeedbackDTO.getReportNo().equals(x.getReportNo())).findFirst().orElse(null);
+            }
+            feedbackDTO.setPrintingRemark(priceFeedbackDTO.getPrintingRemark());
+            feedbackDTO.setPrinting(priceFeedbackDTO.getPrinting());
+            String feedbackStr = JSON.toJSONString(feedbackDTOS);
+            return this.update(new LambdaUpdateWrapper<Major>().set(Major::getFeedbackInfo,feedbackStr).eq(BaseEntity::getId,priceFeedbackDTO.getMajorId()));
+        }
+        return Boolean.FALSE;
+    }
+
 //    /**
 //     * 大中型业务下单
 //     * @param businessId

+ 1 - 0
service/src/main/java/com/dayou/service/workflow/IWorkFlowLogService.java

@@ -28,4 +28,5 @@ public interface IWorkFlowLogService extends IService<WorkFlowLog> {
 
     List<WorkflowLogVO> getList(WorkFlowLog workFlowLog);
 
+    WorkFlowLog getRefuse(Long businessId, String businessType);
 }

+ 2 - 0
service/src/main/java/com/dayou/service/workflow/IWorkNodeService.java

@@ -97,4 +97,6 @@ public interface IWorkNodeService extends IService<WorkNode> {
 
     //修改产品退回到撰写节点
     WorkNodeDTO changeProductionRetNextNode(String nodeCode, List<ProductionEnum> production,Long businessId);
+
+    WorkNodeDTO doCreatedDepartmentAllocationNode();
 }

+ 5 - 0
service/src/main/java/com/dayou/service/workflow/WorkFlowLogServiceImpl.java

@@ -53,5 +53,10 @@ public class WorkFlowLogServiceImpl extends ServiceImpl<WorkFlowLogMapper, WorkF
         return list;
     }
 
+    @Override
+    public WorkFlowLog getRefuse(Long businessId, String businessType) {
+        return workFlowLogMapper.getRefuse(businessId,businessType);
+    }
+
 
 }

+ 3 - 0
service/src/main/java/com/dayou/service/workflow/WorkFlowServiceImpl.java

@@ -294,6 +294,9 @@ public class WorkFlowServiceImpl extends ServiceImpl<WorkFlowMapper, WorkFlow> i
         if (state.equals(SKIP)){
             return workNodeProcessable.skip(workNodeCommit);
         }
+        if (state.equals(REFUSE)){
+            return workNodeProcessable.refuse(workNodeCommit);
+        }
         return Boolean.FALSE;
     }
 

+ 7 - 1
service/src/main/java/com/dayou/service/workflow/WorkNodeServiceImpl.java

@@ -34,6 +34,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.dayou.enums.MainBusinessEnum.MAJOR_BUSINESS;
 import static com.dayou.enums.ProductionEnum.*;
 import static com.dayou.enums.workflow.WorkflowNodeEnum.*;
 
@@ -259,7 +260,7 @@ public class WorkNodeServiceImpl extends ServiceImpl<WorkNodeMapper, WorkNode> i
         }
         //报告出库后或复评函出库后
         if (WorkflowNodeEnum.REPORT_OUT.name().equals(nodeCode) || WorkflowNodeEnum.LETTER_OUT.name().equals(nodeCode)) {
-            if (mainBusinessEnum.equals(MainBusinessEnum.MAJOR_BUSINESS)) {
+            if (mainBusinessEnum.equals(MAJOR_BUSINESS)) {
                 //大中型业务 :归档审核
                 return flowNodes.stream().filter(x -> x.getCode().equals(WorkflowNodeEnum.CHECK_ARCHIVING.name())).findFirst().get();
             }
@@ -395,6 +396,11 @@ public class WorkNodeServiceImpl extends ServiceImpl<WorkNodeMapper, WorkNode> i
         return null;
     }
 
+    @Override
+    public WorkNodeDTO doCreatedDepartmentAllocationNode() {
+        return this.getUniqueNodeByFlowNameAndNodeName(MAJOR_BUSINESS,DEPARTMENT_ALLOCATION);
+    }
+
 
     private WorkNodeDTO findNext(Long priviousId, List<WorkNodeDTO> nodes) {
         Optional<WorkNodeDTO> target = nodes.stream().filter(n -> n.getPriviousNodeId() != null)

+ 16 - 2
service/src/main/java/com/dayou/workflow/config/WorkNodeProcessable.java

@@ -39,6 +39,8 @@ import static com.dayou.enums.MainBusinessEnum.ASSET_BUSINESS;
 import static com.dayou.enums.MainBusinessEnum.MAJOR_BUSINESS;
 import static com.dayou.enums.workflow.NodeLogEnum.PASS;
 import static com.dayou.enums.workflow.NodeStateEnum.*;
+import static com.dayou.enums.workflow.WorkflowNodeEnum.LEADER_ALLOCATION;
+import static com.dayou.enums.workflow.WorkflowNodeEnum.OPENING_ORDER;
 
 /**
  * 类说明:
@@ -107,7 +109,7 @@ public class WorkNodeProcessable {
             workTaskRecordService.update(new LambdaUpdateWrapper<WorkTaskRecord>().set(WorkTaskRecord::getFinished,Boolean.TRUE)
                     .set(WorkTaskRecord::getFinishTime, LocalDateTime.now()).in(BaseEntity::getId,notBusinessHandleTaskId));
         }
-
+        //需要检查任务完成状态
         if (commit.getState().equals(PASS) && commit.getIfCheckTask()){
             if (checkCurrentNodeTaskState(currentInstanceNode)){
                 //将当前节点状态变更成已完成
@@ -118,8 +120,14 @@ public class WorkNodeProcessable {
                 ErrorCode.throwBusinessException(ErrorCode.TASK_NOT_FINISHED);
             }
         }
+        //不需要检查任务完成状态
+        if (commit.getState().equals(PASS) && !commit.getIfCheckTask()){
+            //将当前节点状态变更成已完成
+            workFlowNodeInstanceService.update(new LambdaUpdateWrapper<WorkFlowNodeInstance>().set(WorkFlowNodeInstance::getState,NodeStateEnum.FINISHED)
+                    .set(WorkFlowNodeInstance::getComment,commit.getComments()).eq(BaseEntity::getId,currentInstanceNode.getId()));
+            addWorkflowLog(commit,currentInstanceNode);
+        }
 
-        //确认当前节点是否需要校验业务数据
         //寻找下一个节点,有可能下一个节点并非流程配置的节点,需根据业务数据变动
         WorkNodeDTO nextWorkNode = workNodeService.getNextWorkNode(currentInstanceNode.getFlowId(), currentInstanceNode.getNodeId());
 
@@ -196,6 +204,7 @@ public class WorkNodeProcessable {
                 .eq(StrUtil.isNotEmpty(commit.getBusinessSubId()),WorkFlowNodeInstance::getBusinessSubId,commit.getBusinessSubId())
                 .eq(StrUtil.isNotEmpty(commit.getBusinessMinId()),WorkFlowNodeInstance::getBusinessMinId,commit.getBusinessMinId())
                 .eq(BaseEntity::getDeleted, Boolean.FALSE));
+
         if (preNode!=null){
             workTaskRecordService.update(new LambdaUpdateWrapper<WorkTaskRecord>().set(WorkTaskRecord::getFinished,Boolean.FALSE).eq(WorkTaskRecord::getInstanceId,preNode.getId()));
         }
@@ -450,4 +459,9 @@ public class WorkNodeProcessable {
                 break;
         }
     }
+
+    public Boolean refuse(WorkNodeCommit workNodeCommit) {
+        //todo
+        return Boolean.FALSE;
+    }
 }

+ 63 - 2
service/src/main/java/com/dayou/workflow/handler/MajorNodeHandler.java

@@ -1,5 +1,6 @@
 package com.dayou.workflow.handler;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -28,6 +29,7 @@ import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.dayou.enums.MainBusinessEnum.MAJOR_BUSINESS;
 import static com.dayou.enums.ProductionEnum.*;
 import static com.dayou.enums.ProductionEnum.LETTER;
 import static com.dayou.enums.TakeNumberEnum.LAND_NUMBER;
@@ -81,6 +83,9 @@ public class MajorNodeHandler extends WorkNodeProcessable {
     public boolean forward(WorkNodeCommit workNodeCommit) {
         WorkFlowNodeInstance currentInstanceNode = workFlowNodeInstanceMapper.getById(workNodeCommit.getInstanceNodeId());
         WorkNodeDTO nextWorkNode = beforeForward(workNodeCommit,currentInstanceNode);
+        if (nextWorkNode==null && workNodeCommit.getNodeCode().equals(LEADER_ALLOCATION.name())){
+            nextWorkNode = workNodeService.doCreatedDepartmentAllocationNode();
+        }
         if (nextWorkNode!=null){
             String ifVerify = currentInstanceNode.getVerify();
             if (StrUtil.isNotEmpty(ifVerify)){
@@ -97,9 +102,9 @@ public class MajorNodeHandler extends WorkNodeProcessable {
                         case CHECK_PRODUCTION_TYPE:
                             //1. 获取业务上出具的产品类型。
                             //2.根据出具的产品类型 确定需要哪些节点
-                            Map<String,List<WorkflowNodeEnum>> majorNecessaryNodes = CallbackEnum.NecessaryNode.getByProduction(MainBusinessEnum.MAJOR_BUSINESS.name(),
+                            Map<String,List<WorkflowNodeEnum>> majorNecessaryNodes = CallbackEnum.NecessaryNode.getByProduction(MAJOR_BUSINESS.name(),
                                     production);
-                            nextWorkNode = workNodeService.getNextWorkNodeByBusiness(currentInstanceNode.getFlowId(),MainBusinessEnum.MAJOR_BUSINESS
+                            nextWorkNode = workNodeService.getNextWorkNodeByBusiness(currentInstanceNode.getFlowId(), MAJOR_BUSINESS
                                     ,currentInstanceNode.getNodeCode(), majorNecessaryNodes,workNodeCommit.getIfPay());
                             break;
                         case CHECK_PRODUCTION_FUND:
@@ -140,6 +145,7 @@ public class MajorNodeHandler extends WorkNodeProcessable {
             afterForward(currentInstanceNode);
             return Boolean.TRUE;
         }
+
         return Boolean.FALSE;
     }
 
@@ -339,4 +345,59 @@ public class MajorNodeHandler extends WorkNodeProcessable {
                 break;
         }
     }
+
+    @Override
+    public Boolean refuse(WorkNodeCommit commit) {
+        Long instanceNodeId = commit.getInstanceNodeId();
+        WorkFlowNodeInstance currentNode = workFlowNodeInstanceService.getById(instanceNodeId);
+            String comments = commit.getComments();
+            if (comments.equals("1") || comments.equals("2")){
+                WorkFlowNodeInstance workFlowNodeInstance = workFlowNodeInstanceService.list(new LambdaQueryWrapper<WorkFlowNodeInstance>()
+                        .eq(WorkFlowNodeInstance::getBusinessId, currentNode.getBusinessId()).eq(WorkFlowNodeInstance::getFlowId, currentNode.getFlowId())
+                        .eq(WorkFlowNodeInstance::getSequence, (currentNode.getSequence() - 1)).eq(BaseEntity::getDeleted, Boolean.FALSE).orderByDesc(BaseEntity::getCreated)).get(0);
+                WorkFlowNodeInstance instance = BeanUtil.copyProperties(workFlowNodeInstance, WorkFlowNodeInstance.class);
+                instance.setNodeId(workNodeService.getUniqueNodeByFlowNameAndNodeName(MAJOR_BUSINESS,LEADER_ALLOCATION).getId());
+                instance.setId(null);
+                instance.setState(PENDING.name());
+                workFlowNodeInstanceService.save(instance);
+                List<User> users = userService.simplePostName("评估分管副总");
+                commit.setComments(comments.equals("1")?"部门工作超负荷":"委托人要求高,无法满足其评估需求");
+                if (CollectionUtil.isNotEmpty(users)){
+                    WorkTaskRecord workTaskRecord = workTaskRecordService.list(new LambdaUpdateWrapper<WorkTaskRecord>()
+                            .eq(WorkTaskRecord::getInstanceId, workFlowNodeInstance.getId()).orderByDesc(BaseEntity::getCreated)).get(0);
+                    WorkTaskRecord workTask = BeanUtil.copyProperties(workTaskRecord, WorkTaskRecord.class);
+                    workTask.setId(null);
+                    workTask.setHandlerId(users.get(0).getId());
+                    workTask.setFinished(Boolean.FALSE);
+                    workTask.setFinishTime(null);
+                    workTask.setInstanceId(instance.getId());
+                    workTaskRecordService.save(workTask);
+                }
+            }
+            else{
+                commit.setComments(comments.equals("3")?"委托人撤单":"客户经理通知终止");
+                WorkFlowNodeInstance preNode = workFlowNodeInstanceService.list(new LambdaQueryWrapper<WorkFlowNodeInstance>().select(BaseEntity::getId)
+                        .eq(WorkFlowNodeInstance::getFlowId, currentNode.getFlowId())
+                        .eq(WorkFlowNodeInstance::getBusinessId, currentNode.getBusinessId()).eq(WorkFlowNodeInstance::getSequence, (currentNode.getSequence() - 1))
+                        .eq(BaseEntity::getDeleted, Boolean.FALSE).orderByDesc(BaseEntity::getCreated)).get(0);
+                //将上一个节点状态改为PENDING
+                preNode.setState(PENDING.getCode());
+                workFlowNodeInstanceService.updateById(preNode);
+
+                //将上一个节点的任务状态修改为未完成
+                workTaskRecordService.update(new LambdaUpdateWrapper<WorkTaskRecord>()
+                        .set(WorkTaskRecord::getFinished,Boolean.FALSE)
+                        .eq(WorkTaskRecord::getInstanceId,preNode.getId()));
+            }
+
+        //删除当前节点
+        workFlowNodeInstanceService.delete(instanceNodeId);
+
+        //删除当前节点的待处理的任务记录
+        workTaskRecordService.remove(new LambdaQueryWrapper<WorkTaskRecord>().eq(WorkTaskRecord::getInstanceId,instanceNodeId));
+
+        //添加日志
+        return addWorkflowLog(commit,currentNode);
+
+    }
 }