diff --git a/bms-back/bms-admin/src/main/java/com/bms/web/controller/ar/ArBillController.java b/bms-back/bms-admin/src/main/java/com/bms/web/controller/ar/ArBillController.java index b2595d2a..06b8d2c9 100644 --- a/bms-back/bms-admin/src/main/java/com/bms/web/controller/ar/ArBillController.java +++ b/bms-back/bms-admin/src/main/java/com/bms/web/controller/ar/ArBillController.java @@ -1,5 +1,6 @@ package com.bms.web.controller.ar; +import java.util.ArrayList; import java.util.List; import java.util.Date; @@ -31,6 +32,7 @@ import com.bms.ar.domain.ArBillLog; import com.bms.ar.domain.vo.ArBillActionRequest; import com.bms.ar.domain.vo.ArBillGenerateQuery; import com.bms.ar.domain.vo.ArBillGenerateRequest; +import com.bms.ar.domain.vo.ArBillListExportRow; import com.bms.ar.domain.vo.ArBillQuery; import com.bms.ar.service.IArBillService; import com.bms.common.annotation.Log; @@ -40,6 +42,7 @@ import com.bms.common.core.page.TableDataInfo; import com.bms.common.exception.ServiceException; import com.bms.common.enums.BusinessType; import com.bms.common.utils.StringUtils; +import com.bms.common.utils.poi.ExcelUtil; import com.bms.common.utils.uuid.IdUtils; import com.bms.price.domain.PrcOrderBill; @@ -78,6 +81,23 @@ public class ArBillController extends BaseController { return getDataTable(list); } + /** + * 按当前筛选条件导出全部应收账单,不受列表分页参数影响。 + */ + @PreAuthorize("@ss.hasPermi('ar:bill:export')") + @Log(title = "应收账单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ArBillQuery query, HttpServletRequest request) { + rejectMultiValueParameter(request, "customerId"); + List bills = billService.selectArBillList(query == null ? new ArBillQuery() : query); + List rows = new ArrayList<>(bills.size()); + for (ArBill bill : bills) { + rows.add(ArBillListExportRow.from(bill)); + } + ExcelUtil util = new ExcelUtil<>(ArBillListExportRow.class); + util.exportExcel(response, rows, "应收账单"); + } + /** * 查询账单头信息;账单明细通过独立分页接口按需加载。 */ diff --git a/bms-back/bms-admin/src/main/java/com/bms/web/controller/customer/customermoney/CustomerBillController.java b/bms-back/bms-admin/src/main/java/com/bms/web/controller/customer/customermoney/CustomerBillController.java index 2ed695b2..fc2e6063 100644 --- a/bms-back/bms-admin/src/main/java/com/bms/web/controller/customer/customermoney/CustomerBillController.java +++ b/bms-back/bms-admin/src/main/java/com/bms/web/controller/customer/customermoney/CustomerBillController.java @@ -1,7 +1,9 @@ package com.bms.web.controller.customer.customermoney; +import java.util.ArrayList; import java.util.Collections; import java.util.List; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; @@ -13,7 +15,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.bms.ar.domain.ArBill; import com.bms.ar.domain.ArBalanceWriteoff; +import com.bms.ar.domain.vo.ArBillListExportRow; import com.bms.ar.domain.vo.ArBillQuery; +import com.bms.ar.domain.vo.ArBillSummary; import com.bms.ar.service.IArBalanceWriteoffService; import com.bms.ar.service.IArBillService; import com.bms.common.annotation.Log; @@ -21,6 +25,7 @@ import com.bms.common.core.controller.BaseController; import com.bms.common.core.domain.AjaxResult; import com.bms.common.core.page.TableDataInfo; import com.bms.common.enums.BusinessType; +import com.bms.common.utils.poi.ExcelUtil; /** * 客户余额账单查询与核销 Controller @@ -43,17 +48,50 @@ public class CustomerBillController extends BaseController */ @PreAuthorize("@ss.hasPermi('customersupplier:customerinfo:list')") @GetMapping("/list/{customerId}") - public TableDataInfo billList(@PathVariable("customerId") Long customerId, ArBillQuery query) + public AjaxResult billList(@PathVariable("customerId") Long customerId, ArBillQuery query) { if (customerId == null || customerId <= 0L) { - return getDataTable(Collections.emptyList()); + AjaxResult result = success(); + result.put("rows", Collections.emptyList()); + result.put("total", 0L); + result.put("summary", new ArBillSummary()); + return result; } ArBillQuery billQuery = query == null ? new ArBillQuery() : query; billQuery.setCustomerId(customerId); startPage(); List list = billService.selectArBillList(billQuery); - return getDataTable(list); + TableDataInfo pageData = getDataTable(list); + AjaxResult result = success(); + result.put("rows", pageData.getRows()); + result.put("total", pageData.getTotal()); + result.put("summary", billService.selectArBillSummary(billQuery)); + return result; + } + + /** + * 按当前筛选条件导出指定客户的全部应收账单,不受列表分页参数影响。 + */ + @PreAuthorize("@ss.hasPermi('customersupplier:customerinfo:export')") + @Log(title = "客户账单", businessType = BusinessType.EXPORT) + @PostMapping("/export/{customerId}") + public void export(HttpServletResponse response, @PathVariable("customerId") Long customerId, ArBillQuery query) + { + List rows = new ArrayList<>(); + if (customerId != null && customerId > 0L) + { + ArBillQuery billQuery = query == null ? new ArBillQuery() : query; + // 客户ID固定取自路径,忽略请求参数中可能出现的 customerId。 + billQuery.setCustomerId(customerId); + List bills = billService.selectArBillList(billQuery); + for (ArBill bill : bills) + { + rows.add(ArBillListExportRow.from(bill)); + } + } + ExcelUtil util = new ExcelUtil<>(ArBillListExportRow.class); + util.exportExcel(response, rows, "客户账单"); } /** diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/domain/vo/ArBillListExportRow.java b/bms-back/bms-system/src/main/java/com/bms/ar/domain/vo/ArBillListExportRow.java new file mode 100644 index 00000000..5c156e73 --- /dev/null +++ b/bms-back/bms-system/src/main/java/com/bms/ar/domain/vo/ArBillListExportRow.java @@ -0,0 +1,66 @@ +package com.bms.ar.domain.vo; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +import com.bms.ar.domain.ArBill; +import com.bms.ar.enums.ArBillStatus; +import com.bms.common.annotation.Excel; +import lombok.Data; + +/** 应收账单列表 Excel 导出行。 */ +@Data +public class ArBillListExportRow implements Serializable { + private static final long serialVersionUID = 1L; + + @Excel(name = "账单号", sort = 0, width = 22) + private String billNo; + + @Excel(name = "账单名称", sort = 1, width = 24) + private String billName; + + @Excel(name = "客户名称", sort = 2, width = 24) + private String customerName; + + @Excel(name = "客户编码", sort = 3, width = 16) + private String customerCode; + + @Excel(name = "账单截止日", sort = 4, dateFormat = "yyyy-MM-dd", width = 16) + private Date billPeriodEnd; + + @Excel(name = "订单数", sort = 5, width = 12) + private Integer orderCount; + + @Excel(name = "应收总额", sort = 6, scale = 2, width = 16) + private BigDecimal totalAmount; + + @Excel(name = "已核销", sort = 7, scale = 2, width = 16) + private BigDecimal writtenOffAmount; + + @Excel(name = "未核销", sort = 8, scale = 2, width = 16) + private BigDecimal unwrittenAmount; + + @Excel(name = "状态", sort = 9, width = 14) + private String status; + + @Excel(name = "账单日期", sort = 10, dateFormat = "yyyy-MM-dd", width = 16) + private Date billDate; + + public static ArBillListExportRow from(ArBill bill) { + ArBillListExportRow row = new ArBillListExportRow(); + row.setBillNo(bill.getBillNo()); + row.setBillName(bill.getBillName()); + row.setCustomerName(bill.getCustomerName()); + row.setCustomerCode(bill.getCustomerCode()); + row.setBillPeriodEnd(bill.getBillPeriodEnd()); + row.setOrderCount(bill.getOrderCount()); + row.setTotalAmount(bill.getTotalAmount()); + row.setWrittenOffAmount(bill.getWrittenOffAmount()); + row.setUnwrittenAmount(bill.getUnwrittenAmount()); + ArBillStatus billStatus = ArBillStatus.of(bill.getStatus()); + row.setStatus(billStatus == null ? bill.getStatus() : billStatus.getLabel()); + row.setBillDate(bill.getBillDate()); + return row; + } +} diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/domain/vo/ArBillSummary.java b/bms-back/bms-system/src/main/java/com/bms/ar/domain/vo/ArBillSummary.java new file mode 100644 index 00000000..0c76a186 --- /dev/null +++ b/bms-back/bms-system/src/main/java/com/bms/ar/domain/vo/ArBillSummary.java @@ -0,0 +1,16 @@ +package com.bms.ar.domain.vo; + +import java.io.Serializable; +import java.math.BigDecimal; + +import lombok.Data; + +/** 应收账单列表按筛选条件汇总的金额。 */ +@Data +public class ArBillSummary implements Serializable { + private static final long serialVersionUID = 1L; + + private BigDecimal totalAmount = BigDecimal.ZERO; + private BigDecimal writtenOffAmount = BigDecimal.ZERO; + private BigDecimal unwrittenAmount = BigDecimal.ZERO; +} diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/mapper/ArBillMapper.java b/bms-back/bms-system/src/main/java/com/bms/ar/mapper/ArBillMapper.java index be476768..2b0b16d3 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/mapper/ArBillMapper.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/mapper/ArBillMapper.java @@ -7,10 +7,13 @@ import java.util.List; import org.apache.ibatis.annotations.Param; import com.bms.ar.domain.ArBill; import com.bms.ar.domain.vo.ArBillQuery; +import com.bms.ar.domain.vo.ArBillSummary; public interface ArBillMapper { List selectArBillList(ArBillQuery query); + ArBillSummary selectArBillSummary(ArBillQuery query); + ArBill selectArBillById(Long arBillId); ArBill selectArBillByBillNo(String billNo); diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/service/IArBillService.java b/bms-back/bms-system/src/main/java/com/bms/ar/service/IArBillService.java index 46fca5b6..609cc1dd 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/service/IArBillService.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/service/IArBillService.java @@ -14,6 +14,7 @@ import com.bms.ar.domain.vo.ArBillGenerateRequest; import com.bms.ar.domain.vo.ArBillGenerateQuery; import com.bms.ar.domain.vo.ArBillActionRequest; import com.bms.ar.domain.vo.ArBillQuery; +import com.bms.ar.domain.vo.ArBillSummary; import com.bms.price.domain.PrcOrderBill; /** @@ -25,6 +26,8 @@ public interface IArBillService { List selectArBillList(ArBillQuery query); + ArBillSummary selectArBillSummary(ArBillQuery query); + ArBill selectArBillById(Long arBillId); List selectArBillDetails(Long arBillId); diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java index 9259d29c..16d18791 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java @@ -79,6 +79,7 @@ import com.bms.ar.domain.vo.ArBillActionRequest; import com.bms.ar.domain.vo.ArBillGenerateQuery; import com.bms.ar.domain.vo.ArBillGenerateRequest; import com.bms.ar.domain.vo.ArBillQuery; +import com.bms.ar.domain.vo.ArBillSummary; import com.bms.common.config.BmsConfig; import com.bms.common.exception.ServiceException; import com.bms.common.utils.DateUtils; @@ -223,6 +224,14 @@ public class ArBillServiceImpl implements IArBillService { return bills; } + /** + * 汇总当前筛选条件下的全部账单金额,不受列表分页影响。 + */ + @Override + public ArBillSummary selectArBillSummary(ArBillQuery query) { + return billMapper.selectArBillSummary(query); + } + /** * 查询账单头信息;导出记录随账单头返回,明细由独立分页接口查询。 */ diff --git a/bms-back/bms-system/src/main/resources/mapper/ar/ArBillMapper.xml b/bms-back/bms-system/src/main/resources/mapper/ar/ArBillMapper.xml index aa835a73..e695f45e 100644 --- a/bms-back/bms-system/src/main/resources/mapper/ar/ArBillMapper.xml +++ b/bms-back/bms-system/src/main/resources/mapper/ar/ArBillMapper.xml @@ -35,6 +35,12 @@ + + + + + + select ar_bill_id, bill_no, @@ -67,8 +73,7 @@ from ar_bill - + + order by create_time desc, ar_bill_id desc + +