package com.zy.asrs.service.impl; 
 | 
  
 | 
import com.baomidou.mybatisplus.mapper.EntityWrapper; 
 | 
import com.baomidou.mybatisplus.mapper.Wrapper; 
 | 
import com.baomidou.mybatisplus.service.impl.ServiceImpl; 
 | 
import com.core.common.Cools; 
 | 
import com.zy.asrs.entity.OrderDetl; 
 | 
import com.zy.asrs.entity.Pla; 
 | 
import com.zy.asrs.entity.PlaQty; 
 | 
import com.zy.asrs.mapper.PlaMapper; 
 | 
import com.zy.asrs.service.PlaQtyService; 
 | 
import com.zy.asrs.service.PlaService; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
  
 | 
@Service("plaService") 
 | 
public class PlaServiceImpl extends ServiceImpl<PlaMapper, Pla> implements PlaService { 
 | 
    @Autowired 
 | 
    private PlaQtyService plaQtyService; 
 | 
  
 | 
    public Pla selectByBatchAndPackageNo(String batch, String packageNo) { 
 | 
        return this.selectOne(new EntityWrapper<Pla>().eq("batch",batch).eq("package_no",packageNo)); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    @Transactional 
 | 
    public void queryStock(OrderDetl orderDetl, List<PlaQty> plaQties) { 
 | 
  
 | 
        //筛选条件 批号、包好、熔点、熔指、黄度、不透明度 
 | 
        Wrapper<Pla> wrapper = new EntityWrapper<Pla>(); 
 | 
        if(!Cools.isEmpty(orderDetl.getBatch())){ 
 | 
            wrapper.eq("batch",orderDetl.getBatch()); 
 | 
        } 
 | 
        if(!Cools.isEmpty(orderDetl.getBrand())){ 
 | 
            wrapper.eq("package_no",orderDetl.getBrand()); 
 | 
        } 
 | 
        wrapper.eq("status","已入库"); 
 | 
        wrapper.ge("finger_melting", orderDetl.getFingerMeltingMin()).le("finger_melting", orderDetl.getFingerMeltingMax()); 
 | 
        wrapper.ge("fusing_point", orderDetl.getFusingPointMin()).le("fusing_point", orderDetl.getFusingPointMax()); 
 | 
        wrapper.ge("yellowness", orderDetl.getYellownessMin()).le("yellowness", orderDetl.getYellownessMax()); 
 | 
        wrapper.ge("opacity", orderDetl.getOpacityMin()).le("opacity", orderDetl.getOpacityMax()); 
 | 
        wrapper.orderBy("pakin_time"); 
 | 
  
 | 
        List<Pla> plas = this.selectList(wrapper); 
 | 
        //总共的出库的数量(总计出库数量-作业数量) 
 | 
        if(Cools.isEmpty(orderDetl.getWorkQty())){ 
 | 
            orderDetl.setWorkQty(0.0); 
 | 
        } 
 | 
        Double anfme = orderDetl.getAnfme() - orderDetl.getWorkQty(); 
 | 
  
 | 
        for (Pla pla : plas){ 
 | 
            //库存数量(剩余重量-库存作业数量) 
 | 
            Double weightAnfme = pla.getWeightAnfme() - pla.getQtyAnfme(); 
 | 
            if(weightAnfme <= 0){ 
 | 
                continue; 
 | 
            } 
 | 
            //需要减去此次出库预览其他订单需出库的数量 
 | 
            for (PlaQty plaQty : plaQties){ 
 | 
                if(Cools.eq(plaQty.getBatch(),pla.getBatch()) && Cools.eq(plaQty.getPackageNo(),pla.getPackageNo())){ 
 | 
                    weightAnfme -= plaQty.getQtyAnfme(); 
 | 
                } 
 | 
            } 
 | 
  
 | 
            if(weightAnfme > anfme){ 
 | 
                //如果该批次包号剩余重量大于订单明细数量,则返回plaQties 
 | 
                PlaQty plaQty = new PlaQty(pla.getBatch(),pla.getPackageNo(),orderDetl.getId(),orderDetl.getOrderId(),orderDetl.getOrderNo(),anfme,pla.getLocNo(),new Date()); 
 | 
                anfme = 0.0; 
 | 
                plaQties.add(plaQty); 
 | 
                break; 
 | 
            }else { 
 | 
                PlaQty plaQty = new PlaQty(pla.getBatch(),pla.getPackageNo(),orderDetl.getId(),orderDetl.getOrderId(),orderDetl.getOrderNo(),weightAnfme,pla.getLocNo(),new Date()); 
 | 
                anfme -= weightAnfme; 
 | 
                plaQties.add(plaQty); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        if(anfme > 0){ 
 | 
            PlaQty plaQty = new PlaQty(orderDetl.getBatch(),orderDetl.getBrand(),orderDetl.getId(),orderDetl.getOrderId(),orderDetl.getOrderNo(),anfme,null,new Date()); 
 | 
            plaQties.add(plaQty); 
 | 
        } 
 | 
  
 | 
    } 
 | 
} 
 |