自动化立体仓库 - WMS系统
pang.jiabao
2025-02-20 831dbe10d1c0975b0de4251b67b939347b079006
单据管理多选,全选excel导出
1个文件已添加
4个文件已修改
301 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OrderController.java 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/OrderDetlExcelVo.java 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/DefinedExcelExportParam.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/order.js 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/order.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderController.java
@@ -10,6 +10,7 @@
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.DefinedExcelExportParam;
import com.zy.asrs.entity.param.OrderDomainParam;
import com.zy.asrs.entity.result.OrderDetlVo;
import com.zy.asrs.mapper.OrderDetlMapper;
@@ -19,6 +20,7 @@
import com.zy.common.web.BaseController;
import com.zy.system.entity.User;
import com.zy.system.service.UserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@@ -102,7 +104,7 @@
        // 订单表只存了操作人id,所以操作人姓名查询,只能从姓名先去找id,
        Object userName = param.get("oper_memb");
        if (userName != null && user.getRoleId() != 21) {
            List<User> users = userService.selectList(new EntityWrapper<User>().like("username", (String) param.get("oper_memb")));
            List<User> users = userService.selectList(new EntityWrapper<User>().eq("username", param.get("oper_memb")));
            if (users.size() > 0) {
                wrapper.in("create_by", users.stream().map(User::getId).collect(Collectors.toList()));
            }
@@ -322,7 +324,7 @@
                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
            } else {
                wrapper.like(entry.getKey(), val);
                wrapper.eq(entry.getKey(), val);
            }
        }
    }
