自动化立体仓库 - WMS系统
1.增加牌号作为唯一物料条件 (当前牌号 批号 包号可以筛选出唯一物料)
2.增加移库接口
3.订单出库可替换物料
4.页面ui完善
6个文件已修改
1个文件已添加
114 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/PlaParam.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MobileService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/picking/picking.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pla/plaDetl.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pla/sellout.html 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -429,7 +429,7 @@
        JSONArray jsonArray = JSONArray.parseArray(json.getJSONArray("pla").toJSONString());
        for (Object o : jsonArray){
            JSONObject jsonObject = (JSONObject)o;
            String brand = json.get("brand").toString();
            String brand = jsonObject.get("brand").toString();
            String batch = jsonObject.get("batch").toString();
            Integer packageNo = Integer.parseInt(jsonObject.get("packageNo").toString());
            if(Cools.isEmpty(locNo) || Cools.isEmpty(batch) || Cools.isEmpty(packageNo)){
@@ -456,12 +456,13 @@
        String orderDetlId = json.get("orderDetlId").toString();
        String wrkNo = json.get("wrkNo").toString();
        Double anfme = Double.parseDouble(json.get("anfme").toString());
        boolean isReplace = Cools.eq(json.get("replace").toString(),"y");
        if(Cools.isEmpty(locNo) || Cools.isEmpty(batch) || Cools.isEmpty(packageNo)){
            return R.error("有参数为空,无法入库");
        }
        mobileService.plaPakout(brand,locNo,batch,packageNo,orderNo,orderDetlId,wrkNo,anfme);
        mobileService.plaPakout(brand,locNo,batch,packageNo,orderNo,orderDetlId,wrkNo,anfme,isReplace);
        return R.ok();
    }
@@ -473,15 +474,30 @@
        String batch = json.get("batch").toString();
        Integer packageNo = Integer.parseInt(json.get("packageNo").toString());
        String orderNo = json.get("orderNo").toString();
        String orderDetlId = json.get("orderDetlId").toString();
        String plaQtyId = json.get("orderDetlId").toString();
        String wrkNo = json.get("wrkNo").toString();
        Double anfme = Double.parseDouble(json.get("anfme").toString());
        boolean isReplace = !Cools.isEmpty(json.get("replace")) && Cools.eq(json.get("replace").toString(),"y");
        if(Cools.isEmpty(locNo) || Cools.isEmpty(batch) || Cools.isEmpty(packageNo)){
            return R.error("有参数为空,无法入库");
        }
        mobileService.plaPakout(brand,locNo,batch,packageNo,orderNo,orderDetlId,wrkNo,anfme);
        mobileService.plaPakout(brand,locNo,batch,packageNo,orderNo,plaQtyId,wrkNo,anfme,isReplace);
        return R.ok();
    }
    /*
    无订单拣货出库
     */
    @RequestMapping("/plaDetl/packout/noOrder/v1")
    //@ManagerAuth(memo="pla手动出库")
    public R plaPackOutWithoutOrder(@RequestBody List<PlaParam> params){
        for (PlaParam param : params){
            mobileService.plaPackOutWithoutOrder(param.getBrand(),param.getBatch(),param.getPackageNo(),param.getAnfme());
        }
        return R.ok();
    }
