Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve the business code of transfer receipt #222

Merged
merged 5 commits into from
Nov 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,56 @@
*/
package com.wansenai.api.financial;

import org.springframework.web.bind.annotation.RequestMapping;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wansenai.dto.financial.AddOrUpdateTransferDTO;
import com.wansenai.dto.financial.QueryTransferDTO;
import com.wansenai.service.financial.TransferReceiptService;
import com.wansenai.utils.response.Response;
import com.wansenai.vo.financial.TransferDetailVO;
import com.wansenai.vo.financial.TransferVO;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

@RestController
@RequestMapping("/financial/transfer")
public class TransferReceiptController {

private final TransferReceiptService transferReceiptService;

public TransferReceiptController(TransferReceiptService transferReceiptService) {
this.transferReceiptService = transferReceiptService;
}

@PostMapping("addOrUpdate")
public Response<String> addOrUpdateTransferReceipt(@RequestBody AddOrUpdateTransferDTO addOrUpdateTransferDTO) {
return transferReceiptService.addOrUpdateTransferReceipt(addOrUpdateTransferDTO);
}

@PostMapping("pageList")
public Response<Page<TransferVO>> getTransferReceiptPageList(@RequestBody QueryTransferDTO queryTransferDTO) {
return transferReceiptService.getTransferReceiptPageList(queryTransferDTO);
}

@GetMapping("getDetailById/{id}")
public Response<TransferDetailVO> getTransferReceiptDetailById(@PathVariable("id") Long id) {
return transferReceiptService.getTransferReceiptDetail(id);
}

@PutMapping("deleteByIds")
public Response<String> deleteTransferReceiptByIds(@RequestParam("ids") List<Long> ids) {
return transferReceiptService.deleteBatchTransferReceipt(ids);
}

@PutMapping("updateStatusByIds")
public Response<String> updateTransferReceiptStatusByIds(@RequestParam("ids") List<Long> ids, @RequestParam("status") Integer status) {
return transferReceiptService.updateTransferReceiptStatus(ids, status);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@
*/
package com.wansenai.vo.financial;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.wansenai.bo.BigDecimalSerializerBO;
import com.wansenai.bo.FileDataBO;
import com.wansenai.bo.TransferAccountBO;
import lombok.AllArgsConstructor;
Expand All @@ -21,6 +24,7 @@
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

@Data
Expand All @@ -30,18 +34,22 @@
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TransferDetailVO {

private String receiptDate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime receiptDate;

private String receiptNumber;

@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long financialPersonId;

private String financialPersonName;

@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long paymentAccountId;

private String paymentAccountName;

@JsonSerialize(using = BigDecimalSerializerBO.class)
private BigDecimal paymentAmount;

private String remark;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -689,6 +689,7 @@ public Response<String> generateSnowflakeId(String type) {
case "订单" -> "O";
case "收入单" -> "SRD";
case "支出单" -> "ZCD";
case "转账单" -> "ZZD";
case "采购单" -> "CGD";
case "销售单" -> "XSD";
case "退货单" -> "THD";
Expand Down

Large diffs are not rendered by default.

54 changes: 54 additions & 0 deletions web/src/api/financial/model/transferModel.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import {FileData} from "@/api/financial/model/advanceModel";

export interface TransferData {
accountId: number | string;
accountName: string | undefined;
transferAmount: number;
remark: string;
}

export interface AddOrUpdateTransferReq {
id: number | undefined;
receiptDate: string;
receiptNumber: string;
financialPersonId: number;
paymentAccountId: number;
paymentAmount: number;
remark: string;
status: number;
files: FileData[];
tableData: TransferData[];
}

export interface QueryTransferReq {
receiptNumber: string;
financialPersonId: number;
accountId: number;
status: number;
remark: string;
}

export interface TransferResp {
id: string | undefined;
receiptNumber: string;
receiptDate: string;
financialPerson: string;
paymentAccountName: string;
paymentAmount: number;
remark: string;
status: number;
}

export interface TransferDetailResp {
receiptDate: string;
receiptNumber: string;
financialPersonId: number;
financialPersonName: string;
paymentAccountId: number;
paymentAccountName: string;
paymentAmount: number;
remark: string;
status: number;
files: FileData[];
tableData: TransferData[];
}
63 changes: 63 additions & 0 deletions web/src/api/financial/transfer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import {defHttp} from '/@/utils/http/axios';
import { ErrorMessageMode } from '/#/axios';
import {BaseDataResp, BaseResp} from "@/api/model/baseModel";
import {
TransferDetailResp,
AddOrUpdateTransferReq,
QueryTransferReq,
TransferResp,
} from "@/api/financial/model/transferModel";

enum API {
PageList = '/financial/transfer/pageList',
AddOrUpdateAccount = '/financial/transfer/addOrUpdate',
DeleteBatch = '/financial/transfer/deleteByIds',
UpdateStatus = '/financial/transfer/updateStatusByIds',
GetDetail = '/financial/transfer/getDetailById',
}

export function getTransferPageList(params: QueryTransferReq, mode: ErrorMessageMode = 'notice') {
return defHttp.post<BaseDataResp<TransferResp>>(
{
url: API.PageList,
params,
},
{
errorMessageMode: mode,
successMessageMode: mode,
},
);
}

export function addOrUpdateTransfer(params: AddOrUpdateTransferReq) {
return defHttp.post<BaseResp>(
{
url: API.AddOrUpdateAccount,
params,
},
);
}

export function updateTransferStatus(ids: number[], status: number) {
return defHttp.put<BaseResp>(
{
url: `${API.UpdateStatus}?ids=${ids}&status=${status}`
},
);
}

export function deleteBatchTransfer(ids: number[]) {
return defHttp.put<BaseResp>(
{
url: `${API.DeleteBatch}?ids=${ids}`
},
);
}

export function getTransferDetailById(id: number) {
return defHttp.get<BaseDataResp<TransferDetailResp>>(
{
url: `${API.GetDetail}/${id}`
},
);
}
138 changes: 138 additions & 0 deletions web/src/views/financial/transfer/addEditTransfer.data.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
import {reactive, ref} from "vue";
import XEUtils from "xe-utils";
import {VxeGridInstance, VxeGridProps} from "vxe-table";
import {Dayjs} from "dayjs";

export interface RowVO {
[key: string]: any,
accountId: number | string,
transferAmount: number,
remark: string,
}

interface TransferFormState {
id: number | string | undefined;
receiptDate: string | undefined | Dayjs;
receiptNumber: string |undefined;
financialPersonId: number | string |undefined;
paymentAccountId: number | string |undefined;
accountId: number | string |undefined;
paymentAmount: number | string;
remark: string;
}

const xGrid = ref<VxeGridInstance<RowVO>>()
const tableData = ref<RowVO[]>([])
const gridOptions = reactive<VxeGridProps<RowVO>>({
border: true,
showHeaderOverflow: true,
showOverflow: true,
showFooter: true,
keepSource: true,
id: 'full_edit',
height: 400,
rowConfig: {
keyField: 'id',
isHover: true
},
columnConfig: {
resizable: true
},
sortConfig: {
trigger: 'cell',
remote: true
},
filterConfig: {
remote: true
},
formConfig: {
titleWidth: 100,
titleAlign: 'right',
items: [
]
},
toolbarConfig: {
slots: {
buttons: 'toolbar_buttons'
},
export: true, // 显示导出按钮
zoom: true, // 显示全屏按钮
custom: true // 显示自定义列按钮
},
proxyConfig: {
seq: true, // 启用动态序号代理,每一页的序号会根据当前页数变化
sort: false, // 启用排序代理,当点击排序时会自动触发 query 行为
filter: false, // 启用筛选代理,当点击筛选时会自动触发 query 行为
form: true, // 启用表单代理,当点击表单提交按钮时会自动触发 reload 行为
},
columns: [
{ type: 'checkbox', field:'id', title: 'ID', width: 180},
{ field: 'accountId',
width:200,
title: '账户名称',
slots: { edit: 'id_edit',default: 'id_default' },
sortable: true,
editRender: {}
},
{ field: 'transferAmount',
width:200,
title: '金额',
slots: { edit: 'amount_edit' },
sortable: true,
editRender: { name: 'input', attrs: { placeholder: '请输入金额' } }
},
{ field: 'remark', title: '备注', editRender: { name: 'input', attrs: { placeholder: '请输入备注' } } },

],
footerMethod ({ columns, data }) {
return [
columns.map((column, columnIndex) => {
if (columnIndex === 0) {
return '总计'
}
if (['transferAmount'].includes(column.field)) {
transferFormState.paymentAmount = `¥${XEUtils.commafy(XEUtils.toNumber(sumNum(data, column.field)), { digits: 2 })}`
return `¥${XEUtils.commafy(XEUtils.toNumber(sumNum(data, column.field)), { digits: 2 })}`
}
return ''
})
]
},
checkboxConfig: {
labelField: 'id',
reserve: true,
highlight: true,
range: true
},
editConfig: {
trigger: 'click',
mode: 'row',
showStatus: true
}
})

const sumNum = (list: RowVO[], field: string) => {
let count = 0
list.forEach(item => {
count += Number(item[field])
})
return count
}
const transferFormState = reactive<TransferFormState>({
id: undefined,
receiptDate: '',
receiptNumber: '',
financialPersonId: '',
paymentAccountId: '',
accountId: 0,
paymentAmount: 0,
remark: '',
});

export {
xGrid,
sumNum,
tableData,
gridOptions,
transferFormState,
}
Loading