@@ -474,18 +476,78 @@
                .doWrite(orderDetlVos);
    }
    @PostMapping (value = "/order/exportAll/auth")
    @PostMapping (value = "/order/definedExcelExport/auth")
    @ManagerAuth
    public R export() {
    public void export(HttpServletResponse response, @RequestBody DefinedExcelExportParam definedExcelExportParam) throws IOException {
        User user = getUser();
        Long userId = null;
        if (user.getRoleId() != 2 && user.getRoleId() != 24) {
            userId = user.getId();
        EntityWrapper<OrderDetl> orderDetlEntityWrapper = new EntityWrapper<>();
        if ("all".equals(definedExcelExportParam.getType())) {
            DefinedExcelExportParam.QueryWhere queryWhere = definedExcelExportParam.getQueryWhere();
            EntityWrapper<Order> orderEntityWrapper = new EntityWrapper<>();
            // 限制销售角色只能看自己创建的单子(销售角色id固定21,不能随意修改)
            User user = getUser();
            if (user.getRoleId() != 2 && user.getRoleId() != 24) {
                orderEntityWrapper.eq("create_by", user.getId());
            }
            // 操作人:订单表只存了操作人id,所以操作人姓名查询,只能从姓名先去找id,
            Object userName = queryWhere.getOper_memb();
            if (userName != null && user.getRoleId() != 21) {
                List<User> users = userService.selectList(new EntityWrapper<User>().eq("username", queryWhere.getOper_memb()));
                if (users.size() > 0) {
                    orderEntityWrapper.in("create_by", users.stream().map(User::getId).collect(Collectors.toList()));
                }
            }
            // 订单编号
            if (!Cools.isEmpty(queryWhere.getOrder_no())) {
                orderEntityWrapper.eq("order_no", queryWhere.getOrder_no());
            }
            // 创建时间
            if (queryWhere.getCreate_time().contains(RANGE_TIME_LINK)) {
                String[] dates = queryWhere.getCreate_time().split(RANGE_TIME_LINK);
                orderEntityWrapper.ge("create_time", DateUtils.convert(dates[0]));
                orderEntityWrapper.le("create_time", DateUtils.convert(dates[1]));
            }
            // 单据类型
            if (!Cools.isEmpty(queryWhere.getDoc_type())) {
                orderEntityWrapper.eq("doc_type", queryWhere.getDoc_type());
            }
            // 单据状态
            if (!Cools.isEmpty(queryWhere.getSettle())) {
                orderEntityWrapper.eq("settle", queryWhere.getSettle());
            }
            // 客户名称
            if (!Cools.isEmpty(queryWhere.getCstmr_name())) {
                orderEntityWrapper.eq("cstmr_name", queryWhere.getCstmr_name());
            }
            // 未删除
            orderEntityWrapper.eq("status", 1);
            orderEntityWrapper.setSqlSelect("order_no as orderNo");
            List<Order> orderList = orderService.selectList(orderEntityWrapper);
            orderDetlEntityWrapper.in("order_no", orderList.stream().map(Order::getOrderNo).collect(Collectors.toList()));
        } else {
            orderDetlEntityWrapper.in("order_no", definedExcelExportParam.getOrderNoList());
        }
        List<OrderDetlExcelVo> orderDetlExcelVoList = orderDetlMapper.selectExportExcelAllDataList(userId);
        return R.ok(orderDetlExcelVoList);
        List<OrderDetl> list = orderDetlService.selectList(orderDetlEntityWrapper);
        List<OrderDetlExcelVo> orderDetlExcelVoList = new ArrayList<>();
        for (OrderDetl orderDetl : list) {
            OrderDetlExcelVo orderDetlExcelVo = new OrderDetlExcelVo();
            BeanUtils.copyProperties(orderDetl,orderDetlExcelVo);
            orderDetlExcelVoList.add(orderDetlExcelVo);
        }
        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(), OrderDetlExcelVo.class)
                .sheet("表1")
                .doWrite(orderDetlExcelVoList);
    }
    @RequestMapping(value = "/order/list/all")
src/main/java/com/zy/asrs/entity/OrderDetlExcelVo.java
@@ -1,8 +1,6 @@
package com.zy.asrs.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotations.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@@ -12,104 +10,34 @@
    private static final long serialVersionUID = 1L;
    /**
     * 单据编号
     */
    @ApiModelProperty(value= "单据编号")
    @TableField("order_no")
    @ExcelProperty({"单据", "单据编号"})
    @ExcelProperty("单据编号")
    private String orderNo;
    /**
     * 数量
     */
    @ApiModelProperty(value= "数量")
    @ExcelProperty({"单据", "数量"})
    @ExcelProperty("数量")
    private Double anfme;
    /**
     * 作业数量
     *
     *  入库 : 组托完成,组托档、工作档、入库完成数量
     *  出库 : 工作档、出库完成数量
     */
    @ApiModelProperty(value= "作业数量")
    @TableField("work_qty")
    @ExcelProperty({"单据", "作业数量"})
    @ExcelProperty("作业数量")
    private Double workQty;
    /**
     * 完成数量
     *
     *  入库 : qty 👆
     *  出库 : qty 👆
     */
    @ApiModelProperty(value= "完成数量")
    @ExcelProperty({"单据", "完成数量"})
    @ExcelProperty("完成数量")
    private Double qty;
    /**
     * 商品编码
     */
    @ApiModelProperty(value= "商品编码")
    @ExcelProperty({"单据", "商品编码"})
    @ExcelProperty("商品编码")
    private String matnr;
    /**
     * 商品名称
     */
    @ApiModelProperty(value= "商品名称")
    @ExcelProperty({"单据", "商品名称"})
    @ExcelProperty("商品名称")
    private String maktx;
    /**
     * 规格
     */
    @ApiModelProperty(value= "规格")
    @ExcelProperty({"单据", "规格"})
    @ExcelProperty("规格")
    private String specs;
    /**
     * 重量
     */
    @ApiModelProperty(value= "重量")
    @ExcelProperty({"单据", "重量"})
    @ExcelProperty("重量")
    private Double weight;
    /**
     * 拥有者
     */
    @ApiModelProperty(value= "拥有者 1: 杰克   ")
    @ExcelProperty({"单据", "货主ID"})
    @ExcelProperty("货主ID")
    private Integer owner;
    /**
     * 货物形态:0:代采、1:仓储
     */
    @ApiModelProperty(value= "货物形态:0:代采、1:仓储")
    @ExcelProperty("货物形态ID")
    private Integer payment;
//
//
//    public String getOwner$(){
//        LocOwnerService service = SpringUtils.getBean(LocOwnerService.class);
//        LocOwner locOwner = service.selectById(this.owner);
//        if (!Cools.isEmpty(locOwner)){
//            return String.valueOf(locOwner.getOwner());
//        }
//        return null;
//    }
//
//    public String getPayment$(){
//        if (null == this.payment){ return null; }
//        switch (this.payment){
//            case 1:
//                return "仓储";
//            case 0:
//                return "代采";
//            default:
//                return String.valueOf(this.payment);
//        }
//    }
}
src/main/java/com/zy/asrs/entity/param/DefinedExcelExportParam.java
New file
@@ -0,0 +1,33 @@
package com.zy.asrs.entity.param;
import lombok.Data;
import java.util.List;
/**
 * @author pang.jiabao
 * @description 单据管理自定义导出条件
 * @createDate 2025/2/18 16:45
 */
