自动化立体仓库 - WMS系统
skyouc
16 小时以前 285deae97a62db611ee2485d3940e24307594f2a
数据结构修改
任务工作档修改
组托工作档修改
14个文件已修改
4个文件已添加
394 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/LocCacheController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocCache.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakin.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkDetl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/AgvCallParams.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/enums/LocStsType.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MobileService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/BareBoardHandler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/wrkMast/wrkMast.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocCacheController.java
@@ -47,6 +47,7 @@
        convert(param, wrapper);
        allLike(LocCache.class, param.keySet(), wrapper, condition);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        wrapper.eq("full_plt", "N");
        return R.ok(locCacheService.selectPage(new Page<>(curr, limit), wrapper));
    }
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -16,6 +16,7 @@
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.common.model.WrkDto;
import com.zy.common.web.BaseController;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@@ -138,6 +139,25 @@
    }
    @GetMapping("/cache/locs")
    @ManagerAuth
    @ApiOperation("获取缓存区库位信息")
    public R getCacheLocs() {
        return mobileService.getCacheLocs();
    }
    @PostMapping("/cache/agv/call")
    @ApiOperation("呼叫AGV搬运")
    @ManagerAuth
    public R callAgvMove(@RequestBody AgvCallParams params) {
        if (Objects.isNull(params)) {
            return R.error("参数不能为空!!");
        }
        return mobileService.callAgvMove(params, getUserId());
    }
    // 组托 ----------------------------------------------------------------------------------------------------
src/main/java/com/zy/asrs/entity/LocCache.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableField;
import com.core.common.SpringUtils;
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.service.BasWhsTypeService;
import com.zy.asrs.service.BasCrnpService;
@@ -204,6 +205,24 @@
        return null;
    }
    public String getLocSts$() {
        if (this.locSts.equals(LocStsType.LOC_STS_TYPE_F.type)) {
            return LocStsType.LOC_STS_TYPE_F.desc;
        } else if (locSts.equals(LocStsType.LOC_STS_TYPE_D.type)) {
            return LocStsType.LOC_STS_TYPE_D.desc;
        } else if (locSts.equals(LocStsType.LOC_STS_TYPE_O.type)) {
            return LocStsType.LOC_STS_TYPE_F.desc;
        } else if (locSts.equals(LocStsType.LOC_STS_TYPE_R.type)) {
            return LocStsType.LOC_STS_TYPE_R.desc;
        } else if (locSts.equals(LocStsType.LOC_STS_TYPE_S.type)) {
            return LocStsType.LOC_STS_TYPE_S.desc;
        } else if (locSts.equals(LocStsType.LOC_STS_TYPE_X.type)) {
            return LocStsType.LOC_STS_TYPE_X.desc;
        } else {
            return null;
        }
    }
//    public String getCrnNo$(){
//        BasCrnpService service = SpringUtils.getBean(BasCrnpService.class);
//        BasCrnp basCrnp = service.selectById(this.crnNo);
src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -44,6 +44,10 @@
    @TableField("order_no")
    private String orderNo;
    @ApiModelProperty("单据ID")
    @TableField("order_id")
    private Long orderId;
    @ApiModelProperty(value= "规格")
    private String specs;