src/main/java/com/zy/asrs/entity/param/PlaParam.java
New file
@@ -0,0 +1,11 @@
package com.zy.asrs.entity.param;
import lombok.Data;
@Data
public class PlaParam {
    private String brand;
    private String batch;
    private Integer packageNo;
    private Double anfme;
}
src/main/java/com/zy/asrs/service/MobileService.java
@@ -58,8 +58,9 @@
    void plaPakin(String brand,String locNo, String batch, Integer packageNo, User user);
    void plaPakout(String brand,String locNo, String batch, Integer packageNo, String orderNo, String orderDetlId, String wrkNo,Double anfme);
    void plaPakout(String brand,String locNo, String batch, Integer packageNo, String orderNo, String plaQtyId, String wrkNo,Double anfme, boolean isReplace);
    void plaPackOutWithoutOrder(String brand, String batch, Integer packageNo, Double anfme );
    /*
    获取拣货单信息
     */
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -1236,12 +1236,24 @@
    @Override
    @Transactional
    public void plaPakout(String brand, String locNo, String batch, Integer packageNo, String orderNo, String orderDetlId, String wrkNo, Double anfme) {
    public void plaPakout(String brand, String locNo, String batch, Integer packageNo, String orderNo, String plaQtyId, String wrkNo, Double anfme, boolean isReplace) {
        Pla pla = plaService.selectByBatchAndPackageNo(batch, packageNo,brand);
        ManPakOut manPakOut = manPakOutService.selectById(wrkNo);
        PlaQty plaQty = plaQtyService.selectById(orderDetlId);
        PlaQty plaQty = plaQtyService.selectById(plaQtyId);
        //物料替换
        if(isReplace){
            replacePla(pla,manPakOut,plaQty);
        }else {
            if(!Cools.eq(pla.getStatus(),GlobleParameter.PLA_STATUS_2) ||
                    !Cools.eq(pla.getBatch(),manPakOut.getBatch()) ||
                    !Cools.eq(pla.getPackageNo()+"",manPakOut.getBarcode()) ||
                    !Cools.eq(pla.getBrand(),manPakOut.getMaktx()) ){
                throw new CoolException("物料不一致,无法出库" + "批号:" + pla.getBatch() + ",包号:" + pla.getPackageNo() + ",牌号:" + pla.getBrand());
            }
        }
        //更新拣货单信息
        if(manPakOut.getCount() + anfme > manPakOut.getAnfme()){
@@ -1285,7 +1297,59 @@
    }
    @Override
    public void plaPackOutWithoutOrder(String brand, String batch, Integer packageNo, Double anfme) {
        Pla pla = plaService.selectByBatchAndPackageNo(batch, packageNo,brand);
        if(Cools.isEmpty(pla)){
            throw new CoolException("当前物料明细不存在");
        }
        if (!pla.getStatus().equals(GlobleParameter.PLA_STATUS_1) && !pla.getStatus().equals(GlobleParameter.PLA_STATUS_3)){
            throw new CoolException("当前物料状态无法出库");
        }
        if(anfme > pla.getWeightAnfme()){
            throw new CoolException("当前物料剩余库存不足");
        }
        pla.setWeightAnfme(pla.getWeightAnfme() - anfme);
        if(pla.getWeightAnfme() > 0){
            pla.setStatus(GlobleParameter.PLA_STATUS_3);
        }else {
            pla.setStatus(GlobleParameter.PLA_STATUS_4);
        }
        plaService.updateById(pla);
        SaasUtils.insertLog(1,pla.getLocNo(),pla.getBrand(),anfme,null,null,pla.getBatch(),pla.getPackageNo(),pla.getOwner(),pla.getWorkshop());
    }
    @Override
    public List<ManPakOut> getManPakoutByOrderNo(String orderNo) {
        return manPakOutService.selectList(new EntityWrapper<ManPakOut>().eq("doc_num",orderNo).eq("status",0));
    }
    public void replacePla(Pla plaNew, ManPakOut manPakOut, PlaQty plaQty){
        //还原旧物料状态
        Pla plaOld = plaService.selectByBatchAndPackageNo(manPakOut.getBatch(), Integer.parseInt(manPakOut.getBarcode()), manPakOut.getMaktx());
        plaOld.setStatus(GlobleParameter.PLA_STATUS_1);
        plaOld.setQtyAnfme(0.0);
        plaService.updateById(plaOld);
        //更新plaQty信息
        plaQty.setBatch(plaNew.getBatch());
        plaQty.setBrand(plaNew.getBrand());
        plaQty.setPackageNo(plaNew.getPackageNo());
        plaQtyService.updateById(plaQty);
        //更新拣货单信息
        manPakOut.setMaktx(plaNew.getBrand());
        manPakOut.setBatch(plaNew.getBatch());
        manPakOut.setBarcode(plaNew.getPackageNo() + "");
        manPakOutService.updateById(manPakOut);
    }
}
src/main/webapp/static/js/picking/picking.js
@@ -334,9 +334,9 @@
                            var className = templateDom.attr("class");
                            if (className === 'template-barcode') {
                                json.data[i]["barcodeUrl"] = baseUrl + "/ManPakOut/code/auth?type=2&param=" + (json.data[i].docNum+";"+json.data[i].matnr+";"+json.data[i].batch+";"+json.data[i].anfme+";"+json.data[i].locNo+";"+json.data[i].barcode+";"+json.data[i].nodeId+";"+json.data[i].wrkNo+";");
                                json.data[i]["barcodeUrl"] = baseUrl + "/ManPakOut/code/auth?type=2&param=" + (json.data[i].docNum+";"+json.data[i].matnr+";"+json.data[i].batch+";"+json.data[i].anfme+";"+json.data[i].locNo+";"+json.data[i].barcode+";"+json.data[i].nodeId+";"+json.data[i].wrkNo+";"+json.data[i].maktx);
                            } else {
                                json.data[i]["barcodeUrl"] = baseUrl + "/ManPakOut/code/auth?type=2&param=" + (json.data[i].docNum+";"+json.data[i].matnr+";"+json.data[i].batch+";"+json.data[i].anfme+";"+json.data[i].locNo+";"+json.data[i].barcode+";"+json.data[i].nodeId+";"+json.data[i].wrkNo+";");
                                json.data[i]["barcodeUrl"] = baseUrl + "/ManPakOut/code/auth?type=2&param=" + (json.data[i].docNum+";"+json.data[i].matnr+";"+json.data[i].batch+";"+json.data[i].anfme+";"+json.data[i].locNo+";"+json.data[i].barcode+";"+json.data[i].nodeId+";"+json.data[i].wrkNo+";"+json.data[i].maktx);
                            }
                        }
                        var tpl = templateDom.html();
src/main/webapp/static/js/pla/plaDetl.js
@@ -242,6 +242,7 @@
                        headers: {token: localStorage.getItem('token')},
                        url: baseUrl+'/plaQty/list/auth',
                        where: {
                            brand: data.brand,
                            batch: data.batch,
                            package_no: data.packageNo
                        },
src/main/webapp/views/pla/sellout.html
@@ -219,7 +219,7 @@
                type: 1,
                title: "数量修改",
                content: $('#editDialog').html(),
                area: '700px',
                area: ['700px', top.detailHeight],
                success: function (layero, dIndex) {
                    // 明细表格
                    tableIns = table.render({
@@ -227,6 +227,7 @@
                        data: dataList,
                        limit: 100,
                        even: true,
                        height: '400px',
                        cellMinWidth: 50,
                        cols: [[
                            {field: 'batch', title: '批号', width: 160},