From 966f499ca213be193582f8372dcd9daf52078921 Mon Sep 17 00:00:00 2001 From: jameszow Date: Sat, 4 Nov 2023 22:53:46 +0800 Subject: [PATCH 1/7] Add sales and purchase module views --- .../order/components/AddEditModal.vue | 7 + web/src/views/purchase/order/index.vue | 7 + .../retail/refund/components/AddEditModal.vue | 748 ++++++++++++++++++ web/src/views/retail/refund/index.vue | 181 +++++ .../sales/order/components/AddEditModal.vue | 7 + web/src/views/sales/order/index.vue | 7 + .../sales/refund/components/AddEditModal.vue | 7 + web/src/views/sales/refund/index.vue | 7 + .../shipments/components/AddEditModal.vue | 7 + web/src/views/sales/shipments/index.vue | 7 + 10 files changed, 985 insertions(+) create mode 100644 web/src/views/purchase/order/components/AddEditModal.vue create mode 100644 web/src/views/purchase/order/index.vue create mode 100644 web/src/views/retail/refund/components/AddEditModal.vue create mode 100644 web/src/views/retail/refund/index.vue create mode 100644 web/src/views/sales/order/components/AddEditModal.vue create mode 100644 web/src/views/sales/order/index.vue create mode 100644 web/src/views/sales/refund/components/AddEditModal.vue create mode 100644 web/src/views/sales/refund/index.vue create mode 100644 web/src/views/sales/shipments/components/AddEditModal.vue create mode 100644 web/src/views/sales/shipments/index.vue diff --git a/web/src/views/purchase/order/components/AddEditModal.vue b/web/src/views/purchase/order/components/AddEditModal.vue new file mode 100644 index 00000000..5ff38f59 --- /dev/null +++ b/web/src/views/purchase/order/components/AddEditModal.vue @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/web/src/views/purchase/order/index.vue b/web/src/views/purchase/order/index.vue new file mode 100644 index 00000000..5ff38f59 --- /dev/null +++ b/web/src/views/purchase/order/index.vue @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/web/src/views/retail/refund/components/AddEditModal.vue b/web/src/views/retail/refund/components/AddEditModal.vue new file mode 100644 index 00000000..59ac0c56 --- /dev/null +++ b/web/src/views/retail/refund/components/AddEditModal.vue @@ -0,0 +1,748 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/retail/refund/index.vue b/web/src/views/retail/refund/index.vue new file mode 100644 index 00000000..31bac855 --- /dev/null +++ b/web/src/views/retail/refund/index.vue @@ -0,0 +1,181 @@ + +
+
+ + \ No newline at end of file diff --git a/web/src/views/sales/order/components/AddEditModal.vue b/web/src/views/sales/order/components/AddEditModal.vue new file mode 100644 index 00000000..5ff38f59 --- /dev/null +++ b/web/src/views/sales/order/components/AddEditModal.vue @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/web/src/views/sales/order/index.vue b/web/src/views/sales/order/index.vue new file mode 100644 index 00000000..5ff38f59 --- /dev/null +++ b/web/src/views/sales/order/index.vue @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/web/src/views/sales/refund/components/AddEditModal.vue b/web/src/views/sales/refund/components/AddEditModal.vue new file mode 100644 index 00000000..5ff38f59 --- /dev/null +++ b/web/src/views/sales/refund/components/AddEditModal.vue @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/web/src/views/sales/refund/index.vue b/web/src/views/sales/refund/index.vue new file mode 100644 index 00000000..5ff38f59 --- /dev/null +++ b/web/src/views/sales/refund/index.vue @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/web/src/views/sales/shipments/components/AddEditModal.vue b/web/src/views/sales/shipments/components/AddEditModal.vue new file mode 100644 index 00000000..5ff38f59 --- /dev/null +++ b/web/src/views/sales/shipments/components/AddEditModal.vue @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/web/src/views/sales/shipments/index.vue b/web/src/views/sales/shipments/index.vue new file mode 100644 index 00000000..5ff38f59 --- /dev/null +++ b/web/src/views/sales/shipments/index.vue @@ -0,0 +1,7 @@ + + + \ No newline at end of file From a15ccc183413e8771468bfc83707be8036548ed1 Mon Sep 17 00:00:00 2001 From: jameszow Date: Sat, 4 Nov 2023 22:54:09 +0800 Subject: [PATCH 2/7] add shipments code and report --- web/src/api/report/report.ts | 4 ++-- web/src/api/retail/shipments.ts | 1 - web/src/views/retail/shipments/model/addEditModel.ts | 1 + 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/src/api/report/report.ts b/web/src/api/report/report.ts index a5326727..6f507940 100644 --- a/web/src/api/report/report.ts +++ b/web/src/api/report/report.ts @@ -1,6 +1,6 @@ import {defHttp} from '/@/utils/http/axios'; -import {BaseDataResp, BaseResp} from "@/api/model/baseModel"; -import {reportModel} from "@/api/report/model/reportModel"; +import {BaseDataResp} from "@/api/model/baseModel"; +import {reportModel} from "@/api/report/reportModel"; enum API { getStatisticalData = '/report/homePage/statistics' diff --git a/web/src/api/retail/shipments.ts b/web/src/api/retail/shipments.ts index c3385071..e1022690 100644 --- a/web/src/api/retail/shipments.ts +++ b/web/src/api/retail/shipments.ts @@ -1,5 +1,4 @@ import {defHttp} from '/@/utils/http/axios'; -import { ErrorMessageMode } from '/#/axios'; import {BaseDataResp, BaseResp} from "@/api/model/baseModel"; import { AddOrUpdateShipmentsReq, diff --git a/web/src/views/retail/shipments/model/addEditModel.ts b/web/src/views/retail/shipments/model/addEditModel.ts index dfee359c..4d288faf 100644 --- a/web/src/views/retail/shipments/model/addEditModel.ts +++ b/web/src/views/retail/shipments/model/addEditModel.ts @@ -10,6 +10,7 @@ interface FormState { paymentType: string; remark: string; receiptAmount: number; + scanBarCode: string; collectAmount: number; backAmount: number; From fabc537c84d5fc3235ff1270f8973233d4a88a52 Mon Sep 17 00:00:00 2001 From: jameszow Date: Sat, 4 Nov 2023 22:54:28 +0800 Subject: [PATCH 3/7] add retail refund data ts --- web/src/views/retail/refund/refund.data.ts | 141 +++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 web/src/views/retail/refund/refund.data.ts diff --git a/web/src/views/retail/refund/refund.data.ts b/web/src/views/retail/refund/refund.data.ts new file mode 100644 index 00000000..12aeb0a6 --- /dev/null +++ b/web/src/views/retail/refund/refund.data.ts @@ -0,0 +1,141 @@ +import {FormSchema} from "@/components/Form"; +import {BasicColumn} from "@/components/Table"; +import {useI18n} from "@/hooks/web/useI18n"; +import {getMemberList} from "@/api/basic/member"; +import {getAccountList} from "@/api/financial/account"; + +export const { t } = useI18n(); + +export const columns: BasicColumn[] = [ + { + title: '会员', + dataIndex: 'memberName', + width: 60, + }, + { + title: '单据编号', + dataIndex: 'receiptNumber', + width: 130, + }, + { + title: '商品信息', + dataIndex: 'productInfo', + width: 80, + }, + { + title: '金额合计', + dataIndex: 'totalPrice', + width: 60, + }, + { + title: '付款金额', + dataIndex: 'paymentAmount', + width: 80, + }, + { + title: '找零金额', + dataIndex: 'backAmount', + width: 80, + }, + { + title: '单据日期', + dataIndex: 'receiptDate', + width: 130, + }, + { + title: '操作员', + dataIndex: 'operator', + width: 60, + }, + { + title: '状态', + dataIndex: 'status', + width: 80, + }, +] + +export const searchFormSchema: FormSchema[] = [ + { + label: '单据编号', + field: 'receiptNumber', + component: 'Input', + colProps: { + xl: 8, + xxl: 8, + }, + }, + { + field: '[startDate, endDate]', + label: '单据日期', + component: 'RangePicker', + componentProps: { + format: 'YYYY/MM/DD', + placeholder: ['开始日期', '结束日期'], + }, + colProps: { span: 7 }, + }, + { + label: '结算账户', + field: 'accountId', + component: 'ApiSelect', + componentProps: { + api: getAccountList, + resultField: 'data', + labelField: 'accountName', + valueField: 'id', + }, + colProps: { + xl: 8, + xxl: 8, + }, + }, + { + label: '商品信息', + field: 'productInfo', + component: 'Input', + colProps: { + xl: 8, + xxl: 8, + }, + }, + { + label: '会员卡号', + field: 'memberId', + component: 'ApiSelect', + componentProps: { + api: getMemberList, + resultField: 'data', + labelField: 'memberName', + valueField: 'id', + }, + colProps: { + xl: 8, + xxl: 8, + }, + }, + { + label: '单据状态', + field: 'status', + component: 'Select', + colProps: { + xl: 8, + xxl: 8, + }, + componentProps: { + options: [ + { label: '未审核', value: 0, key: 0 }, + { label: '已审核', value: 1, key: 1 }, + ], + }, + }, + { + label: '单据备注', + field: 'remark', + component: 'Input', + colProps: { + xl: 8, + xxl: 8, + }, + + } +] \ No newline at end of file From 62ecc395853d526ea740cbc9ab91dcdb02d57bbf Mon Sep 17 00:00:00 2001 From: jameszow Date: Sat, 4 Nov 2023 22:54:48 +0800 Subject: [PATCH 4/7] add retail refund data object --- .../dto/receipt/QueryRetailRefundDTO.java | 43 ++++++++++++++ .../wansenai/dto/receipt/RetailRefundDTO.java | 52 +++++++++++++++++ .../vo/receipt/RetailRefundDetailVO.java | 58 +++++++++++++++++++ .../wansenai/vo/receipt/RetailRefundVO.java | 58 +++++++++++++++++++ .../utils/constants/ReceiptConstants.java | 40 +++++++++++++ 5 files changed, 251 insertions(+) create mode 100644 core/domain/src/main/java/com/wansenai/dto/receipt/QueryRetailRefundDTO.java create mode 100644 core/domain/src/main/java/com/wansenai/dto/receipt/RetailRefundDTO.java create mode 100644 core/domain/src/main/java/com/wansenai/vo/receipt/RetailRefundDetailVO.java create mode 100644 core/domain/src/main/java/com/wansenai/vo/receipt/RetailRefundVO.java create mode 100644 core/utils/src/main/java/com/wansenai/utils/constants/ReceiptConstants.java diff --git a/core/domain/src/main/java/com/wansenai/dto/receipt/QueryRetailRefundDTO.java b/core/domain/src/main/java/com/wansenai/dto/receipt/QueryRetailRefundDTO.java new file mode 100644 index 00000000..401aa718 --- /dev/null +++ b/core/domain/src/main/java/com/wansenai/dto/receipt/QueryRetailRefundDTO.java @@ -0,0 +1,43 @@ +/* + * Copyright 2023-2033 WanSen AI Team, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://opensource.wansenai.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES + * OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + */ +package com.wansenai.dto.receipt; + +import lombok.Data; + +@Data +public class QueryRetailRefundDTO { + + private String receiptNumber; + + private String productInfo; + + private Long memberId; + + private Long warehouseId; + + private Long accountId; + + private Long operatorId; + + private Integer status; + + private String remark; + + private String startDate; + + private String endDate; + + private Long page; + + private Long pageSize; +} diff --git a/core/domain/src/main/java/com/wansenai/dto/receipt/RetailRefundDTO.java b/core/domain/src/main/java/com/wansenai/dto/receipt/RetailRefundDTO.java new file mode 100644 index 00000000..30759715 --- /dev/null +++ b/core/domain/src/main/java/com/wansenai/dto/receipt/RetailRefundDTO.java @@ -0,0 +1,52 @@ +/* + * Copyright 2023-2033 WanSen AI Team, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://opensource.wansenai.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES + * OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + */ +package com.wansenai.dto.receipt; + +import com.wansenai.bo.FileDataBO; +import com.wansenai.bo.ShipmentsDataBO; +import lombok.Builder; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@Builder +public class RetailRefundDTO { + + private Long id; + + private Long memberId; + + private Long accountId; + + private String receiptDate; + + private String receiptNumber; + + private String otherReceipt; + + private BigDecimal paymentAmount; + + private BigDecimal receiptAmount; + + private BigDecimal backAmount; + + private String remark; + + private Integer status; + + private List tableData; + + private List files; +} diff --git a/core/domain/src/main/java/com/wansenai/vo/receipt/RetailRefundDetailVO.java b/core/domain/src/main/java/com/wansenai/vo/receipt/RetailRefundDetailVO.java new file mode 100644 index 00000000..676200e4 --- /dev/null +++ b/core/domain/src/main/java/com/wansenai/vo/receipt/RetailRefundDetailVO.java @@ -0,0 +1,58 @@ +/* + * Copyright 2023-2033 WanSen AI Team, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://opensource.wansenai.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES + * OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + */ +package com.wansenai.vo.receipt; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.wansenai.bo.BigDecimalSerializerBO; +import com.wansenai.bo.FileDataBO; +import com.wansenai.bo.ShipmentsDataBO; +import lombok.Builder; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@Builder +public class RetailRefundDetailVO { + + @JsonFormat(shape = JsonFormat.Shape.STRING) + private Long memberId; + + @JsonFormat(shape = JsonFormat.Shape.STRING) + private Long accountId; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime receiptDate; + + private String receiptNumber; + + private String otherReceipt; + + @JsonSerialize(using = BigDecimalSerializerBO.class) + private BigDecimal paymentAmount; + + @JsonSerialize(using = BigDecimalSerializerBO.class) + private BigDecimal receiptAmount; + + @JsonSerialize(using = BigDecimalSerializerBO.class) + private BigDecimal backAmount; + + private String remark; + + private List tableData; + + private List files; +} diff --git a/core/domain/src/main/java/com/wansenai/vo/receipt/RetailRefundVO.java b/core/domain/src/main/java/com/wansenai/vo/receipt/RetailRefundVO.java new file mode 100644 index 00000000..0d6a9dfa --- /dev/null +++ b/core/domain/src/main/java/com/wansenai/vo/receipt/RetailRefundVO.java @@ -0,0 +1,58 @@ +/* + * Copyright 2023-2033 WanSen AI Team, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://opensource.wansenai.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES + * OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + */ +package com.wansenai.vo.receipt; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.wansenai.bo.BigDecimalSerializerBO; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RetailRefundVO { + + @JsonFormat(shape = JsonFormat.Shape.STRING) + private Long id; + + private String memberName; + + private String receiptNumber; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime receiptDate; + + private String productInfo; + + private String operator; + + private Integer productNumber; + + @JsonSerialize(using = BigDecimalSerializerBO.class) + private BigDecimal totalPrice; + + @JsonSerialize(using = BigDecimalSerializerBO.class) + private BigDecimal paymentAmount; + + @JsonSerialize(using = BigDecimalSerializerBO.class) + private BigDecimal backAmount; + + private Integer status; +} diff --git a/core/utils/src/main/java/com/wansenai/utils/constants/ReceiptConstants.java b/core/utils/src/main/java/com/wansenai/utils/constants/ReceiptConstants.java new file mode 100644 index 00000000..6eb1a8b0 --- /dev/null +++ b/core/utils/src/main/java/com/wansenai/utils/constants/ReceiptConstants.java @@ -0,0 +1,40 @@ +/* + * Copyright 2023-2033 WanSen AI Team, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://opensource.wansenai.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES + * OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + */ +package com.wansenai.utils.constants; + +/** + * receipt constant interface + * 单据常量接口 + */ +public interface ReceiptConstants { + + String RECEIPT_TYPE_SHIPMENT = "出库"; + + String RECEIPT_TYPE_STORAGE = "入库"; + + String RECEIPT_SUB_TYPE_RETAIL_SHIPMENTS = "零售出库"; + + String RECEIPT_SUB_TYPE_RETAIL_REFUND = "零售退货"; + + String RECEIPT_SUB_TYPE_SALES_ORDER = "销售订单"; + + String RECEIPT_SUB_TYPE_SALES_SHIPMENTS = "销售出库"; + + String RECEIPT_SUB_TYPE_SALES_REFUND = "销售退货"; + + String RECEIPT_SUB_TYPE_PURCHASE_ORDER = "采购订单"; + + String RECEIPT_SUB_TYPE_PURCHASE_STORAGE = "采购入库"; + + String RECEIPT_SUB_TYPE_PURCHASE_REFUND = "采购退货"; +} From e1247ac7cd98b7d8e3b0866be602a39964eae7bf Mon Sep 17 00:00:00 2001 From: jameszow Date: Sat, 4 Nov 2023 22:55:05 +0800 Subject: [PATCH 5/7] add orderNumber and data object --- .../main/java/com/wansenai/bo/ShipmentsDataBO.java | 2 ++ .../com/wansenai/entities/receipt/ReceiptMain.java | 2 +- .../com/wansenai/utils/enums/RetailCodeEnum.java | 14 +++++++++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/core/domain/src/main/java/com/wansenai/bo/ShipmentsDataBO.java b/core/domain/src/main/java/com/wansenai/bo/ShipmentsDataBO.java index 33a5b6bb..f65d84d7 100644 --- a/core/domain/src/main/java/com/wansenai/bo/ShipmentsDataBO.java +++ b/core/domain/src/main/java/com/wansenai/bo/ShipmentsDataBO.java @@ -40,4 +40,6 @@ public class ShipmentsDataBO { @JsonSerialize(using = BigDecimalSerializerBO.class) private BigDecimal amount; + + private String remark; } diff --git a/core/domain/src/main/java/com/wansenai/entities/receipt/ReceiptMain.java b/core/domain/src/main/java/com/wansenai/entities/receipt/ReceiptMain.java index 1dc2d626..113b7cac 100644 --- a/core/domain/src/main/java/com/wansenai/entities/receipt/ReceiptMain.java +++ b/core/domain/src/main/java/com/wansenai/entities/receipt/ReceiptMain.java @@ -87,7 +87,7 @@ public class ReceiptMain implements Serializable { private Integer source; - private String orderNumber; + private String otherReceipt; /** * 创建时间 diff --git a/core/utils/src/main/java/com/wansenai/utils/enums/RetailCodeEnum.java b/core/utils/src/main/java/com/wansenai/utils/enums/RetailCodeEnum.java index 7782e6c1..89dcd175 100644 --- a/core/utils/src/main/java/com/wansenai/utils/enums/RetailCodeEnum.java +++ b/core/utils/src/main/java/com/wansenai/utils/enums/RetailCodeEnum.java @@ -15,7 +15,19 @@ public enum RetailCodeEnum { DELETE_RETAIL_SHIPMENTS_SUCCESS("R0003", "删除零售出库单成功"), - DELETE_RETAIL_SHIPMENTS_ERROR("R0502", "删除零售出库单失败"); + DELETE_RETAIL_SHIPMENTS_ERROR("R0502", "删除零售出库单失败"), + + ADD_RETAIL_REFUND_SUCCESS("R0004", "添加零售退货单成功"), + + ADD_RETAIL_REFUND_ERROR("R0503", "添加零售退货单失败"), + + UPDATE_RETAIL_REFUND_SUCCESS("R0005", "修改零售退货单成功"), + + UPDATE_RETAIL_REFUND_ERROR("R0504", "修改零售退货单失败"), + + DELETE_RETAIL_REFUND_SUCCESS("R0006", "删除零售货单成功"), + + DELETE_RETAIL_REFUND_ERROR("R0505", "删除零售货单失败"); /** From 428bf1b4023bfc6903d87fa791e1e0e35a0dfe07 Mon Sep 17 00:00:00 2001 From: jameszow Date: Sat, 4 Nov 2023 22:55:18 +0800 Subject: [PATCH 6/7] add refundPageList and refundAddOrUpdate api --- .../com/wansenai/api/RetailController.java | 14 ++ .../service/receipt/ReceiptService.java | 26 ++ .../receipt/impl/ReceiptServiceImpl.java | 228 ++++++++++++++++-- 3 files changed, 253 insertions(+), 15 deletions(-) diff --git a/core/api/src/main/java/com/wansenai/api/RetailController.java b/core/api/src/main/java/com/wansenai/api/RetailController.java index c8d09487..2d16b1ce 100644 --- a/core/api/src/main/java/com/wansenai/api/RetailController.java +++ b/core/api/src/main/java/com/wansenai/api/RetailController.java @@ -13,10 +13,13 @@ package com.wansenai.api; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wansenai.dto.receipt.QueryRetailRefundDTO; import com.wansenai.dto.receipt.QueryShipmentsDTO; +import com.wansenai.dto.receipt.RetailRefundDTO; import com.wansenai.dto.receipt.RetailShipmentsDTO; import com.wansenai.service.receipt.ReceiptService; import com.wansenai.utils.response.Response; +import com.wansenai.vo.receipt.RetailRefundVO; import com.wansenai.vo.receipt.RetailShipmentsDetailVO; import com.wansenai.vo.receipt.RetailShipmentsVO; import org.springframework.web.bind.annotation.*; @@ -57,4 +60,15 @@ public Response updateStatus(@RequestParam("ids") List ids, @Reque public Response detail(@PathVariable("id") Long id) { return receiptService.getRetailShipmentsDetail(id); } + + @PostMapping("/refund/pageList") + public Response> refundPageList(@RequestBody QueryRetailRefundDTO refundDTO) { + return receiptService.getRetailRefund(refundDTO); + } + + @PostMapping("/refund/addOrUpdate") + public Response refundAddOrUpdate(@RequestBody RetailRefundDTO refundDTO) { + return receiptService.addOrUpdateRetailRefund(refundDTO); + } + } diff --git a/core/service/src/main/java/com/wansenai/service/receipt/ReceiptService.java b/core/service/src/main/java/com/wansenai/service/receipt/ReceiptService.java index fe4a6a8b..201c3f9a 100644 --- a/core/service/src/main/java/com/wansenai/service/receipt/ReceiptService.java +++ b/core/service/src/main/java/com/wansenai/service/receipt/ReceiptService.java @@ -13,8 +13,11 @@ package com.wansenai.service.receipt; import com.baomidou.mybatisplus.extension.service.IService; +import com.wansenai.dto.receipt.QueryRetailRefundDTO; import com.wansenai.dto.receipt.QueryShipmentsDTO; +import com.wansenai.dto.receipt.RetailRefundDTO; import com.wansenai.dto.receipt.RetailShipmentsDTO; +import com.wansenai.vo.receipt.RetailRefundVO; import com.wansenai.vo.receipt.RetailShipmentsDetailVO; import com.wansenai.entities.receipt.ReceiptMain; import com.wansenai.utils.response.Response; @@ -94,4 +97,27 @@ public interface ReceiptService extends IService { * 返回首页数据汇总 */ Response getRetailStatistics(); + + + /** + * Query retail refund orders with pagination. + * 分页查询零售退货单 + * + * @param refundDTO Query common conditions + * 查询公共条件 + * @return Returns paginated data + * 返回分页数据 + */ + Response> getRetailRefund(QueryRetailRefundDTO refundDTO); + + /** + * Add/modify retail shipment orders. + * 新增/修改 零售退货单 + * + * @param refundDTO Retail shipment order data + * 零售退货单数据 + * @return Returns the result of the addition + * 返回新增结果 + */ + Response addOrUpdateRetailRefund(RetailRefundDTO refundDTO); } diff --git a/core/service/src/main/java/com/wansenai/service/receipt/impl/ReceiptServiceImpl.java b/core/service/src/main/java/com/wansenai/service/receipt/impl/ReceiptServiceImpl.java index f7d7f2eb..d131b5c3 100644 --- a/core/service/src/main/java/com/wansenai/service/receipt/impl/ReceiptServiceImpl.java +++ b/core/service/src/main/java/com/wansenai/service/receipt/impl/ReceiptServiceImpl.java @@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.wansenai.bo.FileDataBO; import com.wansenai.bo.ShipmentsDataBO; +import com.wansenai.dto.receipt.QueryRetailRefundDTO; import com.wansenai.dto.receipt.QueryShipmentsDTO; +import com.wansenai.dto.receipt.RetailRefundDTO; import com.wansenai.dto.receipt.RetailShipmentsDTO; import com.wansenai.entities.receipt.ReceiptMain; import com.wansenai.entities.receipt.ReceiptSub; @@ -19,9 +21,11 @@ import com.wansenai.service.user.ISysUserService; import com.wansenai.utils.SnowflakeIdUtil; import com.wansenai.utils.constants.CommonConstants; +import com.wansenai.utils.constants.ReceiptConstants; import com.wansenai.utils.enums.BaseCodeEnum; import com.wansenai.utils.enums.RetailCodeEnum; import com.wansenai.utils.response.Response; +import com.wansenai.vo.receipt.RetailRefundVO; import com.wansenai.vo.receipt.RetailShipmentsDetailVO; import com.wansenai.vo.receipt.RetailShipmentsVO; import com.wansenai.vo.receipt.RetailStatisticalDataVO; @@ -34,9 +38,6 @@ import java.math.RoundingMode; import java.time.LocalDateTime; import java.time.LocalTime; -import java.time.temporal.ChronoUnit; -import java.time.temporal.TemporalAdjusters; -import java.time.temporal.TemporalUnit; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -73,6 +74,8 @@ public Response> getRetailShipments(QueryShipmentsDTO sh var retailShipmentsVOList = new ArrayList(); var page = new Page(shipmentsDTO.getPage(), shipmentsDTO.getPageSize()); var queryWrapper = new LambdaQueryWrapper() + .eq(ReceiptMain::getType, ReceiptConstants.RECEIPT_TYPE_SHIPMENT) + .in(ReceiptMain::getSubType, ReceiptConstants.RECEIPT_SUB_TYPE_RETAIL_SHIPMENTS) .eq(StringUtils.hasText(shipmentsDTO.getReceiptNumber()), ReceiptMain::getReceiptNumber, shipmentsDTO.getReceiptNumber()) .like(StringUtils.hasText(shipmentsDTO.getRemark()), ReceiptMain::getRemark, shipmentsDTO.getRemark()) .eq(shipmentsDTO.getMemberId() != null, ReceiptMain::getMemberId, shipmentsDTO.getMemberId()) @@ -222,8 +225,8 @@ public Response addOrUpdateRetailShipments(RetailShipmentsDTO shipmentsD var receiptMain = ReceiptMain.builder() .id(id) - .type("出库") - .subType("零售出库") + .type(ReceiptConstants.RECEIPT_TYPE_SHIPMENT) + .subType(ReceiptConstants.RECEIPT_SUB_TYPE_RETAIL_SHIPMENTS) .initReceiptNumber(shipmentsDTO.getReceiptNumber()) .receiptNumber(shipmentsDTO.getReceiptNumber()) .memberId(shipmentsDTO.getMemberId()) @@ -378,22 +381,20 @@ public Response getRetailStatistics() { var now = LocalDateTime.now(); var retailData = lambdaQuery() - .eq(ReceiptMain::getType, "出库") - .in(ReceiptMain::getSubType, "零售出库") + .eq(ReceiptMain::getType, ReceiptConstants.RECEIPT_TYPE_SHIPMENT) + .in(ReceiptMain::getSubType, ReceiptConstants.RECEIPT_SUB_TYPE_RETAIL_SHIPMENTS) .eq(ReceiptMain::getStatus, 1) .eq(ReceiptMain::getDeleteFlag, 0) .list(); - var salesData = lambdaQuery() - .eq(ReceiptMain::getType, "出库") - .in(ReceiptMain::getSubType, "销售出库") + .eq(ReceiptMain::getType, ReceiptConstants.RECEIPT_TYPE_SHIPMENT) + .in(ReceiptMain::getSubType, ReceiptConstants.RECEIPT_SUB_TYPE_SALES_SHIPMENTS) .eq(ReceiptMain::getStatus, 1) .eq(ReceiptMain::getDeleteFlag, 0) .list(); - var purchaseData = lambdaQuery() - .eq(ReceiptMain::getType, "入库") - .eq(ReceiptMain::getSubType, "采购入库") + .eq(ReceiptMain::getType, ReceiptConstants.RECEIPT_TYPE_STORAGE) + .eq(ReceiptMain::getSubType, ReceiptConstants.RECEIPT_SUB_TYPE_PURCHASE_STORAGE) .eq(ReceiptMain::getStatus, 1) .eq(ReceiptMain::getDeleteFlag, 0) .list(); @@ -418,12 +419,10 @@ public Response getRetailStatistics() { .yesterdayRetailSales(yesterdayRetailSales) .monthRetailSales(monthRetailSales) .yearRetailSales(yearRetailSales) - .todaySales(todaySales) .yesterdaySales(yesterdaySales) .monthSales(monthSales) .yearSales(yearSales) - .todayPurchase(todayPurchase) .yesterdayPurchase(yesterdayPurchase) .monthPurchase(monthPurchase) @@ -441,4 +440,203 @@ private BigDecimal calculateTotalPrice(List data, LocalDateTime sta .setScale(2, RoundingMode.HALF_UP); } + @Override + public Response> getRetailRefund(QueryRetailRefundDTO refundDTO) { + var result = new Page(); + var retailRefundVOList = new ArrayList(); + var page = new Page(refundDTO.getPage(), refundDTO.getPageSize()); + var queryWrapper = new LambdaQueryWrapper() + .eq(ReceiptMain::getType, ReceiptConstants.RECEIPT_TYPE_STORAGE) + .in(ReceiptMain::getSubType, ReceiptConstants.RECEIPT_SUB_TYPE_RETAIL_REFUND) + .eq(StringUtils.hasText(refundDTO.getReceiptNumber()), ReceiptMain::getReceiptNumber, refundDTO.getReceiptNumber()) + .like(StringUtils.hasText(refundDTO.getRemark()), ReceiptMain::getRemark, refundDTO.getRemark()) + .eq(refundDTO.getMemberId() != null, ReceiptMain::getMemberId, refundDTO.getMemberId()) + .eq(refundDTO.getAccountId() != null, ReceiptMain::getAccountId, refundDTO.getAccountId()) + .eq(refundDTO.getOperatorId() != null, ReceiptMain::getCreateBy, refundDTO.getOperatorId()) + .eq(refundDTO.getStatus() != null, ReceiptMain::getStatus, refundDTO.getStatus()) + .eq(ReceiptMain::getDeleteFlag, CommonConstants.NOT_DELETED) + .ge(StringUtils.hasText(refundDTO.getStartDate()), ReceiptMain::getCreateTime, refundDTO.getStartDate()) + .le(StringUtils.hasText(refundDTO.getEndDate()), ReceiptMain::getCreateTime, refundDTO.getEndDate()); + + var queryResult = receiptMainMapper.selectPage(page, queryWrapper); + + queryResult.getRecords().forEach(item -> { + String memberName = null; + if (item.getMemberId() != null) { + var member = memberService.getMemberById(item.getMemberId()); + if (member != null) { + memberName = member.getMemberName(); + } + } + String crateBy = null; + if (item.getCreateBy() != null) { + var user = userService.getById(item.getCreateBy()); + if (user != null) { + crateBy = user.getName(); + } + } + var productNumber = receiptSubService.lambdaQuery() + .eq(ReceiptSub::getReceiptMainId, item.getId()) + .list() + .stream() + .mapToInt(ReceiptSub::getProductNumber) + .sum(); + var retailRefundVO = RetailRefundVO.builder() + .id(item.getId()) + .memberName(memberName) + .receiptNumber(item.getReceiptNumber()) + .receiptDate(item.getCreateTime()) + .productInfo(item.getRemark()) + .operator(crateBy) + .productNumber(productNumber) + .totalPrice(item.getTotalPrice()) + .paymentAmount(item.getTotalPrice()) + .backAmount(item.getBackAmount()) + .status(item.getStatus()) + .build(); + retailRefundVOList.add(retailRefundVO); + }); + result.setRecords(retailRefundVOList); + result.setTotal(queryResult.getTotal()); + result.setCurrent(queryResult.getCurrent()); + result.setSize(queryResult.getSize()); + + return Response.responseData(result); + } + + @Override + public Response addOrUpdateRetailRefund(RetailRefundDTO refundDTO) { + var userId = userService.getCurrentUserId(); + var isUpdate = refundDTO.getId() != null; + + if (isUpdate) { + var updateMainResult = lambdaUpdate() + .eq(ReceiptMain::getId, refundDTO.getId()) + .set(refundDTO.getMemberId() != null, ReceiptMain::getMemberId, refundDTO.getMemberId()) + .set(refundDTO.getAccountId() != null, ReceiptMain::getAccountId, refundDTO.getAccountId()) + .set(refundDTO.getPaymentAmount() != null, ReceiptMain::getChangeAmount, refundDTO.getPaymentAmount()) + .set(refundDTO.getReceiptAmount() != null, ReceiptMain::getTotalPrice, refundDTO.getReceiptAmount()) + .set(refundDTO.getBackAmount() != null, ReceiptMain::getBackAmount, refundDTO.getBackAmount()) + .set(refundDTO.getStatus() != null, ReceiptMain::getStatus, refundDTO.getStatus()) + .set(StringUtils.hasText(refundDTO.getOtherReceipt()), ReceiptMain::getOtherReceipt, refundDTO.getOtherReceipt()) + .set(StringUtils.hasText(refundDTO.getRemark()), ReceiptMain::getRemark, refundDTO.getRemark()) + .set(StringUtils.hasText(refundDTO.getReceiptDate()), ReceiptMain::getCreateTime, refundDTO.getReceiptDate()) + .set(ReceiptMain::getUpdateBy, userId) + .set(ReceiptMain::getUpdateTime, LocalDateTime.now()) + .update(); + + receiptSubService.lambdaUpdate() + .eq(ReceiptSub::getReceiptMainId, refundDTO.getId()) + .remove(); + + var receiptSubList = refundDTO.getTableData(); + var receiptList = receiptSubList.stream() + .map(item -> ReceiptSub.builder() + .receiptMainId(refundDTO.getId()) + .productId(item.getProductId()) + .productNumber(item.getProductNumber()) + .productPrice(item.getUnitPrice()) + .productTotalPrice(item.getAmount()) + .productBarcode(item.getBarCode()) + .warehouseId(item.getWarehouseId()) + .build()) + .collect(Collectors.toList()); + + var updateSubResult = receiptSubService.saveBatch(receiptList); + + if (!refundDTO.getFiles().isEmpty()) { + var receiptMain = getById(refundDTO.getId()); + if (receiptMain != null) { + var ids = Arrays.stream(receiptMain.getFileId().split(",")) + .map(Long::parseLong) + .collect(Collectors.toList()); + fileMapper.deleteBatchIds(ids); + } + refundDTO.getFiles().forEach(item -> { + var file = SysFile.builder() + .id(item.getId()) + .uid(item.getUid()) + .fileName(item.getFileName()) + .fileType(item.getFileType()) + .fileSize(item.getFileSize()) + .fileUrl(item.getFileUrl()) + .build(); + fileMapper.insert(file); + }); + } + + if (updateMainResult && updateSubResult) { + return Response.responseMsg(RetailCodeEnum.UPDATE_RETAIL_REFUND_SUCCESS); + } else { + return Response.responseMsg(RetailCodeEnum.UPDATE_RETAIL_REFUND_ERROR); + } + } else { + var id = SnowflakeIdUtil.nextId(); + + var fid = new ArrayList<>(); + if (!refundDTO.getFiles().isEmpty()) { + refundDTO.getFiles().forEach(item -> { + var file = SysFile.builder() + .id(item.getId()) + .uid(item.getUid()) + .fileName(item.getFileName()) + .fileType(item.getFileType()) + .fileSize(item.getFileSize()) + .fileUrl(item.getFileUrl()) + .build(); + var result = fileMapper.insert(file); + if (result > 0) { + fid.add(file.getId()); + } + }); + } + var fileIds = fid.stream() + .map(String::valueOf) + .collect(Collectors.joining(",")); + + var receiptMain = ReceiptMain.builder() + .id(id) + .type(ReceiptConstants.RECEIPT_TYPE_STORAGE) + .subType(ReceiptConstants.RECEIPT_SUB_TYPE_RETAIL_REFUND) + .initReceiptNumber(refundDTO.getReceiptNumber()) + .receiptNumber(refundDTO.getReceiptNumber()) + .memberId(refundDTO.getMemberId()) + .accountId(refundDTO.getAccountId()) + .otherReceipt(refundDTO.getOtherReceipt()) + .accountId(refundDTO.getAccountId()) + .changeAmount(refundDTO.getPaymentAmount()) + .totalPrice(refundDTO.getReceiptAmount()) + .backAmount(refundDTO.getBackAmount()) + .remark(refundDTO.getRemark()) + .fileId(fileIds) + .status(refundDTO.getStatus()) + .createBy(userId) + .createTime(LocalDateTime.now()) + .build(); + + var saveMainResult = save(receiptMain); + + var receiptSubList = refundDTO.getTableData(); + var receiptList = receiptSubList.stream() + .map(item -> ReceiptSub.builder() + .receiptMainId(id) + .productId(item.getProductId()) + .productNumber(item.getProductNumber()) + .productPrice(item.getUnitPrice()) + .productTotalPrice(item.getAmount()) + .productBarcode(item.getBarCode()) + .warehouseId(item.getWarehouseId()) + .build()) + .collect(Collectors.toList()); + + var saveSubResult = receiptSubService.saveBatch(receiptList); + + if (saveMainResult && saveSubResult) { + return Response.responseMsg(RetailCodeEnum.ADD_RETAIL_REFUND_SUCCESS); + } else { + return Response.responseMsg(RetailCodeEnum.ADD_RETAIL_REFUND_ERROR); + } + } + } + } From 782cea90171074f5f7a45afb967992bf65a1355e Mon Sep 17 00:00:00 2001 From: jameszow Date: Sat, 4 Nov 2023 23:03:03 +0800 Subject: [PATCH 7/7] fix ci error --- web/src/api/retail/model/refundModel.ts | 31 +++++++++++++++++++++++++ web/src/api/retail/refund.ts | 30 ++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 web/src/api/retail/model/refundModel.ts create mode 100644 web/src/api/retail/refund.ts diff --git a/web/src/api/retail/model/refundModel.ts b/web/src/api/retail/model/refundModel.ts new file mode 100644 index 00000000..d9108ccc --- /dev/null +++ b/web/src/api/retail/model/refundModel.ts @@ -0,0 +1,31 @@ +import {ShipmentsData, FileDta} from './shipmentsModel'; + +interface AddOrUpdateRefundReq { + id: number | string | undefined; + memberId: number | string; + accountId: number | string; + receiptDate: string; + receiptNumber: string; + otherReceipt: string; + paymentAmount: number; + receiptAmount: number; + backAmount: number; + remark: string; + status: number; + tableData: ShipmentsData[]; + fileDataList: FileData[]; +} + +interface RefundResp { + id: number | string; + memberName: string; + receiptNumber: string; + receiptDate: string; + productInfo: string; + operator: string; + productNumber: number; + totalPrice: number; + paymentAmount: number; + backAmount: string; + status: number; +} \ No newline at end of file diff --git a/web/src/api/retail/refund.ts b/web/src/api/retail/refund.ts new file mode 100644 index 00000000..0a0b74c6 --- /dev/null +++ b/web/src/api/retail/refund.ts @@ -0,0 +1,30 @@ +import {defHttp} from '/@/utils/http/axios'; +import {BaseDataResp, BaseResp} from "@/api/model/baseModel"; +import { QueryShipmentsReq } from "@/api/retail/model/shipmentsModel" +import { + AddOrUpdateRefundReq, + RefundResp +} from "@/api/retail/model/refundModel" + +enum API { + PageList = '/retail/refund/pageList', + AddOrUpdate = '/retail/refund/addOrUpdate', +} + +export function getRefundPageList(params: QueryShipmentsReq) { + return defHttp.post>( + { + url: API.PageList, + params, + } + ); +} + +export function addOrUpdateRefund(params: AddOrUpdateRefundReq) { + return defHttp.post( + { + url: API.AddOrUpdate, + params, + } + ); +} \ No newline at end of file