Skip to content

Commit 9e34c39

Browse files
committed
fetch: add payment export data object and api and views eairps#245
1 parent 6ac955f commit 9e34c39

File tree

7 files changed

+164
-17
lines changed

7 files changed

+164
-17
lines changed

core/api/src/main/java/com/wansenai/api/financial/PaymentReceiptController.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,16 @@
1919
import com.wansenai.utils.response.Response;
2020
import com.wansenai.vo.financial.PaymentDetailVO;
2121
import com.wansenai.vo.financial.PaymentVO;
22-
import org.springframework.web.bind.annotation.*;
22+
import jakarta.servlet.http.HttpServletResponse;
23+
import org.springframework.web.bind.annotation.RestController;
24+
import org.springframework.web.bind.annotation.RequestMapping;
25+
import org.springframework.web.bind.annotation.RequestBody;
26+
import org.springframework.web.bind.annotation.GetMapping;
27+
import org.springframework.web.bind.annotation.PathVariable;
28+
import org.springframework.web.bind.annotation.PutMapping;
29+
import org.springframework.web.bind.annotation.RequestParam;
30+
import org.springframework.web.bind.annotation.PostMapping;
31+
import org.springframework.web.bind.annotation.ModelAttribute;
2332

2433
import java.util.List;
2534

@@ -57,4 +66,9 @@ public Response<String> deletePaymentReceiptByIds(@RequestParam("ids") List<Long
5766
public Response<String> updatePaymentReceiptStatusByIds(@RequestParam("ids") List<Long> ids, @RequestParam("status") Integer status) {
5867
return paymentReceiptService.updatePaymentReceiptStatus(ids, status);
5968
}
69+
70+
@GetMapping("export")
71+
public void exportPaymentReceipt(@ModelAttribute QueryPaymentDTO queryPaymentDTO, HttpServletResponse response) {
72+
paymentReceiptService.exportPaymentReceipt(queryPaymentDTO, response);
73+
}
6074
}

core/domain/src/main/java/com/wansenai/dto/financial/QueryPaymentDTO.java

+2
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,6 @@ public class QueryPaymentDTO {
3838
private Integer page;
3939

4040
private Integer pageSize;
41+
42+
private Boolean isExportDetail;
4143
}

core/domain/src/main/java/com/wansenai/vo/financial/PaymentVO.java

+11
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.fasterxml.jackson.annotation.JsonFormat;
1616
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
1717
import com.wansenai.bo.BigDecimalSerializerBO;
18+
import com.wansenai.utils.excel.ExcelExport;
1819
import lombok.AllArgsConstructor;
1920
import lombok.Builder;
2021
import lombok.Data;
@@ -32,27 +33,37 @@ public class PaymentVO {
3233
@JsonFormat(shape = JsonFormat.Shape.STRING)
3334
private Long id;
3435

36+
@ExcelExport(value = "供应商")
3537
private String supplierName;
3638

39+
@ExcelExport(value = "单据编号")
3740
private String receiptNumber;
3841

3942
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
43+
@ExcelExport(value = "单据日期")
4044
private LocalDateTime receiptDate;
4145

46+
@ExcelExport(value = "财务人员")
4247
private String financialPerson;
4348

49+
@ExcelExport(value = "付款账户")
4450
private String paymentAccountName;
4551

4652
@JsonSerialize(using = BigDecimalSerializerBO.class)
53+
@ExcelExport(value = "合计付款")
4754
private BigDecimal totalPaymentAmount;
4855

4956
@JsonSerialize(using = BigDecimalSerializerBO.class)
57+
@ExcelExport(value = "优惠金额")
5058
private BigDecimal discountAmount;
5159

5260
@JsonSerialize(using = BigDecimalSerializerBO.class)
61+
@ExcelExport(value = "实际付款")
5362
private BigDecimal actualPaymentAmount;
5463

64+
@ExcelExport(value = "备注")
5565
private String remark;
5666

67+
@ExcelExport(value = "状态", kv = "0:未审核;1:已审核")
5768
private Integer status;
5869
}

core/service/src/main/java/com/wansenai/service/financial/PaymentReceiptService.java

+3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.wansenai.utils.response.Response;
2121
import com.wansenai.vo.financial.PaymentDetailVO;
2222
import com.wansenai.vo.financial.PaymentVO;
23+
import jakarta.servlet.http.HttpServletResponse;
2324