@Data
public class DefinedExcelExportParam {
    private String type;
    private List<String> orderNoList;
    private QueryWhere queryWhere;
    @Data
    public static class QueryWhere {
        private String create_time;
        private String cstmr_name;
        private String order_no;
        private String settle;
        private String doc_type;
        private String oper_memb;
    }
}
src/main/webapp/static/js/order/order.js
@@ -1,5 +1,8 @@
var insTbCount = 0;
var printMatCodeNos = [];
var selectedData = [];
var selectType = 'one';
var queryWhere = {};
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
}).use(['layer', 'form', 'table', 'util', 'admin', 'xmSelect', 'laydate'], function () {
@@ -41,7 +44,8 @@
        page: true,
        cellMinWidth: 100,
        cols: [[
            {type: 'numbers'},
            {type: 'checkbox'},
            {type: 'numbers', title: '序号'},
            {field: 'orderNo', title: '单据编号'},
            {field: 'docType$', align: 'center', title: '类型',  minWidth: 160, width: 160},
            {align: 'center', title: '明细', toolbar: '#tbLook', minWidth: 160, width: 160},
@@ -73,37 +77,87 @@
            if (res.code === 403) {
                top.location.href = baseUrl+"/";
            }
            var selectedOrderNos = selectedData.map(item => item.orderNo);
            var indexArr = []
            res.data.forEach(function (item,index) {
                  if (selectedOrderNos.includes(item.orderNo)) {
                      indexArr.push(index)
                  }
            })
            // 重新渲染
            table.setRowChecked('order',{
                index: indexArr
            });
            insTbCount = count;
        }
    });
    table.on('checkbox(order)', function (obj) {
        if (obj.type === 'all' && obj.checked) {
            selectType = 'all'
        } else if (obj.type === 'one' && obj.checked) {
            selectType = 'one'
            selectedData.push(obj.data); // 选中时保存数据
        } else if (obj.type === 'one' && !obj.checked && obj.index !== undefined) {
            selectType = 'one'
            selectedData = selectedData.filter(item => item.orderNo !== obj.data.orderNo); // 取消时移除数据
        } else if (obj.type === 'all' && !obj.checked && obj.index === undefined) {
            selectType = 'one'
            selectedData = [];
        }
    });
    // 搜索
    form.on('submit(tbSearch)', function (data) {
        insTb.reload({where: data.field, page: {curr: 1}});
        queryWhere = data.field
    });
    // 导出所有
    // 导出
    form.on('submit(exportAll)', function (data) {
        layer.closeAll();
        layer.load(1, {shade: [0.1,'#fff']});
        $.ajax({
            url: baseUrl+"/order/exportAll/auth",
            headers: {'token': localStorage.getItem('token')},
            data: {},
            dataType:'json',
            contentType:'application/json;charset=UTF-8',
            method: 'POST',
            success: function (res) {
                if (res.code === 200) {
                    table.exportFile(['单据编号','数量','作业数量','完成数量','商品编码','商品名称','规格','重量','货主id','货物形态id'],res.data,'xls');
                } else if (res.code === 403) {
                    top.location.href = baseUrl+"/";
        layer.confirm('确定导出Excel吗', {shadeClose: true}, function () {
            layer.closeAll();
            layer.load(1, {shade: [0.1, '#fff']});
            var reqData = {};
            reqData.type = selectType;
            if (reqData.type === 'one') {
                reqData.orderNoList = selectedData.map(item => item.orderNo);
            } else {
                if (Object.keys(queryWhere).length === 0) {
                    reqData.queryWhere = {
                        create_time: "",
                        cstmr_name: "",
                        doc_type: "",
                        oper_memb: "",
                        order_no: "",
                        settle: ""
                    }
                } else {
                    layer.msg(res.msg)
                    reqData.queryWhere = queryWhere
                }
            }
            $.ajax({
                url: baseUrl + "/order/definedExcelExport/auth",
                headers: {'token': localStorage.getItem('token')},
                data: JSON.stringify(reqData),
                contentType: 'application/json;charset=UTF-8',
                method: 'POST',
                xhrFields: {
                    responseType: 'blob'  // 处理返回的文件流
                },
                success: function (res) {
                    var link = document.createElement('a');
                    link.href = URL.createObjectURL(res);  // 使用 Blob 对象生成临时 URL
                    link.download = new Date().getTime() + '.xlsx';  // 设置下载的文件名
                    document.body.appendChild(link);
                    link.click();  // 触发下载
                    document.body.removeChild(link);
                }
            });
            layer.closeAll('loading');
        });
        layer.closeAll('loading');
    });
    // 添加
src/main/webapp/views/order/order.html
@@ -36,7 +36,7 @@
    <div class="layui-card">
        <div class="layui-card-body">
            <!-- 表格顶部工具栏 -->
            <div class="layui-form toolbar">
            <div class="layui-form toolbar" lay-filter = 'val-filter'>
                <div class="layui-form-item">
                    <div class="layui-inline">
                        <div class="layui-input-inline mr0">
@@ -77,7 +77,7 @@
                    </div>
                    <div class="layui-inline">
                        <button class="layui-btn icon-btn" lay-filter="exportAll" lay-submit>
                            <i class="layui-icon">&#xe67d;</i>导出所有
                            <i class="layui-icon">&#xe67d;</i>导出
                        </button>
                        <button class="layui-btn icon-btn" lay-filter="tbSearch" lay-submit>
                            <i class="layui-icon">&#xe615;</i>搜索