1
zhang
3 天以前 38ce5bc7cd58a218f89d8f9ca6aacd7e14d6d93e
1
1个文件已删除
5个文件已添加
13个文件已修改
460 ■■■■ 已修改文件
zy-acs-cv/src/main/java/com/zy/asrs/controller/vo/ApplyInDto.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/asrs/controller/vo/ApplyInRepsonseDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/asrs/controller/vo/TaskDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/asrs/entity/Job.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/asrs/mapper/JobMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/asrs/service/WmsMainService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/asrs/service/impl/JobServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/asrs/service/impl/WmsMainServiceImpl.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/core/enums/ConveyorStateType.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/core/operation/handler/AppleLocOperationHandler.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/core/operation/handler/ClearOperationHandler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/core/operation/handler/FakeUserOperationHandler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/core/operation/handler/FakeWmsOperationHandler.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/core/operation/handler/InOperationHandler.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/core/operation/handler/OutOperationHandler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/core/operation/handler/SendTaskOperationHandler.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/resources/application.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/resources/mapper/JobMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-cv/src/main/java/com/zy/asrs/controller/vo/ApplyInDto.java
New file
@@ -0,0 +1,18 @@
package com.zy.asrs.controller.vo;
import lombok.Data;
/**
 * Created by vincent on 2023/6/12
 */
@Data
public class ApplyInDto {
    private String staNo;
    private String barcode;
}
zy-acs-cv/src/main/java/com/zy/asrs/controller/vo/ApplyInRepsonseDto.java
New file
@@ -0,0 +1,17 @@
package com.zy.asrs.controller.vo;
import lombok.Data;
/**
 * Created by vincent on 2023/6/12
 */
@Data
public class ApplyInRepsonseDto {
    private String loc;
    private String taskNo;
    private String batchNo;
}
zy-acs-cv/src/main/java/com/zy/asrs/controller/vo/TaskDto.java
@@ -10,6 +10,8 @@
    private String taskNo;
    private String batchNo;
    private String memo;
    private String oriLoc;
zy-acs-cv/src/main/java/com/zy/asrs/entity/Job.java
@@ -27,14 +27,33 @@
    /**
     * 任务号
     */
    @TableField("seq_num")
    private String seqNum;
    @TableField("task_no")
    private String taskNo;
    /**
     * 批次号
     */
    @TableField("batch_no")
    private String batchNo;
    /**
     * 站点号
     */
    @TableField("sta_no")
    private String staNo;
    /**
     * 库位号
     */
    @TableField("loc")
    private String loc;
    /**
     * 工作号,系统自己维护
     */
    @TableField("job_no")
    private Integer jobNo;
    /**
     * 工作状态
@@ -44,8 +63,8 @@
    /**
     * 入库时间
     */
    @TableField("in_time")
    private Date inTime;
    @TableField("wms_time")
    private Date wmsTime;
    /**
     * 发生任务时间
     */
zy-acs-cv/src/main/java/com/zy/asrs/mapper/JobMapper.java
@@ -13,7 +13,7 @@
public interface JobMapper extends BaseMapper<Job> {
    Job getJobBySeqNum(@Param("seqNum") String seqNum);
    Job getJobByTaskNo(@Param("seqNum") String seqNum);
    Job getJobByJobNo(@Param("workNo") Integer workNo);
zy-acs-cv/src/main/java/com/zy/asrs/service/WmsMainService.java
New file
@@ -0,0 +1,23 @@
package com.zy.asrs.service;
import com.zy.asrs.controller.vo.ApplyInDto;
import com.zy.asrs.controller.vo.ApplyInRepsonseDto;
import com.zy.asrs.controller.vo.OpenBusSubmitParam;
/**
 * 立体仓库WCS系统主流程业务接口
 * Created by vincent on 2020/8/6
 */
public interface WmsMainService {
    /**
     * 检查站点状态
     *
     * @param applyInDto 站点编号
     * @return 库位信息
     */
     ApplyInRepsonseDto getLocOfWms(ApplyInDto applyInDto);
}
zy-acs-cv/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
@@ -3,8 +3,11 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.controller.requestParam.StationRequestParam;
import com.zy.asrs.controller.vo.ApplyInDto;
import com.zy.asrs.controller.vo.ApplyInRepsonseDto;
import com.zy.asrs.controller.vo.OpenBusSubmitParam;
import com.zy.asrs.controller.vo.StationStatus;
import com.zy.asrs.service.CtuMainService;
@@ -24,7 +27,7 @@
 * Created by vincent on 2020/8/6
 */
@Slf4j
@Service("ctuMainService")
@Service
@Transactional
@Data
public class CtuMainServiceImpl implements CtuMainService {
@@ -107,8 +110,8 @@
                }
                log.info("未返回站点状态:{}", staNo);
            } else {
                log.error("调用下发任务接口报错,响应码:{},响应内容:{}", jsonObject.getInteger("code"), response);
                throw new CoolException("调用下发任务接口报错,响应码:" + jsonObject.getInteger("code"));
                log.error("调用下发任务接口报错,响应码:{},响应内容:{}", jsonObject.getInteger(code), response);
                throw new CoolException("调用下发任务接口报错,响应码:" + jsonObject.getInteger(code));
            }
        } catch (CoolException e) {
            log.error("调用站点状态接口异常", e);
@@ -118,4 +121,7 @@
        }
        return null;
    }
}
zy-acs-cv/src/main/java/com/zy/asrs/service/impl/JobServiceImpl.java
@@ -22,7 +22,7 @@
    @Override
    public Job getJobBySeqNum(String seqNum) {
        return baseMapper.getJobBySeqNum(seqNum);
        return baseMapper.getJobByTaskNo(seqNum);
    }
    @Override
