自动化立体仓库 - WMS系统
lty
2025-03-10 bf81b6e3600a49cb8621cd798db9aa521956bc6e
#接口开发
1个文件已添加
9个文件已修改
261 ■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkMastService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WCSReportScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WCSReportHandler.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/param/SearchEmptyParam.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/param/SearchLocParam.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/license.lic 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layuiadmin/json/content/list.js 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -28,4 +28,6 @@
    int saveWrkDetlLog(Integer workNo);
//    List<WrkMast> selectWrkMastWrkDetlMatnrBatch(@Param("ioType") Integer ioType, @Param("matnr") String matnr , @Param("batch") String batch , @Param("grade") String grade , @Param("crnNo") Integer crnNo);
}
src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -26,4 +26,6 @@
    List<WrkMast> selectWrkMastWrkDetlMatnrBatch(Integer ioType,String matnr , String batch ,String grade,Integer crnNo);
//    List<WrkMast> selectWrkMastWrkDetlMatnrBatch(Integer ioType,String matnr , String batch ,String grade,Integer crnNo);
}
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -54,4 +54,9 @@
    public List<WrkMast> selectWrkMastWrkDetlMatnrBatch(Integer ioType,String matnr , String batch ,String grade ,Integer crnNo) {
        return this.baseMapper.selectWrkMastWrkDetlMatnrBatch(ioType,matnr,batch,grade,crnNo);
    }
//    @Override
//    public List<WrkMast> selectWrkMastWrkDetlMatnrBatch(Integer ioType,String matnr , String batch ,String grade ,Integer crnNo) {
//        return this.baseMapper.selectWrkMastWrkDetlMatnrBatch(ioType,matnr,batch,grade,crnNo);
//    }
}
src/main/java/com/zy/asrs/task/WCSReportScheduler.java
@@ -36,7 +36,7 @@
        List<WrkMast> wrkMastList=wrkMastService.selectList(new EntityWrapper<WrkMast>());
        int i=1;
        for(WrkMast wrkMast:wrkMastList){
            if (wrkMast.getWrkSts()==0){
            if (wrkMast.getWrkSts() == 0 || wrkMast.getWrkSts() == 14){
                wcsReportHandler.start(wrkMast,i);
                i++;
            }
src/main/java/com/zy/asrs/task/handler/WCSReportHandler.java
@@ -54,7 +54,8 @@
        WorkIssuedResult.Tasks task = new WorkIssuedResult.Tasks();
        task.setTaskId(wrkMast.getWrkNo().toString());
        task.setBarCode(wrkMast.getBarcode());
        task.setOrder(i);
//        task.setOrder(i);
        task.setOrder((int) (100 - wrkMast.getIoPri()));
        //优先级排序 15.出库>14.入库>13.空板出库>12.空板入库>11.移库
        if(wrkMast.getIoType() == 1 || wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57){//入库
src/main/java/com/zy/common/web/WcsController.java
@@ -17,6 +17,7 @@
import com.zy.common.model.StartupDto;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.common.web.param.SearchEmptyParam;
import com.zy.common.web.param.SearchLocParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -70,7 +71,10 @@
    private String url;
    @Value("${wcs-slave.loc}")
    private String loc;
    @Value("${wcs-slave.warehouse}")
    private String warehouse;
    //全板入库
    @PostMapping("/fromwcs/inware-task")
    @ResponseBody
    public synchronized Re getLocNo(@RequestBody SearchLocParam param) {
@@ -81,6 +85,12 @@
        if (Cools.isEmpty(param.getFromPort())) {
            return Re.error("源站编号不能为空");
        }
        if(Cools.isEmpty(param.getWarehouse())){
            return Re.error("仓库编号不能为空");
        }
        if(!param.getWarehouse().equals(warehouse)){
            return Re.error("仓库编号不匹配");
        }
        List<WaitPakin> waitPakins = null;
        if (param.getFromPort().equals("101")) {
@@ -90,7 +100,7 @@
                return Re.error("有空板出库到100站时时禁止入库");
            }
            if (Cools.isEmpty(param.getBarCode()) && param.getIoType() != 10) {
            if (Cools.isEmpty(param.getBarCode())) {
                return Re.error("条码不能为空");
            }
            waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarCode()));
@@ -128,20 +138,48 @@
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        StartupDto dto = null;
        //全板入库
        param.setIoType(1);
        switch (param.getIoType()) {
            case 1://满托盘入库
                assert waitPakins != null;
                dto = startupFullPutStore(Integer.valueOf(param.getFromPort()), param.getBarCode(), locTypeDto, waitPakins);
                break;
            case 10://空托盘入库
                dto = emptyPlateIn(Integer.valueOf(param.getFromPort()), locTypeDto, param.getBarCode());
                break;
//            case 10://空托盘入库
//                dto = emptyPlateIn(Integer.valueOf(param.getFromPort()), locTypeDto, param.getBarCode());
//                break;
            default:
                break;
        }
        log.info("WCS入库接口返参:{},托盘码:{}", dto, param.getBarCode());
        return Re.ok();
    }
    @PostMapping("/fromwcs/empty-pallet-task")
    @ResponseBody
    public synchronized Re getLocNo(@RequestBody SearchEmptyParam param) {
        log.info("收到WCS空板入库接口请求====>>入参:{}", param);
        if(Cools.isEmpty(param.getWarehouse())){
            return Re.error("仓库编号不能为空");
        }
        if(!param.getWarehouse().equals(warehouse)){
            return Re.error("仓库编号不匹配");
        }
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(Integer.valueOf(param.getFromPort()), true);
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        StartupDto dto = null;
        dto = emptyPlateIn(Integer.valueOf(param.getFromPort()), locTypeDto);
        log.info("WCS入库接口返参:{},托盘码:{}", dto);
        return Re.ok();
    }
    @PostMapping("/auto/emptyIn/v1")
    @ResponseBody
@@ -279,7 +317,7 @@
    }
    @Transactional
    public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto, String barcode) {
    public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto) {
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
@@ -301,7 +339,6 @@
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("Y"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setBarcode(barcode);
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        // 操作人员数据
        wrkMast.setAppeTime(new Date());
@@ -422,8 +459,10 @@
                    throw new CoolException("修改库位状态失败");
                }
                wrkMast.setWrkSts(14L);//14.已出库未确认
            } else if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 110) {
            } else if ((wrkMast.getIoType() == 101 || wrkMast.getIoType() == 110) && statusParam.getTaskStatus() != 8) {
                wrkMast.setWrkSts(7L);//7.出库完成
            } else if (wrkMast.getWrkSts() == 7 && statusParam.getTaskStatus() == 8){
                wrkMast.setWrkSts(15L);//15.出库更新完成,任务结束
            }
        }
        wrkMastService.updateById(wrkMast);
