kimi
2020-05-27 c007f0ca1785db093d48f4846cda82fe8e955765
src/main/java/com/highdatas/mdm/service/impl/FlowsServiceImpl.java
@@ -1,10 +1,24 @@
package com.highdatas.mdm.service.impl;
import com.highdatas.mdm.entity.Flows;
import com.highdatas.mdm.mapper.FlowsMapper;
import com.highdatas.mdm.service.IFlowsService;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.highdatas.mdm.entity.Flows;
import com.highdatas.mdm.entity.MaintainField;
import com.highdatas.mdm.mapper.FlowsMapper;
import com.highdatas.mdm.mapper.SysFieldMapper;
import com.highdatas.mdm.pojo.ActivitiBusinessType;
import com.highdatas.mdm.pojo.ActivitiStatus;
import com.highdatas.mdm.pojo.NextTaskUserInfo;
import com.highdatas.mdm.service.*;
import com.highdatas.mdm.service.act.IdentityService;
import com.highdatas.mdm.service.act.TaskService;
import com.highdatas.mdm.util.DbUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
@@ -15,6 +29,137 @@
 * @since 2019-12-19
 */
@Service
@Slf4j
public class FlowsServiceImpl extends ServiceImpl<FlowsMapper, Flows> implements IFlowsService {
    @Autowired
    IMaintainFieldService maintainFieldService;
    @Autowired
    TaskService taskService;
    @Autowired
    SysFieldMapper fieldMapper;
    @Autowired
    IMasterModifiedService masterModifiedService;
    @Autowired
    IMaintainService maintainService;
    @Autowired
    IdentityService identityService;
    @Autowired
    ISysViewService viewService;
    @Autowired
    IMasterAuthorSubscribeService subscribeService;
    @Autowired
    ISysMenuService menuService;
    /**
     *
     * @description:  创建新字段版本
     * @param userId 用户id
     * @param maintainId 数据版本id
     * @param tableName 表名
     *
     * @return: maintainfielid 字段版本对象
     *
     */
    @Override
    public MaintainField createNowVerion(String tableName, String maintainId, String userId) {
        MaintainField nowMaintain = maintainFieldService.getNextMaintain(tableName, userId);
        // 搬运新版本字段
        String maintainParams;
        if (StringUtils.isEmpty(maintainId)) {
            maintainParams = "maintain_field_id is null and table_name = " + DbUtils.quotedStr(tableName);
        }else {
            maintainParams = "maintain_field_id = " + DbUtils.quotedStr(maintainId);
        }
        if (nowMaintain != null) {
            String maintainFieldId = DbUtils.quotedStr(nowMaintain.getId());
            fieldMapper.tansNewVersion(maintainFieldId, maintainParams);
        }
        return nowMaintain;
    }
    /**
     *
     * @description:  通过业务id获取审批状态
     * @param businessId 业务id
     * @return: status
     *
     */
    @Override
    public ActivitiStatus getStatusByBusinessId(String businessId) {
        Flows flows = selectOne(new EntityWrapper<Flows>().eq("business_id", businessId).orderBy("create_time desc"));
        if (flows == null){
            return null;
        }
        return flows.getStatus();
    }
    /**
     *
     * @description:  判断是否为下一节点审批人
     * @param flows 流程
     * @param userId 用户id
     * @return: status
     *
     */
    @Override
    public boolean isNextAudit(Flows flows, String userId) {
        NextTaskUserInfo nestTaskAssignee = taskService.getNestTaskAssignee(flows.getWorkflowId());
        if (nestTaskAssignee == null){
            return false;
        }
        List<String> userIdList = nestTaskAssignee.getUserIdList();
        if (userIdList.contains(userId)) {
            return true;
        }
        List<String> roleIdList = nestTaskAssignee.getRoleIdList();
        if (roleIdList == null || roleIdList.isEmpty()) {
            return false;
        }
        List<String> roleByUser = identityService.getRoleByUser(userId);
        if (roleByUser == null || roleByUser.isEmpty()) {
            return false;
        }
        long count = roleByUser.stream().filter(roleId -> roleIdList.contains(roleId)).count();
        if (count == 0) {
            return false;
        }else {
            return true;
        }
    }
    /**
     *
     * @description:  流程完成后的操作
     * @param flows 流程实例
     *
     */
    @Override
    public void aduitFinish(Flows flows) {
        // 新增线程
        new Thread(() -> {
            log.info("处理 生成版本后的操作");
            if (flows.getBusinessType().equals(ActivitiBusinessType.maintain)){
                String maintainId = flows.getBusinessId();
                log.info("flow-maintain:" + maintainId);
                masterModifiedService.dealFlow(maintainId, flows.getStatus());
                log.info("flow-masterModifiedService end");
                maintainService.dealFlow(maintainId, flows.getStatus());
                log.info("flow-maintainService end");
                viewService.dealFlow(maintainId, flows.getStatus());
                log.info("flow-viewService end");
                subscribeService.dealFlow(maintainId, flows.getStatus());
                log.info("flow-subscribeService end");
                menuService.dealFlow(maintainId, flows.getStatus(), flows.getUserId());
                log.info("flow-menuService end");
            }
            if (flows.getBusinessType().equals(ActivitiBusinessType.field)){
                String maintainId = flows.getBusinessId();
                maintainFieldService.dealFlow(maintainId, flows.getStatus());
            }
        }).start();
    }
}