kimi
2020-03-13 8033eea1502d4cb0a91aa4b86c848ccb00ba8dc0
src/main/java/com/highdatas/mdm/service/impl/SysAssembleServiceImpl.java
@@ -13,11 +13,13 @@
import com.highdatas.mdm.util.Constant;
import com.highdatas.mdm.util.ContentBuilder;
import com.highdatas.mdm.util.DbUtils;
import com.highdatas.mdm.util.RuleClient;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.regexp.RE;
import org.jcodings.util.Hash;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -77,11 +79,14 @@
    BigDataDataSourceInfo bigDataDataSourceInfo;
    @Autowired
    MasterDataService masterDataService;
    @Autowired
    ITUserService userService;
    @Autowired
    RuleClient ruleClient;
    @Override
    @Transactional(rollbackFor=Exception.class)
    public Result run(String id, HttpSession session) {
    public Result run(String id) {
        if (StringUtils.isEmpty(id)) {
            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
        }
@@ -90,9 +95,17 @@
        if (assemble == null) {
            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
        }
        assemble.setPreTime(new Date());
        assemble.setPreStatus(SysAssembleRunStatus.working);
        assemble.updateById();
        if (!assemble.getStatus().equals(SysAssembleStatus.working)) {
            assemble.setPreStatus(SysAssembleRunStatus.fail);
            assemble.setPreCnt(0);
            assemble.setPreMsg("当前任务不在工作中,状态:" + assemble.getStatus());
            assemble.updateById();
            return  Result.error(new CodeMsg(6009,"当前任务不在工作中,状态:" + assemble.getStatus()));
        }
        String flowId = assemble.getFlowId();
@@ -101,13 +114,16 @@
            if (flows != null) {
                ActivitiStatus status = flows.getStatus();
                if (!status.equals(ActivitiStatus.close) && !status.equals(ActivitiStatus.open)) {
                    assemble.setPreStatus(SysAssembleRunStatus.fail);
                    assemble.setPreCnt(0);
                    assemble.setPreMsg("当前有流程正在运行,暂时无法汇集下次数据:" + status.toString());
                    assemble.updateById();
                    return  Result.error(new CodeMsg(6009,"当前有流程正在运行,暂时无法汇集下次数据:" + status.toString()));
                }
            }
        }
        assemble.setPreTime(new Date());
        assemble.setPreStatus(SysAssembleRunStatus.working);
        assemble.updateById();
        Boolean bigData = assemble.getBigdata();
@@ -147,7 +163,7 @@
            }
            //5 check temp data
            result = checkTempData(id, assemble.getCheckType(), assemble.getCheckFields());
            result = checkTempData(assemble);
            if (!result.getSuccess()) {
                assemble.setPreStatus(SysAssembleRunStatus.fail);
@@ -166,7 +182,7 @@
            }
            //7 record 链接 版本
            result = linkMaintain(assemble, session);
            result = linkMaintain(assemble);
            if (!result.getSuccess()) {
                assemble.setPreStatus(SysAssembleRunStatus.fail);
                assemble.setPreMsg("联接版本出现错误" );
@@ -196,7 +212,7 @@
        }
    }
    private Result linkMaintain(SysAssemble assemble, HttpSession session) {
    private Result linkMaintain(SysAssemble assemble) {
        try{
            String menuId = assemble.getMenuId();
            MenuMapping menuMapping = menuMappingService.selectOne(new EntityWrapper<MenuMapping>().eq("menu_id", menuId));
@@ -216,7 +232,13 @@
                audit = true;
            }
            if (audit) {
                Flows flows = activitiService.start("process", session, maintain.getId(),  ActivitiBusinessType.maintain);
                String chargeId = menuMapping.getChargeId();
                TUser user = userService.selectById(chargeId);
                if (user == null) {
                    return Result.error(new CodeMsg(6009, "找不到对应的负责人:" + chargeId));
                }
                activitiService.setUser(user);
                Flows flows = activitiService.start("process", null, maintain.getId(),  ActivitiBusinessType.maintain);
                assemble.setFlowId(flows.getId()).updateById();
                maintain.setFlowId(flows.getId());
                maintain.setDesp("启动汇集流程");
@@ -486,8 +508,43 @@
        return builder.toString();
    }
    private Result checkTempData(String s,SysAssembleCheckType checkType, String id) {
    private Result checkTempData(SysAssemble assemble) {
        //TODO
        SysAssembleCheckType checkType = assemble.getCheckType();
        if (checkType == null) {
            return Result.error(new CodeMsg(6009,"规则校验类型为空"));
        }
        if (checkType.equals(SysAssembleCheckType.unlimited)) {
            return Result.success(null);
        }
        String menuId = assemble.getMenuId();
        MenuMapping menuMapping = menuMappingService.selectOne(new EntityWrapper<MenuMapping>().eq("menu_id", menuId));
        String tableName = menuMapping.getTableName();
        String tempTableName = Constant.Temp + tableName;
        HashMap<String,Boolean> fieldResultSet =  ruleClient.execuImmeForCollect(tempTableName, assemble.getUserId());
        switch (checkType){
            case successAdd:
                String unSuccessFields = fieldResultSet.keySet().stream().filter(s -> !fieldResultSet.get(s)).collect(Collectors.joining(Constant.COMMA));
                if (fieldResultSet.keySet().contains(false)) {
                    return Result.error(new CodeMsg(6009,"规则校验不通过 字段:" + unSuccessFields));
                }
                break;
            case partSuccessAdd:
                String checkFields = assemble.getCheckFields();
                String[] split = checkFields.split(Constant.SEMICOLON);
                for (String s : split) {
                    Boolean checked = fieldResultSet.get(s);
                    if (checked == null || !checked) {
                        return Result.error(new CodeMsg(6009,"规则校验不通过 字段:" + s));
                    }
                }
                break;
        }
        return Result.success(null);
    }