@@ -446,16 +485,41 @@
        List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>());
        List<HashMap<String, Object>> mapList = new ArrayList<>();
        for (LocMast locMast : locMasts) {
            if (locMast.getLev1() != 4) {
            if (locMast.getLocSts() != "X" && locMast.getLocSts() != "G" ) {
                HashMap<String, Object> map = new HashMap<>();
                map.put("warehouse", "ddth");
                map.put("posiX", locMast.getRow1());
                map.put("posiY", locMast.getBay1());
                map.put("posiZ", locMast.getLev1());
                map.put("cargoNo", locMast.getLocNo());
                if(locMast.getLev1() == 1 && locMast.getRow1() == 8 && locMast.getBay1() == 1){
                    map.put("type", "6");
                }else {
                map.put("type", "0");
                }
                mapList.add(map);
            }
            if(locMast.getLocSts() == "G"){
                HashMap<String, Object> map = new HashMap<>();
                map.put("warehouse", "ddth");
                map.put("posiX", locMast.getRow1());
                map.put("posiY", locMast.getBay1());
                map.put("posiZ", locMast.getLev1());
                map.put("cargoNo", locMast.getLocNo());
                map.put("type", "1");
                mapList.add(map);
            }
            if(locMast.getLocSts() == "X"){
                HashMap<String, Object> map = new HashMap<>();
                map.put("warehouse", "ddth");
                map.put("posiX", locMast.getRow1());
                map.put("posiY", locMast.getBay1());
                map.put("posiZ", locMast.getLev1());
                map.put("cargoNo", locMast.getLocNo());
                map.put("type", "5");
                mapList.add(map);
            }
        }
        if (mapList.size() > 0) {
            String response = "";
src/main/java/com/zy/common/web/param/SearchEmptyParam.java
New file
@@ -0,0 +1,37 @@
package com.zy.common.web.param;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class SearchEmptyParam {
    /**
     * 申请时间
     */
    @JsonProperty(value = "applyTime")
    private String applyTime;
    /**
     * 仓库编码
     */
    @JsonProperty(value = "warehouse")
    private String warehouse;
    /**
     * 入库口编号
     */
    @JsonProperty(value = "fromPort")
    private String fromPort;
    /**
     * 任务类型
     */
    @JsonProperty(value = "taskType")
    private Integer taskType;
    /**
     * 空托盘数量
     */
    @JsonProperty(value = "palletNum")
    private Integer palletNum;
}
src/main/java/com/zy/common/web/param/SearchLocParam.java
@@ -18,6 +18,12 @@
    private String applyTime;
    /**
     * 仓库编码
     */
    @JsonProperty(value = "warehouse")
    private String warehouse;
    /**
     * 入库口编号
     */
    @JsonProperty(value = "fromPort")
src/main/resources/license.lic
Binary files differ
src/main/webapp/static/layuiadmin/json/content/list.js
@@ -1,62 +1,62 @@
{
  "code": 0
  ,"msg": ""
  ,"count": "100"
  ,"data": [{
    "id": "001"
    ,"label": "美食"
    ,"title": "舌尖上的中国第一季"
    ,"author": "作者-1"
    ,"content": "通过中华美食的多个侧面,来展现食物给中国人生活带来的仪式、伦理等方面的文化;见识中国特色食材以及与食物相关、构成中国美食特有气质的一系列元素;了解中华饮食文化的精致和源远流长"
    ,"uploadtime": 20121204
    ,"status": true
  },{
    "id": "002"
    ,"label": "美食"
    ,"title": "舌尖上的中国第二季"
    ,"author": "作者-2"
    ,"content": "以食物为窗口,读懂中国——通过美食,使人们可以有滋有味地认知这个古老的东方国度。“一方水土一方人”,本片将通过展示人们日常生活中与美食相关的多重侧面,描绘与感知中国人的文化传统、家族观念、生活态度与故土难离。人们收获、保存、烹饪、生产美食,并在其过程中留存和传承食物所承载的味觉记忆、饮食习俗、文化样态与家常情感。"
    ,"uploadtime": 20141204
    ,"status": false
  },{
    "id": "003"
    ,"label": "美食"
    ,"title": "舌尖上的中国第三季"
    ,"author": "作者-3"
    ,"content": "以食物为窗口,读懂中国——通过美食,使人们可以有滋有味地认知这个古老的东方国度。“一方水土一方人”,本片将通过展示人们日常生活中与美食相关的多重侧面,描绘与感知中国人的文化传统、家族观念、生活态度与故土难离。人们收获、保存、烹饪、生产美食,并在其过程中留存和传承食物所承载的味觉记忆、饮食习俗、文化样态与家常情感将世界美食和中国美食进行比照。春耕、夏耘、秋收、冬藏,天人合一的东方哲学让中国饮食依时而变,智慧灵动,中医营养摄生学说创造了食材运用的新天地,儒家人伦道德则把心意和家的味道端上我们的餐桌。淘洗历史,糅合时光,一代又一代的中国人在天地间升起烟火,用至精至诚的心意烹制食物,一餐一食之间,中国人展示个性,确认归属,构建文明,理解和把握着世界的奥妙。"
    ,"uploadtime": 20161204
    ,"status": false
  },{
    "id": "004"
    ,"label": "历史"
    ,"title": "诸葛亮骂王朗"
    ,"author": "作者-1"
    ,"content": "皓首匹夫!苍髯老贼!你即将命归于九泉之下,届时,有何面目见汉朝二十四代先帝?二臣贼子!你枉活七十有六,一生未立寸功,只会摇唇舞舌,助曹为虐!一条断脊之犬,还敢在我军阵前狺狺狂吠!我从未见过如此厚颜无耻之人!!!"
    ,"uploadtime": 20180201
    ,"status": false
  },{
    "id": "005"
    ,"label": "新闻"
    ,"title": "新时代特色中国梦"
    ,"author": "作者-1"
    ,"content": "今天,我们比历史上任何时期都更接近、更有信心和能力实现中华民族伟大复兴的目标。新时代已经到来,蓝图已经绘就,中国梦离我们越来越近了。"
    ,"uploadtime": 20180512
    ,"status": false
  },{
    "id": "006"
    ,"label": "新闻"
    ,"title": "新时代特色中国梦"
    ,"author": "作者-2"
    ,"content": "梦想不会主动走向我们,只有我们去主动实现梦想。行百里者半九十。虽然中国梦离我们越来越近了,但是要实现中国梦,还要靠我们以永不懈怠的精神状态、功在不舍的坚强意志,不忘初心,继续前进。"
    ,"uploadtime": 20180514
    ,"status": false
  },{
    "id": "007"
    ,"label": "体育"
    ,"title": "皇马大战利物浦"
    ,"author": "作者-3"
    ,"content": "对欧足联而言,更想要产生个新冠军。连续三年都是同一个冠军队,这会毁掉欧冠……”格里姆表态,“皇马有梦幻般的阵容,但从促进竞争的角度而言,另一支球队获胜会更好。"
    ,"uploadtime": 20180515
    ,"status": false
  }]
}
// {
//   "code": 0
//   ,"msg": ""
//   ,"count": "100"
//   ,"data": [{
//     "id": "001"
//     ,"label": "美食"
//     ,"title": "舌尖上的中国第一季"
//     ,"author": "作者-1"
//     ,"content": "通过中华美食的多个侧面,来展现食物给中国人生活带来的仪式、伦理等方面的文化;见识中国特色食材以及与食物相关、构成中国美食特有气质的一系列元素;了解中华饮食文化的精致和源远流长"
//     ,"uploadtime": 20121204
//     ,"status": true
//   },{
//     "id": "002"
//     ,"label": "美食"
//     ,"title": "舌尖上的中国第二季"
//     ,"author": "作者-2"
//     ,"content": "以食物为窗口,读懂中国——通过美食,使人们可以有滋有味地认知这个古老的东方国度。“一方水土一方人”,本片将通过展示人们日常生活中与美食相关的多重侧面,描绘与感知中国人的文化传统、家族观念、生活态度与故土难离。人们收获、保存、烹饪、生产美食,并在其过程中留存和传承食物所承载的味觉记忆、饮食习俗、文化样态与家常情感。"
//     ,"uploadtime": 20141204
//     ,"status": false
//   },{
//     "id": "003"
//     ,"label": "美食"
//     ,"title": "舌尖上的中国第三季"
//     ,"author": "作者-3"
//     ,"content": "以食物为窗口,读懂中国——通过美食,使人们可以有滋有味地认知这个古老的东方国度。“一方水土一方人”,本片将通过展示人们日常生活中与美食相关的多重侧面,描绘与感知中国人的文化传统、家族观念、生活态度与故土难离。人们收获、保存、烹饪、生产美食,并在其过程中留存和传承食物所承载的味觉记忆、饮食习俗、文化样态与家常情感将世界美食和中国美食进行比照。春耕、夏耘、秋收、冬藏,天人合一的东方哲学让中国饮食依时而变,智慧灵动,中医营养摄生学说创造了食材运用的新天地,儒家人伦道德则把心意和家的味道端上我们的餐桌。淘洗历史,糅合时光,一代又一代的中国人在天地间升起烟火,用至精至诚的心意烹制食物,一餐一食之间,中国人展示个性,确认归属,构建文明,理解和把握着世界的奥妙。"
//     ,"uploadtime": 20161204
//     ,"status": false
//   },{
//     "id": "004"
//     ,"label": "历史"
//     ,"title": "诸葛亮骂王朗"
//     ,"author": "作者-1"
//     ,"content": "皓首匹夫!苍髯老贼!你即将命归于九泉之下,届时,有何面目见汉朝二十四代先帝?二臣贼子!你枉活七十有六,一生未立寸功,只会摇唇舞舌,助曹为虐!一条断脊之犬,还敢在我军阵前狺狺狂吠!我从未见过如此厚颜无耻之人!!!"
//     ,"uploadtime": 20180201
//     ,"status": false
//   },{
//     "id": "005"
//     ,"label": "新闻"
//     ,"title": "新时代特色中国梦"
//     ,"author": "作者-1"
//     ,"content": "今天,我们比历史上任何时期都更接近、更有信心和能力实现中华民族伟大复兴的目标。新时代已经到来,蓝图已经绘就,中国梦离我们越来越近了。"
//     ,"uploadtime": 20180512
//     ,"status": false
//   },{
//     "id": "006"
//     ,"label": "新闻"
//     ,"title": "新时代特色中国梦"
//     ,"author": "作者-2"
//     ,"content": "梦想不会主动走向我们,只有我们去主动实现梦想。行百里者半九十。虽然中国梦离我们越来越近了,但是要实现中国梦,还要靠我们以永不懈怠的精神状态、功在不舍的坚强意志,不忘初心,继续前进。"
//     ,"uploadtime": 20180514
//     ,"status": false
//   },{
//     "id": "007"
//     ,"label": "体育"
//     ,"title": "皇马大战利物浦"
//     ,"author": "作者-3"
//     ,"content": "对欧足联而言,更想要产生个新冠军。连续三年都是同一个冠军队,这会毁掉欧冠……”格里姆表态,“皇马有梦幻般的阵容,但从促进竞争的角度而言,另一支球队获胜会更好。"
//     ,"uploadtime": 20180515
//     ,"status": false
//   }]
// }