diff --git a/oms_web/oms_vue/src/api/finance/payment.js b/oms_web/oms_vue/src/api/finance/payment.js
index b7993f2a..9f045f18 100644
--- a/oms_web/oms_vue/src/api/finance/payment.js
+++ b/oms_web/oms_vue/src/api/finance/payment.js
@@ -69,3 +69,11 @@ export function applyPaymentApi(data) {
})
}
+// 申请退款
+export function applyRefund(id) {
+ return request({
+ url: '/finance/payment/applyRefund/'+id,
+ method: 'get'
+ })
+}
+
diff --git a/oms_web/oms_vue/src/views/finance/payable/index.vue b/oms_web/oms_vue/src/views/finance/payable/index.vue
index 2bfa24fe..6252c657 100644
--- a/oms_web/oms_vue/src/views/finance/payable/index.vue
+++ b/oms_web/oms_vue/src/views/finance/payable/index.vue
@@ -33,22 +33,22 @@
@keyup.enter.native="handleQuery"
/>
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
- {{scope.row.unpaidAmount===scope.row.totalPriceWithTax?'未生成':scope.row.unpaidAmount===0?'全部生成':'部分生成'}}
-
-
-
-
-
-
-
-
-
- 生成收票单
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
退回
+ 退款
@@ -250,7 +257,7 @@
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPaymentBillController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPaymentBillController.java
index dc673daa..d14d59be 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPaymentBillController.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPaymentBillController.java
@@ -197,20 +197,20 @@ public class OmsPaymentBillController extends BaseController
return AjaxResult.error("操作失败:" + e.getMessage());
}
}
-//
-// /**
-// * 申请退款
-// */
-// @PostMapping("/applyRefund")
-// @ResponseBody
-// public AjaxResult applyRefund(@RequestParam("id") Long id) {
-// try {
-// return omsPaymentBillService.applyRefund(id);
-// } catch (Exception e) {
-// logger.error("申请退款失败", e);
-// return AjaxResult.error("操作失败:" + e.getMessage());
-// }
-// }
+
+ /**
+ * 申请退款
+ */
+ @GetMapping("/applyRefund/{id}")
+ @ResponseBody
+ public AjaxResult applyRefund(@PathVariable("id") Long id) {
+ try {
+ return omsPaymentBillService.applyRefund(id);
+ } catch (Exception e) {
+ logger.error("申请退款失败", e);
+ return AjaxResult.error("操作失败:" + e.getMessage());
+ }
+ }
//
// /**
// * 上传退款图
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsPaymentBill.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsPaymentBill.java
index de060987..acd9e943 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsPaymentBill.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsPaymentBill.java
@@ -168,6 +168,21 @@ public class OmsPaymentBill extends BaseEntity
this.desc = desc;
}
}
+ @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;
+ }
+ }
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayablePaymentDetailMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayablePaymentDetailMapper.java
index 329ee3ab..38223eab 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayablePaymentDetailMapper.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayablePaymentDetailMapper.java
@@ -1,6 +1,8 @@
package com.ruoyi.sip.mapper;
import com.ruoyi.sip.domain.OmsPayablePaymentDetail;
+import org.apache.ibatis.annotations.Param;
+
import java.util.List;
public interface OmsPayablePaymentDetailMapper {
@@ -8,4 +10,5 @@ public interface OmsPayablePaymentDetailMapper {
List list(OmsPayablePaymentDetail omsPayablePaymentDetail);
+ void insertBatch(List addList);
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayablePaymentDetailService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayablePaymentDetailService.java
index 62fdeba8..fc6d909c 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayablePaymentDetailService.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayablePaymentDetailService.java
@@ -8,4 +8,7 @@ public interface IOmsPayablePaymentDetailService {
public int insertOmsPayablePaymentDetail(OmsPayablePaymentDetail omsPayablePaymentDetail);
public List listByPayableBillId(Long payableBillId);
public List listByPayableBillIdList(List payableBillId);
+
+ void applyRefund(String payableBillCode, String payableBillCode1);
+
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableBillServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableBillServiceImpl.java
index c56657cb..754b144d 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableBillServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableBillServiceImpl.java
@@ -78,7 +78,7 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
List omsPayablePaymentDetails = omsPayablePaymentDetailService.listByPayableBillIdList(idList);
Map> planMap = omsPayablePaymentDetails.stream().collect(Collectors.groupingBy(OmsPayablePaymentDetail::getPayableBillId,
Collectors.groupingBy(
- OmsPayablePaymentDetail::getPaymentStatus,
+ item->item.getPaymentStatus()==null?OmsPaymentBill.PaymentStatusEnum.WAIT_PAYMENT.getCode(): item.getPaymentStatus(),
Collectors.reducing(
BigDecimal.ZERO,
detail -> (detail.getPaymentAmount() != null) ? detail.getPaymentAmount() : BigDecimal.ZERO,
@@ -228,7 +228,7 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
omsPayableBill.setDetailList(omsPayablePaymentDetails);
Map decimalMap = omsPayablePaymentDetails.stream()
.collect(Collectors.groupingBy(
- OmsPayablePaymentDetail::getPaymentStatus,
+ item->item.getPaymentStatus()==null?OmsPaymentBill.PaymentStatusEnum.WAIT_PAYMENT.getCode(): item.getPaymentStatus(),
Collectors.reducing(
BigDecimal.ZERO,
detail -> (detail.getPaymentAmount() != null) ? detail.getPaymentAmount() : BigDecimal.ZERO,
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentDetailServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentDetailServiceImpl.java
index adf3b551..1e53b0c4 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentDetailServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentDetailServiceImpl.java
@@ -1,6 +1,8 @@
package com.ruoyi.sip.service.impl;
+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.mapper.OmsPayablePaymentDetailMapper;
@@ -9,6 +11,7 @@ import com.ruoyi.sip.service.IOmsPayablePaymentDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -54,4 +57,28 @@ public class OmsPayablePaymentDetailServiceImpl implements IOmsPayablePaymentDet
omsPayablePaymentDetail.setPayableBillIdList(payableBillId);
return omsPayablePaymentDetailMapper.list(omsPayablePaymentDetail);
}
+
+ @Override
+ public void applyRefund(String originalCode, String payableBillCode) {
+ OmsPayablePaymentDetail omsPayablePaymentDetail = new OmsPayablePaymentDetail();
+ omsPayablePaymentDetail.setPaymentBillCode(originalCode);
+ List list = omsPayablePaymentDetailMapper.list(omsPayablePaymentDetail);
+ if (CollUtil.isNotEmpty(list)){
+ List addList=new ArrayList<>();
+ for (OmsPayablePaymentDetail payablePaymentDetail : list) {
+ OmsPayablePaymentDetail temp = new OmsPayablePaymentDetail();
+ BeanUtil.copyProperties(payablePaymentDetail,temp);
+ temp.setId(null);
+ temp.setPayableDetailType(OmsPayablePaymentDetail.PayableDetailTypeEnum.REFUND.getCode());
+ temp.setPaymentBillCode(payableBillCode);
+ temp.setCreateBy(ShiroUtils.getUserId().toString());
+ temp.setPaymentAmount(payablePaymentDetail.getPaymentAmount().negate());
+ temp.setPaymentRate(payablePaymentDetail.getPaymentRate().negate());
+ temp.setPaymentBillCode(payableBillCode);
+ temp.setRemark("退款");
+ addList.add( temp);
+ }
+ omsPayablePaymentDetailMapper.insertBatch(addList);
+ }
+ }
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentPlanServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentPlanServiceImpl.java
index f90a0857..0f1f36da 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentPlanServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentPlanServiceImpl.java
@@ -1,10 +1,15 @@
package com.ruoyi.sip.service.impl;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import java.util.function.Function;
import java.util.stream.Collectors;
+import cn.hutool.core.collection.CollUtil;
import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.sip.domain.OmsPayablePaymentDetail;
+import com.ruoyi.sip.service.IOmsPayablePaymentDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -18,9 +23,23 @@ public class OmsPayablePaymentPlanServiceImpl implements IOmsPayablePaymentPlanS
@Autowired
private OmsPayablePaymentPlanMapper omsPayablePaymentPlanMapper;
+ @Autowired
+ private IOmsPayablePaymentDetailService omsPayablePaymentDetailService;
@Override
public List selectOmsPayablePaymentPlanListByPayableBillId(Long payableBillId) {
- return omsPayablePaymentPlanMapper.selectOmsPayablePaymentPlanListByPayableBillId(payableBillId);
+ List omsPayablePaymentPlans = omsPayablePaymentPlanMapper.selectOmsPayablePaymentPlanListByPayableBillId(payableBillId);
+ if (CollUtil.isNotEmpty(omsPayablePaymentPlans)) {
+ List omsPayablePaymentDetails = omsPayablePaymentDetailService.listByPayableBillIdList(omsPayablePaymentPlans.stream().map(OmsPayablePaymentPlan::getPayableBillId).collect(Collectors.toList()));
+ Map detailMap = omsPayablePaymentDetails.stream().collect(Collectors.toMap(OmsPayablePaymentDetail::getPaymentPlanId, Function.identity(),
+ (v1, v2) -> v1.getCreateTime().after(v2.getCreateTime()) ? v1 : v2));
+ for (OmsPayablePaymentPlan omsPayablePaymentPlan : omsPayablePaymentPlans) {
+ //找到最新的一条数据 如果不是退款 那么不允许再次勾选
+ OmsPayablePaymentDetail omsPayablePaymentDetail = detailMap.get(omsPayablePaymentPlan.getId());
+ if (omsPayablePaymentDetail != null && !OmsPayablePaymentDetail.PayableDetailTypeEnum.REFUND.getCode().equalsIgnoreCase(omsPayablePaymentDetail.getPayableDetailType()))
+ omsPayablePaymentPlan.setDetailId(omsPayablePaymentDetail.getId());
+ }
+ }
+ return omsPayablePaymentPlans;
}
@Override
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPaymentBillServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPaymentBillServiceImpl.java
index 69be2d9d..3c762ad9 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPaymentBillServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPaymentBillServiceImpl.java
@@ -17,6 +17,7 @@ import com.ruoyi.sip.domain.dto.PaymentBillDetailDTO;
import com.ruoyi.sip.flowable.domain.Todo;
import com.ruoyi.sip.flowable.service.TodoCommonTemplate;
import com.ruoyi.sip.service.IOmsFinAttachmentService;
+import com.ruoyi.sip.service.IOmsPayablePaymentDetailService;
import com.ruoyi.sip.service.IVendorInfoService;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
@@ -44,6 +45,8 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
private IVendorInfoService vendorInfoService;
@Autowired
private IOmsFinAttachmentService omsFinAttachmentService;
+ @Autowired
+ private IOmsPayablePaymentDetailService detailService;
/**
* 查询采购付款单
*
@@ -304,7 +307,6 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
}
@Override
- @Transactional
public AjaxResult applyRefund(Long originalPaymentId) {
// 1. 验证原始付款单
OmsPaymentBill originalBill = selectOmsPaymentBillById(originalPaymentId);
@@ -314,7 +316,7 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
if (!OmsPaymentBill.PaymentStatusEnum.PAYMENT.getCode().equals(originalBill.getPaymentStatus())) {
return AjaxResult.error("只有已付款的订单才能申请退款");
}
- if ("REFUND_APPLIED".equals(originalBill.getRefundStatus())) {
+ if (OmsPaymentBill.RefundStatusEnum.REFUNDED.getCode().equals(originalBill.getRefundStatus())) {
return AjaxResult.error("该付款单已申请过退款,请勿重复操作");
}
@@ -332,19 +334,28 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
refundBill.setPayBankNumber(originalBill.getPayBankNumber());
refundBill.setPayBankOpenAddress(originalBill.getPayBankOpenAddress());
refundBill.setBankNumber(originalBill.getBankNumber());
-
+ refundBill.setPaymentBillCode(generatePaymentBillCode());
// 设置新属性
refundBill.setPaymentBillType(OmsPaymentBill.PaymentBillTypeEnum.REFUND.getCode());
refundBill.setPaymentStatus(OmsPaymentBill.PaymentStatusEnum.WAIT_PAYMENT.getCode());
- refundBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode());
+ refundBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode());
refundBill.setOriginalBillId(originalPaymentId);
+ refundBill.setPaymentTime(null);
+ refundBill.setPaymentMethod(originalBill.getPaymentMethod());
refundBill.setRemark("退款-关联原付款单:" + originalBill.getPaymentBillCode());
insertOmsPaymentBill(refundBill);
// 3. 更新原始付款单状态
- originalBill.setRefundStatus("1");
+ originalBill.setRefundStatus(OmsPaymentBill.RefundStatusEnum.REFUNDED.getCode());
updateOmsPaymentBill(originalBill);
+ //4 创建付款明细
+ detailService.applyRefund(originalBill.getPayableBillCode(),refundBill.getPayableBillCode());
+ //5.todo 开始退款审批流程
+
+
+
+
return AjaxResult.success("退款申请已提交,新的退款单号为:" + refundBill.getPaymentBillCode());
}
diff --git a/ruoyi-sip/src/main/resources/mapper/finance/OmsPayablePaymentDetailMapper.xml b/ruoyi-sip/src/main/resources/mapper/finance/OmsPayablePaymentDetailMapper.xml
index 6a78b44c..95cc36da 100644
--- a/ruoyi-sip/src/main/resources/mapper/finance/OmsPayablePaymentDetailMapper.xml
+++ b/ruoyi-sip/src/main/resources/mapper/finance/OmsPayablePaymentDetailMapper.xml
@@ -23,27 +23,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
insert into oms_payable_payment_detail (
payment_plan_id,
payable_bill_id,
- payment_status,
payment_time,
payment_amount,
payment_rate,
payment_bill_code,
+ payable_detail_type,
remark,
create_by,
create_time
) values (
#{paymentPlanId},
#{payableBillId},
- #{paymentStatus},
#{paymentTime},
#{paymentAmount},
#{paymentRate},
#{paymentBillCode},
+ #{payableDetailType},
#{remark},
#{createBy},
sysdate()
)
+
+ insert into oms_payable_payment_detail (
+ payment_plan_id, payable_bill_id, payment_time, payment_amount, payment_rate,
+ payment_bill_code, payable_detail_type, remark, create_by, create_time )
+ values
+
+ (#{item.paymentPlanId},#{item.payableBillId},#{item.paymentTime},#{item.paymentAmount},
+ #{item.paymentRate},#{item.paymentBillCode},#{item.payableDetailType},#{item.remark},
+ #{item.createBy},
+ sysdate())
+
+