SpecServiceImpl.java

package com.mycim.server.spec.service;

import com.alipay.sofa.runtime.api.annotation.SofaService;
import com.alipay.sofa.runtime.api.annotation.SofaServiceBinding;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.beans.BeanUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.server.base.manager.NamedObjectManager;
import com.mycim.server.spec.manager.*;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.prp.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.lang.Override;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

/**
 * @author Qiansheng.Wang
 * @version 1.0
 * @since 2021-4-18
 */
@Service
@Transactional
@SofaService(interfaceType = SpecService.class, bindings = {@SofaServiceBinding(bindingType = "bolt")})
public class SpecServiceImpl implements SpecService {

    @Autowired
    NamedObjectManager namedObjectManager;

    @Autowired
    SpecManager specManager;

    @Autowired
    ActivationAttributeManager activationAttributeManager;

    @Autowired
    ProcessSpecInfoManager processSpecInfoManager;

    @Autowired
    ProcessSpecItemManager processSpecItemManager;

    @Autowired
    ProductSpecInfoManager productSpecInfoManager;

    @Override
    public ProcessSpecItem getProcessSpecItemByPrimaryKey(Long processRrn, Integer processVersion, Long routeRrn,
                                                          Long operationRrn) {
        return processSpecItemManager
                .getProcessSpecItemByPrimaryKey(processRrn, processVersion, routeRrn, operationRrn);
    }

    @Override
    public ProductSpecInfo getLatestActivatedProductSpecItemInfo(Long productRrn, Long processRrn) {
        return productSpecInfoManager.getLatestActivatedProductSpecInfo(productRrn, processRrn);
    }

    @Override
    public List<ProductSpecInfo> getAllActivatedProductSpecItemInfo(Long productRrn, Long processRrn) {
        return productSpecInfoManager.getAllActivatedProductSpecItemInfo(productRrn, processRrn);
    }

    @Override
    public ProductSpecInfo getHighestActivatedProductSpecItemInfo(Long productRrn, Long processRrn,
                                                                  Integer processVersion) {
        List<ProductSpecInfo> productSpecInfo = productSpecInfoManager
                .getAllActivatedProductSpecItemInfo(productRrn, processRrn);
        if (CollectionUtils.isNotEmpty(productSpecInfo)) {
            return productSpecInfo.iterator().next();
        }
        return null;
    }

    @Override
    public List<ProductSpecItemDto> queryTheCompleteProcessSpecification(Long productRrn, Integer productVersion,
                                                                         String processId, Integer processVersion) {
        Long processRrn = namedObjectManager
                .getNamedObjectRrn(processId, LocalContext.getFacilityRrn(), ObjectList.WFL_KEY);

        List<ProductSpecItem> items = activationAttributeManager
                .getActiveProductSpec(productRrn, productVersion, processRrn, processVersion);

        List<ProductSpecItemDto> result = new ArrayList<>();
        for (ProductSpecItem productSpecItem : items) {

            ProductSpecItemDto dto = new ProductSpecItemDto();

            BeanUtils.copyProperties(productSpecItem, dto);

            result.add(dto);
        }

        result.sort(Comparator.comparing(ProductSpecItemDto::getFlowSeq));

        return result;
    }

    @Override
    public boolean hasActiveProcessSpec(long processRrn, Integer processVersionId) {
        return processSpecInfoManager.hasActiveProcessSpec(processRrn, processVersionId);
    }

    @Override
    public int getLatestActivatedProcessVersion(Long productRrn, Long processRrn) {
        return specManager.getLatestActivatedProcessVersion(productRrn, processRrn);
    }

    @Override
    public String getEqptGroupIds(Long processRrn, Integer processVersion, Long routeRrn, Long operationRrn) {
        return processSpecItemManager.getEqptGroupIds(processRrn, processVersion, routeRrn, operationRrn);
    }

    @Override
    public String getEqptGroupRrns(Long processRrn, Integer processVersion, Long routeRrn, Long operationRrn) {
        return processSpecItemManager.getEqptGroupRrns(processRrn, processVersion, routeRrn, operationRrn);
    }

    @Override
    public Boolean checkMultipath(String processId, Long processRrn, Integer processVersion, List<String> productIds) {
        return specManager.checkMultipath(processId, processRrn, processVersion, productIds);
    }

    @Override
    public Boolean checkMultiPathHasManualForContextValue(WflLinkContextValue contextValue) {
        return specManager.checkMultiPathHasManualForContextValue(contextValue);
    }

    @Override
    public String getProcessLocation(Long processRrn, Integer processVersion, Long routeRrn, Integer routeVersion,
                                     Long operationRrn) {
        return processSpecItemManager
                .getProcessLocation(processRrn, processVersion, routeRrn, routeVersion, operationRrn);
    }


}