自动化立体仓库 - WMS系统
afdf7d86cffe39c24b55936321bd3b3133adaf40..4b6298bc71a0b5fbc599037f0d38657c5c651531
2025-05-11 zhang
接口编写
4b6298 对比 | 目录
2025-05-11 zhang
接口编写
a2887a 对比 | 目录
2025-05-11 zhang
接口编写
d6b6eb 对比 | 目录
1个文件已添加
4个文件已修改
494 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 118 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/MatSyncParam.java 210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OpenService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -4,11 +4,10 @@
import com.core.annotations.AppAuth;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.param.OpenOrderCompleteParam;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.entity.param.OpenOrderPakoutParam;
import com.zy.asrs.entity.param.PackParam;
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;
@@ -35,6 +34,8 @@
    @Autowired
    private OpenService openService;
    @Autowired
    private WrkMastService wrkMastService;
@@ -93,36 +94,7 @@
        return R.ok().add(openService.pakinOrderComplete(param));
    }
    /**
     * 添加出库单
     */
    @PostMapping("/order/pakout/new/default/v1")
    @AppAuth(memo = "添加订单出库")
    public synchronized R pakoutOrderCreate(@RequestHeader(required = false) String appkey,
                                            @RequestBody OpenOrderPakoutParam param,
                                            HttpServletRequest request) {
        auth(appkey, param, request);
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        //if (Cools.isEmpty(param.getLgort())) {
        //    return R.error("单据编号[lgort]不能为空");
        //}
        //if (!param.getLgort().equals("5006")) {
        //    return R.ok();
        //}
        if (Cools.isEmpty(param.getOrderNo())) {
            return R.error("单据编号[orderNo]不能为空");
        }
        if (Cools.isEmpty(param.getOrderType())) {
            return R.error("单据类型[orderType]不能为空");
        }
        if (Cools.isEmpty(param.getOrderDetails())) {
            return R.error("单据明细[orderDetails]不能为空");
        }
        openService.pakoutOrderCreate(param);
        return R.ok();
    }
    /**
     * 出库单回写
@@ -161,6 +133,84 @@
        }
    }
    @PostMapping("/order/matSync/default/v2")
//    @AppAuth(memo = "商品信息同步接口")
    public synchronized R syncMatInfoV2(@RequestHeader(required = false) String appkey,
                                        @RequestBody(required = false) MatSyncParam.MatParam param,
                                        HttpServletRequest request){
        auth(appkey, param, request);
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        MatSyncParam matSyncParam = new MatSyncParam();
        List<MatSyncParam.MatParam> objects = new ArrayList<>();
        objects.add(param);
        matSyncParam.matDetails = objects;
        openService.syncMat(matSyncParam);
        return R.ok();
    }
    /**
     * 添加出库单
     */
    @PostMapping("/order/pakout/new/default/v1")
    @AppAuth(memo = "添加订单出库")
    public synchronized R pakoutOrderCreate(@RequestHeader(required = false) String appkey,
                                            @RequestBody OpenOrderPakoutParam param,
                                            HttpServletRequest request) {
        auth(appkey, param, request);
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        if (Cools.isEmpty(param.getOrderNo())) {
            return R.error("单据编号[orderNo]不能为空");
        }
        if (Cools.isEmpty(param.getOrderType())) {
            return R.error("单据类型[orderType]不能为空");
        }
        if (Cools.isEmpty(param.getOrderDetails())) {
            return R.error("单据明细[orderDetails]不能为空");
        }
        openService.pakoutOrderCreate(param);
        return R.ok();
    }
    /**
     * 添加出库单
     */
    @PostMapping("/pickToFill/barcode")
    @AppAuth(memo = "捡料转全板")
    public synchronized R againOut(@RequestHeader(required = false) String appkey,
                                            @RequestBody PackParam param,
                                            HttpServletRequest request) {
        auth(appkey, param, request);
        if (Cools.isEmpty(param)||Cools.isEmpty(param.getBarcode())) {
            return R.error("托盘码为空,请检查");
        }
        WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode());
        if (Cools.isEmpty(wrkMast)) {
            return R.error("无法通过托盘码找到该工作档,请检查托盘码是否正确");
        }
        if (wrkMast.getIoType() != 103) {
            return R.error("仅有捡料出库可以使用该功能");
        }
        if (wrkMast.getWrkSts() != 17) {
            return R.error("捡料出库未完成,请等待设备运行完成");
        }
        openService.pickToFill(wrkMast);
        return R.ok();
    }
    public static void main(String[] args) {
        // 1
        System.out.println("======================================");
src/main/java/com/zy/asrs/entity/param/MatSyncParam.java
New file
@@ -0,0 +1,210 @@
package com.zy.asrs.entity.param;
import com.baomidou.mybatisplus.annotations.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * 商品同步接口,参数
 * Created on 2022/6/22
 */
@Data
public class MatSyncParam {
    /**
     *  创建时间
     */
    public String createTime;
    public List<MatParam> matDetails;
    @Data
    public static class MatParam{
        /**
         * 商品编号
         */
        private String matnr;
        /**
         * 商品名称
         */
        private String maktx;
        /**
         * 商品分类
         */
        private String groupCode;
        /**
         * 分类名称
         */
        private String groupName;
        /**
         * 别名
         */
        private String name;
        /**
         * 规格
         */
        private String specs;
        /**
         * 型号
         */
        private String model;
        /**
         * 颜色
         */
        private  String color;
        /**
         * 品牌
         */
        private String brand;
        /**
         * 单位
         */
        private String unit;
        /**
         * 单价
         */
        private Double price;
        /**
         * sku
         */
        private String sku;
        /**
         * 单位量
         */
        private Double units;
        /**
         * 条码
         */
        private String barcode;
        /**
         * 产地
         */
        private String origin;
        /**
         * 厂家
         */
        private String manu;
        /**
         * 生产日期
         */
        private String manuDate;
        /**
         * 品项数
         */
        private String itemNum;
        /**
         * 安全库存量
         */
        private Double safeQty;
        /**
         * 重量
         */
        private Double weight;
        /**
         * 长度
         */
        private Double length;
        /**
         * 体积
         */
        private Double volume;
        /**
         * 三方编码
         */
        private String threeCode;
        /**
         * 供应商
         */
        private String supp;
        /**
         * 供应商编码
         */
        private String suppCode;
        /**
         * 是否批次 1: 是  0: 否
         */
        private Integer beBatch;
        /**
         * 保质期
         */
        private String deadTime;
        /**
         * 预警天数
         */
        private Integer deadWarn;
        /**
         * 来源 1: 制造  2: 采购  3: 外协
         */
        private Integer source;
        /**
         * 要求检验 1: 是  0: 否
         */
        private Integer inspect;
        /**
         * 危险品 1: 是  0: 否
         */
        private Integer danger;
        /**
         * 状态 1: 正常  0: 禁用
         */
        private Integer status;
        /**
         * 高频入出库物料
         */
        private Boolean inoutEveryday;
        /**
         * 上架区域{1:单品区,2:高频混放区,3:低频混放区}
         */
        private Integer matType;
        /**
         * 添加人员
         */
        private String createBy;
        /**
         * 添加时间
         */
        private String createTime;
        /**
         * 备注
         */
        private String memo;
    }
}
src/main/java/com/zy/asrs/service/OpenService.java
@@ -1,9 +1,7 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.param.OpenOrderCompleteParam;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.entity.param.OpenOrderPakoutParam;
import com.zy.asrs.entity.param.PackParam;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.OpenOrderCompeteResult;
import com.zy.asrs.entity.result.StockVo;
@@ -41,4 +39,8 @@
    // 打包上线
    void packageUp(PackParam param);
    void pickToFill(WrkMast wrkMast);
    void syncMat(MatSyncParam param);
}
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -3,13 +3,11 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OpenOrderCompleteParam;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.entity.param.OpenOrderPakoutParam;
import com.zy.asrs.entity.param.PackParam;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.OpenOrderCompeteResult;
import com.zy.asrs.entity.result.StockVo;
import com.zy.asrs.mapper.TagMapper;
@@ -17,6 +15,7 @@
import com.zy.asrs.utils.MatUtils;
import com.zy.common.model.DetlDto;
import com.zy.common.utils.NodeUtils;
import com.zy.common.utils.Synchro;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -51,6 +50,14 @@
    private TagService tagService;
    @Autowired
    private TagMapper tagMapper;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private LocMastService locMastService;
    @Override
    @Transactional