zy-acs-cv/src/main/java/com/zy/asrs/service/impl/WmsMainServiceImpl.java
New file
@@ -0,0 +1,87 @@
package com.zy.asrs.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.core.exception.CoolException;
import com.zy.asrs.controller.requestParam.StationRequestParam;
import com.zy.asrs.controller.vo.ApplyInDto;
import com.zy.asrs.controller.vo.ApplyInRepsonseDto;
import com.zy.asrs.controller.vo.OpenBusSubmitParam;
import com.zy.asrs.controller.vo.StationStatus;
import com.zy.asrs.service.CtuMainService;
import com.zy.asrs.service.WmsMainService;
import com.zy.common.utils.HttpHandler;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * 立体仓库WCS系统主流程业务
 * Created by vincent on 2020/8/6
 */
@Slf4j
@Service
@Transactional
@Data
public class WmsMainServiceImpl implements WmsMainService {
    @Value("${ctu.url}")
    private String wmsUrl;
    @Value("${ctu.sendTask}")
    private String apply;
    private String code ="code";
    private String dataCode ="data";
    private Integer codeValue =200;
    private Integer timeout = 1200;
    /**
     * 检查站点状态
     *
     * @param applyInDto 站点编号
     * @return 库位信息
     */
    public ApplyInRepsonseDto getLocOfWms(ApplyInDto applyInDto) {
        String response = "";
        try {
            response = new HttpHandler.Builder()
                    .setUri(wmsUrl)
                    .setPath(apply)
                    .setTimeout(timeout, TimeUnit.SECONDS)
                    .setJson(JSON.toJSONString(applyInDto))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if (jsonObject.getInteger(code).equals(codeValue)) {
                log.info("WMS返回数据:{}", response);
                JSONArray data = jsonObject.getJSONArray(dataCode);
                return JSONObject.parseObject(data.toString(), ApplyInRepsonseDto.class);
            } else {
                log.error("调用下发任务接口报错,响应码:{},响应内容:{}", jsonObject.getInteger(code), response);
                throw new CoolException("调用下发任务接口报错,响应码:" + jsonObject.getInteger(code));
            }
        } catch (CoolException e) {
            log.error("调用站点状态接口异常", e);
            throw e;
        } catch (Exception e) {
            log.error("检查站点状态失败,条码编号:{},站点:{}", applyInDto.getBarcode(),applyInDto.getStaNo(), e);
        }
        return null;
    }
}
zy-acs-cv/src/main/java/com/zy/core/enums/ConveyorStateType.java
@@ -1,13 +1,17 @@
package com.zy.core.enums;
public enum ConveyorStateType {
    //出库设备上走
    OUTBOUND,
    //模拟用户
    FAKEUSER,
    //入库申请
    APPLYLOC,
    //入库设备上走
    INBOUND,
    FAKEWMS,
    FAKETASK,
    //清除输送线上的信号
    CLEARSIGNAL,
    //发送任务给RCS
    SENDTASK;
zy-acs-cv/src/main/java/com/zy/core/operation/handler/AppleLocOperationHandler.java
New file
@@ -0,0 +1,108 @@
package com.zy.core.operation.handler;
import com.core.exception.CoolException;
import com.zy.asrs.controller.vo.ApplyInDto;
import com.zy.asrs.controller.vo.ApplyInRepsonseDto;
import com.zy.asrs.entity.Job;
import com.zy.asrs.service.CtuMainService;
import com.zy.asrs.service.JobService;
import com.zy.asrs.service.WmsMainService;
import com.zy.asrs.service.WrkLastnoService;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.ConveyorStateType;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.operation.OperationHandler;
import com.zy.core.properties.CtuOperationConfig;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.BarcodeThread;
import com.zy.core.thread.SiemensDevpThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.Date;
/**
 * 入库
 */
@Slf4j
@Component
public class AppleLocOperationHandler implements OperationHandler {
    @Autowired
    private SlaveProperties slaveProperties;
    @Autowired
    private WrkLastnoService wrkLastnoService;
    @Autowired
    private WmsMainService wmsMainService;
    @Autowired
    private JobService jobService;
    @Override
    public ConveyorStateType getType() {
        return ConveyorStateType.APPLYLOC;
    }
    @Override
    public synchronized void execute(CtuOperationConfig config) {
        try {
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
                // 遍历入库口
                for (DevpSlave.Sta inSta : devp.getInSta()) {
                    // 根据输送线plc遍历
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                    StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, devp.getId());
                    if (staProtocol == null) {
                        return;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    // 判断是否满足条件
                    if (!staProtocol.isLoading()) {
                        return;
                    }
                    if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
                        Job job = jobService.getJobByJobNoAndJobSts(staProtocol.getWorkNo(), 2);
                        if (job != null) {
                            ApplyInDto applyInDto=new ApplyInDto();
                            applyInDto.setStaNo(inSta.getStaNo()+"");
                            applyInDto.setBarcode(barcodeThread.getBarcode());
                            //TODO
                            ApplyInRepsonseDto locOfWms =new ApplyInRepsonseDto();
                            locOfWms.setTaskNo(System.currentTimeMillis()+"");
                            locOfWms.setBatchNo(System.currentTimeMillis()+"");
                            //ApplyInRepsonseDto locOfWms = wmsMainService.getLocOfWms(applyInDto);
                            if (locOfWms != null) {
                                job.setLoc(locOfWms.getLoc());
                                job.setTaskNo(locOfWms.getTaskNo());
                                job.setBatchNo(locOfWms.getBatchNo());
                                job.setStaNo(inSta.getTargetSta()+"");
                                job.setJobSts(4);
                                job.setWmsTime(new Date());
                                jobService.updateById(job);
                            }else {
                                log.info("WMS未返回库位信息,{}",applyInDto);
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
    }
}
zy-acs-cv/src/main/java/com/zy/core/operation/handler/ClearOperationHandler.java
@@ -48,7 +48,7 @@
    }
    @Override
    public void execute(CtuOperationConfig config) {
    public synchronized void execute(CtuOperationConfig config) {
        try {
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
@@ -68,7 +68,7 @@
                    }
                    if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
                        Job job = jobService.getJobByJobNo(staProtocol.getWorkNo());
                        if (job != null && job.getJobSts() >= 5) {
                        if (job != null && job.getJobSts() >= 6) {
                            String s = ctuMainService.checkStationStatus(takeSta.getStaNo());
                            staProtocol.setWorkNo(0);
                            staProtocol.setStaNo(0);
zy-acs-cv/src/main/java/com/zy/core/operation/handler/FakeUserOperationHandler.java
@@ -46,7 +46,7 @@
    }
    @Override
    public void execute(CtuOperationConfig config) {
    public synchronized void execute(CtuOperationConfig config) {
        try {
            // 根据输送线plc遍历
zy-acs-cv/src/main/java/com/zy/core/operation/handler/FakeWmsOperationHandler.java
File was deleted
zy-acs-cv/src/main/java/com/zy/core/operation/handler/InOperationHandler.java
@@ -50,7 +50,7 @@
    }
    @Override
    public void execute(CtuOperationConfig config) {
    public synchronized void execute(CtuOperationConfig config) {
        try {
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
@@ -71,20 +71,19 @@
                    if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
                        //StaProtocol targetStaProtocol = devpThread.getStation().get(inSta.getTargetSta());
                        //if (targetStaProtocol.getWorkNo() == 0 && targetStaProtocol.isAutoing() && !targetStaProtocol.isLoading()) {
                            Job job = jobService.getJobByJobNoAndJobSts(staProtocol.getWorkNo(), 2);
                            Job job = jobService.getJobByJobNoAndJobSts(staProtocol.getWorkNo(), 4);
                            if (job != null) {
                                Integer workNo = staProtocol.getWorkNo();
                                Integer targetSta = inSta.getTargetSta();
                                staProtocol.setWorkNo(0);
                                staProtocol.setStaNo(0);
                                MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
                                Thread.sleep(1500L);
//                                staProtocol.setWorkNo(0);
//                                staProtocol.setStaNo(0);
//                                MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
//                                Thread.sleep(1500L);
                                staProtocol.setWorkNo(workNo);
                                staProtocol.setStaNo(targetSta);
                                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
                                if (result) {
                                    job.setJobSts(4);
                                    job.setInTime(new Date());
                                    job.setJobSts(5);
                                    if (!jobService.updateById(job)) {
                                        throw new CoolException("更新输送线任务失败," + " - " + staProtocol.getWorkNo());
                                    }
zy-acs-cv/src/main/java/com/zy/core/operation/handler/OutOperationHandler.java
@@ -49,7 +49,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void execute(CtuOperationConfig config) {
    public synchronized void execute(CtuOperationConfig config) {
        try {
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
@@ -78,7 +78,7 @@
                                staProtocol.setWorkNo(workNo);
                                staProtocol.setStaNo(releaseSta.getTargetSta());
                                Job job = new Job();
                                job.setSeqNum(seqNum);
                                job.setTaskNo(seqNum);
                                job.setJobNo(workNo);
                                job.setJobSts(2);
                                if (!jobService.insert(job)) {
zy-acs-cv/src/main/java/com/zy/core/operation/handler/SendTaskOperationHandler.java
@@ -1,6 +1,11 @@
package com.zy.core.operation.handler;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.zy.asrs.controller.vo.OpenBusSubmitParam;
import com.zy.asrs.controller.vo.TaskDto;
import com.zy.asrs.entity.Job;
import com.zy.asrs.service.CtuMainService;
import com.zy.asrs.service.JobService;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.ConveyorStateType;
@@ -15,6 +20,10 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * 发送任务给RCS
@@ -31,13 +40,16 @@
    private JobService jobService;
    @Autowired
    private CtuMainService ctuMainService;
    @Override
    public ConveyorStateType getType() {
        return ConveyorStateType.SENDTASK;
    }
    @Override
    public void execute(CtuOperationConfig config) {
    public synchronized void execute(CtuOperationConfig config) {
        try {
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
@@ -57,9 +69,27 @@
                    }
                    if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
                        Job job = jobService.getJobByJobNo(staProtocol.getWorkNo());
                        if (job != null && job.getJobSts() == 4) {
                            job.setJobSts(5);
                            jobService.updateById(job);
                        if (job != null && job.getJobSts() == 5) {
                            OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
                            openBusSubmitParam.setBatchNo(DateUtils.convert(new Date()));
                            List<TaskDto> taskList = new ArrayList<>();
                            TaskDto taskDto = new TaskDto();
                            taskDto.setTaskNo(job.getTaskNo());
                            taskDto.setBatchNo(job.getBatchNo());
                            taskDto.setOriSta(job.getStaNo());
                            taskDto.setDestLoc(job.getLoc());
                            //TODO
                            taskDto.setPriority(9527);
                            taskList.add(taskDto);
                            openBusSubmitParam.setTasks(taskList);
                            if (ctuMainService.sendTask(openBusSubmitParam)) {
                                job.setJobSts(7);
                                job.setRcsTime(new Date());
                                jobService.updateById(job);
                                log.info("任务发送给RCS成功," + job.getTaskNo() + " - " + job.getJobNo());
                            } else {
                                log.info("任务发送给RCS失败," + job.getTaskNo() + " - " + job.getJobNo());
                            }
                        }
                    }
                }
zy-acs-cv/src/main/resources/application.yml
@@ -30,10 +30,10 @@
        max-retries: 3
        retry-delay: 500
      - type: FAKEUSER
        mark: 30
        mark: 20
        max-retries: 2
        retry-delay: 300
      - type: FAKEWMS
      - type: APPLYLOC
        mark: 30
        max-retries: 2
        retry-delay: 300
@@ -42,7 +42,7 @@
        max-retries: 3
        retry-delay: 500
      - type: CLEARSIGNAL
        mark: 60
        mark: 50
        max-retries: 2
        retry-delay: 300
      - type: SENDTASK
zy-acs-cv/src/main/resources/mapper/JobMapper.xml
@@ -5,10 +5,13 @@
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.Job">
        <id column="id" property="id"/>
        <result column="seq_num" property="seqNum"/>
        <result column="task_no" property="taskNo"/>
        <result column="batch_no" property="batchNo"/>
        <result column="loc" property="loc"/>
        <result column="sta_no" property="staNo"/>
        <result column="job_no" property="jobNo"/>
        <result column="job_sts" property="jobSts"/>
        <result column="in_time" property="inTime"/>
        <result column="wms_time" property="wmsTime"/>
        <result column="rcs_time" property="rcsTime"/>
        <result column="status" property="status"/>
        <result column="deleted" property="deleted"/>
@@ -20,10 +23,10 @@
        <result column="memo" property="memo"/>
    </resultMap>
    <select id="getJobBySeqNum" resultMap="BaseResultMap">
    <select id="getJobByTaskNo" resultMap="BaseResultMap">
        select *
        from cv_job
        where seq_num = #{seqNum}
        where task_no = #{seqNum}
    </select>