diff --git a/oms_web/oms_vue/src/api/finance/receive.js b/oms_web/oms_vue/src/api/finance/receive.js
index d87a193e..6b1e2029 100644
--- a/oms_web/oms_vue/src/api/finance/receive.js
+++ b/oms_web/oms_vue/src/api/finance/receive.js
@@ -73,3 +73,24 @@ export function addReceipt(data) {
needLoading: true
})
}
+export function applyReceipt(data) {
+ return request({
+ url: '/finance/receipt/applyReceipt',
+ method: 'post',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ data: data,
+ needLoading: true
+ })
+}
+
+// 申请退款
+export function submitRefund(data) {
+ return request({
+ url: '/finance/receipt/applyRefund',
+ method: 'post',
+ data: data,
+ needLoading: true
+ })
+}
diff --git a/oms_web/oms_vue/src/views/finance/payable/components/EditForm.vue b/oms_web/oms_vue/src/views/finance/payable/components/EditForm.vue
index 71572b85..176b6811 100644
--- a/oms_web/oms_vue/src/views/finance/payable/components/EditForm.vue
+++ b/oms_web/oms_vue/src/views/finance/payable/components/EditForm.vue
@@ -164,13 +164,7 @@
-
-
-
-
-
-
-
+
@@ -185,7 +179,7 @@ import PaymentPlan from './PaymentPlan.vue';
import ReceivingTicketPlan from './ReceivingTicketPlan.vue';
import { getPayable } from "@/api/finance/payable";
import ReceiptPlan from "@/views/finance/receivable/components/ReceiptPlan.vue";
-import request from '@/utils/request';
+import GlobalFilePreview from '@/components/GlobalFilePreview';
export default {
name: "EditForm",
@@ -193,7 +187,8 @@ export default {
components: {
ReceiptPlan,
PaymentPlan,
- ReceivingTicketPlan
+ ReceivingTicketPlan,
+ GlobalFilePreview
},
props: {
visible: {
@@ -210,10 +205,6 @@ export default {
internalVisible: this.visible, // Local copy of the visible prop
activeTab: 'details',
formData: {},
- pdfPreviewVisible: false,
- currentPdfUrl: '',
- imagePreviewVisible: false,
- currentImageUrl: ''
};
},
watch: {
@@ -239,40 +230,11 @@ export default {
this.formData = res.data;
});
},
- isPdf(filePath) {
- return filePath && filePath.toLowerCase().endsWith('.pdf');
- },
- getImageUrl(resource) {
- return process.env.VUE_APP_BASE_API + "/common/download/resource?resource=" + resource;
- },
handlePreview(attachment) {
- if (!attachment) return;
- if (this.isPdf(attachment.filePath)) {
- request({
- url: '/common/download/resource',
- method: 'get',
- params: { resource: attachment.filePath },
- responseType: 'blob'
- }).then(res => {
- const blob = new Blob([res.data], { type: 'application/pdf' });
- this.currentPdfUrl = URL.createObjectURL(blob);
- this.pdfPreviewVisible = true;
- });
- } else {
- this.currentImageUrl = this.getImageUrl(attachment.filePath);
- this.imagePreviewVisible = true;
- }
+ this.$refs.filePreview.handlePreview(attachment);
},
downloadFile(attachment){
- if (attachment){
- const link = document.createElement('a');
- link.href = process.env.VUE_APP_BASE_API + "/common/download/resource?resource=" +attachment.filePath;
- link.download = attachment.fileName || 'receipt';
- link.style.display = 'none';
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- }
+ this.$refs.filePreview.downloadFile(attachment);
},
getSummaries(param) {
const { columns, data } = param;
diff --git a/oms_web/oms_vue/src/views/finance/receive/components/ApplyPaymentDialog.vue b/oms_web/oms_vue/src/views/finance/receive/components/ApplyPaymentDialog.vue
new file mode 100644
index 00000000..a117418e
--- /dev/null
+++ b/oms_web/oms_vue/src/views/finance/receive/components/ApplyPaymentDialog.vue
@@ -0,0 +1,298 @@
+
+
+
+
+
+ 请选择客户的付款方式并确认客户打款的账户信息,提交至财务审批
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ form.file ? '重新上传' : '点击上传'
+ }}
+
+ 支持JPG/PNG/PDF格式
+
+
+ {{ form.fileName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![预览图片]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/oms_web/oms_vue/src/views/finance/receive/components/ApplyRefundDialog.vue b/oms_web/oms_vue/src/views/finance/receive/components/ApplyRefundDialog.vue
new file mode 100644
index 00000000..612dcf74
--- /dev/null
+++ b/oms_web/oms_vue/src/views/finance/receive/components/ApplyRefundDialog.vue
@@ -0,0 +1,152 @@
+
+
+ 请选择客户的退款方式并确认客户收款的账户信息,提交至财务审批
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/oms_web/oms_vue/src/views/finance/receive/components/DetailDrawer.vue b/oms_web/oms_vue/src/views/finance/receive/components/DetailDrawer.vue
index 69e2a5e7..73080e32 100644
--- a/oms_web/oms_vue/src/views/finance/receive/components/DetailDrawer.vue
+++ b/oms_web/oms_vue/src/views/finance/receive/components/DetailDrawer.vue
@@ -43,7 +43,12 @@
收款图/回执单:
-
+
+ 预览
+ 下载
+
+ -
@@ -56,7 +61,7 @@
上传人姓名:
-
+ {{ detail.attachment && detail.attachment.createByName || '-' }}
@@ -108,13 +113,20 @@
+
+
diff --git a/oms_web/oms_vue/src/views/finance/receive/components/ReceiveDialog.vue b/oms_web/oms_vue/src/views/finance/receive/components/ReceiveDialog.vue
index 0547f328..083c7401 100644
--- a/oms_web/oms_vue/src/views/finance/receive/components/ReceiveDialog.vue
+++ b/oms_web/oms_vue/src/views/finance/receive/components/ReceiveDialog.vue
@@ -19,8 +19,8 @@
- 票据类型
-
+ 付款方式
+
{{ titleText }}
@@ -53,7 +53,7 @@
收款总额
- {{ receiptData.totalAmount }}
+ {{ receiptData.totalPriceWithTax }}
备注
@@ -93,15 +93,8 @@
-
-
-
-
+
+
@@ -119,8 +112,11 @@
支持上传PNG、JPG、PDF文件格式
-
- {{ receiptData.totalAmount }}
+
+ {{ receiptData.totalPriceWithTax }}
+
+
+
null,
+ default: () => {},
},
- dicts: {
- type: Object,
- default: () => ({})
- }
},
- dicts:['finance_invoice_type'],
+ dicts:['payment_method'],
data() {
return {
loading: false,
@@ -190,9 +182,6 @@ export default {
file: null
},
rules: {
- ticketType: [
- { required: true, message: "请选择票据类型", trigger: "change" }
- ],
},
previewUrl: '',
isPreviewPdf: false,
@@ -237,7 +226,7 @@ export default {
fetchAttachments() {
if (!this.receiptData.id) return;
this.loading = true;
- getReceiveAttachments(this.receiptData.id, { type: 'ticket' })
+ getReceiveAttachments(this.receiptData.id, { type: 'receipt' })
.then(response => {
const data = response.data || [];
data.sort((a, b) => new Date(b.createTime) - new Date(a.createTime));
@@ -342,9 +331,8 @@ export default {
const formData = new FormData();
formData.append("file", this.uploadForm.file);
- formData.append("id", this.receiptData.id);
+ formData.append("relatedBillId", this.receiptData.id);
formData.append("remark", this.uploadForm.remark);
- formData.append("ticketType", this.uploadForm.ticketType);
uploadReceiveAttachment(formData)
.then(response => {
diff --git a/oms_web/oms_vue/src/views/finance/receive/index.vue b/oms_web/oms_vue/src/views/finance/receive/index.vue
index 6085ea7b..002262f4 100644
--- a/oms_web/oms_vue/src/views/finance/receive/index.vue
+++ b/oms_web/oms_vue/src/views/finance/receive/index.vue
@@ -165,6 +165,18 @@
icon="el-icon-document"
@click="handleReceipt(scope.row)"
>附件
+ 申请付款
+ 申请退款
退回
- 申请红冲
@@ -197,6 +202,10 @@
+
+
+
+
@@ -207,15 +216,19 @@ import { addDateRange } from "@/utils/ruoyi";
import DetailDrawer from "./components/DetailDrawer.vue";
import AddForm from "./components/AddForm.vue";
import ReceiveDialog from "./components/ReceiveDialog.vue";
+import ApplyPaymentDialog from "./components/ApplyPaymentDialog.vue";
+import ApplyRefundDialog from "./components/ApplyRefundDialog.vue";
export default {
name: "Receive",
components: {
DetailDrawer,
AddForm,
- ReceiveDialog
+ ReceiveDialog,
+ ApplyPaymentDialog,
+ ApplyRefundDialog
},
- dicts:['receipt_bill_type','approve_status','receipt_bill_status'],
+ dicts:['receipt_bill_type','approve_status','receipt_bill_status', 'payment_method'],
data() {
return {
// 遮罩层
@@ -251,7 +264,11 @@ export default {
addOpen: false,
// 收款附件弹窗
receiptOpen: false,
- currentRow: {}
+ currentRow: {},
+ // 申请付款弹窗
+ applyPaymentOpen: false,
+ // 申请退款弹窗
+ applyRefundOpen: false,
};
},
created() {
@@ -319,6 +336,16 @@ export default {
this.detailOpen = true;
});
},
+ /** 申请付款按钮操作 */
+ handleApplyPayment(row) {
+ this.currentRow = row;
+ this.applyPaymentOpen = true;
+ },
+ /** 申请退款按钮操作 */
+ handleApplyRefund(row) {
+ this.currentRow = row;
+ this.applyRefundOpen = true;
+ },
/** 收款附件按钮操作 */
handleReceipt(row) {
this.currentRow = row;
@@ -334,7 +361,7 @@ export default {
}).catch(() => {});
},
handleReturn(row) {
- this.$modal.confirm('是否确认退回收款单编号为"' + row.receiptBillCode + '"的数据项?').then(function() {
+ this.$modal.confirm('是否将该笔销售-应收单的:销售-收款单与销售-发票单同时退回至销售-应收单表').then(function() {
return returnReceive(row.id);
}).then(() => {
this.getList();
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsReceiptBillController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsReceiptBillController.java
index 2822ac22..2b16455a 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsReceiptBillController.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsReceiptBillController.java
@@ -5,13 +5,19 @@ import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.sip.domain.OmsFinAttachment;
+import com.ruoyi.sip.domain.OmsPaymentBill;
import com.ruoyi.sip.domain.OmsReceiptBill;
+import com.ruoyi.sip.service.IOmsFinAttachmentService;
import com.ruoyi.sip.service.IOmsReceiptBillService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
+import java.util.Collections;
import java.util.List;
/**
@@ -26,6 +32,8 @@ public class OmsReceiptBillController extends BaseController {
@Autowired
private IOmsReceiptBillService omsReceiptBillService;
+ @Autowired
+ private IOmsFinAttachmentService omsFinAttachmentService;
@GetMapping("/list")
@@ -91,4 +99,56 @@ public class OmsReceiptBillController extends BaseController {
return AjaxResult.error("操作失败:" + e.getMessage());
}
}
+ @GetMapping("/attachment/{id}")
+ @ResponseBody
+ public AjaxResult viewReceipt(@PathVariable("id") Long id, @RequestParam("type") String type)
+ {
+
+ return AjaxResult.success( omsFinAttachmentService.list(Collections.singletonList(id),type));
+ }
+ /**
+ * 上传回执单
+ */
+ @RequiresPermissions("finance:receipt:uploadReceipt")
+ @Log(title = "上传回执单", businessType = BusinessType.UPDATE)
+ @PostMapping("/uploadReceipt")
+ @ResponseBody
+ public AjaxResult uploadReceipt(OmsFinAttachment attachment, @RequestParam("file") MultipartFile file)
+ {
+ try
+ {
+ attachment.setRelatedBillType(OmsFinAttachment.RelatedBillTypeEnum.RECEIPT.getCode());
+ return omsReceiptBillService.uploadReceipt(attachment, file);
+ }
+ catch (Exception e)
+ {
+ logger.error("上传回执单失败", e);
+ return AjaxResult.error("操作失败:" + e.getMessage());
+ }
+ }
+ @RequiresPermissions("finance:receipt:apply")
+ @Log(title = "申请收款", businessType = BusinessType.UPDATE)
+ @PostMapping("/applyReceipt")
+ @ResponseBody
+ public AjaxResult applyReceipt(OmsReceiptBill omsReceiptBill, @RequestParam("file") MultipartFile file) {
+ try {
+ omsReceiptBillService.applyReceipt(omsReceiptBill, file);
+ } catch (IOException e) {
+ return AjaxResult.error("操作失败:" + e.getMessage());
+ }
+ return AjaxResult.success();
+ }
+ /**
+ * 申请退款
+ */
+ @PostMapping("/applyRefund")
+ @ResponseBody
+ public AjaxResult applyRefund(@RequestBody OmsReceiptBill omsReceiptBill) {
+ try {
+ return omsReceiptBillService.applyRefund(omsReceiptBill);
+ } catch (Exception e) {
+ logger.error("申请退款失败", e);
+ return AjaxResult.error("操作失败:" + e.getMessage());
+ }
+ }
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceiptBill.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceiptBill.java
index ee8e540c..3f6b35c8 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceiptBill.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceiptBill.java
@@ -160,6 +160,8 @@ public class OmsReceiptBill {
* 是否已申请退款 0:未退款 1:已申请退款
*/
private String refundStatus;
+ private Long originalBillId;
+ private OmsFinAttachment attachment;
private List
detailDTOList;
@Getter
public enum ReceiptBillTypeEnum {
@@ -182,6 +184,25 @@ public class OmsReceiptBill {
}
}
@Getter
+ public enum RefundStatusEnum {
+
+ /** 应付单生成 */
+ REFUNDED("REFUND_APPLIED", "已申请退款"),
+ WAIT_REFUNDED("WAIT_REFUNDED", "未退款")
+
+ ;
+
+
+
+ ;
+ private final String code;
+ private final String desc;
+ RefundStatusEnum(String code, String desc) {
+ this.code = code;
+ this.desc = desc;
+ }
+ }
+ @Getter
public enum ReceiptStatusEnum {
/** 应付单生成 */
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceivableReceiptDetailMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceivableReceiptDetailMapper.java
index 136cda09..15a10f61 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceivableReceiptDetailMapper.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceivableReceiptDetailMapper.java
@@ -65,4 +65,6 @@ public interface OmsReceivableReceiptDetailMapper
List selectByPaymentPlanIds(List allReceiptPlanIds);
List listReceivableByReceiptBillCode(List receiptBillCode);
+
+ void insertBatch(List addList);
}
\ No newline at end of file
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceiptBillService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceiptBillService.java
index d4a862ee..24966521 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceiptBillService.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceiptBillService.java
@@ -1,8 +1,11 @@
package com.ruoyi.sip.service;
import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.sip.domain.OmsFinAttachment;
import com.ruoyi.sip.domain.OmsReceiptBill;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
import java.util.List;
/**
@@ -46,6 +49,12 @@ public interface IOmsReceiptBillService {
List listRemainingAmountByPartnerCodeList(List collect);
AjaxResult returnPaymentBill(Long id);
+
+ void applyReceipt(OmsReceiptBill omsReceiptBill, MultipartFile file) throws IOException;
+
+ AjaxResult applyRefund(OmsReceiptBill omsReceiptBill);
+
+ AjaxResult uploadReceipt(OmsFinAttachment attachment, MultipartFile file) throws IOException;
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceivableReceiptDetailService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceivableReceiptDetailService.java
index b10adad0..be71aab9 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceivableReceiptDetailService.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceivableReceiptDetailService.java
@@ -71,4 +71,6 @@ public interface IOmsReceivableReceiptDetailService
List listReceivableByReceiptBillCode(String receiptBillCode);
List listByReceiptBillCode(String receiptBillCode);
+
+ void applyRefund(String originalReceiptBillCode, String targetReceiptBillCode);
}
\ No newline at end of file
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceiptBillServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceiptBillServiceImpl.java
index c69175a6..8d43c0a4 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceiptBillServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceiptBillServiceImpl.java
@@ -3,25 +3,32 @@ package com.ruoyi.sip.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.enums.ApproveStatusEnum;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
-import com.ruoyi.sip.domain.OmsPayablePaymentDetail;
-import com.ruoyi.sip.domain.OmsPaymentBill;
-import com.ruoyi.sip.domain.OmsReceiptBill;
-import com.ruoyi.sip.domain.OmsReceivableReceiptDetail;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.sip.domain.*;
import com.ruoyi.sip.domain.dto.ReceiptDetailDTO;
+import com.ruoyi.sip.dto.WriteOffRequestDto;
import com.ruoyi.sip.mapper.OmsReceiptBillMapper;
+import com.ruoyi.sip.service.IOmsFinAttachmentService;
import com.ruoyi.sip.service.IOmsReceiptBillService;
import com.ruoyi.sip.service.IOmsReceivableBillService;
import com.ruoyi.sip.service.IOmsReceivableReceiptDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
+import java.io.IOException;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Optional;
import java.util.stream.Collectors;
/**
@@ -39,6 +46,8 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService {
private IOmsReceivableReceiptDetailService omsReceivableReceiptDetailService;
@Autowired
private IOmsReceivableBillService receivableBillService;
+ @Autowired
+ private IOmsFinAttachmentService attachmentService;
/**
* 查询列表数据
@@ -55,8 +64,14 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService {
@Override
public OmsReceiptBill queryById(Long id) {
OmsReceiptBill receiptBill = omsReceiptBillMapper.queryById(id);
+ if (receiptBill == null){
+ return null;
+ }
List receiptDetailDTOS = omsReceivableReceiptDetailService.listReceivableByReceiptBillCode(receiptBill.getReceiptBillCode());
receiptBill.setDetailDTOList(receiptDetailDTOS);
+ List list = attachmentService.list(Collections.singletonList(receiptBill.getId()), OmsFinAttachment.RelatedBillTypeEnum.RECEIPT.getCode());
+ Optional first = list.stream().filter(item -> !"2".equals(item.getDelFlag())).max((o1, o2) -> o2.getCreateTime().compareTo(o1.getCreateTime()));
+ receiptBill.setAttachment(first.orElse(null));
return receiptBill;
}
@@ -144,6 +159,143 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService {
}
}
+ @Override
+ public void applyReceipt(OmsReceiptBill omsReceiptBill, MultipartFile file) throws IOException {
+ omsReceiptBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode());
+
+
+ omsReceiptBillMapper.update(omsReceiptBill);
+
+ // 上传文件路径
+ String filePath = RuoYiConfig.getUploadPath();
+ // 上传并返回新文件名称
+ String fileName = FileUploadUtils.upload(filePath, file);
+
+ SysUser loginUser = ShiroUtils.getSysUser();
+
+ OmsFinAttachment attachment = new OmsFinAttachment();
+ attachment.setRelatedBillType(OmsFinAttachment.RelatedBillTypeEnum.RECEIPT.getCode());
+ attachment.setRelatedBillId(omsReceiptBill.getId());
+ attachment.setFileName(file.getOriginalFilename());
+ attachment.setFilePath(fileName);
+ attachment.setFileSize(file.getSize());
+ attachment.setFileType(file.getContentType());
+ attachment.setCreateBy(loginUser.getUserId().toString());
+ attachmentService.insertOmsFinAttachment(attachment);
+ }
+
+ @Override
+ public AjaxResult applyRefund(OmsReceiptBill omsReceiptBill) {
+ // 1. 验证原始付款单
+ OmsReceiptBill receiptBill = queryById(omsReceiptBill.getId());
+
+ if (receiptBill == null) {
+ return AjaxResult.error("原始收款单不存在");
+ }
+
+ if (OmsReceiptBill.ReceiptBillTypeEnum.REFUND.getCode().equals(receiptBill.getReceiptBillType())) {
+ if (!ApproveStatusEnum.WAIT_APPROVE.getCode().equals(receiptBill.getApproveStatus()) ||
+ !ApproveStatusEnum.APPROVE_REJECT.getCode().equals(receiptBill.getApproveStatus())){
+ return AjaxResult.error("当前订单已提交审批,请刷新后重试");
+ }
+ receiptBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode());
+ //todo 开启流程
+ update(receiptBill);
+ return AjaxResult.success("退款申请成功!");
+ }
+
+
+ if (!OmsReceiptBill.ReceiptStatusEnum.PAYMENT.getCode().equals(receiptBill.getReceiptStatus())) {
+ return AjaxResult.error("只有已付款的订单才能申请退款");
+ }
+ if (OmsReceiptBill.RefundStatusEnum.REFUNDED.getCode().equals(receiptBill.getRefundStatus())) {
+ return AjaxResult.error("该付款单已申请过退款,请勿重复操作");
+ }
+
+ // 2. 创建新的退款单
+ OmsReceiptBill refundBill = new OmsReceiptBill();
+
+ // 复制属性并取反金额
+ refundBill.setTotalPriceWithTax(receiptBill.getTotalPriceWithTax().negate());
+ refundBill.setTotalPriceWithoutTax(receiptBill.getTotalPriceWithoutTax().negate());
+ refundBill.setTaxAmount(receiptBill.getTaxAmount().negate());
+
+ refundBill.setPartnerCode(receiptBill.getPartnerCode());
+ refundBill.setOrderCode(receiptBill.getOrderCode());
+ refundBill.setReceiptAccountName(omsReceiptBill.getReceiptAccountName());
+ refundBill.setReceiptBankNumber(omsReceiptBill.getReceiptBankNumber());
+ refundBill.setReceiptBankOpenAddress(omsReceiptBill.getReceiptBankOpenAddress());
+ refundBill.setBankNumber(omsReceiptBill.getBankNumber());
+ refundBill.setReceiptBillCode(generateReceiptBillCode());
+ // 设置新属性
+ refundBill.setReceiptBillType(OmsReceiptBill.ReceiptBillTypeEnum.REFUND.getCode());
+ refundBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.WAIT_PAYMENT.getCode());
+ refundBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode());
+ refundBill.setOriginalBillId(receiptBill.getId());
+ refundBill.setReceiptTime(null);
+ refundBill.setReceiptMethod(omsReceiptBill.getReceiptMethod());
+ refundBill.setRemark("退款-关联原付款单:" + omsReceiptBill.getReceiptBillCode());
+
+ insert(refundBill);
+
+ // 3. 更新原始付款单状态
+ receiptBill.setRefundStatus(OmsReceiptBill.RefundStatusEnum.REFUNDED.getCode());
+ update(receiptBill);
+ //4 创建付款明细
+ omsReceivableReceiptDetailService.applyRefund(receiptBill.getReceiptBillCode(), refundBill.getReceiptBillCode());
+ //5. 开始退款审批流程
+// todoService.startProcessDeleteBefore(originalBill.getPaymentBillCode(), originalBill.getPaymentBillCode(),
+// new HashMap() {{
+// put("applyUserName", ShiroUtils.getSysUser().getUserName());
+// put("applyUser", ShiroUtils.getUserId());
+// }}
+// , processConfig.getDefinition().getFinanceRefund());
+ return AjaxResult.success("退款申请已提交,新的退款单号为:" + refundBill.getReceiptBillCode());
+ }
+
+ @Override
+ public AjaxResult uploadReceipt(OmsFinAttachment attachment, MultipartFile file) throws IOException {
+ OmsReceiptBill receiptBill = queryById(attachment.getRelatedBillId());
+ if (receiptBill == null) {
+ return AjaxResult.error("收款单不存在");
+ }
+
+ if (file.isEmpty())
+ {
+ return AjaxResult.error("上传文件不能为空");
+ }
+ // 上传文件路径
+ String filePath = RuoYiConfig.getUploadPath();
+ // 上传并返回新文件名称
+ String fileName = FileUploadUtils.upload(filePath, file);
+
+ SysUser loginUser = ShiroUtils.getSysUser();
+
+
+ attachment.setFileName(file.getOriginalFilename());
+ attachment.setFilePath(fileName);
+ attachment.setFileSize(file.getSize());
+ attachment.setFileType(file.getContentType());
+ attachment.setCreateBy(loginUser.getUserId().toString());
+ attachmentService.insertOmsFinAttachment(attachment);
+ receiptBill.setActualReceiptTime(DateUtils.getNowDate());
+ receiptBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.PAYMENT.getCode());
+ update(receiptBill);
+ if (!receiptBill.getReceiptBillType().equals(OmsReceiptBill.ReceiptBillTypeEnum.PRE_RECEIPT.getCode())) {
+ //todo 自动核销
+ // List omsPayablePaymentDetails = omsReceivableReceiptDetailService.listByReceiptCode(receiptBill.getReceiptBillCode());
+
+
+// WriteOffRequestDto writeOffRequestDto = new WriteOffRequestDto();
+// writeOffRequestDto.setReceiptBillId(receiptBill.getId());
+// writeOffRequestDto.setDetailList(omsPayablePaymentDetails);
+// writeOffRequestDto.setVendorCode(paymentBill.getVendorCode());
+// writeOffRequestDto.setRemark(StrUtil.format("{}自动核销数据:{}", DateUtils.getTime(), paymentBill.getPaymentBillCode()));
+// // 新增核销记录
+// writeOffService.autoWriteOff(writeOffRequestDto);
+ }
+ return AjaxResult.success(attachment);
+ }
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableReceiptDetailServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableReceiptDetailServiceImpl.java
index 464a0847..89ff3b43 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableReceiptDetailServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableReceiptDetailServiceImpl.java
@@ -1,13 +1,16 @@
package com.ruoyi.sip.service.impl;
import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
+import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
+import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.sip.domain.OmsFinAttachment;
import com.ruoyi.sip.domain.OmsPayablePaymentDetail;
import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO;
@@ -156,4 +159,28 @@ public class OmsReceivableReceiptDetailServiceImpl implements IOmsReceivableRece
omsReceivableReceiptDetail.setReceiptBillCode(receiptBillCode);
return omsReceivableReceiptDetailMapper.list(omsReceivableReceiptDetail);
}
+
+ @Override
+ public void applyRefund(String originalReceiptBillCode, String targetReceiptBillCode) {
+ OmsReceivableReceiptDetail detail = new OmsReceivableReceiptDetail();
+ detail.setReceiptBillCode(originalReceiptBillCode);
+ List list = omsReceivableReceiptDetailMapper.list(detail);
+ if (CollUtil.isNotEmpty(list)){
+ List addList=new ArrayList<>();
+ for (OmsReceivableReceiptDetail existDetail : list) {
+ OmsReceivableReceiptDetail temp = new OmsReceivableReceiptDetail();
+ BeanUtil.copyProperties(existDetail,temp);
+ temp.setId(null);
+ temp.setReceivableDetailType(OmsReceivableReceiptDetail.ReceivableDetailTypeEnum.REFUND.getCode());
+ temp.setReceiptBillCode(targetReceiptBillCode);
+ temp.setCreateBy(ShiroUtils.getUserId().toString());
+ temp.setReceiptAmount(existDetail.getReceiptAmount().negate());
+ temp.setReceiptRate(existDetail.getReceiptRate().negate());
+ temp.setReceiptBillCode(targetReceiptBillCode);
+ temp.setRemark("退款");
+ addList.add( temp);
+ }
+ omsReceivableReceiptDetailMapper.insertBatch(addList);
+ }
+ }
}
\ No newline at end of file
diff --git a/ruoyi-sip/src/main/resources/mapper/OmsReceiptBill/OmsReceiptBillMapper.xml b/ruoyi-sip/src/main/resources/mapper/OmsReceiptBill/OmsReceiptBillMapper.xml
index 68871264..2ab0f182 100644
--- a/ruoyi-sip/src/main/resources/mapper/OmsReceiptBill/OmsReceiptBillMapper.xml
+++ b/ruoyi-sip/src/main/resources/mapper/OmsReceiptBill/OmsReceiptBillMapper.xml
@@ -32,6 +32,7 @@
+
diff --git a/ruoyi-sip/src/main/resources/mapper/sip/OmsReceivableReceiptDetailMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/OmsReceivableReceiptDetailMapper.xml
index 99ca470d..9b47763c 100644
--- a/ruoyi-sip/src/main/resources/mapper/sip/OmsReceivableReceiptDetailMapper.xml
+++ b/ruoyi-sip/src/main/resources/mapper/sip/OmsReceivableReceiptDetailMapper.xml
@@ -131,6 +131,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{paymentAmountTax},
+
+ insert into oms_receivable_receipt_detail
+ (receipt_plan_id,receivable_bill_id,receipt_time,receipt_amount,receipt_rate,receipt_bill_code,receivable_detail_type
+ ,remark,create_time,create_by,update_time,update_by,payment_amount_without_tax,payment_amount_tax)
+ values
+
+
+ (#{item.receiptPlanId},#{item.receivableBillId},#{item.receiptTime},#{item.receiptAmount},#{item.receiptRate},#{item.receiptBillCode},#{item.receivableDetailType}
+ ,#{item.remark},#{item.createTime},#{item.createBy},#{item.updateTime},#{item.updateBy},#{item.paymentAmountWithoutTax},#{item.paymentAmountTax})
+
+
+
+
update oms_receivable_receipt_detail