src/main/java/com/zy/asrs/entity/WrkDetl.java
@@ -9,12 +9,14 @@
import com.zy.system.service.UserService;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
@Data
@Accessors(chain = true)
@TableName("asr_wrk_detl")
public class WrkDetl implements Serializable {
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -30,6 +30,9 @@
    @TableField("wrk_no")
    private Integer wrkNo;
    @ApiModelProperty("任务类型: agv, crn")
    private String taskType;
    @ApiModelProperty(value= "")
    @TableField("inv_wh")
    private String invWh;
@@ -92,14 +95,14 @@
     */
    @ApiModelProperty(value= "目标站")
    @TableField("sta_no")
    private Integer staNo;
    private String staNo;
    /**
     * 源站
     */
    @ApiModelProperty(value= "源站")
    @TableField("source_sta_no")
    private Integer sourceStaNo;
    private String sourceStaNo;
    /**
     * 源库位
@@ -373,6 +376,16 @@
        return null;
    }
    public String getTaskType$(){
        if (Cools.isEmpty(this.taskType)){return  null;}
        if (taskType.equals("agv")) {
            return "AGV任务";
        } else {
            return "堆垛机任务";
        }
    }
    public String getStaNo$(){
        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
        BasDevp basDevp = service.selectById(this.staNo);
src/main/java/com/zy/asrs/entity/param/AgvCallParams.java
New file
@@ -0,0 +1,26 @@
package com.zy.asrs.entity.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel(value = "AgvCallParams", description = "呼叫AGV参数")
public class AgvCallParams implements Serializable {
    @ApiModelProperty("起始位置")
    private String orgSite;
    @ApiModelProperty("终点位置")
    private String tarSite;
    @ApiModelProperty("托盘码")
    private String barcode;
    @ApiModelProperty("操作类型")
    private String type;
}
src/main/java/com/zy/asrs/enums/LocStsType.java
New file
@@ -0,0 +1,60 @@
package com.zy.asrs.enums;
public enum LocStsType {
    //空板
    LOC_STS_TYPE_D("D", "空板"),
    //在库
    LOC_STS_TYPE_F("F", "在库"),
    //空库
    LOC_STS_TYPE_O("O", "空库"),
    //禁用
    LOC_STS_TYPE_X("X", "禁用"),
    //入库预约
    LOC_STS_TYPE_S("S", "入库预约"),
    //出库预约
    LOC_STS_TYPE_R("R", "出库预约"),
    ;
    public String type;
    public String desc;
    LocStsType(String type, String desc) {
        this.type = type;
        this.desc = desc;
    }
    public static LocStsType get(String el) {
        for (LocStsType value : LocStsType.values()) {
            if (el.equals(value.toString())) {
                return value;
            }
        }
        return null;
    }
//    /**
//     * @author Ryan
//     * @date 2025/8/28
//     * @description: RCS库位状态转换
//     * @version 1.0
//     */
//    public static String getLocSts(String val) {
//        if (val.equals(RcsLocStsType.LOC_STS_TYPE_D.type)) {
//            return LocStsType.LOC_STS_TYPE_O.type;
//        } else if (val.equals(RcsLocStsType.LOC_STS_TYPE_F.type)) {
//            return LocStsType.LOC_STS_TYPE_F.type;
//        } else if (val.equals(RcsLocStsType.LOC_STS_TYPE_S.type)) {
//            return LocStsType.LOC_STS_TYPE_S.type;
//        } else if (val.equals(RcsLocStsType.LOC_STS_TYPE_R.type)) {
//            return LocStsType.LOC_STS_TYPE_R.type;
//        } else if (val.equals(RcsLocStsType.LOC_STS_TYPE_X.type)) {
//            return LocStsType.LOC_STS_TYPE_X.type;
//        }
//        return null;
//    }
}
src/main/java/com/zy/asrs/service/MobileService.java
@@ -67,4 +67,20 @@
    void stockOut(OrderDetl orderDetl, BasDevp staNo, LocDetl locDetl,
                  Double curOutQty, Integer ioType, Long userId, Date now);
    /**
     * @author Ryan
     * @date 2025/9/22
     * @description: 获取缓冲区库位信息
     * @version 1.0
     */
    R getCacheLocs();
    /**
     * @author Ryan
     * @date 2025/9/22
     * @description: 呼叫AGV搬运
     * @version 1.0
     */
    R callAgvMove(AgvCallParams params, Long userId);
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -8,6 +8,7 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.service.*;
@@ -96,6 +97,8 @@
    @Resource
    private OrderDetlPakoutService orderDetlPakoutService;
    @Autowired
    private LocCacheService locCacheService;
    @Override
    @Transactional
