*
lsh
2025-09-09 bf8895d798f6308717f83b2bdb413ff5f304b3e4
*
9个文件已修改
1个文件已添加
322 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/param/CombParam.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasArmMastMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasArmMastService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasArmMastServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/PostMesDataUtils.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/DevpSlave.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasArmMastMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CombParam.java
New file
@@ -0,0 +1,103 @@
package com.zy.asrs.entity.param;
import com.core.common.Cools;
import com.zy.asrs.entity.BasArmMast;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by vincent on 2020/6/28
 */
@Data
public class CombParam {
    // 单据编号
    private String orderNo;
    // 托盘条码
    private String barcode;
    // 库位编号
    private String locNo;
    private List<CombMat> combMats;
    @Data
    public static class CombMat {
        private String orderNo;
        // 物料编号
        private String matnr = "";
        // 序列码
        private String batch = "";
        private String brand = "";
        private String standby1 = "";
        private String standby2 = "";
        private String standby3 = "";
        private String boxType1 = "1";
        private String boxType2 = "1";
        private String boxType3 = "1";
        // 物料数量
        private Double anfme;
        // 商品名称
        private String maktx = "";
        // 规格
        private String specs = "";
        // sku
        private String sku = "";
        //备注
        private String memo = "";
        public CombMat() {
        }
        public CombMat(BasArmMast basArmMast) {
            this.orderNo = basArmMast.getOrderNo();
            this.matnr = basArmMast.getMatnr();
//            this.batch = basArmMast.getCreateTime().toString();
            this.anfme = basArmMast.getCtns().doubleValue();
            this.specs = basArmMast.getOrderNo();
            this.sku = basArmMast.getSku();
        }
    }
    public CombParam() {
    }
    public CombParam(List<BasArmMast> basArmMastList) {
        this.orderNo = basArmMastList.get(0).getOrderNo();
        this.combMats = new ArrayList<>();
        List<BasArmMast> basArmMasts = new ArrayList<>();
        for (BasArmMast basArmMast : basArmMastList) {
            if (basArmMasts.isEmpty()){
                basArmMasts.add(basArmMast);
            } else {
                boolean sign = false;
                for (BasArmMast basArmMastold : basArmMasts){
                    if (basArmMastold.getMatnr().equals(basArmMast.getMatnr())
                            && Cools.eq(basArmMastold.getOrderNo(), basArmMast.getOrderNo())) {//需要完善、和得
                        basArmMastold.setCtns(basArmMastold.getCtns()+1);
                        sign = true;
                        break;
                    }
                }
                if (!sign){
                    basArmMasts.add(basArmMast);
                }
            }
        }
        for (BasArmMast basArmMast : basArmMasts) {
            CombMat combMat = new CombMat(basArmMast);
            combMats.add(combMat);
        }
    }
}
src/main/java/com/zy/asrs/mapper/BasArmMastMapper.java
@@ -3,10 +3,13 @@
import com.zy.asrs.entity.BasArmMast;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface BasArmMastMapper extends BaseMapper<BasArmMast> {
    boolean updateArmMastStatus(@Param("armNo")int armNo, @Param("sortingLine")int sortingLine, @Param("status")int status, @Param("endStatus")int endStatus);
}
src/main/java/com/zy/asrs/service/BasArmMastService.java
@@ -5,4 +5,6 @@
public interface BasArmMastService extends IService<BasArmMast> {
    boolean updateArmMastStatus(int armNo,int sortingLine,int status,int endStatus);
}
src/main/java/com/zy/asrs/service/impl/BasArmMastServiceImpl.java
@@ -9,4 +9,8 @@
@Service("basArmMastService")
public class BasArmMastServiceImpl extends ServiceImpl<BasArmMastMapper, BasArmMast> implements BasArmMastService {
    @Override
    public boolean updateArmMastStatus(int armNo,int sortingLine,int status,int endStatus){
        return this.baseMapper.updateArmMastStatus(armNo,sortingLine,status,endStatus);
    }
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -9,6 +9,7 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.ArmTaskAssignmentParam;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.mapper.*;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.PostMesDataUtils;
@@ -104,6 +105,9 @@
    @Value("${wms.url}")
    private String wmsUrl;
    @Value("${wms.comb}")
    private String wmsComb;
    @Value("${inventory.number}")
    private Integer inventoryNumber;
@@ -4195,6 +4199,111 @@
    /*
     * arm任务完成自动组托
     * */
    public synchronized void armMissionAccomplished() {
        try{
            for (DevpSlave devp : slaveProperties.getDevp()) {
                // 遍历拣料入库口
                for (DevpSlave.Sta armSta : devp.getArmSta()) {
                    // 获取条码扫描仪信息
                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, armSta.getBarcode());
                    if (barcodeThread == null) {
                        continue;
                    }
                    String barcode = barcodeThread.getBarcode();
                    if(!Cools.isEmpty(barcode)) {
                        if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                            continue;
                        }
                    } else {
                        continue;
                    }
                    List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>()
                            .eq("arm_no", armSta.getArmNo())
                            .eq("sta_no", armSta.getStaNo())
                            .eq("status", 1));
                    for (BasArm basArm : basArmList) {
                        if (basArm.getStatus()!=1){
                            continue;
                        }
                        try{
                            List<BasArmMast> basArmMastList = basArmMastService.selectList(
                                    new EntityWrapper<BasArmMast>()
                                            .eq("arm_no", basArm.getArmNo())
                                            .eq("sorting_line", basArm.getSortingLine())
                                            .eq("status", 3)
                            );
                            if (basArmMastList.isEmpty()){
                                continue;
                            }
                            CombParam combParam = new CombParam(basArmMastList);
                            combParam.setBarcode(barcode);
                            //设置工作空间就绪
                            ReturnT<String> result = new PostMesDataUtils().postMesData("arm任务完成自动组托",wmsUrl, wmsComb, combParam);
                            if (result.getCode()==200){
                                basArmMastService.updateArmMastStatus(basArm.getArmNo(),basArm.getSortingLine(),3,4);
                            } else {
                                log.error("机械臂抓取任务完成:"+JSON.toJSON(basArmMastList)+"===》自动组托失败,等待重试");
                            }
                        }  catch (Exception e){
                            log.error("arm编号:"+basArm.getArmNo()+"====》机械臂抓取任务完成"+e.getMessage());
                        }
                        break;
                    }
                }
            }
        } catch (Exception e){
            log.error("机械臂抓取任务完成组托失败"+e.getMessage());
        }
    }
    public synchronized void armMissionAccomplishedScanToCheckIn() {
        try{
            for (DevpSlave devp : slaveProperties.getDevp()) {
                // 遍历拣料入库口
                for (DevpSlave.Sta armSta : devp.getArmSta()) {
                    List<BasArmMast> basArmMastList = basArmMastService.selectList(
                            new EntityWrapper<BasArmMast>()
                                    .eq("arm_no", armSta.getArmNo())
                                    .eq("sta_no", armSta.getStaNo())
                                    .eq("status", 4)
                    );
                    if (basArmMastList.isEmpty()){
                        continue;
                    }
                    // 获取站点信息
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                    StaProtocol staProtocol = devpThread.getStation().get(armSta.getStaNo());
                    if (staProtocol == null) {
                        continue;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) {
                        int workNo = commonService.getWorkNo(6);//待完善
                        // 更新站点信息 且 下发plc命令
                        staProtocol.setWorkNo(workNo);
                        staProtocol.setStaNo(armSta.getStaNoEnd().shortValue());
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        log.error("输送线下发5:"+workNo+","+armSta.getStaNoEnd());
                        if (!result) {
                            News.error(""+" - 3"+" - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId());
                        }
                        basArmMastService.updateArmMastStatus(basArmMastList.get(0).getArmNo(),basArmMastList.get(0).getSortingLine(),4,5);
                    }
                }
            }
        } catch (Exception e){
            log.error("组托完成驱动托盘扫码入库失败"+e.getMessage());
        }
    }
    /*
     * arm任务下发
     * */
    public synchronized void armTaskAssignment() {
@@ -4211,7 +4320,13 @@
                                    .eq("sorting_line", basArm.getSortingLine())
                                    .eq("status", 1)
                    );
                    if (basArmMastListRuning.isEmpty()){
                    List<BasArmMast> basArmMastListRuning3 = basArmMastService.selectList(
                            new EntityWrapper<BasArmMast>()
                                    .eq("arm_no", basArm.getArmNo())
                                    .eq("sorting_line", basArm.getSortingLine())
                                    .eq("status", 3)
                    );
                    if (basArmMastListRuning.isEmpty() && basArmMastListRuning3.isEmpty()){
                        List<BasArmMast> basArmMastList = basArmMastService.selectList(
                                new EntityWrapper<BasArmMast>()
                                        .eq("arm_no", basArm.getArmNo())
@@ -4228,7 +4343,7 @@
                        for (BasArmMast basArmMast:basArmMastList) {
                            ArmTaskAssignmentParam armTaskAssignmentParam = new ArmTaskAssignmentParam(basArmMast.getSortingLine());
                            //设置工作空间就绪
                            ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取任务",ArmConstant.ARM_URL, ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam);
                            ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取任务下发:通知工作空间已就绪",ArmConstant.ARM_URL, ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam);
                            if (result.getCode()==200){
                                basArmMast.setStatus(1);
                                basArmMastService.updateById(basArmMast);
src/main/java/com/zy/asrs/utils/PostMesDataUtils.java
@@ -84,7 +84,7 @@
                    success = true;
                } else {
                    log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
                    throw new CoolException("上报"+name);
                    throw new CoolException(name);
                }
            } catch (Exception e) {
                log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
@@ -95,7 +95,7 @@
                    // 保存接口日志
                    ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class);
                    apiLogService.save(
                            "上报"+name,
                            name,
                            URL +"/"+ mesPath,
                            null,
                            "127.0.0.1",
@@ -135,7 +135,7 @@
                    success = true;
                } else {
                    log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
                    throw new CoolException("上报"+name);
                    throw new CoolException(name);
                }
            } catch (Exception e) {
                log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
@@ -146,7 +146,7 @@
                    // 保存接口日志
                    ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class);
                    apiLogService.save(
                            "上报"+name,
                            name,
                            URL +"/"+ mesPath,
                            null,
                            "127.0.0.1",
src/main/java/com/zy/core/MainProcess.java
@@ -157,6 +157,10 @@
                    continue;
                }
                //arm任务完成
                mainService.armMissionAccomplished();
                mainService.armMissionAccomplishedScanToCheckIn();
                //arm任务下发
                mainService.armTaskAssignment();
src/main/java/com/zy/core/model/DevpSlave.java
@@ -27,11 +27,16 @@
    private List<Sta> pickSta = new ArrayList<>();
    private List<Sta> armSta = new ArrayList<>();
    @Data
    public static class Sta {
        private Integer staNo;
        private Integer armNo;
        private Integer sortingLine;
        private Integer staNoEnd;
        private Integer barcode;
        private Integer barcodeMat;
src/main/resources/application.yml
@@ -38,6 +38,7 @@
wms:
  url: 127.0.0.1:8080/jshdasrs
  comb: mobile/combAuto/wcs/auth
inventory:
  number: 7
@@ -294,6 +295,70 @@
    port: 102
    rack: 0
    slot: 0
    # 码垛位
    armSta[0]:
      staNo: 1044
      armNo: 1
      sortingLine: 1044
      staNoEnd: 1044
      barcode: ${wcs-slave.barcode[0].id}
      led: ${wcs-slave.led[1].id}
    # 码垛位
    armSta[1]:
      staNo: 1044
      armNo: 1
      sortingLine: 1044
      staNoEnd: 1044
      barcode: ${wcs-slave.barcode[0].id}
      led: ${wcs-slave.led[1].id}
    # 码垛位
    armSta[2]:
      staNo: 1044
      armNo: 2
      sortingLine: 1044
      staNoEnd: 1044
      barcode: ${wcs-slave.barcode[0].id}
      led: ${wcs-slave.led[1].id}
    # 码垛位
    armSta[3]:
      staNo: 1044
      armNo: 2
      sortingLine: 1044
      staNoEnd: 1044
      barcode: ${wcs-slave.barcode[0].id}
      led: ${wcs-slave.led[1].id}
    # 码垛位
    armSta[4]:
      staNo: 1044
      armNo: 3
      sortingLine: 1044
      staNoEnd: 1044
      barcode: ${wcs-slave.barcode[0].id}
      led: ${wcs-slave.led[1].id}
    # 码垛位
    armSta[5]:
      staNo: 1044
      armNo: 3
      sortingLine: 1044
      staNoEnd: 1044
      barcode: ${wcs-slave.barcode[0].id}
      led: ${wcs-slave.led[1].id}
    # 码垛位
    armSta[6]:
      staNo: 1044
      armNo: 4
      sortingLine: 1044
      staNoEnd: 1044
      barcode: ${wcs-slave.barcode[0].id}
      led: ${wcs-slave.led[1].id}
    # 码垛位
    armSta[7]:
      staNo: 1044
      armNo: 4
      sortingLine: 1044
      staNoEnd: 1044
      barcode: ${wcs-slave.barcode[0].id}
      led: ${wcs-slave.led[1].id}
    # 入库口1
    inSta[0]:
      staNo: 1044
src/main/resources/mapper/BasArmMastMapper.xml
@@ -25,4 +25,13 @@
    </resultMap>
    <update id="updateArmMastStatus">
        update asr_bas_arm_mast
        set status = #{endStatus}
        where 1=1
          and arm_no = #{armNo}
          and sorting_line = #{sortingLine}
          and status = #{status}
    </update>
</mapper>