From 70be5b2306ccd1d6803fab5e08d4b1e0e935992c Mon Sep 17 00:00:00 2001 From: jiyufei <67400194@qq.com> Date: Fri, 5 Jul 2024 14:15:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(order):=E6=8A=95=E9=80=92=E3=80=81?= =?UTF-8?q?=E6=B8=85=E8=BF=90=E8=AE=A2=E5=8D=95=E7=BB=9F=E8=AE=A1=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=8A=9F=E8=83=BD=E5=89=8D=E5=90=8E=E7=AB=AF=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=8F=90=E4=BA=A4;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/RecycleCleanOrderService.java | 10 +++ .../service/RecycleDeliveryOrderService.java | 14 ++++ .../impl/RecycleCleanOrderServiceImpl.java | 7 ++ .../impl/RecycleDeliveryOrderServiceImpl.java | 66 ++++++++++++++++++- .../RecycleCleanOrderController.java | 15 +++-- .../RecycleDeliveryOrderController.java | 14 ++-- .../OrderStatisticsRequest.java | 5 ++ .../OrderStatisticsVO.java | 49 ++++++++++++++ .../jnpf-web/src/api/orderStatistics.js | 18 +++++ .../recyclecleanorderstatistics/index.vue | 33 ++++------ .../recycledeliveryorderstatistics/index.vue | 29 +++----- 11 files changed, 209 insertions(+), 51 deletions(-) create mode 100644 jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/model/recycledeliveryorder/OrderStatisticsVO.java create mode 100644 jnpf-java-boot/jnpf-web/src/api/orderStatistics.js diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/RecycleCleanOrderService.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/RecycleCleanOrderService.java index 2fb3e6c..8aff809 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/RecycleCleanOrderService.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/RecycleCleanOrderService.java @@ -1,5 +1,6 @@ package jnpf.service; +import jnpf.base.vo.DownloadVO; import jnpf.model.recyclecleanorder.*; import jnpf.entity.*; import java.util.*; @@ -7,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jnpf.model.recycledeliveryorder.OrderStatisticsRequest; import jnpf.model.recycledeliveryorder.OrderStatisticsResponse; +import jnpf.model.recycledeliveryorder.OrderStatisticsVO; /** * 清运清单 @@ -44,4 +46,12 @@ public interface RecycleCleanOrderService extends IService cleanCount(OrderStatisticsRequest request); + + /** + * 导出数据 + * + * @param dataList 数据 + * @return vo + */ + DownloadVO export(List dataList); } diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/RecycleDeliveryOrderService.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/RecycleDeliveryOrderService.java index 7ca3a3b..89dbb1b 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/RecycleDeliveryOrderService.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/RecycleDeliveryOrderService.java @@ -1,12 +1,18 @@ package jnpf.service; +import jnpf.base.vo.DownloadVO; import jnpf.model.recycledeliveryorder.*; import jnpf.entity.*; +import java.io.FileNotFoundException; +import java.io.IOException; import java.util.*; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import jnpf.permission.model.user.vo.UserExportVO; + +import javax.servlet.http.HttpServletResponse; /** * 投递清单 @@ -56,4 +62,12 @@ public interface RecycleDeliveryOrderService extends IService deliveryCount(OrderStatisticsRequest request); + + /** + * 导出数据 + * + * @param dataList 数据 + * @return vo + */ + DownloadVO export(List dataList); } diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/RecycleCleanOrderServiceImpl.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/RecycleCleanOrderServiceImpl.java index 5ea61b6..0354064 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/RecycleCleanOrderServiceImpl.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/RecycleCleanOrderServiceImpl.java @@ -2,10 +2,12 @@ package jnpf.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import jnpf.base.vo.DownloadVO; import jnpf.entity.*; import jnpf.mapper.RecycleCleanOrderMapper; import jnpf.model.recycledeliveryorder.OrderStatisticsRequest; import jnpf.model.recycledeliveryorder.OrderStatisticsResponse; +import jnpf.model.recycledeliveryorder.OrderStatisticsVO; import jnpf.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jnpf.model.recyclecleanorder.*; @@ -423,4 +425,9 @@ public class RecycleCleanOrderServiceImpl extends ServiceImpl dataList) { + return recycleDeliveryOrderService.exportUtil("date,weight,adjustWeight,price,adjustPrice", "清运清单统计", dataList); + } } diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/RecycleDeliveryOrderServiceImpl.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/RecycleDeliveryOrderServiceImpl.java index 98eb6a5..0401ba7 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/RecycleDeliveryOrderServiceImpl.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/RecycleDeliveryOrderServiceImpl.java @@ -1,7 +1,11 @@ package jnpf.service.impl; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.json.JSON; +import cn.xuyanwu.spring.file.storage.FileInfo; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -12,20 +16,27 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; import jnpf.base.UserInfo; import jnpf.base.model.ColumnDataModel; +import jnpf.base.vo.DownloadVO; +import jnpf.config.ConfigValueUtil; import jnpf.database.model.superQuery.SuperJsonModel; import jnpf.entity.*; -import jnpf.mapper.*; +import jnpf.mapper.RecycleDeliveryOrderMapper; import jnpf.model.QueryModel; import jnpf.model.recycledeliveryorder.*; import jnpf.permission.entity.UserEntity; +import jnpf.permission.model.user.vo.UserExportVO; import jnpf.service.*; import jnpf.util.*; +import lombok.Cleanup; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.lang.reflect.Field; @@ -66,6 +77,8 @@ public class RecycleDeliveryOrderServiceImpl extends ServiceImpl dataList) { + return exportUtil("date,weight,adjustWeight,price,adjustPrice", "投递清单统计", dataList); + } + + public DownloadVO exportUtil(String selectKey, String explain, List modeList) { + List list = JsonUtil.listToJsonField(JsonUtil.getJsonToList(modeList, OrderStatisticsVO.class)); + List entitys = new ArrayList<>(); + String[] splitData = selectKey.split(","); + if (splitData.length > 0) { + for (int i = 0; i < splitData.length; i++) { + if (splitData[i].equals("date")) { + entitys.add(new ExcelExportEntity("日期", "date")); + } + if (splitData[i].equals("weight")) { + entitys.add(new ExcelExportEntity("总重量(kg)", "weight")); + } + if (splitData[i].equals("price")) { + entitys.add(new ExcelExportEntity("总金额(元)", "price")); + } + if (splitData[i].equals("adjustWeight")) { + entitys.add(new ExcelExportEntity("审核后总重量(kg)", "adjustWeight")); + } + if (splitData[i].equals("adjustPrice")) { + entitys.add(new ExcelExportEntity("审核后总金额(元)", "adjustPrice")); + } + } + } + ExportParams exportParams = new ExportParams(null, explain); + exportParams.setType(ExcelType.XSSF); + + DownloadVO vo = DownloadVO.builder().build(); + try { + @Cleanup Workbook workbook = new HSSFWorkbook(); + if (entitys.size() > 0) { + workbook = ExcelExportUtil.exportExcel(exportParams, entitys, list); + } + String name = explain + DateUtil.dateNow("yyyyMMdd") + "_" + RandomUtil.uuId() + ".xlsx"; + MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, name); + String temporaryFilePath = configValueUtil.getTemporaryFilePath(); + FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, name); + vo.setName(fileInfo.getFilename()); + vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + name); + } catch (Exception e) { + log.error("用户信息导出Excel错误:" + e.getMessage()); + } + return vo; + } + /** * 补齐查询月份的天数 * diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-controller/src/main/java/jnpf/controller/RecycleCleanOrderController.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-controller/src/main/java/jnpf/controller/RecycleCleanOrderController.java index b793023..ea2c089 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-controller/src/main/java/jnpf/controller/RecycleCleanOrderController.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-controller/src/main/java/jnpf/controller/RecycleCleanOrderController.java @@ -3,17 +3,18 @@ package jnpf.controller; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jnpf.base.ActionResult; +import jnpf.base.vo.DownloadVO; import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; import jnpf.entity.RecycleCleanOrderEntity; import jnpf.model.recyclecleanorder.*; import jnpf.model.recycledeliveryorder.OrderStatisticsRequest; +import jnpf.model.recycledeliveryorder.OrderStatisticsVO; import jnpf.service.RecycleCleanOrderService; import jnpf.service.RecycleDeviceService; import jnpf.util.GeneraterSwapUtil; import jnpf.util.JsonUtil; import jnpf.util.StringUtil; -import jnpf.util.UserProvider; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -46,9 +47,6 @@ public class RecycleCleanOrderController { @Autowired private GeneraterSwapUtil generaterSwapUtil; - @Autowired - private UserProvider userProvider; - @Autowired private RecycleCleanOrderService recycleCleanOrderService; @@ -245,4 +243,13 @@ public class RecycleCleanOrderController { return ActionResult.success(recycleCleanOrderService.cleanCount(request)); } + @Operation(summary = "导出") + @PostMapping("/export") + public ActionResult export(@RequestBody OrderStatisticsVO exportVO) { + List dataList = JsonUtil.getJsonToList(exportVO.getData(), OrderStatisticsVO.class); + //生成Excel + DownloadVO vo = recycleCleanOrderService.export(dataList); + return ActionResult.success(vo); + } + } diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-controller/src/main/java/jnpf/controller/RecycleDeliveryOrderController.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-controller/src/main/java/jnpf/controller/RecycleDeliveryOrderController.java index 5dc186f..8095dd8 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-controller/src/main/java/jnpf/controller/RecycleDeliveryOrderController.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-controller/src/main/java/jnpf/controller/RecycleDeliveryOrderController.java @@ -3,6 +3,7 @@ package jnpf.controller; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jnpf.base.ActionResult; +import jnpf.base.vo.DownloadVO; import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; import jnpf.entity.RecycleDeliveryOrderEntity; @@ -12,7 +13,6 @@ import jnpf.service.RecycleDeviceService; import jnpf.util.GeneraterSwapUtil; import jnpf.util.JsonUtil; import jnpf.util.StringUtil; -import jnpf.util.UserProvider; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -45,9 +45,6 @@ public class RecycleDeliveryOrderController { @Autowired private GeneraterSwapUtil generaterSwapUtil; - @Autowired - private UserProvider userProvider; - @Autowired private RecycleDeliveryOrderService recycleDeliveryOrderService; @@ -237,4 +234,13 @@ public class RecycleDeliveryOrderController { return ActionResult.success(recycleDeliveryOrderService.deliveryCount(request)); } + @Operation(summary = "导出") + @PostMapping("/export") + public ActionResult export(@RequestBody OrderStatisticsVO exportVO) { + List dataList = JsonUtil.getJsonToList(exportVO.getData(), OrderStatisticsVO.class); + //生成Excel + DownloadVO vo = recycleDeliveryOrderService.export(dataList); + return ActionResult.success(vo); + } + } diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/model/recycledeliveryorder/OrderStatisticsRequest.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/model/recycledeliveryorder/OrderStatisticsRequest.java index 7df03f4..0742d07 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/model/recycledeliveryorder/OrderStatisticsRequest.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/model/recycledeliveryorder/OrderStatisticsRequest.java @@ -1,6 +1,7 @@ package jnpf.model.recycledeliveryorder; import lombok.Data; +import org.apache.poi.hpsf.Blob; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @@ -42,4 +43,8 @@ public class OrderStatisticsRequest { */ private int auditStatus; + /** + * 需要导出的数据 + */ + List data; } diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/model/recycledeliveryorder/OrderStatisticsVO.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/model/recycledeliveryorder/OrderStatisticsVO.java new file mode 100644 index 0000000..4973bf7 --- /dev/null +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/model/recycledeliveryorder/OrderStatisticsVO.java @@ -0,0 +1,49 @@ +package jnpf.model.recycledeliveryorder; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + + +@Data +public class OrderStatisticsVO implements Serializable { + + /** + * 某年某月某天 YYYY-mm-dd + */ + @Excel(name = "日期", isImportField = "true") + private String date; + + + /** + * 总重量 + */ + @Excel(name = "总重量", isImportField = "true") + private BigDecimal weight; + + + /** + * 审核后总重量 + */ + @Excel(name = "审核后总重量", isImportField = "true") + private BigDecimal adjustWeight; + + + /** + * 总金额 + */ + @Excel(name = "总金额", isImportField = "true") + private BigDecimal price; + + + /** + * 审核后总金额 + */ + @Excel(name = "审核后总金额", isImportField = "true") + private BigDecimal adjustPrice; + + List data; +} diff --git a/jnpf-java-boot/jnpf-web/src/api/orderStatistics.js b/jnpf-java-boot/jnpf-web/src/api/orderStatistics.js new file mode 100644 index 0000000..4cc4234 --- /dev/null +++ b/jnpf-java-boot/jnpf-web/src/api/orderStatistics.js @@ -0,0 +1,18 @@ +import request from "@/utils/request"; + + +export function ExportDeliveryOrderData(data) { + return request({ + url: '/api/scm/RecycleDeliveryOrder/export', + method: 'post', + data + }) + } + + export function ExportCleanOrderData(data) { + return request({ + url: '/api/scm/RecycleCleanOrder/export', + method: 'post', + data + }) + } \ No newline at end of file diff --git a/jnpf-java-boot/jnpf-web/src/views/recyclecleanorderstatistics/index.vue b/jnpf-java-boot/jnpf-web/src/views/recyclecleanorderstatistics/index.vue index 510546e..f31be54 100644 --- a/jnpf-java-boot/jnpf-web/src/views/recyclecleanorderstatistics/index.vue +++ b/jnpf-java-boot/jnpf-web/src/views/recyclecleanorderstatistics/index.vue @@ -45,6 +45,7 @@ 查询 重置 + 导出 @@ -64,11 +65,7 @@ - - - - @@ -76,20 +73,12 @@ import request from "@/utils/request"; import { mapGetters } from "vuex"; import { getDictionaryDataSelector } from "@/api/systemData/dictionary"; -import ExportBox from "@/components/ExportBox"; -import ToFormDetail from "@/views/basic/dynamicModel/list/detail"; import { getDataInterfaceRes } from "@/api/systemData/dataInterface"; import { getConfigData } from "@/api/onlineDev/visualDev"; -import { getDefaultCurrentValueUserIdAsync } from "@/api/permission/user"; -import { getDefaultCurrentValueDepartmentIdAsync } from "@/api/permission/organize"; -import { thousandsFormat } from "@/components/Generator/utils/index"; -import SuperQuery from "@/components/SuperQuery"; +import { ExportCleanOrderData } from "@/api/orderStatistics"; export default { components: { - ExportBox, - ToFormDetail, - SuperQuery }, data() { const currentYear = new Date().getFullYear(); @@ -107,10 +96,10 @@ export default { superQueryVisible: false, uploadBoxVisible: false, query: { - companyId:"543048783756268357", - stationIds:[], - deviceCodes:[], - auditStatus: undefined, + companyId: "543048783756268357", + stationIds: [], + deviceCodes: [], + auditStatus: "1", year: currentYear, month: currentMonth }, @@ -142,6 +131,9 @@ export default { }, computed: { ...mapGetters(["userInfo"]), + hasData() { + return this.list.length > 0; + }, menuId() { return this.$route.meta.modelId || ""; } @@ -308,10 +300,9 @@ export default { }, exportData() { - this.exportBoxVisible = true; - this.$nextTick(() => { - this.$refs.ExportBox.init(this.exportList); - }); + ExportCleanOrderData({ data: this.list }).then(res => { + this.jnpf.downloadFile(res.data.url) + }) }, search() { if (this.query.companyId == null) { diff --git a/jnpf-java-boot/jnpf-web/src/views/recycledeliveryorderstatistics/index.vue b/jnpf-java-boot/jnpf-web/src/views/recycledeliveryorderstatistics/index.vue index f480b13..5d474b5 100644 --- a/jnpf-java-boot/jnpf-web/src/views/recycledeliveryorderstatistics/index.vue +++ b/jnpf-java-boot/jnpf-web/src/views/recycledeliveryorderstatistics/index.vue @@ -45,6 +45,7 @@ 查询 重置 + 导出 @@ -64,11 +65,7 @@ - - - - @@ -76,20 +73,12 @@ import request from "@/utils/request"; import { mapGetters } from "vuex"; import { getDictionaryDataSelector } from "@/api/systemData/dictionary"; -import ExportBox from "@/components/ExportBox"; -import ToFormDetail from "@/views/basic/dynamicModel/list/detail"; import { getDataInterfaceRes } from "@/api/systemData/dataInterface"; import { getConfigData } from "@/api/onlineDev/visualDev"; -import { getDefaultCurrentValueUserIdAsync } from "@/api/permission/user"; -import { getDefaultCurrentValueDepartmentIdAsync } from "@/api/permission/organize"; -import { thousandsFormat } from "@/components/Generator/utils/index"; -import SuperQuery from "@/components/SuperQuery"; +import { ExportDeliveryOrderData } from "@/api/orderStatistics"; export default { components: { - ExportBox, - ToFormDetail, - SuperQuery }, data() { const currentYear = new Date().getFullYear(); @@ -110,7 +99,7 @@ export default { companyId: "543048783756268357", stationIds: [], deviceCodes: [], - auditStatus: undefined, + auditStatus: "1", year: currentYear, month: currentMonth }, @@ -134,7 +123,6 @@ export default { flowVisible: false, flowListVisible: false, flowList: [], - exportBoxVisible: false, adjustStatusOptions: [], adjustStatusProps: { label: "fullName", value: "enCode" }, interfaceRes: {} @@ -142,6 +130,9 @@ export default { }, computed: { ...mapGetters(["userInfo"]), + hasData() { + return this.list.length > 0; + }, menuId() { return this.$route.meta.modelId || ""; } @@ -306,12 +297,10 @@ export default { this.listQuery.currentPage = 1; this.initData(); }, - exportData() { - this.exportBoxVisible = true; - this.$nextTick(() => { - this.$refs.ExportBox.init(this.exportList); - }); + ExportDeliveryOrderData({ data: this.list }).then(res => { + this.jnpf.downloadFile(res.data.url) + }) }, search() { if (this.query.companyId == null) {