自动化立体仓库 - WCS系统
luxiaotao1123
2020-08-27 c422d0d7da0d26f39cd40f9070311ffbb2f9c009
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -10,6 +10,7 @@
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.*;
import com.zy.common.model.StartupDto;
import com.zy.common.service.CommonService;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.*;
@@ -26,6 +27,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -39,6 +41,7 @@
 */
@Slf4j
@Service("mainService")
@Transactional
public class MainServiceImpl {
    @Autowired
@@ -65,7 +68,7 @@
    /**
     * 入库站,根据条码扫描生成入库工作档,工作状态 2
     */
    @Transactional
    @Async
    public void generateStoreWrkFile() {
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
@@ -88,7 +91,7 @@
                        continue;
                    }
                    // 获取入库通知档
                    List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("barcode", barcode));
                    List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode).eq("io_status", "N"));
                    if (waitPakins.isEmpty()) {
                        log.warn("无此入库条码数据。条码号={}", barcode);
                        continue;
@@ -133,6 +136,10 @@
                    if (!locMastService.updateById(locMast)){
                        throw new CoolException("改变库位状态失败");
                    }
                    // 将入库通知档修改为已启动
                    if (wrkMastMapper.updateWaitPakInStep1(barcode) == 0) {
                        throw new CoolException("修改入库通知档状态为已启动");
                    }
                    // 命令下发区 --------------------------------------------------------------------------
@@ -159,6 +166,7 @@
    /**
     * 拣料、并板、盘点再入库
     */
    @Async
    public void stnToCrnStnPick(){
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历拣料入库口
@@ -236,6 +244,7 @@
    /**
     * 堆垛机站出库到出库站
     */
    @Async
    public void crnStnToOutStn() {
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历拣料入库口
@@ -294,6 +303,7 @@
    /**
     * 入出库  ===>>  堆垛机入出库作业下发
     */
    @Async
    public void crnIoExecute(){
        for (CrnSlave crn : slaveProperties.getCrn()) {
            // 获取堆垛机信息
@@ -335,7 +345,8 @@
    /**
     * 入库  ===>>  堆垛机站到库位
     */
    private void crnStnToLoc(CrnSlave slave){
    @Async
    public void crnStnToLoc(CrnSlave slave){
        for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
            boolean flag = false;
            // 获取堆垛机入库站信息
@@ -400,7 +411,8 @@
    /**
     * 出库  ===>>  库位到堆垛机站
     */
    private void locToCrnStn(CrnSlave slave){
    @Async
    public void locToCrnStn(CrnSlave slave){
        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
            // 获取工作状态为11(生成出库ID)的出库工作档
            WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId());
@@ -463,7 +475,8 @@
    /**
     * 库位移转
     */
    private void locToLoc(CrnSlave slave){
    @Async
    public void locToLoc(CrnSlave slave){
        // 获取工作档信息
        WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId());
        if (null == wrkMast) {
@@ -510,13 +523,14 @@
    /**
     * 执行对工作档的完成操作
     */
    @Async
    public void storeFinished() {
        for (CrnSlave crn : slaveProperties.getCrn()) {
            // 获取堆垛机信息
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
            //  状态:等待确认 并且  任务完成位 = 1
            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.taskFinish == 1 && crnProtocol.getTaskNo() != 0) {
            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                // 获取入库待确认工作档
                WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
                if (wrkMast == null) {
@@ -529,6 +543,8 @@
                // 出库 + 拣料/盘点/并板出库中:12.吊车出库中 ==> 14.出库完成
                } else if (wrkMast.getWrkSts() == 12) {
                    wrkMast.setWrkSts(14L);
                } else  {
                    continue;
                }
                Date now = new Date();
                wrkMast.setCrnEndTime(now);
@@ -536,11 +552,19 @@
                // 修改成功后复位堆垛机
                if (wrkMastMapper.updateById(wrkMast) > 0) {
                    // 命令下发区 -------------------------------------------------------------------------
                    // 堆垛机复位
                    if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(3, new CrnCommand()))) {
                        log.error("堆垛机复位命令下发失败,工作号={}", wrkMast.getWrkNo());
                    if (crnProtocol.getStatusType().equals(CrnStatusType.WAITING)) {
                        // 堆垛机复位
                        if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(3, new CrnCommand()))) {
                            log.error("堆垛机复位命令下发失败,工作号={}", wrkMast.getWrkNo());
                        }
                    }
                }
                // 完成通知档
                if (wrkMastMapper.updateWaitPakInStep2(wrkMast.getBarcode()) == 0) {
                    log.error("入库通知档修改结束状态失败,workNo=[{}]", wrkMast.getWrkNo());
                }
            }
        }
    }
@@ -558,6 +582,7 @@
    /**
     * 空栈板初始化入库,叉车入库站放货
     */
    @Async
    public void storeEmptyPlt(){
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历空板入库口
@@ -566,7 +591,7 @@
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo());
                // 站点条件判断
                if (staProtocol.isAutoing() && staProtocol.isLoading() && !staProtocol.isInreq1()
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
                        && staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 0 && staProtocol.isPakMk()) {
                    // 工作号
                    int workNo = commonService.getWorkNo(0);
@@ -616,6 +641,7 @@
                        throw new CoolException("更新plc站点信息失败");
                    }
                    staProtocol.setPakMk(false);
                }