src/main/java/com/zy/asrs/controller/OrderController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/OrderDetlExcelVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/param/DefinedExcelExportParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/order/order.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/order/order.html | ●●●●● 补丁 | 查看 | 原始文档 | 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 { 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(); Long userId = null; if (user.getRoleId() != 2 && user.getRoleId() != 24) { userId = user.getId(); orderEntityWrapper.eq("create_by", user.getId()); } List<OrderDetlExcelVo> orderDetlExcelVoList = orderDetlMapper.selectExportExcelAllDataList(userId); // 操作人:订单表只存了操作人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())); return R.ok(orderDetlExcelVoList); } else { orderDetlEntityWrapper.in("order_no", definedExcelExportParam.getOrderNoList()); } 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,38 +77,88 @@ 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.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 { reqData.queryWhere = queryWhere } } $.ajax({ url: baseUrl+"/order/exportAll/auth", url: baseUrl + "/order/definedExcelExport/auth", headers: {'token': localStorage.getItem('token')}, data: {}, dataType:'json', data: JSON.stringify(reqData), contentType:'application/json;charset=UTF-8', method: 'POST', xhrFields: { responseType: 'blob' // 处理返回的文件流 }, success: function (res) { if (res.code === 200) { table.exportFile(['单据编号','数量','作业数量','完成数量','商品编码','商品名称','规格','重量','货主id','货物形态id'],res.data,'xls'); } else if (res.code === 403) { top.location.href = baseUrl+"/"; } else { layer.msg(res.msg) } 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'); }); }); // 添加 $("#orderAddBtn").click(function () { 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>搜索