@@ -118,8 +121,8 @@
        wrkMast.setIoType(8); // 入出库状态:8.拣料途中并板
        wrkMast.setIoPri(13D); // 优先级
        wrkMast.setCrnNo(1);
        wrkMast.setSourceStaNo(1);
        wrkMast.setStaNo(1);
        wrkMast.setSourceStaNo(1 + "");
        wrkMast.setStaNo(1 + "");
        wrkMast.setLocNo(param.getLocNo());
        wrkMast.setBarcode(param.getBarcode()); // 托盘码
        wrkMast.setFullPlt("Y"); // 满板:Y
@@ -245,8 +248,8 @@
        wrkMast.setWrkSts(11L); // 工作状态:101.生成出库
        wrkMast.setIoType(104); // 入出库状态
        wrkMast.setIoPri(13D); // 优先级:13
        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
        wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
        wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 源站
        wrkMast.setStaNo(staDesc.getStnNo() + ""); // 目标站
        wrkMast.setSourceLocNo(param.getLocNo()); // 源库位
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("Y"); // 拣料
@@ -379,8 +382,8 @@
                wrkMast.setIoType(108); // 入出库状态:出库,拣料入库
                wrkMast.setIoPri(13D); // 优先级
                wrkMast.setCrnNo(1);
                wrkMast.setSourceStaNo(1);
                wrkMast.setStaNo(1);
                wrkMast.setSourceStaNo(1 + "");
                wrkMast.setStaNo(1 + "");
                wrkMast.setSourceLocNo(combParam.getLocNo());
                wrkMast.setBarcode(combParam.getBarcode()); // 托盘码
                wrkMast.setFullPlt("Y"); // 满板:Y
@@ -650,6 +653,7 @@
                BeanUtils.copyProperties(mat, waitPakin);
//                waitPakin.sync(mat);
                waitPakin.setOrderNo(order.getOrderNo());   // 单据编号
                waitPakin.setOrderId(order.getId());
                waitPakin.setBatch(detlDto.getBatch());     // 序列码
                waitPakin.setZpallet(param.getBarcode());   // 托盘码
                waitPakin.setIoStatus("N");     // 入出状态
