|
42 | 42 | import com.wansenai.utils.constants.ReceiptConstants;
|
43 | 43 | import com.wansenai.utils.enums.BaseCodeEnum;
|
44 | 44 | import com.wansenai.utils.enums.SaleCodeEnum;
|
| 45 | +import com.wansenai.utils.excel.ExcelUtils; |
45 | 46 | import com.wansenai.utils.response.Response;
|
46 | 47 | import com.wansenai.vo.receipt.sale.*;
|
| 48 | +import jakarta.servlet.http.HttpServletResponse; |
47 | 49 | import org.springframework.stereotype.Service;
|
48 | 50 | import org.springframework.transaction.annotation.Transactional;
|
49 | 51 | import org.springframework.util.StringUtils;
|
@@ -319,6 +321,50 @@ public Response<Page<SaleOrderVO>> getSaleOrderPage(QuerySaleOrderDTO querySaleO
|
319 | 321 | return Response.responseData(result);
|
320 | 322 | }
|
321 | 323 |
|
| 324 | + private List<SaleOrderVO> getSaleOrderList(QuerySaleOrderDTO querySaleOrderDTO) { |
| 325 | + var saleOrderVOList = new ArrayList<SaleOrderVO>(); |
| 326 | + var saleMains = lambdaQuery() |
| 327 | + .eq(ReceiptSaleMain::getType, ReceiptConstants.RECEIPT_TYPE_ORDER) |
| 328 | + .in(ReceiptSaleMain::getSubType, ReceiptConstants.RECEIPT_SUB_TYPE_SALES_ORDER) |
| 329 | + .eq(StringUtils.hasText(querySaleOrderDTO.getReceiptNumber()), ReceiptSaleMain::getReceiptNumber, querySaleOrderDTO.getReceiptNumber()) |
| 330 | + .like(StringUtils.hasText(querySaleOrderDTO.getRemark()), ReceiptSaleMain::getRemark, querySaleOrderDTO.getRemark()) |
| 331 | + .eq(querySaleOrderDTO.getCustomerId() != null, ReceiptSaleMain::getCustomerId, querySaleOrderDTO.getCustomerId()) |
| 332 | + .eq(querySaleOrderDTO.getOperatorId() != null, ReceiptSaleMain::getCreateBy, querySaleOrderDTO.getOperatorId()) |
| 333 | + .eq(querySaleOrderDTO.getStatus() != null, ReceiptSaleMain::getStatus, querySaleOrderDTO.getStatus()) |
| 334 | + .eq(ReceiptSaleMain::getDeleteFlag, CommonConstants.NOT_DELETED) |
| 335 | + .ge(StringUtils.hasText(querySaleOrderDTO.getStartDate()), ReceiptSaleMain::getCreateTime, querySaleOrderDTO.getStartDate()) |
| 336 | + .le(StringUtils.hasText(querySaleOrderDTO.getEndDate()), ReceiptSaleMain::getCreateTime, querySaleOrderDTO.getEndDate()) |
| 337 | + .list(); |
| 338 | + |
| 339 | + saleMains.forEach(item -> { |
| 340 | + var receiptSubList = receiptSaleSubService.lambdaQuery() |
| 341 | + .eq(ReceiptSaleSub::getReceiptSaleMainId, item.getId()) |
| 342 | + .list(); |
| 343 | + var productNumber = calculateProductNumber(receiptSubList); |
| 344 | + |
| 345 | + var customerName = getCustomerName(item.getCustomerId()); |
| 346 | + var crateBy = getUserName(item.getCreateBy()); |
| 347 | + var totalAmount = calculateTotalAmount(receiptSubList, ReceiptSaleSub::getTotalAmount); |
| 348 | + var taxRateTotalPrice = calculateTotalAmount(receiptSubList, ReceiptSaleSub::getTaxIncludedAmount); |
| 349 | + |
| 350 | + var saleOrderVO = SaleOrderVO.builder() |
| 351 | + .id(item.getId()) |
| 352 | + .customerName(customerName) |
| 353 | + .receiptNumber(item.getReceiptNumber()) |
| 354 | + .receiptDate(item.getReceiptDate()) |
| 355 | + .productInfo(item.getRemark()) |
| 356 | + .operator(crateBy) |
| 357 | + .productNumber(productNumber) |
| 358 | + .totalPrice(totalAmount) |
| 359 | + .taxRateTotalPrice(taxRateTotalPrice) |
| 360 | + .deposit(item.getDeposit()) |
| 361 | + .status(item.getStatus()) |
| 362 | + .build(); |
| 363 | + saleOrderVOList.add(saleOrderVO); |
| 364 | + }); |
| 365 | + return saleOrderVOList; |
| 366 | + } |
| 367 | + |
322 | 368 | @Override
|
323 | 369 | public Response<SaleOrderDetailVO> getSaleOrderDetail(Long id) {
|
324 | 370 | if (id == null) {
|
@@ -578,6 +624,52 @@ public Response<Page<SaleShipmentsVO>> getSaleShipmentsPage(QuerySaleShipmentsDT
|
578 | 624 | return Response.responseData(result);
|
579 | 625 | }
|
580 | 626 |
|
| 627 | + private List<SaleShipmentsVO> getSaleShipmentsList(QuerySaleShipmentsDTO shipmentsDTO) { |
| 628 | + var saleShipmentsVOList = new ArrayList<SaleShipmentsVO>(); |
| 629 | + var saleMains = lambdaQuery() |
| 630 | + .eq(ReceiptSaleMain::getType, ReceiptConstants.RECEIPT_TYPE_SHIPMENT) |
| 631 | + .in(ReceiptSaleMain::getSubType, ReceiptConstants.RECEIPT_SUB_TYPE_SALES_SHIPMENTS) |
| 632 | + .eq(StringUtils.hasText(shipmentsDTO.getReceiptNumber()), ReceiptSaleMain::getReceiptNumber, shipmentsDTO.getReceiptNumber()) |
| 633 | + .like(StringUtils.hasText(shipmentsDTO.getRemark()), ReceiptSaleMain::getRemark, shipmentsDTO.getRemark()) |
| 634 | + .eq(shipmentsDTO.getCustomerId() != null, ReceiptSaleMain::getCustomerId, shipmentsDTO.getCustomerId()) |
| 635 | + .eq(shipmentsDTO.getOperatorId() != null, ReceiptSaleMain::getCreateBy, shipmentsDTO.getOperatorId()) |
| 636 | + .eq(shipmentsDTO.getStatus() != null, ReceiptSaleMain::getStatus, shipmentsDTO.getStatus()) |
| 637 | + .eq(ReceiptSaleMain::getDeleteFlag, CommonConstants.NOT_DELETED) |
| 638 | + .ge(StringUtils.hasText(shipmentsDTO.getStartDate()), ReceiptSaleMain::getCreateTime, shipmentsDTO.getStartDate()) |
| 639 | + .le(StringUtils.hasText(shipmentsDTO.getEndDate()), ReceiptSaleMain::getCreateTime, shipmentsDTO.getEndDate()) |
| 640 | + .list(); |
| 641 | + |
| 642 | + saleMains.forEach(item -> { |
| 643 | + var receiptSubList = receiptSaleSubService.lambdaQuery() |
| 644 | + .eq(ReceiptSaleSub::getReceiptSaleMainId, item.getId()) |
| 645 | + .list(); |
| 646 | + var productNumber = calculateProductNumber(receiptSubList); |
| 647 | + var customerName = getCustomerName(item.getCustomerId()); |
| 648 | + var crateBy = getUserName(item.getCreateBy()); |
| 649 | + var totalAmount = calculateTotalAmount(receiptSubList, ReceiptSaleSub::getTotalAmount); |
| 650 | + var taxRateTotalPrice = calculateTotalAmount(receiptSubList, ReceiptSaleSub::getTaxIncludedAmount); |
| 651 | + var totalCollectAmount = item.getArrearsAmount().add(item.getChangeAmount()); |
| 652 | + |
| 653 | + var saleShipmentVO = SaleShipmentsVO.builder() |
| 654 | + .id(item.getId()) |
| 655 | + .customerName(customerName) |
| 656 | + .receiptNumber(item.getReceiptNumber()) |
| 657 | + .receiptDate(item.getReceiptDate()) |
| 658 | + .productInfo(item.getRemark()) |
| 659 | + .operator(crateBy) |
| 660 | + .productNumber(productNumber) |
| 661 | + .totalAmount(totalAmount) |
| 662 | + .taxIncludedAmount(taxRateTotalPrice) |
| 663 | + .totalCollectAmount(totalCollectAmount) |
| 664 | + .thisCollectAmount(item.getChangeAmount()) |
| 665 | + .thisArrearsAmount(item.getArrearsAmount()) |
| 666 | + .status(item.getStatus()) |
| 667 | + .build(); |
| 668 | + saleShipmentsVOList.add(saleShipmentVO); |
| 669 | + }); |
| 670 | + return saleShipmentsVOList; |
| 671 | + } |
| 672 | + |
581 | 673 | @Override
|
582 | 674 | public Response<SaleShipmentsDetailVO> getSaleShipmentsDetail(Long id) {
|
583 | 675 | if (id == null) {
|
@@ -882,6 +974,53 @@ public Response<Page<SaleRefundVO>> getSaleRefundPage(QuerySaleRefundDTO refundD
|
882 | 974 | return Response.responseData(result);
|
883 | 975 | }
|
884 | 976 |
|
| 977 | + private List<SaleRefundVO> getSaleRefundList(QuerySaleRefundDTO refundDTO) { |
| 978 | + var saleRefundVOList = new ArrayList<SaleRefundVO>(); |
| 979 | + var saleMains = lambdaQuery() |
| 980 | + .eq(ReceiptSaleMain::getType, ReceiptConstants.RECEIPT_TYPE_STORAGE) |
| 981 | + .in(ReceiptSaleMain::getSubType, ReceiptConstants.RECEIPT_SUB_TYPE_SALES_REFUND) |
| 982 | + .eq(StringUtils.hasText(refundDTO.getReceiptNumber()), ReceiptSaleMain::getReceiptNumber, refundDTO.getReceiptNumber()) |
| 983 | + .like(StringUtils.hasText(refundDTO.getRemark()), ReceiptSaleMain::getRemark, refundDTO.getRemark()) |
| 984 | + .eq(refundDTO.getCustomerId() != null, ReceiptSaleMain::getCustomerId, refundDTO.getCustomerId()) |
| 985 | + .eq(refundDTO.getOperatorId() != null, ReceiptSaleMain::getCreateBy, refundDTO.getOperatorId()) |
| 986 | + .eq(refundDTO.getStatus() != null, ReceiptSaleMain::getStatus, refundDTO.getStatus()) |
| 987 | + .eq(ReceiptSaleMain::getDeleteFlag, CommonConstants.NOT_DELETED) |
| 988 | + .ge(StringUtils.hasText(refundDTO.getStartDate()), ReceiptSaleMain::getCreateTime, refundDTO.getStartDate()) |
| 989 | + .le(StringUtils.hasText(refundDTO.getEndDate()), ReceiptSaleMain::getCreateTime, refundDTO.getEndDate()) |
| 990 | + .list(); |
| 991 | + |
| 992 | + saleMains.forEach(item -> { |
| 993 | + var receiptSubList = receiptSaleSubService.lambdaQuery() |
| 994 | + .eq(ReceiptSaleSub::getReceiptSaleMainId, item.getId()) |
| 995 | + .list(); |
| 996 | + var productNumber = calculateProductNumber(receiptSubList); |
| 997 | + var customerName = getCustomerName(item.getCustomerId()); |
| 998 | + var crateBy = getUserName(item.getCreateBy()); |
| 999 | + var totalAmount = calculateTotalAmount(receiptSubList, ReceiptSaleSub::getTotalAmount); |
| 1000 | + var taxRateTotalPrice = calculateTotalAmount(receiptSubList, ReceiptSaleSub::getTaxIncludedAmount); |
| 1001 | + |
| 1002 | + var totalRefundAmount = item.getArrearsAmount().add(item.getChangeAmount()); |
| 1003 | + |
| 1004 | + var saleRefundVO = SaleRefundVO.builder() |
| 1005 | + .id(item.getId()) |
| 1006 | + .customerName(customerName) |
| 1007 | + .receiptNumber(item.getReceiptNumber()) |
| 1008 | + .receiptDate(item.getReceiptDate()) |
| 1009 | + .productInfo(item.getRemark()) |
| 1010 | + .operator(crateBy) |
| 1011 | + .productNumber(productNumber) |
| 1012 | + .totalAmount(totalAmount) |
| 1013 | + .taxIncludedAmount(taxRateTotalPrice) |
| 1014 | + .refundTotalAmount(totalRefundAmount) |
| 1015 | + .thisRefundAmount(item.getChangeAmount()) |
| 1016 | + .thisArrearsAmount(item.getArrearsAmount()) |
| 1017 | + .status(item.getStatus()) |
| 1018 | + .build(); |
| 1019 | + saleRefundVOList.add(saleRefundVO); |
| 1020 | + }); |
| 1021 | + return saleRefundVOList; |
| 1022 | + } |
| 1023 | + |
885 | 1024 | @Override
|
886 | 1025 | public Response<SaleRefundDetailVO> getSaleRefundDetail(Long id) {
|
887 | 1026 | if (id == null) {
|
@@ -1180,4 +1319,31 @@ public Response<Page<SaleArrearsVO>> getSaleArrearsPage(QuerySaleArrearsDTO arre
|
1180 | 1319 |
|
1181 | 1320 | return Response.responseData(result);
|
1182 | 1321 | }
|
| 1322 | + |
| 1323 | + @Override |
| 1324 | + public void exportSaleOrderExcel(QuerySaleOrderDTO querySaleOrderDTO, HttpServletResponse response) throws Exception { |
| 1325 | + var data = getSaleOrderList(querySaleOrderDTO); |
| 1326 | + if (!data.isEmpty()) { |
| 1327 | + var file = ExcelUtils.exportFile(ExcelUtils.DEFAULT_FILE_PATH, "销售订单", data); |
| 1328 | + ExcelUtils.downloadExcel(file, "销售订单", response); |
| 1329 | + } |
| 1330 | + } |
| 1331 | + |
| 1332 | + @Override |
| 1333 | + public void exportSaleShipmentsExcel(QuerySaleShipmentsDTO querySaleShipmentsDTO, HttpServletResponse response) throws Exception { |
| 1334 | + var data = getSaleShipmentsList(querySaleShipmentsDTO); |
| 1335 | + if (!data.isEmpty()) { |
| 1336 | + var file = ExcelUtils.exportFile(ExcelUtils.DEFAULT_FILE_PATH, "销售出库", data); |
| 1337 | + ExcelUtils.downloadExcel(file, "销售出库", response); |
| 1338 | + } |
| 1339 | + } |
| 1340 | + |
| 1341 | + @Override |
| 1342 | + public void exportSaleRefundExcel(QuerySaleRefundDTO querySaleRefundDTO, HttpServletResponse response) throws Exception { |
| 1343 | + var data = getSaleRefundList(querySaleRefundDTO); |
| 1344 | + if (!data.isEmpty()) { |
| 1345 | + var file = ExcelUtils.exportFile(ExcelUtils.DEFAULT_FILE_PATH, "销售退货", data); |
| 1346 | + ExcelUtils.downloadExcel(file, "销售退货", response); |
| 1347 | + } |
| 1348 | + } |
1183 | 1349 | }
|
0 commit comments