package com.zy.asrs.task.handler; 
 | 
  
 | 
import com.baomidou.mybatisplus.mapper.EntityWrapper; 
 | 
import com.baomidou.mybatisplus.mapper.Wrapper; 
 | 
import com.core.common.Cools; 
 | 
import com.core.exception.CoolException; 
 | 
import com.zy.asrs.entity.BasCrnp; 
 | 
import com.zy.asrs.entity.LocMast; 
 | 
import com.zy.asrs.entity.StaDesc; 
 | 
import com.zy.asrs.entity.WrkMast; 
 | 
import com.zy.asrs.service.BasCrnpService; 
 | 
import com.zy.asrs.service.LocMastService; 
 | 
import com.zy.asrs.service.StaDescService; 
 | 
import com.zy.asrs.service.WrkMastService; 
 | 
import com.zy.asrs.task.AbstractHandler; 
 | 
import com.zy.asrs.task.core.ReturnT; 
 | 
import com.zy.common.model.enums.WorkNoType; 
 | 
import com.zy.common.service.CommonService; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * Created by Monkey D. Luffy on 2023.10.25 
 | 
 * 广德宜科..............以下.............广德宜科.............自动补空板再优化 
 | 
 */ 
 | 
@Slf4j 
 | 
@Service 
 | 
@Transactional 
 | 
public class BareBoardHandler extends AbstractHandler<String> { 
 | 
  
 | 
    @Autowired 
 | 
    private WrkMastService wrkMastService; 
 | 
    @Autowired 
 | 
    private LocMastService locMastService; 
 | 
    @Autowired 
 | 
    private CommonService commonService; 
 | 
    @Autowired 
 | 
    private StaDescService staDescService; 
 | 
    @Autowired 
 | 
    private BasCrnpService basCrnpService; 
 | 
  
 | 
    public ReturnT<String> start(Integer ioType,Integer staNo,String locStsTarget) { 
 | 
        try { 
 | 
            if (wrkMastService.selectWrkMastBareBoardStaNo(ioType,staNo)!=0){ 
 | 
                return null; 
 | 
            } 
 | 
            // 获取工作号 
 | 
            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); 
 | 
            ArrayList<Integer> crns =new ArrayList<>(); 
 | 
            List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts", 3).eq("out_enable", "Y").eq("wrk_no", 0)); 
 | 
            for (BasCrnp basCrnp : basCrnps){ 
 | 
                crns.add(basCrnp.getCrnNo()); 
 | 
            } 
 | 
            for (BasCrnp basCrnp : basCrnpService.selectList(new EntityWrapper<>())){ 
 | 
                crns.add(basCrnp.getCrnNo()); 
 | 
            } 
 | 
            if (Cools.isEmpty(crns) || crns.size()==0){ 
 | 
                return null; 
 | 
            } 
 | 
  
 | 
            boolean sign = true; 
 | 
            for (Integer crnNo : crns){ 
 | 
                sign = true; 
 | 
  
 | 
                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts",locStsTarget).eq("crn_no",crnNo)); 
 | 
  
 | 
                if (Cools.isEmpty(locMast)) { 
 | 
//                    throw new CoolException("库中无空板!!!"); 
 | 
                    sign=false; 
 | 
                } 
 | 
                if (sign && !locMast.getLocSts().equals(locStsTarget)){ 
 | 
//                    throw new CoolException("所选库位存在状态不为D的库位,库位号:"+locMast.getLocNo()+" 、当前状态:"+locMast.getLocSts()+"-"+locMast.getLocSts$()); 
 | 
                    sign=false; 
 | 
                } 
 | 
                if (sign){ 
 | 
                    // 获取源站 
 | 
                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() 
 | 
                            .eq("type_no", ioType) 
 | 
                            .eq("stn_no", staNo) 
 | 
                            .eq("crn_no", crnNo); 
 | 
                    StaDesc staDesc = staDescService.selectOne(wrapper); 
 | 
                    if (Cools.isEmpty(staDesc)){ 
 | 
                        sign = false; 
 | 
                        continue; 
 | 
                    } 
 | 
                    Integer sourceStaNo = staDesc.getCrnStn(); 
 | 
                    if (Cools.isEmpty(sourceStaNo)) { 
 | 
//                    throw new CoolException("检索源站失败"); 
 | 
                        sign = false; 
 | 
                    } 
 | 
                    if (sign){ 
 | 
                        Date now = new Date(); 
 | 
                        // 保存工作档 
 | 
                        WrkMast wrkMast = new WrkMast(); 
 | 
                        wrkMast.setWrkNo(workNo); 
 | 
                        wrkMast.setIoTime(now); 
 | 
                        wrkMast.setWrkSts(11L); // 工作状态 
 | 
                        wrkMast.setIoType(ioType); // 入出库状态 
 | 
                        wrkMast.setIoPri(10D); 
 | 
                        wrkMast.setSourceStaNo(sourceStaNo + ""); // 源站 
 | 
                        wrkMast.setStaNo(staNo + ""); // 目标站 
 | 
                        wrkMast.setCrnNo(locMast.getCrnNo()); 
 | 
                        wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位 
 | 
                        wrkMast.setFullPlt(ioType.equals(110)? "N" : "Y"); // 满板:Y 
 | 
                        wrkMast.setPicking("N"); // 拣料 
 | 
                        wrkMast.setExitMk("N"); // 退出 
 | 
                        wrkMast.setEmptyMk(ioType.equals(110)? "Y" : "N"); // 空板 
 | 
                        wrkMast.setLinkMis("N"); 
 | 
                        wrkMast.setAppeUser(9999L); 
 | 
                        wrkMast.setAppeTime(now); 
 | 
                        wrkMast.setModiUser(9999L); 
 | 
                        wrkMast.setModiTime(now); 
 | 
                        boolean res = wrkMastService.insert(wrkMast); 
 | 
                        if (!res) { 
 | 
                            throw new CoolException("保存工作档失败"); 
 | 
                        } 
 | 
                        // 更新库位状态 D.空板 -> R.出库预约 
 | 
                        if (locMast.getLocSts().equals(locStsTarget)){ 
 | 
                            locMast.setLocSts("R"); 
 | 
                            locMast.setModiUser(9999L); 
 | 
                            locMast.setModiTime(now); 
 | 
                            if (!locMastService.updateById(locMast)) { 
 | 
                                throw new CoolException("更新库位状态失败"); 
 | 
                            }else { 
 | 
                                return SUCCESS; 
 | 
                            } 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            if (!sign){ 
 | 
                log.error("未查到可出库的空板!!!"); 
 | 
                return null; 
 | 
            } 
 | 
        }catch (Exception e){ 
 | 
            log.error("异常!!!"+e); 
 | 
            return null; 
 | 
        } 
 | 
        return SUCCESS; 
 | 
    } 
 | 
} 
 |