@@ -1072,8 +1076,8 @@
        wrkMast.setIoType(ioType); // 入出库状态
        wrkMast.setIoPri(13D); // 优先级:13
        wrkMast.setCrnNo(locMast.getCrnNo());
        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
        wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
        wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 源站
        wrkMast.setStaNo(staDesc.getStnNo() + ""); // 目标站
        wrkMast.setSourceLocNo(locDetl.getLocNo()); // 源库位
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
@@ -1116,4 +1120,132 @@
            throw new CoolException(locDetl.getLocNo() + "库位不是在库状态");
        }
    }
    /**
     * @author Ryan
     * @date 2025/9/22
     * @description: 获取缓冲区库位信息
     * @version 1.0
     */
    @Override
    public R getCacheLocs() {
        return R.ok().add(locCacheService.selectList(new EntityWrapper<LocCache>()
                .eq("frozen", 0)
                .ne("full_plt", "Y")
                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type).orderAsc(Arrays.asList("row1"))));
    }
    /**
     * @author Ryan
     * @date 2025/9/22
     * @description: 呼叫AGV搬运
     * @version 1.0
     */
    @Override
    public R callAgvMove(AgvCallParams params, Long userId) {
        if (Objects.isNull(params.getTarSite())) {
            throw new CoolException("目标参数不能为空!!");
        }
        if (Objects.isNull(params.getOrgSite())) {
            throw new CoolException("源站点不能为空!!");
        }
        LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>()
                .eq("frozen", 0)
                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
                .eq("loc_no", params.getTarSite())
                .orderAsc(Arrays.asList("loc_no"))
                .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
        if (Objects.isNull(locCache)) {
            throw new CoolException("请检查目标库位是否闲置中!!");
        }
        generateAgvTask("agv", locCache, params.getOrgSite(), params.getBarcode(), userId);
        return R.ok();
    }
    /**
     * @author Ryan
     * @date 2025/9/22
     * @description: 生成AGV搬运任务
     * @version 1.0
     */
    @Transactional(rollbackFor = Exception.class)
    public void generateAgvTask(String type, LocCache loc, String orgSite, String barcode, Long userId) {
        WaitPakin pakin = waitPakinService.selectOne(new EntityWrapper<WaitPakin>().eq("zpallet", barcode));
        if (Objects.isNull(pakin)) {
            throw new CoolException("组托信息不存在!!");
        }
        OrderPakin orderPakin = orderPakinService.selectById(pakin.getOrderId());
        if (Objects.isNull(orderPakin)) {
            throw new CoolException("单据不能为空!!");
        }
        List<OrderDetlPakin> detls = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>().eq("order_id", pakin.getOrderId()));
        if (Objects.isNull(detls) || detls.isEmpty()) {
            throw new CoolException("数据错误:单据明细不存在!!");
        }
        Date now = new Date();
        // 获取工作号
        int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
        // 保存工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(11); // 入出库状态: 11.库格移载
        wrkMast.setTaskType("agv");
        wrkMast.setIoPri(10D);
        wrkMast.setLocNo(loc.getLocNo()); // 目标库位
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setSourceStaNo(orgSite);
        wrkMast.setEmptyMk(loc.getLocSts().equals("D") ? "Y" : "N"); // 空板
        wrkMast.setBarcode(barcode); // 托盘码
        wrkMast.setLinkMis("N");
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败");
        }
        List<WrkDetl> taskDetls = new ArrayList<>();
        detls.forEach(detl -> {
            WrkDetl wrkDetl = new WrkDetl();
            BeanUtils.copyProperties(detl, wrkDetl);
            wrkDetl.setWrkNo(workNo)
                    .setIoTime(new Date())
                    .setAnfme(detl.getAnfme())
                    .setZpallet(pakin.getZpallet())
                    .setBatch(detl.getBatch())
                    .setMatnr(detl.getMatnr())
                    .setMaktx(detl.getMaktx())
                    .setAppeUser(userId)
                    .setUnit(detl.getUnit())
                    .setModel(detl.getModel())
                    .setAppeTime(new Date())
                    .setModiUser(userId);
            taskDetls.add(wrkDetl);
        });
        //保存工作档明细
        if (!wrkDetlService.insertBatch(taskDetls)) {
            throw new CoolException("保存工作档明细失败");
        }
        // 修改目标库位状态
        if (loc.getLocSts().equals("O")) {
            loc.setLocSts("S"); // S.入库预约
            loc.setModiTime(now);
            loc.setModiUser(userId);
            if (!locCacheService.updateById(loc)) {
                throw new CoolException("更新目标库位状态失败");
            }
        } else {
            throw new CoolException("移转失败,目标库位状态:" + loc.getLocSts$());
        }
    }
}
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -123,8 +123,8 @@
        wrkMast.setIoType(1); // 入出库状态:1.入库
        wrkMast.setIoPri(13D); // 优先级:13
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo() + "");
        wrkMast.setStaNo(dto.getStaNo() + "");
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setBarcode(param.getBarcode()); // 托盘码
        wrkMast.setFullPlt("Y"); // 满板:Y
@@ -338,8 +338,8 @@
            wrkMast.setIoType(ioType); // 入出库状态
            wrkMast.setIoPri(13D); // 优先级:13
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
            wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
            wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 源站
            wrkMast.setStaNo(staDesc.getStnNo() + ""); // 目标站
            wrkMast.setSourceLocNo(dto.getLocNo()); // 源库位
            wrkMast.setFullPlt("Y"); // 满板:Y
            wrkMast.setPicking("N"); // 拣料
@@ -356,7 +356,9 @@
            }
            // 生成工作档明细
            for (LocDetlDto detlDto : dto.getLocDetlDtos()) {
                if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;}
                if (detlDto.getCount() == null || detlDto.getCount() <= 0.0D) {
                    continue;
                }
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(detlDto.getLocDetl());
                wrkDetl.setOrderNo(""); // 手动出库不需要带出库存中的单据编号