2425
import java.util.List;
2526

@@ -34,4 +35,6 @@ public interface PaymentReceiptService extends IService<FinancialMain> {
3435
Response<String> deleteBatchPaymentReceipt(List<Long> ids);
3536

3637
Response<String> updatePaymentReceiptStatus(List<Long> ids, Integer status);
38+
39+
void exportPaymentReceipt(QueryPaymentDTO queryPaymentDTO, HttpServletResponse response);
3740
}

core/service/src/main/java/com/wansenai/service/financial/impl/PaymentReceiptServiceImpl.java

+70-3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414

1515
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
1616
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
17-
import com.wansenai.bo.CollectionBO;
1817
import com.wansenai.bo.FileDataBO;
1918
import com.wansenai.bo.PaymentBO;
19+
import com.wansenai.bo.PaymentDataExportBO;
2020
import com.wansenai.dto.financial.AddOrUpdatePaymentDTO;
2121
import com.wansenai.dto.financial.QueryPaymentDTO;
2222
import com.wansenai.entities.financial.FinancialMain;
@@ -34,11 +34,11 @@
3434
import com.wansenai.utils.constants.CommonConstants;
3535
import com.wansenai.utils.enums.BaseCodeEnum;
3636
import com.wansenai.utils.enums.CollectionPaymentCodeEnum;
37+
import com.wansenai.utils.excel.ExcelUtils;
3738
import com.wansenai.utils.response.Response;
38-
import com.wansenai.vo.financial.CollectionDetailVO;
39-
import com.wansenai.vo.financial.CollectionVO;
4039
import com.wansenai.vo.financial.PaymentDetailVO;
4140
import com.wansenai.vo.financial.PaymentVO;
41+
import jakarta.servlet.http.HttpServletResponse;
4242
import org.springframework.stereotype.Service;
4343
import org.springframework.util.StringUtils;
4444

@@ -48,6 +48,7 @@
4848
import java.util.Arrays;
4949
import java.util.List;
5050
import java.util.Optional;
51+
import java.util.concurrent.ConcurrentHashMap;
5152
import java.util.stream.Collectors;
5253

5354
@Service
@@ -141,6 +142,41 @@ public Response<Page<PaymentVO>> getPaymentReceiptPageList(QueryPaymentDTO query
141142
return Response.responseData(result);
142143
}
143144

