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"></i>瀵煎嚭鎵�鏈� + <i class="layui-icon"></i>瀵煎嚭 </button> <button class="layui-btn icon-btn" lay-filter="tbSearch" lay-submit> <i class="layui-icon"></i>鎼滅储 -- Gitblit v1.9.1