@@ -414,8 +416,8 @@
        wrkMast.setIoType(ioType); // 入出库状态
        wrkMast.setIoPri(13D); // 优先级:13
        wrkMast.setCrnNo(locMast.getCrnNo());
        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
        wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
        wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 源站
        wrkMast.setStaNo(staDesc.getStnNo() + ""); // 目标站
        wrkMast.setSourceLocNo(taskDto.getLocNo()); // 源库位
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
@@ -432,7 +434,9 @@
        }
        // 生成工作档明细
        for (LocDto locDto : taskDto.getLocDtos()) {
            if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; }
            if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
                continue;
            }
//            OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
            OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(),locDto.getBrand()
                    ,locDto.getStandby1(),locDto.getStandby2(),locDto.getStandby3(),locDto.getBoxType1(),locDto.getBoxType2(),locDto.getBoxType3());
@@ -501,8 +505,8 @@
        wrkMast.setIoType(10); // 入出库状态:10.空板入库
        wrkMast.setIoPri(10D); // 优先级:10
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo() + "");
        wrkMast.setStaNo(dto.getStaNo() + "");
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setFullPlt("N"); // 满板
        wrkMast.setPicking("N"); // 拣料
@@ -583,8 +587,8 @@
            wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
            wrkMast.setIoType(110); // 入出库状态: 110.空板出库
            wrkMast.setIoPri(10D);
            wrkMast.setSourceStaNo(sourceStaNo); // 源站
            wrkMast.setStaNo(param.getOutSite()); // 目标站
            wrkMast.setSourceStaNo(sourceStaNo + ""); // 源站
            wrkMast.setStaNo(param.getOutSite() + ""); // 目标站
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setSourceLocNo(locNo); // 源库位
            wrkMast.setFullPlt("N"); // 满板:Y
@@ -645,8 +649,8 @@
            wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
            wrkMast.setIoType(110); // 入出库状态: 110.空板出库
            wrkMast.setIoPri(10D);
            wrkMast.setSourceStaNo(sourceStaNo); // 源站
            wrkMast.setStaNo(param.getOutSite()); // 目标站
            wrkMast.setSourceStaNo(sourceStaNo + ""); // 源站
            wrkMast.setStaNo(param.getOutSite() + ""); // 目标站
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setSourceLocNo(locNo); // 源库位
            wrkMast.setFullPlt("N"); // 满板:Y