145+
private List<PaymentVO> getPaymentReceiptList(QueryPaymentDTO queryPaymentDTO) {
146+
var financialMainList = lambdaQuery()
147+
.eq(queryPaymentDTO.getFinancialPersonId() != null, FinancialMain::getOperatorId, queryPaymentDTO.getFinancialPersonId())
148+
.eq(queryPaymentDTO.getAccountId() != null, FinancialMain::getAccountId, queryPaymentDTO.getAccountId())
149+
.eq(queryPaymentDTO.getStatus() != null, FinancialMain::getStatus, queryPaymentDTO.getStatus())
150+
.eq(queryPaymentDTO.getSupplierId() != null, FinancialMain::getRelatedPersonId, queryPaymentDTO.getSupplierId())
151+
.eq(StringUtils.hasLength(queryPaymentDTO.getReceiptNumber()), FinancialMain::getReceiptNumber, queryPaymentDTO.getReceiptNumber())
152+
.like(StringUtils.hasLength(queryPaymentDTO.getRemark()), FinancialMain::getRemark, queryPaymentDTO.getRemark())
153+
.ge(StringUtils.hasLength(queryPaymentDTO.getStartDate()), FinancialMain::getReceiptDate, queryPaymentDTO.getStartDate())
154+
.le(StringUtils.hasLength(queryPaymentDTO.getEndDate()), FinancialMain::getReceiptDate, queryPaymentDTO.getEndDate())
155+
.eq(FinancialMain::getType, "付款")
156+
.eq(FinancialMain::getDeleteFlag, CommonConstants.NOT_DELETED)
157+
.list();
158+
159+
var paymentVOList = new ArrayList<PaymentVO>(financialMainList.size() + 1);
160+
financialMainList.forEach(item -> {
161+
var paymentVo = PaymentVO.builder()
162+
.id(item.getId())
163+
.receiptNumber(item.getReceiptNumber())
164+
.supplierName(commonService.getSupplierName(item.getRelatedPersonId()))
165+
.receiptDate(item.getReceiptDate())
166+
.financialPerson(commonService.getOperatorName(item.getOperatorId()))
167+
.paymentAccountName(commonService.getAccountName(item.getAccountId()))
168+
.totalPaymentAmount(item.getTotalAmount())
169+
.discountAmount(item.getDiscountAmount())
170+
.actualPaymentAmount(item.getChangeAmount())
171+
.status(item.getStatus())
172+
.remark(item.getRemark())
173+
.build();
174+
175+
paymentVOList.add(paymentVo);
176+
});
177+
return paymentVOList;
178+
}
179+
144180
@Override
145181
public Response<PaymentDetailVO> getPaymentReceiptDetail(Long id) {
146182
if (id == null) {
@@ -354,4 +390,35 @@ public Response<String> updatePaymentReceiptStatus(List<Long> ids, Integer statu
354390
}
355391
return Response.responseMsg(CollectionPaymentCodeEnum.UPDATE_PAYMENT_RECEIPT_SUCCESS);
356392
}
393+
394+
@Override
395+
public void exportPaymentReceipt(QueryPaymentDTO queryPaymentDTO, HttpServletResponse response) {
396+
var exportMap = new ConcurrentHashMap<String, List<List<Object>>>();
397+
var mainData = getPaymentReceiptList(queryPaymentDTO);
398+
if (!mainData.isEmpty()) {
399+
exportMap.put("付款单", ExcelUtils.getSheetData(mainData));
400+
if (queryPaymentDTO.getIsExportDetail()) {
401+
var subData = new ArrayList<PaymentDataExportBO>();
402+
for (PaymentVO paymentVO : mainData) {
403+
var detail = getPaymentReceiptDetail(paymentVO.getId()).getData().getTableData();
404+
if (!detail.isEmpty()) {
405+
detail.forEach(item -> {
406+
var data = PaymentDataExportBO.builder()
407+
.supplierName(paymentVO.getSupplierName())
408+
.receiptNumber(paymentVO.getReceiptNumber())
409+
.purchaseReceiptNumber(item.getPurchaseReceiptNumber())
410+
.paymentArrears(item.getPaymentArrears())
411+
.prepaidArrears(item.getPrepaidArrears())
412+
.thisPaymentAmount(item.getThisPaymentAmount())
413+
.remark(item.getRemark())
414+
.build();
415+
subData.add(data);
416+
});
417+
}
418+
}
419+
exportMap.put("付款单明细", ExcelUtils.getSheetData(subData));
420+
}
421+
ExcelUtils.exportManySheet(response, "付款单", exportMap);
422+
}
423+
}
357424
}

web/src/api/financial/payment.ts

+11
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ enum API {
1717
UpdateStatus = '/financial/payment/updateStatusByIds',
1818
GetDetail = '/financial/payment/getDetailById',
1919
GetArrearsPage = '/purchase/arrears/pageList',
20+
Export = '/financial/payment/export',
2021
}
2122

2223
export function getPaymentPageList(params: QueryPaymentReq) {
@@ -77,4 +78,14 @@ export function getArrearsPageList(params: QueryPaymentArrearsReq) {
7778
params,
7879
}
7980
);
81+
}
82+
83+
export function exportPayment(params: QueryPaymentReq) {
84+
return defHttp.get<BaseDataResp<Blob>>(
85+
{
86+
url: `${API.Export}`,
87+
params,
88+
responseType: "blob"
89+
}
90+
);
8091
}

web/src/views/financial/payment/index.vue

