自动化立体仓库 - WMS系统
野心家
2025-05-05 d613408e745a87c2ed77506a96097b0185352d78
pda呼叫空板、出库确认
8个文件已修改
3个文件已添加
1个文件已删除
551 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/RCSParam.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkMastScheduler.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/newWay/AssignTasksToRCSScheduler.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/newWay/AutoSupplementEmptyBoardScheduler.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/newWay/handler/AssignTasksToRCSHandler.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -18,6 +18,8 @@
import com.zy.common.model.LocDto;
import com.zy.common.model.TaskDto;
import com.zy.common.model.WrkDto;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -55,6 +57,10 @@
    private PackService packService;
    @Autowired
    private ManLocDetlMapper manLocDetlMapper;
    @Autowired
    private CommonService commonService;
    @Autowired
    private StaDescService staDescService;
    // 商品上架
@@ -174,6 +180,149 @@
        return R.ok();
    }
    /**
     * 出库确认完成
     * @param list
     * @return
     */
    @RequestMapping("/pakout/confirm/auth")
    @ManagerAuth
    @Transactional
    public R pakoutConfirm(@RequestBody List<WrkDetl> list) {
        if (Cools.isEmpty(list)) {
            return R.ok();
        }
        Set<Integer> wrkNos = new HashSet<>();
        List<WrkDto> dtos = new ArrayList<>();
        for (WrkDetl wrkDetl : list) {
            if (wrkNos.contains(wrkDetl.getWrkNo())) {
                for (WrkDto dto : dtos) {
                    if (dto.getWrkNo().equals(wrkDetl.getWrkNo())) {
                        dto.getWrkDetls().add(wrkDetl);
                        break;
                    }
                }
            } else {
                wrkNos.add(wrkDetl.getWrkNo());
                dtos.add(new WrkDto(wrkDetl.getWrkNo(), wrkDetl));
            }
        }
        for (WrkDto dto : dtos) {
            WrkMast wrkMast = wrkMastService.selectById(dto.getWrkNo());
            if (wrkMast != null) {
                // 101
                if (wrkMast.getIoType() == 101) {
                    for (WrkDetl wrkDetl : dto.getWrkDetls()) {
                        wrkDetlService.updateInspect(wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                    }
                }
                // 103
                if (wrkMast.getIoType() == 103) {
                    if (!wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()))) {
                        throw new CoolException("拣料出库确认失败");
                    }
                    for (WrkDetl wrkDetl : dto.getWrkDetls()) {
                        wrkDetl.setInspect(1);
                        if (!wrkDetlService.insert(wrkDetl)) {
                            throw new CoolException("拣料出库确认失败");
                        }
                    }
                }
            }
        }
        for (Integer wrkNo : wrkNos) {
            WrkMast wrkMast = wrkMastService.selectById(wrkNo);
            if (wrkMast.getWrkSts() == 15 && (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N"))) {
                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkNo);
                boolean complete = true;
                for (WrkDetl wrkDetl : wrkDetls) {
                    if (wrkDetl.getInspect() == null || wrkDetl.getInspect() == 0) {
                        complete = false;
                        break;
                    }
                }
                if (complete) {
                    wrkMast.setInvWh("Y");
                    wrkMast.setModiTime(new Date());
                    if (!wrkMastService.updateById(wrkMast)) {
                        throw new CoolException("修改工作档" + wrkNo + "失败");
                    }
                }
            }
        }
        return R.ok("完成确认");
    }
    /**
     * 补空托盘到入库缓存位
     * @param map
     * @return
     */
    @RequestMapping("/supplementEmpty")
    @ManagerAuth
    @Transactional
    public R supplementEmpty(@RequestBody HashMap<String,Object> map){
        if (Cools.isEmpty(map)) {
            return R.error("补空托盘库位为空");
        }
        List<LocMast> locMastList=locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D"));
        if (locMastList.isEmpty()) {
            return R.error("立库里没有空托盘");
        }
        // 获取工作号
        int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
        // 获取源站
        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                .eq("type_no", 110)
                .eq("stn_no", 102)
                .eq("crn_no", locMastList.get(0).getCrnNo());
        StaDesc staDesc = staDescService.selectOne(wrapper);
        Integer sourceStaNo = staDesc.getCrnStn();
        if (Cools.isEmpty(sourceStaNo)) {
            throw new CoolException("检索源站失败");
        }
        Date now = new Date();
        // 保存工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(110); // 入出库状态: 110.空板出库
        wrkMast.setIoPri(10D);
        wrkMast.setSourceStaNo(sourceStaNo); // 源站
        wrkMast.setStaNo(102); // 目标站
        wrkMast.setCrnNo(locMastList.get(0).getCrnNo());
        wrkMast.setSourceLocNo(locMastList.get(0).getLocNo()); // 源库位
        wrkMast.setFullPlt("N"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("Y"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setAppeUser(getUserId());
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(getUserId());
        wrkMast.setModiTime(now);
        wrkMast.setMemo((String) map.get("locNo"));//agv放货位
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        // 更新库位状态 D.空板 -> R.出库预约
        if (locMastList.get(0).getLocSts().equals("D")){
            locMastList.get(0).setLocSts("R");
            locMastList.get(0).setModiUser(getUserId());
            locMastList.get(0).setModiTime(now);
            if (!locMastService.updateById(locMastList.get(0))) {
                throw new CoolException("更新库位状态失败");
            }
        }
        return R.ok();
    }
    // 根据库位码和商品码搜索商品
    @RequestMapping("/mat/find/auth")
    public R find(@RequestParam(required = false) String locNo
@@ -227,75 +376,7 @@
    }
    @RequestMapping("/pakout/confirm/auth")
    @ManagerAuth
    @Transactional
    public R pakoutConfirm(@RequestBody List<WrkDetl> list) {
        if (Cools.isEmpty(list)) {
            return R.ok();
        }
        Set<Integer> wrkNos = new HashSet<>();
        List<WrkDto> dtos = new ArrayList<>();
        for (WrkDetl wrkDetl : list) {
            if (wrkNos.contains(wrkDetl.getWrkNo())) {
                for (WrkDto dto : dtos) {
                    if (dto.getWrkNo().equals(wrkDetl.getWrkNo())) {
                        dto.getWrkDetls().add(wrkDetl);
                        break;
                    }
                }
            } else {
                wrkNos.add(wrkDetl.getWrkNo());
                dtos.add(new WrkDto(wrkDetl.getWrkNo(), wrkDetl));
            }
        }
        for (WrkDto dto : dtos) {
            WrkMast wrkMast = wrkMastService.selectById(dto.getWrkNo());
            if (wrkMast != null) {
                // 101
                if (wrkMast.getIoType() == 101) {
                    for (WrkDetl wrkDetl : dto.getWrkDetls()) {
                        wrkDetlService.updateInspect(wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                    }
                }
                // 103
                if (wrkMast.getIoType() == 103) {
                    if (!wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()))) {
                        throw new CoolException("拣料出库确认失败");
                    }
                    for (WrkDetl wrkDetl : dto.getWrkDetls()) {
                        wrkDetl.setInspect(1);
                        if (!wrkDetlService.insert(wrkDetl)) {
                            throw new CoolException("拣料出库确认失败");
                        }
                    }
                }
            }
        }
        for (Integer wrkNo : wrkNos) {
            WrkMast wrkMast = wrkMastService.selectById(wrkNo);
            if (wrkMast.getWrkSts() == 14 && (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N"))) {
                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkNo);
                boolean complete = true;
                for (WrkDetl wrkDetl : wrkDetls) {
                    if (wrkDetl.getInspect() == null || wrkDetl.getInspect() == 0) {
                        complete = false;
                        break;
                    }
                }
                if (complete) {
                    wrkMast.setInvWh("Y");
                    wrkMast.setModiTime(new Date());
                    if (!wrkMastService.updateById(wrkMast)) {
                        throw new CoolException("修改工作档" + wrkNo + "失败");
                    }
                }
            }
        }
        return R.ok("完成确认");
    }
    // 盘点 ----------------------------------------------------------------------------------------------------
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -1,11 +1,15 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.AppAuth;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.service.OpenService;
import com.zy.asrs.service.WrkMastService;
import com.zy.common.model.DetlDto;
import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
@@ -13,9 +17,7 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
 * Created by vincent on 2022/4/8
@@ -32,6 +34,8 @@
    @Autowired
    private OpenService openService;
    @Autowired
    private WrkMastService wrkMastService;
    @PostMapping("/order/matSync/default/v1")
    @AppAuth(memo = "商品信息同步接口")
@@ -206,5 +210,36 @@
    /*********************************同步物料档案和订单****************************************************/
    /*********************************RCS任务结束接口****************************************************/
    /**
     * 库存统计
     */
    @RequestMapping("/taskOver")
    public HashMap taskOver(@RequestBody HashMap<String,Object> param) {
        HashMap map = new HashMap();
        Map<String ,Object > map1 = (Map<String, Object>)param.get("Data");
        String id = (String) map1.get("Id");
        String status = (String) map1.get("Status");
        if (!status.equals("finished_manual")){
            map.put("IsSuccess", true);
            return map;
        }
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no",Integer.valueOf(id)));
        if (wrkMast == null) {
            map.put("IsSuccess", false);
            map.put("ErrorCode","1");
            map.put("Message","没有找到该任务号:"+id);
            return map;
        }
        if(wrkMast.getIoType()==101||wrkMast.getIoType()==110){
            wrkMast.setWrkSts(15L);//搬运完成,任务转历史档
        }else if(wrkMast.getIoType()==103||wrkMast.getIoType()==107){
            wrkMast.setWrkSts(14L);//搬运完成,任务状态回到14
        }
        wrkMastService.updateById(wrkMast);
        map.put("IsSuccess", true);
        return map;
    }
}
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -264,9 +264,9 @@
    private String manuType;
    /**
     * 备注
     * agv放货位
     */
    @ApiModelProperty(value= "备注")
    @ApiModelProperty(value= "agv放货位")
    private String memo;
    @ApiModelProperty(value= "")
