自动化立体仓库 - WMS系统
lsh
2025-05-26 d61d4384e19580a32becb54e8e7f2287bed5469a
1.出库口补空板
2.组托时调用agv
3.新增agv调用程序
5个文件已修改
2个文件已添加
233 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/WorkController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakin.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/RCSParam.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/NewWay/AutomaticallyAssignInTasksToRCSScheduler.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -14,10 +14,12 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.RCSParam;
import com.zy.asrs.entity.param.Review;
import com.zy.asrs.entity.result.MobileAdjustResult;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.MobileServiceImpl;
import com.zy.asrs.task.WorkMastScheduler;
import com.zy.asrs.task.handler.WorkLogHandler;
import com.zy.common.constant.MesConstant;
import com.zy.common.model.LocDto;
@@ -26,13 +28,18 @@
import com.zy.common.utils.HttpHandler;
import com.zy.common.web.BaseController;
import com.zy.common.web.param.SearchLocParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
@@ -42,7 +49,7 @@
@RestController
@RequestMapping("mobile")
public class MobileController extends BaseController  {
    private static final Logger log = LoggerFactory.getLogger(WorkMastScheduler.class);
    @Autowired
    private MobileService mobileService;
    @Autowired
@@ -63,6 +70,12 @@
    private BasDevpService basDevpService;
    @Autowired
    private PackService packService;
    @Autowired
    private ApiLogService apiLogService;
    @Value("${rcs.address.url}")
    private String url;
    @Value("${rcs.address.attrcs}")
    private String attrcs;
    // 商品上架
@@ -443,5 +456,78 @@
    /*...........................赣州新增..............以上.............赣州新增...........................*/
    /**
     * 执行移库任务
     * @param sourceStaNo
     * @param staNo
     * @return
     */
    @RequestMapping("/AGVMove")
    public R AGVMove(@RequestParam(required = false) String sourceStaNo
            ,@RequestParam(required = false) String staNo){
        RCSParam rcsParam = new RCSParam();
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        String formattedDate = now.format(formatter); // 格式化日期时间
        //网络流水号
        rcsParam.setReqId(now.toString());
        //应用标识
        rcsParam.setClientId("WMS");
        //通知时间
        rcsParam.setReqTime(formattedDate);
        RCSParam.DataBody dataBody=new RCSParam.DataBody();
        //任务号
        dataBody.setId(formattedDate);
        List<RCSParam.TaskBody> taskBodyList=new ArrayList<>();
        RCSParam.TaskBody taskBody=new RCSParam.TaskBody();
        //取货类型
        taskBody.setType("load");
        taskBody.setStation(sourceStaNo);
        taskBodyList.add(taskBody);
        RCSParam.TaskBody taskBody1=new RCSParam.TaskBody();
        //放货类型
        taskBody1.setType("unload");
        taskBody1.setStation(staNo);
        taskBodyList.add(taskBody1);
        dataBody.setTasks(taskBodyList);
        rcsParam.setData(dataBody);
        String response ="";
        Boolean bool =false;
        try {
            log.info("wms派发搬运任务给AGV搬运={}", rcsParam);
            response = new HttpHandler.Builder()
                    // .setHeaders(headParam)
                    .setUri(url)
                    .setPath(attrcs)
                    .setJson(JSON.toJSONString(rcsParam))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if(jsonObject.getBoolean("IsSuccess")){
                bool = true;
            }
        } catch (Exception e) {
            log.error("wms派发搬运任务给AGV搬运失败返回值={}", response);
        } finally {
            apiLogService.save("wms派发搬运任务给AGV搬运"
                    , url + attrcs
                    , null
                    , "127.0.0.1"
                    , JSON.toJSONString(rcsParam)
                    , response
                    , bool
            );
        }
        if(bool){
            return R.ok();
        }else {
            return R.error("下发任务失败");
        }
    }
}
src/main/java/com/zy/asrs/controller/WorkController.java
@@ -158,4 +158,6 @@
        return R.ok("任务重新入库,目标库位:" + locNo);
    }
}
src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -70,7 +70,7 @@
    @ApiModelProperty(value= "产地")
    private String origin;
    @ApiModelProperty(value= "厂家")
    @ApiModelProperty(value= "唯一码")
    private String manu;
    @ApiModelProperty(value= "生产日期")
@@ -105,7 +105,7 @@
    @TableField("supp_code")
    private String suppCode;
    @ApiModelProperty(value= "是否批次 1: 是  0: 否  ")
    @ApiModelProperty(value= "agv任务下发 : 0:待下发 1:下发成功 2:任务完成")
    @TableField("be_batch")
    private Integer beBatch;
