| | |
| | | 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; |
| | |
| | | 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.*; |
| | |
| | | // 订单表只存了操作人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())); |
| | | } |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | .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") |
| | |
| | | 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; |
| | |
| | | |
| | | 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); |
| | | // } |
| | | // } |
| | | |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | |
| | | 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 () { |
| | |
| | | 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}, |
| | |
| | | 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'); |
| | | }); |
| | | |
| | | // 添加 |
| | |
| | | <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"> |
| | |
| | | </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>搜索 |