@@ -273,6 +280,34 @@
    }
    @Override
    @Transactional
    public void pickToFill(WrkMast wrkMast) {
        Date now = new Date();
        wrkMast.setIoType(101);
        wrkMast.setMemo("捡料转全板工作档");
        wrkMastService.update(wrkMast, new EntityWrapper<WrkMast>()
                .eq("wrk_no", wrkMast.getWrkNo()));
        wrkDetlService.deleteByWrkNo(wrkMast.getWrkNo());
        List<LocDetl> locDetls = locDetlService.selectByLocNo(wrkMast.getSourceLocNo());
        for (LocDetl locDetl : locDetls) {
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(locDetl);
            wrkDetl.setWrkNo(wrkMast.getWrkNo());
            wrkDetl.setIoTime(wrkMast.getIoTime());
            wrkDetl.setZpallet(wrkDetl.getBarcode());
            wrkDetl.setBarcode(wrkMast.getBarcode());
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiTime(now);
            wrkDetl.setAppeUser(1L);
            wrkDetl.setModiUser(1L);
            wrkDetl.setMatType(locDetl.getMatType());
            wrkDetlService.insert(wrkDetl);
        }
        locMastService.updateLocSts(wrkMast.getSourceLocNo(), "R");
    }
    @Override
    public List<OpenOrderCompeteResult> pakoutOrderComplete(OpenOrderCompleteParam param) {
        List<OpenOrderCompeteResult> results = new ArrayList<>();
        if (!Cools.isEmpty(param) && !Cools.isEmpty(param.getOrderNo())) {
@@ -438,4 +473,113 @@
        }
    }
    @Override
    @Transactional
    public void syncMat(MatSyncParam param) {
        if (Cools.isEmpty(param.getMatDetails()) || param.getMatDetails().size() <= 0) {
            throw new CoolException("商品数据为空");
        }
        for (MatSyncParam.MatParam matParam : param.getMatDetails()) {
            if (Cools.isEmpty(matParam.getMatnr())) {
                throw new CoolException("商品编码不能为空");
            }
            if (Cools.isEmpty(matParam.getInoutEveryday())) {
                throw new CoolException("是否为高频入出库物料标识不能为空");
            }
            if (Cools.isEmpty(matParam.getMatType())) {
                throw new CoolException("上架区域不能为空");
            }
            Date now = new Date();
            Mat mat = matService.selectByMatnr(matParam.getMatnr());
            if (mat == null) {
                mat = new Mat();
                // 分类
                Long tagId;
                // 一级分类
                if (!Cools.isEmpty(matParam.getGroupCode()) && !Cools.isEmpty(matParam.getGroupName())) {
                    Tag priTag = tagService.selectOne(new EntityWrapper<Tag>().eq("name", matParam.getGroupCode()));
                    if (priTag == null) {
                        Tag top = tagService.getTop();
                        NodeUtils nodeUtils = new NodeUtils();
                        nodeUtils.executePath(top.getId());
                        priTag = new Tag(
                                null,    // 编号
                                matParam.getGroupCode(),    // 名称
                                top.getId(),    // 父级
                                top.getName(),    // 父级名称
                                nodeUtils.path.toString(),    // 关联路径
                                nodeUtils.pathName.toString(),    // 关联路径名
                                0,    // 类型
                                null,    // 负责人
                                null,    // 图片
                                null,    // 简要描述
                                null,    // 数量
                                2,    // 等级
                                null,    // 排序
                                1,    // 状态
                                now,    // 添加时间
                                null,    // 添加人员
                                now,    // 修改时间
                                null,    // 修改人员
                                null    // 备注
                        );
                        if (tagMapper.insert(priTag) == 0) {
                            throw new CoolException("服务器内部错误,请联系管理员");
                        }
                    }
                    // 二级分类
                    Tag secTag = tagService.selectByName(matParam.getGroupName(), 3);
                    if (secTag == null) {
                        NodeUtils nodeUtils = new NodeUtils();
                        nodeUtils.executePath(priTag.getId());
                        secTag = new Tag(
                                null,    // 编号
                                matParam.getGroupName(),    // 名称
                                priTag.getId(),    // 父级
                                priTag.getName(),    // 父级名称
                                nodeUtils.path.toString(),    // 关联路径
                                nodeUtils.pathName.toString(),    // 关联路径名
                                0,    // 类型
                                null,    // 负责人
                                null,    // 图片
                                null,    // 简要描述
                                null,    // 数量
                                3,    // 等级
                                null,    // 排序
                                1,    // 状态
                                now,    // 添加时间
                                null,    // 添加人员
                                now,    // 修改时间
                                null,    // 修改人员
                                null    // 备注
                        );
                        if (tagMapper.insert(secTag) == 0) {
                            throw new CoolException("服务器内部错误,请联系管理员");
                        }
                    }
                    tagId = secTag.getId();
                } else {
                    tagId = tagService.getTop().getId();
                }
                Synchro.Copy(matParam,mat);
                mat.setTagId(tagId);
                mat.setStatus(1);
                mat.setCreateTime(now);
                mat.setUpdateTime(now);
                if (!matService.insert(mat)) {
                    throw new CoolException("服务器内部错误,请联系管理员");
                } else {
                    log.info("同步新物料[商品编号:{}]", mat.getMatnr());
                }
            } else {
                Synchro.Copy(matParam,mat);
                if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr", matParam.getMatnr()))) {
                    throw new CoolException("更新已存在商品信息失败,请联系管理员");
                }
            }
        }
    }
}
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -89,7 +89,7 @@
                try {
                    // 保存接口日志
                    apiLogService.save(
                            "成品库入库上报",
                            "入库上报",
                            MesConstant.URL + MesConstant.PAKIN_URL,
                            null,
                            "127.0.0.1",
@@ -143,7 +143,7 @@
                try {
                    // 保存接口日志
                    apiLogService.save(
                            "成品库出库上报",
                            "出库上报",
                            MesConstant.URL + MesConstant.PAKOUT_URL,
                            null,
                            "127.0.0.1",