src/main/java/com/zy/asrs/entity/param/RCSParam.java
New file
@@ -0,0 +1,52 @@
package com.zy.asrs.entity.param;
import lombok.Data;
import java.util.Date;
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/WorkServiceImpl.java
@@ -223,7 +223,7 @@
//            }
            // 获取路径
            StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), outSta);
            StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), 102);
            // 生成工作号
            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
            // 生成工作档
@@ -235,7 +235,7 @@
            wrkMast.setIoPri(13D); // 优先级:13
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
            wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
            wrkMast.setStaNo(102); // 目标站
            wrkMast.setSourceLocNo(dto.getLocNo()); // 源库位
            wrkMast.setFullPlt("Y"); // 满板:Y
            wrkMast.setPicking("N"); // 拣料
@@ -247,6 +247,9 @@
            wrkMast.setAppeTime(now);
            wrkMast.setModiUser(userId);
            wrkMast.setModiTime(now);
            if(outSta==2000){
                wrkMast.setMemo("2000");
            }
            if (!wrkMastService.insert(wrkMast)) {
                throw new CoolException("保存工作档失败,出库库位号:"+dto.getLocNo());
            }
@@ -446,7 +449,7 @@
            // 获取源站
            Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                    .eq("type_no", 110)
                    .eq("stn_no", param.getOutSite())
                    .eq("stn_no", 102)
                    .eq("crn_no", locMast.getCrnNo());
            StaDesc staDesc = staDescService.selectOne(wrapper);
            Integer sourceStaNo = staDesc.getCrnStn();
