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" /> - - - - - - + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + - + - + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -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()) + +