MesServiceImpl.java 6.72 KB
package com.huaheng.api.mes.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.mes.domain.MaterialInfo;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.config.materialWarnning.domain.MaterialWarning;
import com.huaheng.pc.config.materialWarnning.service.IMaterialWarningService;
import com.huaheng.pc.config.warehouse.domain.Warehouse;
import com.huaheng.pc.config.warehouse.service.WarehouseService;
import com.huaheng.pc.config.zone.domain.Zone;
import com.huaheng.pc.config.zone.service.ZoneService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
import org.aspectj.weaver.loadtime.Aj;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class MesServiceImpl implements MesService{

    @Resource
    private InventoryHeaderService inventoryHeaderService;
    @Resource
    private MaterialService materialService;
    @Resource
    private ZoneService zoneService;
    @Resource
    private LocationService locationService;
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private WarehouseService warehouseService;
    @Resource
    private ContainerService containerService;
    @Resource
    private IMaterialWarningService materialWarningService;

    @Override
    public AjaxResult searchInventory(String materialCode,String area) {
        String zoneCode = null;
        if(!StringUtils.isEmpty(area)){
            Zone zoneByArea = zoneService.getZoneByArea(area);
            zoneCode= zoneByArea.getCode();
        }
        String warehouseCode = QuantityConstant.DEFAULT_WAREHOUSE;
        List<InventoryDetail> inventoryDetails = inventoryDetailService.selectInventoryDetailByWarehouse(warehouseCode, materialCode, zoneCode);
        if(inventoryDetails==null){
            return AjaxResult.success(Collections.emptyList());
        }
        return AjaxResult.success(inventoryDetails);
    }

    @Override
    public AjaxResult searchLocations(String area,String locationCode) {
        String warehouseCode = QuantityConstant.DEFAULT_WAREHOUSE;
        String type = null;
        if(!StringUtils.isEmpty(area)){
            LambdaQueryWrapper<Zone> zoneLambdaQueryWrapper = Wrappers.lambdaQuery();
            zoneLambdaQueryWrapper.in(Zone::getArea, area);
            Zone zone = zoneService.getOne(zoneLambdaQueryWrapper);
            type = zone.getCode();
        }

        /* 查询库位信息*/
        AjaxResult ajaxResult = locationService.selectLocationByLocationTypeAndWarehouseCode(type, warehouseCode);
        if(ajaxResult.hasErr()){
            return ajaxResult;
        }
        List<Location> locations = (List<Location>)ajaxResult.getData();
        List<Location> locationList = new ArrayList<>();
        /* 查询库存明细*/
        List<InventoryDetail> inventoryDetailList = inventoryDetailService.selectInventoryDetailByWarehouse(warehouseCode,null,"A");

        for (Location location1 : locations) {
            List<InventoryDetail> inventoryDetails = inventoryDetailList.stream().filter(inventoryDetail1 ->
                    inventoryDetail1.getLocationCode().equals(location1.getCode())).collect(Collectors.toList());

            List<MaterialInfo> materialInfos = getMaterialInfo(inventoryDetails);
            int materialInfoSize = materialInfos.size();
            String containerCode = location1.getContainerCode();
            String status = location1.getStatus();

            if(QuantityConstant.STATUS_LOCATION_EMPTY.equals(status)){
                if(StringUtils.isNotEmpty(containerCode)){
                    if(materialInfoSize > 0){
                        location1.setContainerStatus(QuantityConstant.STATUS_CONTAINER_SOME);
                    }else if(materialInfoSize == 0){
                        location1.setContainerStatus(QuantityConstant.STATUS_CONTAINER_EMPTY);
                    }
                }
            }
            if(QuantityConstant.STATUS_LOCATION_LOCK.equals(status)){
                if(StringUtils.isNotEmpty(containerCode)){
                    location1.setContainerStatus(QuantityConstant.STATUS_CONTAINER_LOCK);
                }
            }
            location1.setMaterialInfos(materialInfos);
            locationList.add(location1);
        }

        return AjaxResult.success(locationList);
    }

    @Override
    public AjaxResult searchWarehouse() {
        Warehouse one = warehouseService.getOne(new LambdaQueryWrapper<Warehouse>()
                .eq(Warehouse::getCode, QuantityConstant.DEFAULT_WAREHOUSE));
        return AjaxResult.success(one);
    }

    @Override
    public AjaxResult searchContainer() {
        List<Container> list = containerService.list();
        return AjaxResult.success(list);
    }

    @Override
    public AjaxResult searchMaterialWarning() {
        List<MaterialWarning> list = materialWarningService.list();
        return AjaxResult.success(list);
    }

    @Override
    public AjaxResult searchZone() {
        List<Zone> list = zoneService.list();
        return AjaxResult.success(list);
    }


    private List<MaterialInfo> getMaterialInfo(List<InventoryDetail> inventoryDetails){
        List<MaterialInfo> materialInfos = new ArrayList<>();
        if(inventoryDetails== null || inventoryDetails.size()==0){
            return materialInfos;
        }
        for (InventoryDetail inventoryDetail : inventoryDetails) {
            MaterialInfo info = new MaterialInfo();
            info.setMaterialCode(inventoryDetail.getMaterialCode());
            info.setMaterialName(inventoryDetail.getMaterialName());
            info.setMaterialUnit(inventoryDetail.getMaterialUnit());
            info.setQty(inventoryDetail.getQty());
            info.setBatch(inventoryDetail.getBatch());
            info.setTaskQty(inventoryDetail.getTaskQty());
            materialInfos.add(info);
        }
        return materialInfos;
    }
}