@@ -885,7 +889,9 @@
            Iterator<LocDetlAdjustParam.LocDetlAdjust> iterator1 = list.iterator();
            while (iterator1.hasNext()) {
                LocDetlAdjustParam.LocDetlAdjust adjust = iterator1.next();
                if (adjust.getCount() == 0) { continue; }
                if (adjust.getCount() == 0) {
                    continue;
                }
                if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch())) {
                    if (!locDetl.getAnfme().equals(adjust.getCount())) {
                        // todo 盘点记录
@@ -984,7 +990,9 @@
        // 添加库存
        for (LocDetlAdjustParam.LocDetlAdjust adjust : list) {
            if (adjust.getCount() == 0.0D) { continue; }
            if (adjust.getCount() == 0.0D) {
                continue;
            }
            Mat mat = matService.selectByMatnr(adjust.getMatnr());
            LocDetl locDetl = new LocDetl();
            locDetl.sync(mat);
@@ -1252,7 +1260,7 @@
        wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57
        wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走
        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站
        wrkMast.setStaNo(staNo); // 目标站
        wrkMast.setStaNo(staNo + ""); // 目标站
        wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位
        wrkMast.setSourceLocNo(""); // 源库位清空
        wrkMast.setModiTime(now);
@@ -1346,7 +1354,7 @@
        }
        wrkMast.setWrkSts(2L);
        wrkMast.setLocNo(targetLoc.getLocNo());
        wrkMast.setStaNo(staDesc.getCrnStn());
        wrkMast.setStaNo(staDesc.getCrnStn() + "");
        wrkMast.setCrnNo(targetLoc.getCrnNo());
        wrkMast.setModiTime(now);
        wrkMast.setModiUser(userId);
src/main/java/com/zy/asrs/task/handler/BareBoardHandler.java
@@ -103,8 +103,8 @@
                        wrkMast.setWrkSts(11L); // 工作状态
                        wrkMast.setIoType(ioType); // 入出库状态
                        wrkMast.setIoPri(10D);
                        wrkMast.setSourceStaNo(sourceStaNo); // 源站
                        wrkMast.setStaNo(staNo); // 目标站
                        wrkMast.setSourceStaNo(sourceStaNo + ""); // 源站
                        wrkMast.setStaNo(staNo + ""); // 目标站
                        wrkMast.setCrnNo(locMast.getCrnNo());
                        wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
                        wrkMast.setFullPlt(ioType.equals(110)? "N" : "Y"); // 满板:Y
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -2,8 +2,10 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.LocCacheServiceImpl;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import lombok.extern.slf4j.Slf4j;
@@ -14,6 +16,7 @@
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * Created by vincent on 2020/7/4
@@ -39,6 +42,8 @@
    private OrderDetlPakinService orderDetlPakinService;
    @Autowired
    private OrderDetlPakoutService orderDetlPakoutService;
    @Autowired
    private LocCacheServiceImpl locCacheService;
    public ReturnT<String> start(WrkMast wrkMast) {
        // 4.入库完成
@@ -52,6 +57,14 @@
    }
    private ReturnT<String> doIn(WrkMast wrkMast){
        if (wrkMast.getTaskType().equals("agv")) {
            Date now = new Date();
            LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
            if (Objects.isNull(locCache)) {
                throw new CoolException("数据错误,库位不存在!!");
            }
        } else {
        Date now = new Date();
        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
        try {
@@ -416,6 +429,7 @@
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
        }
        return SUCCESS;
    }
src/main/java/com/zy/common/.DS_Store
Binary files differ
src/main/java/com/zy/common/config/.DS_Store
Binary files differ
src/main/java/com/zy/common/web/WcsController.java
@@ -124,8 +124,8 @@
        wrkMast.setIoPri(13D);
        wrkMast.setIoType(10);
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo() + "");
        wrkMast.setStaNo(dto.getStaNo() + "");
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setFullPlt("N"); // 满板:N
        wrkMast.setPicking("N"); // 拣料
@@ -178,8 +178,8 @@
        wrkMast.setIoType(1); // 入出库状态:1.入库
        wrkMast.setIoPri(13D); // 优先级
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo() + "");
        wrkMast.setStaNo(dto.getStaNo() + "");
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setBarcode(barcode); // 托盘码
        wrkMast.setFullPlt("Y"); // 满板:Y
@@ -254,8 +254,8 @@
        wrkMast.setIoType(10); // 入出库状态:10.空板入库
        wrkMast.setIoPri(13D); // 优先级
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo() + "");
        wrkMast.setStaNo(dto.getStaNo() + "");
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setFullPlt("N"); // 满板
        wrkMast.setPicking("N"); // 拣料
src/main/resources/application.yml
@@ -43,7 +43,7 @@
  #  global-config:
  #    field-strategy: 0
  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
    cache-enabled: true
    call-setters-on-nulls: true
src/main/webapp/static/js/wrkMast/wrkMast.js
@@ -25,11 +25,12 @@
            ,{field: 'wrkSts$', align: 'center',title: '工作状态'}
            ,{field: 'ioType$', align: 'center',title: '入出库类型'}
            ,{field: 'ioPri', align: 'center',title: '优先级'}
            ,{field: 'taskType$', align: 'center',title: '任务类型'}
            ,{field: 'crnNo$', align: 'center',title: '堆垛机'}
            ,{field: 'sourceStaNo$', align: 'center',title: '源站'}
            ,{field: 'staNo$', align: 'center',title: '目标站'}
            ,{field: 'sourceLocNo$', align: 'center',title: '源库位'}
            ,{field: 'locNo$', align: 'center',title: '目标库位'}
            ,{field: 'sourceLocNo', align: 'center',title: '源库位'}
            ,{field: 'locNo', align: 'center',title: '目标库位'}
            ,{field: 'barcode', align: 'center',title: '条码'}
            ,{field: 'preHave', align: 'center',title: '先入品', hide: true}
            ,{field: 'takeNone', align: 'center',title: '空操作', hide: true}