自动化立体仓库 - WMS系统
whycq
2024-06-30 270b536cea3a42d8c45070ae3775aa4a586e32f2
# bom档案
3个文件已修改
3个文件已添加
287 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MatController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/result/pandianVo.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/OutpandianBoxExeclListener.java 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/entity/pandianExcel.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pakStore/locCheckOut.js 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pakStore/locCheckOut.html 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MatController.java
@@ -22,6 +22,7 @@
import com.zy.common.config.AdminInterceptor;
import com.zy.common.entity.MatExcel;
import com.zy.common.entity.OutLocBoxExcel;
import com.zy.common.entity.pandianExcel;
import com.zy.common.utils.BarcodeUtils;
import com.zy.common.utils.QrCode;
import com.zy.common.web.BaseController;
@@ -361,6 +362,34 @@
        return R.ok("成功出库"+listener.getTotal()+"条商品数据");
    }
    /*********************************************盘点导入导出****************************************************************/
    /**
     * excel导入模板下载
     */
    @RequestMapping(value = "/out/loc/box/excel/import/mould1")
    public void outLocBoxExcelImportMould1(HttpServletResponse response) throws IOException {
        List<OutLocBoxExcel> excels = new ArrayList<>();
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        String fileName = URLEncoder.encode("导入箱号盘点模板", "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), pandianExcel.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                .sheet("盘点模板")
                .doWrite(excels);
    }
    // excel导入
    @PostMapping(value = "/out/loc/box/excel/import/auth1")
    @ManagerAuth(memo = "导入箱号盘点出库")
    @Transactional
    public R outLocBoxExcelImport1(MultipartFile file) throws IOException {
        OutLocBoxExcelListener listener = new OutLocBoxExcelListener(getUserId());
        EasyExcel.read(file.getInputStream(), OutLocBoxExcel.class, listener).sheet().doRead();
        return R.ok("成功出库"+listener.getTotal()+"条商品数据");
    }
    /*************************************** xm-select ***********************************************/
src/main/java/com/zy/asrs/entity/result/pandianVo.java
New file
@@ -0,0 +1,28 @@
package com.zy.asrs.entity.result;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class pandianVo {
    @ExcelProperty(value = "箱号")
    private String batch;
    @ExcelProperty(value = "卷号")
    private String model;
    @ExcelProperty(value = "规格型号")
    private String matnr;
    public pandianVo() {
    }
    public pandianVo(String batch) {
        this.batch = batch;
    }
    public pandianVo(String batch, String model, String matnr) {
        this.batch = batch;
        this.model = model;
        this.matnr = matnr;
    }
}
src/main/java/com/zy/asrs/utils/OutpandianBoxExeclListener.java
New file
@@ -0,0 +1,150 @@
package com.zy.asrs.utils;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.ManagerAuth;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.service.LocDetlService;
import com.zy.asrs.service.WorkService;
import com.zy.common.entity.pandianExcel;
import com.zy.common.model.LocDto;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Slf4j
public class OutpandianBoxExeclListener extends AnalysisEventListener<pandianExcel> {
    private int total = 0;
    private Long userId;
    List<String[]> OutLocBoxCs = new ArrayList<>();
    public OutpandianBoxExeclListener() {
    }
    public OutpandianBoxExeclListener(Long userId) {
        this.userId = userId;
    }
    /**
     * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
     */
    private static final int BATCH_COUNT = 50;
    private final List<pandianExcel> list = new ArrayList<>();
    /**
     * 这里会一行行的返回头
     */
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
    }
    /**
     * 这个每一条数据解析都会来调用
     */
    @Override
    public void invoke(pandianExcel pandianExcel, AnalysisContext analysisContext) {
        String batch = pandianExcel.getBatch();
        if (Cools.isEmpty(batch)){
            throw new CoolException("箱号参数为空");
        }
        String[] s=new String[1];
        s[0] = batch;
        OutLocBoxCs.add(s);
        total++;
    }
    /**
     * 所有数据解析完成了调用
     * 适合事务
     */
    @Override
    @ManagerAuth
    public void doAfterAllAnalysed(AnalysisContext ctx) {
        ArrayList<LocDetl> locDetls1 = new ArrayList<>();
        if (!Cools.isEmpty(OutLocBoxCs) && OutLocBoxCs.size() != 0) {
            LocDetlService locDetlService = SpringUtils.getBean(LocDetlService.class);
            WorkService workService = SpringUtils.getBean(WorkService.class);
            List<LocDto> locDtos = new ArrayList<>();
            List<String[]> outLocBoxCList = new ArrayList<>();
            List<String> outLocBoxCNew = new ArrayList<>();
            for (String[] outLocBoxC:OutLocBoxCs){
                total--;
                if (!outLocBoxCNew.contains(outLocBoxC[0])){
                    LocDetl locDetlSou = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("batch", outLocBoxC[0]));
                    if (Cools.isEmpty(locDetlSou)){
                        throw new CoolException("箱号:"+outLocBoxC[0]+" 未查询到数据!!!");
                    }
                    List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                            .eq("loc_no", locDetlSou.getLocNo()).eq("origin", locDetlSou.getOrigin()));
                    for (LocDetl locDetl:locDetls){
                        total++;
                        String[] locDetlNow=new String[2];
                        locDetlNow[0] = locDetl.getBatch();
                        locDetlNow[1] = outLocBoxC[1];
                        outLocBoxCList.add(locDetlNow);
                        outLocBoxCNew.add(outLocBoxC[0]);
                    }
                }
            }
            for (String[] outLocBoxC:outLocBoxCList){
                LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("batch", outLocBoxC[0]));
                if (Cools.isEmpty(locDetl)){
                    total--;
                    continue;
                }
//                LocDto locDto = new LocDto(locDetl.getManu(), locDetl.getMatnr(), locDetl.getMaktx(),locDetl.getModel(),locDetl.getSpecs(),
//                        locDetl.getBatch(),locDetl.getBrand(),locDetl.getBarcode(), outLocBoxC[1],locDetl.getAnfme());
//                locDto.setOrigin(locDetl.getOrigin());
//                locDto.setWeight(locDetl.getWeight());
                LocDto locDto = new LocDto(locDetl);
                locDtos.add(locDto);
            }
            StockOutParam param = new StockOutParam();
            List<LocDto> locDtosList = new ArrayList<>();
            List<String> batchList = new ArrayList<>();
            for (LocDto locDto : locDtos) {
                if (!batchList.contains(locDto.getBatch())){
                    batchList.add(locDto.getBatch());
                    locDtosList.add(locDto);
                }
            }
            for (LocDto locDto:locDtosList){
                LocDetl locDetl = new LocDetl();
                locDetl.setBrand(locDto.getBrand());
                locDetl.setLocNo(locDto.getLocNo());
                locDetl.setAnfme(locDto.getAnfme());
                locDetl.setMatnr(locDto.getMatnr());
                locDetl.setBatch(locDto.getBatch());
                locDetl.setModel(locDto.getModel());
                locDetl.setSpecs(locDto.getSpecs());
                locDetl.setZpallet(locDto.getZpallet());
                locDetl.setOrigin(locDto.getOrigin());
                locDetl.setWeight(locDto.getWeight());
                locDetls1.add(locDetl);
            }
            //if (total>0){
            //    workService.startupFullTakeStoreOrder(param,9999L);
            //}
        }
        //return locDetls1;
    }
    public int getTotal() {
        return total;
    }
}
src/main/java/com/zy/common/entity/pandianExcel.java
New file
@@ -0,0 +1,16 @@
package com.zy.common.entity;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.zy.asrs.entity.result.pandianVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ExcelIgnoreUnannotated
public class pandianExcel extends pandianVo {
    private String batch;
    private String model;
    private String matnr;
}
src/main/webapp/static/js/pakStore/locCheckOut.js
@@ -1,6 +1,7 @@
var locDetlLayerIdx;
var tableIns;
var locDetlData = [];
var admin;
function getCol() {
    var cols = [
        {field: 'locNo', align: 'center',title: '库位号', merge: true, style: 'font-weight: bold'}
@@ -17,7 +18,7 @@
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var admin = layui.admin;
    admin = layui.admin;
    var tableMerge = layui.tableMerge;
    tableIns = table.render({
@@ -136,3 +137,57 @@
    tableIns.reload({data: locDetlData});
    layer.close(locDetlLayerIdx);
}
// excel导入模板下载
function excelMouldDownload(){
    layer.load(1, {shade: [0.1,'#fff']});
    location.href = baseUrl + "/out/loc/box/excel/import/mould1";
    layer.closeAll('loading');
}
// excel导入
function importExcel() {
    $("#importExcel").trigger("click");
}
function upload(obj){
    if(!obj.files) {
        return;
    }
    var file = obj.files[0];
    admin.confirm('确认同步 [' + file.name +'] 文件吗?', function (index) {
        layer.load(1, {shade: [0.1,'#fff']});
        var url = baseUrl + "/out/loc/box/excel/import/auth1";
        var form = new FormData();
        form.append("file", file);
        xhr = new XMLHttpRequest();
        xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
        xhr.setRequestHeader('token', localStorage.getItem('token'));
        xhr.onload = uploadComplete; //请求完成
        xhr.onerror =  uploadFailed; //请求失败
        xhr.onloadend = function () { // // 上传完成重置文件流
            layer.closeAll('loading');
            $("#importExcel").val("");
        };
        // xhr.upload.onprogress = progressFunction;//【上传进度调用方法实现】
        xhr.upload.onloadstart = function(){//上传开始执行方法
            ot = new Date().getTime();   //设置上传开始时间
            oloaded = 0;//设置上传开始时,以上传的文件大小为0
        };
        xhr.send(form);
    }, function(index){
        $("#importExcel").val("");
    });
}
function uploadComplete(evt) {
    var res = JSON.parse(evt.target.responseText);
    if(res.code === 200) {
        layer.msg(res.msg, {icon: 1});
        loadTree("");
    } else {
        layer.msg(res.msg, {icon: 2});
    }
}
function uploadFailed(evt) {
    var res = JSON.parse(evt.target.responseText);
    layer.msg(res.msg, {icon: 2});
}
src/main/webapp/views/pakStore/locCheckOut.html
@@ -84,6 +84,7 @@
<!-- 功能区 -->
<div class="function-area">
    <button id="mat-query" class="function-btn">提取库存</button>
    <button class="function-btn" style="width: auto;float:right;" onclick="excelMouldDownload()">导入箱号盘点出库模板下载</button>
</div>
<hr>
@@ -100,8 +101,10 @@
                <select id="staNoSelect" lay-verify="required">
                    <option value="">请选择站点</option>
                </select>
                <!-- 2.启动出库 -->
                <button class="layui-btn layui-btn-lg" id="btn-outbound" lay-event="outbound">盘点出库</button>
                <button class="layui-btn layui-btn-lg" id="btn-outbound" lay-event="outbound">启动盘点出库</button>
                <!-- 3.导入箱号出库 -->
                <button class="layui-btn layui-btn-lg" onclick="importExcel()" style="font-size: 12px;width: auto;">导入箱号盘点出库</button>
                <span style="display: none"><input id="importExcel" type="file" onchange="upload(this)">启动盘点出库</span>
            </div>
        </div>
    </script>