自动化立体仓库 - WMS系统
zhang
2025-09-26 2bf957a2e0379386934491563f81c90ebceee143
对接
8个文件已修改
267 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CombParam.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/EmptyPlateOutParam.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/MobileAdjustParam.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MobileService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/DetlDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/license.lic 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -2,7 +2,6 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
@@ -16,7 +15,6 @@
import com.zy.common.model.WrkDto;
import com.zy.common.service.CommonService;
import com.zy.common.web.BaseController;
import com.zy.system.entity.license.AbstractServerInfos;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,7 +22,6 @@
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.List;
/**
 * 移动端接口控制器
@@ -64,6 +61,8 @@
    private MatBarcodeService matBarcodeService;
    @Autowired
    private CommonService commonService;
    @Autowired
    private WorkService workService;
    private static Logger logger = LogManager.getLogger(MobileController.class);
@@ -162,7 +161,7 @@
    @RequestMapping("/comb/auth")
    @ManagerAuth(memo = "组托")
    public R comb(@RequestBody CombParam combParam) {
        logger.info("组托参数:{}",combParam);
        logger.info("组托参数:{}", combParam);
        if (Cools.isEmpty(combParam.getOrderNo())) {
            combParam.setOrderNo(combParam.getBillNo());
        }
@@ -178,10 +177,10 @@
    @RequestMapping("/pickIn/auth")
//    @ManagerAuth(memo="盘点入库")
    public R pickIn(@RequestParam String barcode){
    public R pickIn(@RequestParam String barcode) {
        WrkMast wrkMast = wrkMastService.selectByBarcode(barcode);
        List<PickInParam> param = wrkDetlService.selectDetByBarcode(barcode);
        for(PickInParam pickInParam : param){
        for (PickInParam pickInParam : param) {
            pickInParam.setStaNo(wrkMast.getStaNo());
            pickInParam.setWorkNo(wrkMast.getWrkNo());
        }
@@ -496,26 +495,26 @@
    @ManagerAuth(memo = "PDA呼叫托盘出库")
    public R callBarcode(@RequestBody CombParam combParam) {
        logger.info("PDA呼叫托盘出库");
        if (combParam == null){
        if (combParam == null) {
            return R.parse(BaseRes.PARAM);
        }
        combParam.getCombMats().forEach(combMat -> {
            Mat mat = matService.selectByMatnr(combMat.getMatnr());
            if (mat == null){
            if (mat == null) {
                throw new CoolException("商品档案不存在");
            }
            MatBarcode matBarcode = matBarcodeService.selectbyMatnr(combMat.getMatnr());
            if (matBarcode == null){
            if (matBarcode == null) {
                throw new CoolException("该物料未与托盘绑定");
            }
            LocMast locMast=locMastService.selectByBarcode(matBarcode.getZpallet());
            if (locMast == null){
            LocMast locMast = locMastService.selectByBarcode(matBarcode.getZpallet());
            if (locMast == null) {
                throw new CoolException("未找到与该物料绑定的托盘");
            }
            int wrkNo=commonService.getWorkNo(0);
            int wrkNo = commonService.getWorkNo(0);
            Date now = new Date();
            //生成工作档
            WrkMast wrkMast=new WrkMast();
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(wrkNo);
            wrkMast.setIoTime(new Date());
            wrkMast.setWrkSts(11L);//工作状态:生成出库ID
@@ -552,4 +551,33 @@
        });
        return R.ok();
    }
    @RequestMapping("/combMeger/auth")
    @ManagerAuth(memo = "并板")
    public synchronized R adjustNewV2(@RequestBody MobileAdjustParam combParam) {
        mobileService.adjustNew(combParam, Boolean.TRUE, getUserId());
        return R.ok("并板成功");
    }
    @RequestMapping("/empty/plate/out/start")
    @ManagerAuth(memo = "空板出库")
    public R emptyPlateOutStart(EmptyPlateOutParam param) {
        List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D").eq("loc_type1", param.getType()).in("row1", 2, 3));
        if (locMasts == null || locMasts.isEmpty()) {
            locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D").eq("loc_type1", param.getType()).in("row1", 1, 4));
        }
        if (locMasts == null || locMasts.isEmpty()){
            return R.error("无空板库位");
        }
        param.setOutSite(1103);
        List<String> locNos = param.getLocNos();
        if (locNos == null){
            locNos = new ArrayList<>();
        }
        locNos.add(locMasts.get(0).getLocNo());
        param.setLocNos(locNos);
        workService.emptyPlateOut(param, getUserId());
        return R.ok("出库启动成功");
    }
}
src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -57,6 +57,8 @@
        private String outOrderNo;
        private String memo;
    }
}
src/main/java/com/zy/asrs/entity/param/EmptyPlateOutParam.java
@@ -13,6 +13,9 @@
    // 出站口
    private Integer outSite;
    //
    private Integer type;
    // 商品id
    private Integer matId;
src/main/java/com/zy/asrs/entity/param/MobileAdjustParam.java
@@ -15,6 +15,11 @@
    private Integer wrkNo;
    private String barcode;
    private List<WrkDetl> wrkDetls;
    private List<CombParam.CombMat> combMats;
}
src/main/java/com/zy/asrs/service/MobileService.java
@@ -38,4 +38,8 @@
    void stockOut(OrderDetl orderDetl, BasDevp staNo, LocDetl locDetl,
                  Double curOutQty, Integer ioType, Long userId, Date now);
    void adjustNew(MobileAdjustParam param, Boolean re, Long userId);
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -73,6 +73,8 @@
    private ManLocDetlMapper manLocDetlMapper;
    @Autowired
    private MatBarcodeService matBarcodeService;
    @Autowired
    private AdjDetlService adjDetlService;
    @Override
@@ -112,7 +114,8 @@
            // 生成入库通知档
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),elem.getProType(),elem.getTemp2(),elem.getOutOrderNo());
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(), elem.getProType(), elem.getTemp2(), elem.getOutOrderNo());
                detlDto.setMemo(detlDto.getMemo());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
                    assert one != null;
@@ -130,10 +133,10 @@
                }
                //校验当前物料与托盘绑定信息是否正确
                MatBarcode matBarcode = new MatBarcode();
                MatBarcode mb=matBarcodeService.selectbyMatnr(detlDto.getMatnr());
                if (mb != null && !mb.getZpallet().equals(param.getBarcode())){
                    throw new CoolException(detlDto.getMatnr()+"该物料与其他托盘绑定,请先解绑");
                }else{
                MatBarcode mb = matBarcodeService.selectbyMatnr(detlDto.getMatnr());
                if (mb != null && !mb.getZpallet().equals(param.getBarcode())) {
                    throw new CoolException(detlDto.getMatnr() + "该物料与其他托盘绑定,请先解绑");
                } else {
                    matBarcode.setZpallet(param.getBarcode());//托盘码
                    matBarcode.setMatnr(mat.getMatnr());//物料号
                    matBarcode.setMaktx(mat.getMaktx());//物料名称
@@ -154,80 +157,81 @@
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                waitPakin.setMemo(detlDto.getMemo());
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
                if (!matBarcodeService.insert(matBarcode)){
                if (!matBarcodeService.insert(matBarcode)) {
                    throw new CoolException("物料与托盘绑定失败");
                }
            }
            // 关联组托
        } else {
                Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", param.getOrderNo()));
                if (Cools.isEmpty(order) || order.getSettle() > 2) {
                    throw new CoolException("单据编号已过期");
            Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", param.getOrderNo()));
            if (Cools.isEmpty(order) || order.getSettle() > 2) {
                throw new CoolException("单据编号已过期");
            }
            // 生成入库通知档
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
                // 订单明细数量校验
                //OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch(),elem.getAnfme() );
                OrderDetl orderDetl = orderDetlService.selectById(elem.getDetlId());
                if (elem.getAnfme() > orderDetl.getEnableQty()) {
                    throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
                }
                // 生成入库通知档
                List<DetlDto> detlDtos = new ArrayList<>();
                param.getCombMats().forEach(elem -> {
                // 修改订单作业数量
                if (!orderDetlService.increaseWorkQty(orderDetl, elem.getAnfme())) {
                    throw new CoolException("修改单据作业数量失败");
                }
                    // 订单明细数量校验
                    //OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch(),elem.getAnfme() );
                    OrderDetl orderDetl = orderDetlService.selectById(elem.getDetlId());
                    if (elem.getAnfme() > orderDetl.getEnableQty()) {
                        throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
                    }
                    // 修改订单作业数量
                    if (!orderDetlService.increaseWorkQty(orderDetl, elem.getAnfme())) {
                        throw new CoolException("修改单据作业数量失败");
                    }
                Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(orderDetl.getMatnr() + "商品档案不存在");
                }
                //校验当前物料与托盘绑定信息是否正确
                MatBarcode matBarcode = new MatBarcode();
                MatBarcode mb = matBarcodeService.selectbyMatnr(orderDetl.getMatnr());
                if (mb != null && !mb.getZpallet().equals(param.getBarcode())) {
                    throw new CoolException(orderDetl.getMatnr() + "该物料与其他托盘绑定,请先解绑");
                } else {
                    matBarcode.setZpallet(param.getBarcode());//托盘码
                    matBarcode.setMatnr(mat.getMatnr());//物料号
                    matBarcode.setMaktx(mat.getMaktx());//物料名称
                    matBarcode.setSpecs(mat.getSpecs());//规格
                    matBarcode.setModel(mat.getModel());//型号
                }
                WaitPakin waitPakin = new WaitPakin();
                waitPakin.sync(mat);
                waitPakin.setOrderNo(order.getOrderNo());   // 单据编号
                waitPakin.setBatch(orderDetl.getBatch());     // 序列码
                waitPakin.setZpallet(param.getBarcode());   // 托盘码
                waitPakin.setIoStatus("N");     // 入出状态
                waitPakin.setAnfme(elem.getAnfme());  // 数量
                waitPakin.setStatus("Y");    // 状态
                waitPakin.setAppeUser(userId);
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                    Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
                    if (Cools.isEmpty(mat)) {
                        throw new CoolException(orderDetl.getMatnr() + "商品档案不存在");
                    }
                    //校验当前物料与托盘绑定信息是否正确
                    MatBarcode matBarcode = new MatBarcode();
                    MatBarcode mb=matBarcodeService.selectbyMatnr(orderDetl.getMatnr());
                    if (mb != null && !mb.getZpallet().equals(param.getBarcode())){
                        throw new CoolException(orderDetl.getMatnr()+"该物料与其他托盘绑定,请先解绑");
                    }else{
                        matBarcode.setZpallet(param.getBarcode());//托盘码
                        matBarcode.setMatnr(mat.getMatnr());//物料号
                        matBarcode.setMaktx(mat.getMaktx());//物料名称
                        matBarcode.setSpecs(mat.getSpecs());//规格
                        matBarcode.setModel(mat.getModel());//型号
                    }
                    WaitPakin waitPakin = new WaitPakin();
                    waitPakin.sync(mat);
                    waitPakin.setOrderNo(order.getOrderNo());   // 单据编号
                    waitPakin.setBatch(orderDetl.getBatch());     // 序列码
                    waitPakin.setZpallet(param.getBarcode());   // 托盘码
                    waitPakin.setIoStatus("N");     // 入出状态
                    waitPakin.setAnfme(elem.getAnfme());  // 数量
                    waitPakin.setStatus("Y");    // 状态
                    waitPakin.setAppeUser(userId);
                    waitPakin.setAppeTime(now);
                    waitPakin.setModiUser(userId);
                    waitPakin.setModiTime(now);
                waitPakin.setBatch(orderDetl.getBatch());
                waitPakin.setSPgNO(orderDetl.getSPgNO());
                waitPakin.setOutOrderNo(orderDetl.getOutOrderNo());
                waitPakin.setProType(orderDetl.getProType());
                waitPakin.setLuHao(orderDetl.getLuHao());
                waitPakin.setPacking(orderDetl.getPacking());
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
                if (!matBarcodeService.insert(matBarcode)) {
                    throw new CoolException("物料与托盘绑定失败");
                }
            });
                    waitPakin.setBatch(orderDetl.getBatch());
                    waitPakin.setSPgNO(orderDetl.getSPgNO());
                    waitPakin.setOutOrderNo(orderDetl.getOutOrderNo());
                    waitPakin.setProType(orderDetl.getProType());
                    waitPakin.setLuHao(orderDetl.getLuHao());
                    waitPakin.setPacking(orderDetl.getPacking());
                    if (!waitPakinService.insert(waitPakin)) {
                        throw new CoolException("保存入库通知档失败");
                    }
                    if (!matBarcodeService.insert(matBarcode)){
                        throw new CoolException("物料与托盘绑定失败");
                    }
                });
                orderService.updateSettle(order.getId(), 2L, userId);
          }
            orderService.updateSettle(order.getId(), 2L, userId);
        }
    }
@@ -401,7 +405,8 @@
//                Mat analyse = MatUtils.analyseMat(elem.getMatnr());
//                // 条码、物料代码、序列号、数量
//                DetlDto detlDto = new DetlDto(elem.getMatnr(), analyse.getMatnr(), analyse.getBarcode(), elem.getAnfme());
////                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
    /// /                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
//                if (DetlDto.has(detlDtos, detlDto)) {
//                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
//                    assert one != null;
@@ -526,7 +531,6 @@
//
//        }
//    }
    @Override
    @Transactional
    public void pakoutByOrder(JSONObject param, Long userId) {
@@ -665,4 +669,61 @@
            throw new CoolException(locDetl.getLocNo() + "库位不是在库状态");
        }
    }
    @Override
    @Transactional
    public void adjustNew(MobileAdjustParam param, Boolean re, Long userId) {
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", param.getBarcode()));
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException("托盘码:" + param.getBarcode() + " 无有效工作档");
        }
        List<CombParam.CombMat> combMats = param.getCombMats();
        String recordRecordLog = "托盘码" + param.getBarcode() + "盘点记录:";
        AdjDetl adjDetl = new AdjDetl();
        adjDetl.setAppeTime(new Date());
        adjDetl.setAppeUser(userId);
        adjDetl.setModiTime(new Date());
        adjDetl.setModiUser(userId);
        adjDetl.setLocNo(wrkMast.getSourceLocNo());
        for (CombParam.CombMat wrkDetl : combMats) {
            WrkDetl wrkDetlOld = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>()
                            .eq("wrk_no", wrkMast.getWrkNo())
                            .eq("matnr", wrkDetl.getMatnr())
//                    .eq("batch",Cools.isEmpty(wrkDetl.getBatch())?"":wrkDetl.getBatch())
            );
            adjDetl.setMatnr(wrkDetl.getMatnr());
            adjDetl.setBatch(wrkDetl.getBatch());
            adjDetl.setAdjQty(wrkDetl.getAnfme());
            if (Cools.isEmpty(wrkDetlOld)) {
                WrkDetl detl = new WrkDetl();
                detl.sync(wrkDetl);
                detl.setWrkNo(wrkMast.getWrkNo());
                detl.setZpallet(wrkMast.getBarcode());
                wrkDetlService.insert(detl);
                recordRecordLog = recordRecordLog + "\n" + "新增一条明细:" + "\t商品编号:" + wrkDetl.getMatnr() + "\t批号:" + wrkDetl.getBatch() + "\t数量:" + wrkDetl.getAnfme();
                adjDetl.setOriQty(0.0);
                adjDetlService.insert(adjDetl);
            } else if (wrkDetlOld.getAnfme() != wrkDetl.getAnfme()) {
                wrkDetlService.updateAnfme(wrkDetl.getAnfme(), wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                recordRecordLog = recordRecordLog + "\n" + "更新一条明细:" + "\t商品编号:" + wrkDetl.getMatnr() + "\t批号:" + wrkDetl.getBatch() + "\t原数量:" + wrkDetlOld.getAnfme() + "\t新数量:" + wrkDetl.getAnfme();
                adjDetl.setOriQty(wrkDetlOld.getAnfme());
                adjDetlService.insert(adjDetl);
            } else if (wrkDetlOld.getAnfme() == wrkDetl.getAnfme()) {
                recordRecordLog = recordRecordLog + "\n" + "一条明细保持不变:" + "\t商品编号:" + wrkDetl.getMatnr() + "\t批号:" + wrkDetl.getBatch() + "\t数量:" + wrkDetlOld.getAnfme();
                continue;
            } else {
                throw new CoolException("托盘码:" + param.getBarcode() + " 未知异常,请联系管理员");
            }
        }
        log.info(recordRecordLog);
    }
}
src/main/java/com/zy/common/model/DetlDto.java
@@ -26,6 +26,8 @@
    private String outOrderNo;
    private String memo;
    public DetlDto() {
    }
src/main/resources/license.lic
Binary files differ