From 831dbe10d1c0975b0de4251b67b939347b079006 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期四, 20 二月 2025 10:35:01 +0800
Subject: [PATCH] 单据管理多选,全选excel导出

---
 src/main/java/com/zy/asrs/controller/OrderController.java           |   82 ++++++++++++-
 src/main/java/com/zy/asrs/entity/OrderDetlExcelVo.java              |   92 +-------------
 src/main/webapp/static/js/order/order.js                            |   90 ++++++++++++---
 src/main/java/com/zy/asrs/entity/param/DefinedExcelExportParam.java |   33 +++++
 src/main/webapp/views/order/order.html                              |    4 
 5 files changed, 189 insertions(+), 112 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OrderController.java b/src/main/java/com/zy/asrs/controller/OrderController.java
index 7e97795..c73d459 100644
--- a/src/main/java/com/zy/asrs/controller/OrderController.java
+++ b/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 @@
         // 璁㈠崟琛ㄥ彧瀛樹簡鎿嶄綔浜篿d,鎵�浠ユ搷浣滀汉濮撳悕鏌ヨ锛屽彧鑳戒粠濮撳悕鍏堝幓鎵緄d锛�
         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<>();
+
+            // 闄愬埗閿�鍞鑹插彧鑳界湅鑷繁鍒涘缓鐨勫崟瀛愶紙閿�鍞鑹瞚d鍥哄畾21锛屼笉鑳介殢鎰忎慨鏀癸級
+            User user = getUser();
+            if (user.getRoleId() != 2 && user.getRoleId() != 24) {
+                orderEntityWrapper.eq("create_by", user.getId());
+            }
+            // 鎿嶄綔浜猴細璁㈠崟琛ㄥ彧瀛樹簡鎿嶄綔浜篿d,鎵�浠ユ搷浣滀汉濮撳悕鏌ヨ锛屽彧鑳戒粠濮撳悕鍏堝幓鎵緄d锛�
+            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")
diff --git a/src/main/java/com/zy/asrs/entity/OrderDetlExcelVo.java b/src/main/java/com/zy/asrs/entity/OrderDetlExcelVo.java
index fa819a4..db8ad66 100644
--- a/src/main/java/com/zy/asrs/entity/OrderDetlExcelVo.java
+++ b/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;
 
-    /**
-     * 浣滀笟鏁伴噺
-     *
-     *  鍏ュ簱 : 缁勬墭瀹屾垚锛岀粍鎵樻。銆佸伐浣滄。銆佸叆搴撳畬鎴愭暟閲�
-     *  鍑哄簱 : 宸ヤ綔妗c�佸嚭搴撳畬鎴愭暟閲�
-     */
-    @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("璐х墿褰㈡�両D")
     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 "浠i噰";
-//            default:
-//                return String.valueOf(this.payment);
-//        }
-//    }
 
 }
\ No newline at end of file
diff --git a/src/main/java/com/zy/asrs/entity/param/DefinedExcelExportParam.java b/src/main/java/com/zy/asrs/entity/param/DefinedExcelExportParam.java
new file mode 100644
index 0000000..3006fb9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/DefinedExcelExportParam.java
@@ -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;
+    }
+
+
+}
+
+
+
+
diff --git a/src/main/webapp/static/js/order/order.js b/src/main/webapp/static/js/order/order.js
index 3e27de8..3b085f1 100644
--- a/src/main/webapp/static/js/order/order.js
+++ b/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','璐х墿褰㈡�乮d'],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');
     });
 
     // 娣诲姞
diff --git a/src/main/webapp/views/order/order.html b/src/main/webapp/views/order/order.html
index 7c5b136..97d6217 100644
--- a/src/main/webapp/views/order/order.html
+++ b/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>鎼滅储

--
Gitblit v1.9.1