@@ -462,7 +465,7 @@
            wrkMast.setIoType(110); // 入出库状态: 110.空板出库
            wrkMast.setIoPri(10D);
            wrkMast.setSourceStaNo(sourceStaNo); // 源站
            wrkMast.setStaNo(param.getOutSite()); // 目标站
            wrkMast.setStaNo(102); // 目标站
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setSourceLocNo(locNo); // 源库位
            wrkMast.setFullPlt("N"); // 满板:Y
@@ -474,6 +477,9 @@
            wrkMast.setAppeTime(now);
            wrkMast.setModiUser(userId);
            wrkMast.setModiTime(now);
            if(param.getOutSite()==1000){
                wrkMast.setMemo("1000");
            }
            boolean res = wrkMastService.insert(wrkMast);
            if (!res) {
                throw new CoolException("保存工作档失败");
src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -1,9 +1,14 @@
package com.zy.asrs.task;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.WorkMastHandler;
import com.zy.asrs.task.newWay.handler.AssignTasksToRCSHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -25,11 +30,28 @@
    private WrkMastService wrkMastService;
    @Autowired
    private WorkMastHandler workMastHandler;
    @Autowired
    private BasDevpService  basDevpService;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
    private void execute() {
        List<WrkMast> wrkMasts = wrkMastService.selectToBeCompleteData();
        if (wrkMasts.isEmpty()) {
            List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>()
                    .eq("wrk_sts", 14)
                    .eq("io_type", 103));
            for (WrkMast wrkMast : wrkMasts1) {
                BasDevp basDevp=basDevpService.selectOne(new EntityWrapper<BasDevp>()
                        .eq("dev_no",wrkMast.getStaNo())
                        .eq("wrk_no",wrkMast.getWrkNo()));
                if(basDevp==null){
                    continue;
                }
                if (!Cools.isEmpty(wrkMast.getMemo())) {
                    wrkMast.setWrkSts(30L);
                    wrkMastService.updateById(wrkMast);
                }
            }
            return;
        }
        for (WrkMast wrkMast : wrkMasts) {
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -383,6 +383,14 @@
                            return FAIL.setMsg("全板出库 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                        }
                    }
                    if(Cools.isEmpty(wrkMast.getMemo())){
                        // 修改工作主档状态
                        wrkMast.setWrkSts(15L);
                    }else{
                        //有agv放货点
                        // 修改工作主档状态
                        wrkMast.setWrkSts(30L);
                    }
                    break;
                // 空板出库
                case 110:
@@ -398,12 +406,20 @@
                            return FAIL.setMsg("空板出库 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                        }
                    }
                    if(Cools.isEmpty(wrkMast.getMemo())){
                        // 修改工作主档状态
                        wrkMast.setWrkSts(15L);
                    }else{
                        //有agv放货点
                        // 修改工作主档状态
                        wrkMast.setWrkSts(30L);
                    }
                    break;
                default:
                    break;
            }
            // 修改工作主档状态
            wrkMast.setWrkSts(15L);
            wrkMast.setModiTime(now);
            if (!wrkMastService.updateById(wrkMast)) {
//                exceptionHandle("更新出库完成状态失败;[workNo={0}]", wrkMast.getWrkNo());
src/main/java/com/zy/asrs/task/newWay/AssignTasksToRCSScheduler.java
New file
@@ -0,0 +1,53 @@
package com.zy.asrs.task.newWay;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.WorkMastScheduler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.newWay.handler.AssignTasksToRCSHandler;
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;
@Component
public class AssignTasksToRCSScheduler {
    private static final Logger log = LoggerFactory.getLogger(WorkMastScheduler.class);
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private AssignTasksToRCSHandler assignTasksToRCSHandler;
    /**
     * 下发任务给RCS
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts",30));
        if (wrkMasts.isEmpty()) {
            return;
        }
        for (WrkMast wrkMast : wrkMasts) {
            if(Cools.isEmpty(wrkMast.getMemo())){
                continue;
            }
            ReturnT<String> returnT = assignTasksToRCSHandler.start(wrkMast);
            if (!returnT.isSuccess()) {
                wrkMast.setUpdMk("X");
                wrkMast.setErrorMemo(returnT.getMsg());
                wrkMast.setErrorTime(new Date());
                if (!wrkMastService.updateById(wrkMast)) {
                    log.error("工作档[workNo={}]标记待处理失败", wrkMast.getWrkNo());
                }
            }
        }
    }
}
src/main/java/com/zy/asrs/task/newWay/AutoSupplementEmptyBoardScheduler.java
File was deleted
src/main/java/com/zy/asrs/task/newWay/handler/AssignTasksToRCSHandler.java
New file
@@ -0,0 +1,99 @@
package com.zy.asrs.task.newWay.handler;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.param.RCSParam;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
@Transactional
public class AssignTasksToRCSHandler extends AbstractHandler<String> {
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private ApiLogService apiLogService;
    @Value("${rcs.address.url}")
    private String url;
    @Value("${rcs.address.attrcs}")
    private String attrcs;
    public ReturnT<String> start(WrkMast wrkMast) {
        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(wrkMast.getWrkNo()+"");
        List<RCSParam.TaskBody> taskBodyList=new ArrayList<>();
        RCSParam.TaskBody taskBody=new RCSParam.TaskBody();
        //取货类型
        taskBody.setType("load");
        taskBody.setStation(wrkMast.getStaNo()+"");
        taskBodyList.add(taskBody);
        RCSParam.TaskBody taskBody1=new RCSParam.TaskBody();
        //放货类型
        taskBody1.setType("unload");
        taskBody1.setStation(wrkMast.getMemo());
        taskBodyList.add(taskBody1);
        dataBody.setTasks(taskBodyList);
        rcsParam.setData(dataBody);
        String response ="";
        Boolean bool =false;
        try {
            log.info("wms派发搬运任务给RCS出库={}", 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")){
                wrkMast.setWrkSts(31L);//WMS下发搬运任务给RCS成功
                wrkMastService.updateById(wrkMast);
                bool = true;
            }
        } catch (Exception e) {
            log.error("wcs派发任务给RCS出库失败{},返回值={}", wrkMast, response);
        } finally {
            apiLogService.save("WMS派发搬运任务给RCS"
                    , url + attrcs
                    , null
                    , "127.0.0.1"
                    , JSON.toJSONString(rcsParam)
                    , response
                    , bool
            );
        }
        return SUCCESS;
    }
}
src/main/resources/application.yml
@@ -66,4 +66,11 @@
    acctID: "67af18a2bc317c"
    username: "立库"
    password: "123456"
    lcid: 2052
    lcid: 2052
#RCS
rcs:
  address:
    url: http://192.168.3.102:16001
    #任务下发地址
    attrcs: 3CLOUD/Kingdee.BOS.WebApi.ServicesStub.
src/main/resources/mapper/WrkMastMapper.xml
@@ -69,9 +69,9 @@
    <select id="selectToBeHistoryData" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where wrk_sts=5
        or (wrk_sts=15 and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and dateadd(mi,15,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp) and inv_wh = 'Y')
        or (wrk_sts=15 and dateadd(mi,15,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp) and inv_wh = 'Y')
        or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp) and inv_wh = 'Y')
        order by io_time,wrk_no asc
    </select>