ShipmentPreferenceServiceImpl.java 4.08 KB
package com.huaheng.pc.config.shipmentPreference.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference;
import com.huaheng.pc.config.shipmentPreference.mapper.ShipmentPreferenceMapper;
import com.huaheng.pc.config.statusFlow.domain.StatusFlowDetail;
import com.huaheng.pc.config.statusFlow.domain.StatusFlowHeader;
import com.huaheng.pc.config.statusFlow.service.StatusFlowDetailService;
import com.huaheng.pc.config.statusFlow.service.StatusFlowHeaderService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service("shipmentPreference")
public class ShipmentPreferenceServiceImpl extends ServiceImpl<ShipmentPreferenceMapper, ShipmentPreference> implements ShipmentPreferenceService {

    @Autowired
    private ShipmentPreferenceService shipmentPreferenceService;
    @Autowired
    private StatusFlowHeaderService statusFlowHeaderService;
    @Autowired
    private StatusFlowDetailService statusFlowDetailService;
    @Autowired
    private ShipmentHeaderService shipmentHeaderService;


    /**
     * 1、找出出库首选项
     * 2、查看出库首选项的出库流程
     * 3、找到该状态流的出库流程明细
     * 4、判断单据是否按出库流程操作
     *
     * @param ids 出库单id
     * @param code 状态流
     * @return
     */
    @Override
    public List<ShipmentHeader> checkShipmentProcess(String ids, Integer code) {
        //查找出库首选项
        ShipmentPreference shipmentPreference = shipmentPreferenceService.list().get(0);
        if(shipmentPreference == null){
            throw new ServiceException("系统没有设置出库首选");
        }
        if(StringUtils.isEmpty(shipmentPreference.getShippingFlow())){
            throw new ServiceException("出库首选没有绑定出库流程");
        }

        //查看出库流程
        LambdaQueryWrapper<StatusFlowHeader> statusFlowHeaderLam = Wrappers.lambdaQuery();
        statusFlowHeaderLam.eq(StatusFlowHeader::getCode,shipmentPreference.getShippingFlow())
                .eq(StatusFlowHeader::getWarehouseCode, ShiroUtils.getWarehouseCode());
        StatusFlowHeader statusFlowHeader = statusFlowHeaderService.getOne(statusFlowHeaderLam);
        if(statusFlowHeader == null){
            throw new ServiceException("出库首选绑定的出库流程不在系统中");
        }
        //查看流程明细
        LambdaQueryWrapper<StatusFlowDetail> statusFlowDetailLamb = Wrappers.lambdaQuery();
        statusFlowDetailLamb.eq(StatusFlowDetail::getHeaderId,statusFlowHeader.getId())
                .eq(StatusFlowDetail::getWarehouseCode,ShiroUtils.getWarehouseCode())
                .eq(StatusFlowDetail::getFlowCode,code.toString());
        StatusFlowDetail statusFlowDetail = statusFlowDetailService.getOne(statusFlowDetailLamb);

        List<ShipmentHeader> shipmentHeaderList = new ArrayList<>();
        if(statusFlowDetail != null && statusFlowDetail.getNessary() == 1){
            for (Integer id : Convert.toIntArray(ids))
            {
                //判断单据是否按出库流程操作
                ShipmentHeader shipmentHeader = shipmentHeaderService.getById(id);
                if(shipmentHeader == null || shipmentHeader.getFirstStatus()<code){
                    throw new ServiceException("单据状态不对,此操作不符合出库流程,请按照出库流程出库");
                }
                shipmentHeaderList.add(shipmentHeader);
            }
        }
        return shipmentHeaderList;
    }
}