src/main/java/com/zy/asrs/entity/param/RCSParam.java
New file
@@ -0,0 +1,51 @@
package com.zy.asrs.entity.param;
import lombok.Data;
import java.util.List;
@Data
public class RCSParam {
    /**
     * 网络流水号
     */
    private String ReqId;
    /**
     * 应用表示 wms
     */
    private String ClientId;
    /**
     * 通知时间
     */
    private String ReqTime;
    /**
     * 数据
     */
    private DataBody Data;
    @Data
    public static class DataBody {
        /**
         * 任务号
         */
        private String Id;
        private List<TaskBody> tasks;
    }
    @Data
    public static class TaskBody {
        /**
         * 任务类型 :
         * load 取货 ; unload 放货 ;
         */
        private String Type;
        /**
         * 目标库位
         */
        private String Station;
    }
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -125,17 +125,6 @@
        if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
            throw new CoolException(BaseRes.PARAM);
        }
        // 判断是否有相同条码的数据
        if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
                eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
            throw new CoolException(param.getBarcode() + "数据正在进行入库");
        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode()));
        if (countLoc > 0 || countWrk > 0) {
            throw new CoolException("工作档/库存条码数据已存在===>>" + param.getBarcode());
        }
        Date now = new Date();
@@ -164,7 +153,7 @@
                WaitPakin waitPakin = new WaitPakin();
                waitPakin.sync(mat);
                waitPakin.setBatch(detlDto.getBatch());
                waitPakin.setZpallet(param.getBarcode());   // 托盘码
                waitPakin.setZpallet("");   // 托盘码
                waitPakin.setIoStatus("N");     // 入出状态
                waitPakin.setAnfme(detlDto.getAnfme());  // 数量
                waitPakin.setStatus("Y");    // 状态
@@ -172,6 +161,9 @@
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                waitPakin.setMemo(param.getBarcode());//AGV源站
                waitPakin.setBeBatch(0);//AGV 任务等待下发
                waitPakin.setManu(now.getTime()+"");//唯一码
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
src/main/java/com/zy/asrs/task/NewWay/AutomaticallyAssignInTasksToRCSScheduler.java
New file
@@ -0,0 +1,61 @@
package com.zy.asrs.task.NewWay;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.R;
import com.zy.asrs.controller.MobileController;
import com.zy.asrs.entity.WaitPakin;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.impl.WaitPakinServiceImpl;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.WorkMastHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/**
 * Created by vincent on 2020/7/7
 */
@Component
public class AutomaticallyAssignInTasksToRCSScheduler {
    private static final Logger log = LoggerFactory.getLogger(AutomaticallyAssignInTasksToRCSScheduler.class);
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WorkMastHandler workMastHandler;
    @Autowired
    private WaitPakinServiceImpl waitPakinService;
    @Autowired
    private MobileController mobileController;
    /**
     * 自动派发入库任务给RCS
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
        //查看是否有agv在做的任务
        WaitPakin waitPakin1=waitPakinService.selectOne(new EntityWrapper<WaitPakin>().eq("be_batch",1));
        if(waitPakin1!=null){
            return;
        }
        //找到正在等待的组托数据
        //该数据进行0转1
        WaitPakin waitPakin=waitPakinService.selectOne(new EntityWrapper<WaitPakin>().eq("be_batch",0));
        if(waitPakin!=null){
            R r=mobileController.AGVMove(waitPakin.getMemo(),100+"");
            if (r.get("code").equals(200)){
                waitPakin.setBeBatch(1);//0转1
                waitPakinService.update(waitPakin,new EntityWrapper<WaitPakin>().eq("manu",waitPakin.getManu()));
            }
        }
    }
}
src/main/resources/application.yml
@@ -12,7 +12,7 @@
    enabled: false
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jxtlfasrs
    url: jdbc:sqlserver://127.0.0.1:50948;databasename=dlzasrs
#    url: jdbc:sqlserver://10.12.55.200:1433;databasename=zjfnasrs
    username: sa
    password: sa@123
@@ -100,4 +100,11 @@
  # 启动测试请求
  startUpTestPACK: TestStart
  #暂停测试
  suspendTestPACK: TestStop
  suspendTestPACK: TestStop
#RCS
rcs:
  address:
    url: http://192.168.3.102:16001
    #任务下发地址
    attrcs: 3CLOUD/Kingdee.BOS.WebApi.ServicesStub.