+52-13
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,14 @@
4040
</template>
4141
</template>
4242
</BasicTable>
43+
<a-modal v-model:open="openExportData" title="确认导出" :confirm-loading="confirmLoading"
44+
@ok="handleExportOk" @cancel="handleExportCancel" okText="导出">
45+
<div style="text-align: center">
46+
<p>即将导出{{dataSum}}条数据,请耐心等待。</p>
47+
<p>如需导出明细数据(可能耗时较长),请勾选下方复选框。</p>
48+
<a-checkbox v-model:checked="exportDetailData">需要导出明细数据</a-checkbox>
49+
</div>
50+
</a-modal>
4351
<AddEditPaymentModal ref="addEditModalRef" @cancel="handleCancel"/>
4452
<ViewPaymentModal @register="receiptViewModal" />
4553
</div>
@@ -52,22 +60,25 @@ import {defineComponent, ref} from "vue";
5260
import {BasicTable, TableAction, useTable} from "@/components/Table";
5361
import {useMessage} from "@/hooks/web/useMessage";
5462
import {columns, searchFormSchema} from "@/views/financial/payment/payment.data";
55-
import {exportXlsx} from "@/api/basic/common";
5663
import {useI18n} from "vue-i18n";
57-
import {getPaymentPageList, deleteBatchPayment, updatePaymentStatus} from "@/api/financial/payment";
58-
import {Tag} from "ant-design-vue";
64+
import {getPaymentPageList, deleteBatchPayment, updatePaymentStatus, exportPayment} from "@/api/financial/payment";
65+
import {Checkbox, Modal, Tag} from "ant-design-vue";
5966
import {useModal} from "@/components/Modal";
6067
import ViewPaymentModal from "@/views/financial/payment/components/ViewPaymentModal.vue";
6168
import AddEditPaymentModal from "@/views/financial/payment/components/AddEditPaymentModal.vue";
6269
export default defineComponent({
6370
name: 'PaymentReceipt',
64-
components: {ViewPaymentModal, Tag, TableAction, BasicTable, AddEditPaymentModal},
71+
components: {'a-modal': Modal, 'a-checkbox': Checkbox, ViewPaymentModal, Tag, TableAction, BasicTable, AddEditPaymentModal},
6572
setup() {
6673
const { t } = useI18n();
6774
const { createMessage } = useMessage();
6875
const addEditModalRef = ref(null);
76+
const exportDetailData = ref<boolean>(false);
77+
const openExportData = ref<boolean>(false);
78+
const confirmLoading = ref<boolean>(false);
79+
const dataSum = ref<number>(0);
6980
const [receiptViewModal, {openModal: openReceiptViewModal}] = useModal();
70-
const [registerTable, { reload, getSelectRows }] = useTable({
81+
const [registerTable, { reload, getSelectRows, getForm, getDataSource }] = useTable({
7182
title: '付款单列表',
7283
rowKey: 'id',
7384
api: getPaymentPageList,
@@ -169,16 +180,38 @@ export default defineComponent({
169180
}
170181
171182
async function handleExport() {
172-
const file = await exportXlsx("付款单列表")
173-
const blob = new Blob([file]);
174-
const link = document.createElement("a");
175-
link.href = URL.createObjectURL(blob);
176-
const timestamp = getTimestamp(new Date());
177-
link.download = "付款单数据" + timestamp + ".xlsx";
178-
link.target = "_blank";
179-
link.click();
183+
dataSum.value = getDataSource().length;
184+
if (dataSum.value === 0) {
185+
createMessage.warn('当前查询条件下无数据可导出');
186+
return;
187+
}
188+
openExportData.value = true;
180189
}
181190
191+
const handleExportCancel = () => {
192+
confirmLoading.value = false;
193+
openExportData.value = false;
194+
exportDetailData.value = false;
195+
};
196+
197+
const handleExportOk = async () => {
198+
confirmLoading.value = true;
199+
const data: any = getForm().getFieldsValue();
200+
data.isExportDetail = exportDetailData.value;
201+
const file: any = await exportPayment(data)
202+
if (file.size > 0) {
203+
const blob = new Blob([file]);
204+
const link = document.createElement("a");
205+
link.href = URL.createObjectURL(blob);
206+
const timestamp = getTimestamp(new Date());
207+
link.download = "付款单数据" + timestamp + ".xlsx";
208+
link.target = "_blank";
209+
link.click();
210+
}
211+
confirmLoading.value = false;
212+
openExportData.value = false;
213+
exportDetailData.value = false;
214+
}
182215
183216
return {
184217
t,
@@ -195,6 +228,12 @@ export default defineComponent({
195228
handleView,
196229
handleOk,
197230
handleExport,
231+
openExportData,
232+
confirmLoading,
233+
exportDetailData,
234+
dataSum,
235+
handleExportOk,
236+
handleExportCancel
198237
}
199238
}
200239
})

0 commit comments

Comments
 (0)