|
|
|
@ -1,11 +1,13 @@ |
|
|
|
package com.example.demo.serviceImpl.cash; |
|
|
|
|
|
|
|
import com.example.demo.Util.GoldTistV2; |
|
|
|
import com.example.demo.config.RabbitMQConfig; |
|
|
|
import com.example.demo.domain.entity.User; |
|
|
|
import com.example.demo.domain.entity.UserGoldRecord; |
|
|
|
import com.example.demo.domain.vo.cash.CashRecordDTO; |
|
|
|
import com.example.demo.domain.vo.cash.CashRecordDone; |
|
|
|
import com.example.demo.domain.vo.cash.CashRecordRefund; |
|
|
|
import com.example.demo.domain.vo.cash.CashRefundMessage; |
|
|
|
import com.example.demo.domain.vo.coin.Result; |
|
|
|
import com.example.demo.mapper.cash.CashRefundMapper; |
|
|
|
import com.example.demo.mapper.coin.AuditMapper; |
|
|
|
@ -15,11 +17,13 @@ import com.example.demo.service.cash.RefundService; |
|
|
|
import com.github.pagehelper.PageHelper; |
|
|
|
import com.github.pagehelper.PageInfo; |
|
|
|
import jakarta.servlet.http.HttpServletRequest; |
|
|
|
import org.springframework.amqp.rabbit.core.RabbitTemplate; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.time.LocalDate; |
|
|
|
import java.time.LocalDateTime; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.List; |
|
|
|
import java.util.UUID; |
|
|
|
@ -29,7 +33,7 @@ import static org.apache.commons.lang3.StringUtils.substring; |
|
|
|
/** |
|
|
|
* @program: GOLD |
|
|
|
* @ClassName CashRefundServiceImpl |
|
|
|
* @description: |
|
|
|
* @description: 处理退款相关业务逻辑 |
|
|
|
* @author: huangqizhen |
|
|
|
* @create: 2025−09-28 15:02 |
|
|
|
* @Version 1.0 |
|
|
|
@ -46,6 +50,9 @@ public class CashRefundServiceImpl implements RefundService { |
|
|
|
private AuditMapper auditMapper; |
|
|
|
@Autowired |
|
|
|
private MarketMapper marketMapper; |
|
|
|
@Autowired |
|
|
|
private RabbitTemplate rabbitTemplate; |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageInfo<CashRecordDTO> select(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { |
|
|
|
PageHelper.startPage(pageNum, pageSize); |
|
|
|
@ -54,16 +61,17 @@ public class CashRefundServiceImpl implements RefundService { |
|
|
|
return new PageInfo<>(list); |
|
|
|
} |
|
|
|
|
|
|
|
// 添加退款订单 |
|
|
|
@Override |
|
|
|
public int add(CashRecordRefund cashRecordRefund) throws Exception { |
|
|
|
if(cashRecordRefund.getJwcode()==null){ |
|
|
|
throw new Exception("未输入精网号") ; |
|
|
|
public int add(CashRecordRefund cashRecordRefund) throws Exception { |
|
|
|
if (cashRecordRefund.getJwcode() == null) { |
|
|
|
throw new Exception("未输入精网号"); |
|
|
|
} |
|
|
|
if(cashRecordRefund.getRefundModel()== null){ |
|
|
|
throw new Exception("请填充退款类型") ; |
|
|
|
if (cashRecordRefund.getRefundModel() == null) { |
|
|
|
throw new Exception("请填充退款类型"); |
|
|
|
} |
|
|
|
if(cashRecordRefund.getRefundReason()== null){ |
|
|
|
throw new Exception("请填写退款理由") ; |
|
|
|
if (cashRecordRefund.getRefundReason() == null) { |
|
|
|
throw new Exception("请填写退款理由"); |
|
|
|
} |
|
|
|
CashRecordDone cashRecordDonetwo = new CashRecordDone(); |
|
|
|
cashRecordDonetwo.setAreaServise(cashRecordRefund.getAreaServise()); |
|
|
|
@ -80,99 +88,173 @@ public class CashRefundServiceImpl implements RefundService { |
|
|
|
CashRecordDone cashRecordDone1 = new CashRecordDone(); |
|
|
|
cashRecordDone1.setId(cashRecordRefund.getId()); |
|
|
|
cashRecordDone1.setStatus(6); |
|
|
|
if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null) |
|
|
|
return cashRefundMapper.updateStatus(cashRecordDone1); |
|
|
|
if (cashRecordDone1.getId() != null || cashRecordDone1.getOrderCode() != null) |
|
|
|
cashRefundMapper.updateStatus(cashRecordDone1); |
|
|
|
else return Result.error("提交失败").getCode(); |
|
|
|
|
|
|
|
// 发送退款创建消息 |
|
|
|
CashRefundMessage message = new CashRefundMessage(); |
|
|
|
message.setId(cashRecordRefund.getId()); |
|
|
|
message.setOrderCode(cashRecordRefund.getOrderCode()); |
|
|
|
message.setStatus(10); |
|
|
|
message.setStatusDescription("地区财务待审核"); |
|
|
|
message.setMessage("退款订单已创建"); |
|
|
|
message.setSubmitterId(cashRecordRefund.getSubmitterId()); |
|
|
|
message.setTimestamp(LocalDateTime.now()); |
|
|
|
|
|
|
|
rabbitTemplate.convertAndSend( |
|
|
|
RabbitMQConfig.CASH_REFUND_EXCHANGE, |
|
|
|
"refund.created", |
|
|
|
message |
|
|
|
); |
|
|
|
|
|
|
|
return Result.success("提交成功").getCode(); |
|
|
|
} |
|
|
|
|
|
|
|
// 更新退款订单信息 |
|
|
|
@Override |
|
|
|
public int update(CashRecordDone cashRecordDone) throws Exception { |
|
|
|
if (cashRecordDone.getJwcode()== null) { |
|
|
|
if (cashRecordDone.getJwcode() == null) { |
|
|
|
throw new RuntimeException("未输入精网号"); |
|
|
|
} |
|
|
|
if (cashRecordDone.getPaymentAmount()== null) { |
|
|
|
if (cashRecordDone.getPaymentAmount() == null) { |
|
|
|
throw new RuntimeException("未输入付款金额"); |
|
|
|
} |
|
|
|
if (cashRecordDone.getPaymentCurrency()== null){ |
|
|
|
throw new RuntimeException("未输入付款币种"); |
|
|
|
if (cashRecordDone.getPaymentCurrency() == null) { |
|
|
|
throw new RuntimeException("未输入付款币种"); |
|
|
|
} |
|
|
|
if (cashRecordDone.getRefundModel()== null) { |
|
|
|
if (cashRecordDone.getRefundModel() == null) { |
|
|
|
throw new RuntimeException("请填写退款类型"); |
|
|
|
} |
|
|
|
if (cashRecordDone.getRefundReason()== null) { |
|
|
|
if (cashRecordDone.getRefundReason() == null) { |
|
|
|
throw new RuntimeException("请填写退款理由"); |
|
|
|
} |
|
|
|
int result = cashRefundMapper.update(cashRecordDone); |
|
|
|
return (result > 0 ? Result.success("提交成功") : Result.error("提交失败")).getCode(); |
|
|
|
} |
|
|
|
|
|
|
|
// 撤回退款订单 |
|
|
|
@Override |
|
|
|
public int withdraw(CashRecordDone cashRecordDone) { |
|
|
|
return cashRefundMapper.withdraw(cashRecordDone.getId()); |
|
|
|
} |
|
|
|
|
|
|
|
// 审核退款订单 |
|
|
|
@Override |
|
|
|
public int review(CashRecordDone cashRecordDone) throws Exception { |
|
|
|
if(cashRecordDone.getStatus()== 12|| cashRecordDone.getStatus()== 22){ |
|
|
|
if(cashRecordDone.getOrderCode()== null){ |
|
|
|
public int review(CashRecordDone cashRecordDone) throws Exception { |
|
|
|
if (cashRecordDone.getStatus() == 12 || cashRecordDone.getStatus() == 22) { |
|
|
|
if (cashRecordDone.getOrderCode() == null) { |
|
|
|
throw new RuntimeException("未输入订单号"); |
|
|
|
} |
|
|
|
CashRecordDone cashRecordDone1 = new CashRecordDone(); |
|
|
|
CashRecordDone cashRecordDone1 = new CashRecordDone(); |
|
|
|
cashRecordDone1.setOrderCode(cashRecordDone.getOrderCode().substring(2)); |
|
|
|
cashRecordDone1.setStatus(4); |
|
|
|
if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null){ |
|
|
|
cashRefundMapper.updateStatus(cashRecordDone1); |
|
|
|
}} |
|
|
|
if (cashRecordDone1.getId() != null || cashRecordDone1.getOrderCode() != null) { |
|
|
|
cashRefundMapper.updateStatus(cashRecordDone1); |
|
|
|
} |
|
|
|
} |
|
|
|
cashRefundMapper.updateAudit(cashRecordDone); |
|
|
|
int result = cashRefundMapper.review(cashRecordDone); |
|
|
|
|
|
|
|
if (result > 0) { |
|
|
|
// 发送审核消息 |
|
|
|
CashRefundMessage message = new CashRefundMessage(); |
|
|
|
message.setId(cashRecordDone.getId()); |
|
|
|
message.setOrderCode(cashRecordDone.getOrderCode()); |
|
|
|
message.setStatus(cashRecordDone.getStatus()); |
|
|
|
message.setStatusDescription(getStatusDescription(cashRecordDone.getStatus())); |
|
|
|
message.setMessage("退款订单已审核"); |
|
|
|
message.setSubmitterId(cashRecordDone.getSubmitterId()); |
|
|
|
message.setAuditId(cashRecordDone.getAuditId()); |
|
|
|
// 可以通过 auditId 查询审核人姓名 |
|
|
|
message.setTimestamp(LocalDateTime.now()); |
|
|
|
|
|
|
|
if (cashRecordDone.getStatus() == 12 || cashRecordDone.getStatus() == 22) { |
|
|
|
rabbitTemplate.convertAndSend( |
|
|
|
RabbitMQConfig.CASH_REFUND_EXCHANGE, |
|
|
|
"refund.rejected", |
|
|
|
message |
|
|
|
); |
|
|
|
} else { |
|
|
|
rabbitTemplate.convertAndSend( |
|
|
|
RabbitMQConfig.CASH_REFUND_EXCHANGE, |
|
|
|
"refund.reviewed", |
|
|
|
message |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return (result > 0 ? Result.success("提交成功") : Result.error("提交失败")).getCode(); |
|
|
|
} |
|
|
|
|
|
|
|
// 执行退款操作 |
|
|
|
@Override |
|
|
|
public int executor(CashRecordDone cashRecordDone) throws Exception { |
|
|
|
if(cashRecordDone.getRefundVoucher()== null){ |
|
|
|
if (cashRecordDone.getRefundVoucher() == null) { |
|
|
|
throw new RuntimeException("未输入退款凭证"); |
|
|
|
} |
|
|
|
if(cashRecordDone.getRefundTime()== null){ |
|
|
|
if (cashRecordDone.getRefundTime() == null) { |
|
|
|
throw new RuntimeException("未输入退款时间"); |
|
|
|
} |
|
|
|
if(cashRecordDone.getRefundRemark()== null){ |
|
|
|
if (cashRecordDone.getRefundRemark() == null) { |
|
|
|
throw new RuntimeException("未输入退款备注"); |
|
|
|
} |
|
|
|
if(cashRecordDone.getRefundChannels()== null){ |
|
|
|
if (cashRecordDone.getRefundChannels() == null) { |
|
|
|
throw new RuntimeException("未输入退款途径"); |
|
|
|
} |
|
|
|
if(cashRecordDone.getRefundCurrency()== null){ |
|
|
|
if (cashRecordDone.getRefundCurrency() == null) { |
|
|
|
throw new RuntimeException("未输入退款币种"); |
|
|
|
} |
|
|
|
if(cashRecordDone.getRefundAmount()== null){ |
|
|
|
if (cashRecordDone.getRefundAmount() == null) { |
|
|
|
throw new RuntimeException("未输入退款金额"); |
|
|
|
} |
|
|
|
int result = cashRefundMapper.executor(cashRecordDone); |
|
|
|
if (result > 0) { |
|
|
|
// 发送执行消息 |
|
|
|
CashRefundMessage message = new CashRefundMessage(); |
|
|
|
message.setId(cashRecordDone.getId()); |
|
|
|
message.setOrderCode(cashRecordDone.getOrderCode()); |
|
|
|
message.setStatus(cashRecordDone.getStatus()); |
|
|
|
message.setStatusDescription(getStatusDescription(cashRecordDone.getStatus())); |
|
|
|
message.setMessage("退款订单已执行"); |
|
|
|
message.setSubmitterId(cashRecordDone.getSubmitterId()); |
|
|
|
message.setExecutorId(cashRecordDone.getExecutor()); |
|
|
|
// 可以通过 executorId 查询执行人姓名 |
|
|
|
message.setTimestamp(LocalDateTime.now()); |
|
|
|
|
|
|
|
rabbitTemplate.convertAndSend( |
|
|
|
RabbitMQConfig.CASH_REFUND_EXCHANGE, |
|
|
|
"refund.executed", |
|
|
|
message |
|
|
|
); |
|
|
|
} |
|
|
|
return (result > 0 ? Result.success("提交成功") : Result.error("提交失败")).getCode(); |
|
|
|
} |
|
|
|
|
|
|
|
// 更新退款订单状态 |
|
|
|
@Override |
|
|
|
public int updateStatus(CashRecordDone cashRecordDone) { |
|
|
|
return cashRefundMapper.updateStatus(cashRecordDone); |
|
|
|
} |
|
|
|
|
|
|
|
// 最终审核退款订单 |
|
|
|
@Override |
|
|
|
public int finalreview(CashRecordDone cashRecordDone) { |
|
|
|
if(cashRecordDone.getPermanentGold()== null){ |
|
|
|
if (cashRecordDone.getPermanentGold() == null) { |
|
|
|
cashRecordDone.setPermanentGold(0); |
|
|
|
} |
|
|
|
if(cashRecordDone.getFreeGold()== null){ |
|
|
|
if (cashRecordDone.getFreeGold() == null) { |
|
|
|
cashRecordDone.setFreeGold(0); |
|
|
|
} |
|
|
|
if(cashRecordDone.getStatus()== 32){ |
|
|
|
if (cashRecordDone.getStatus() == 32) { |
|
|
|
CashRecordDone cashRecordDone1 = new CashRecordDone(); |
|
|
|
cashRecordDone1.setOrderCode(cashRecordDone.getOrderCode().substring(2)); |
|
|
|
cashRecordDone1.setStatus(4); |
|
|
|
if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null){ |
|
|
|
cashRefundMapper.updateStatus(cashRecordDone1); |
|
|
|
}} |
|
|
|
if (cashRecordDone.getGoodsName() != null &&cashRecordDone.getStatus() ==40 && |
|
|
|
if (cashRecordDone1.getId() != null || cashRecordDone1.getOrderCode() != null) { |
|
|
|
cashRefundMapper.updateStatus(cashRecordDone1); |
|
|
|
} |
|
|
|
} |
|
|
|
if (cashRecordDone.getGoodsName() != null && cashRecordDone.getStatus() == 40 && |
|
|
|
(cashRecordDone.getGoodsName().equals("金币充值") || |
|
|
|
cashRecordDone.getGoodsName().contains("金币充值"))) { |
|
|
|
UserGoldRecord userGoldRecord = new UserGoldRecord(); |
|
|
|
@ -182,7 +264,7 @@ CashRecordDone cashRecordDone1 = new CashRecordDone(); |
|
|
|
userGoldRecord.setRefundType("金币退款"); |
|
|
|
userGoldRecord.setCrefundModel(cashRecordDone.getRefundModel()); |
|
|
|
userGoldRecord.setJwcode(cashRecordDone.getJwcode()); |
|
|
|
userGoldRecord.setSumGold(cashRecordDone.getPermanentGold()+cashRecordDone.getFreeGold()); |
|
|
|
userGoldRecord.setSumGold(cashRecordDone.getPermanentGold() + cashRecordDone.getFreeGold()); |
|
|
|
userGoldRecord.setPermanentGold(cashRecordDone.getPermanentGold()); |
|
|
|
int currentMonth = LocalDate.now().getMonthValue(); |
|
|
|
if (currentMonth >= 1 && currentMonth <= 6) { |
|
|
|
@ -203,22 +285,68 @@ CashRecordDone cashRecordDone1 = new CashRecordDone(); |
|
|
|
userGoldRecord.setCreateTime(new Date()); |
|
|
|
userGoldRecord.setUpdateTime(new Date()); |
|
|
|
String auditName = auditMapper.getName(cashRecordDone.getAuditId()); |
|
|
|
refundMapper.add(userGoldRecord); |
|
|
|
User user = new User(); |
|
|
|
user.setJwcode(userGoldRecord.getJwcode()); |
|
|
|
refundMapper.add(userGoldRecord); |
|
|
|
User user = new User(); |
|
|
|
user.setJwcode(userGoldRecord.getJwcode()); |
|
|
|
user.setCurrentPermanentGold(BigDecimal.valueOf(-userGoldRecord.getPermanentGold())); //当前永久金币 |
|
|
|
user.setCurrentFreeJune(BigDecimal.valueOf(-userGoldRecord.getFreeJune())); //当前六月免费金币 |
|
|
|
user.setCurrentFreeDecember(BigDecimal.valueOf(-userGoldRecord.getFreeDecember())); //当前十二月免费金币 |
|
|
|
auditMapper.updateUserGold(user); |
|
|
|
GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 58, //退款免费+永久金币-充值 |
|
|
|
(double) (userGoldRecord.getFreeDecember()+userGoldRecord.getFreeJune()+userGoldRecord.getPermanentGold() ) /100, |
|
|
|
userGoldRecord.getRemark(),(double) userGoldRecord.getPermanentGold() / 100, auditName, "退款金币充值");} |
|
|
|
GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 58, //退款免费+永久金币-充值 |
|
|
|
(double) (userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getPermanentGold()) / 100, |
|
|
|
userGoldRecord.getRemark(), (double) userGoldRecord.getPermanentGold() / 100, auditName, "退款金币充值"); |
|
|
|
} |
|
|
|
|
|
|
|
cashRefundMapper.updateAudit(cashRecordDone); |
|
|
|
int result = cashRefundMapper.review(cashRecordDone); |
|
|
|
if (result > 0) { |
|
|
|
// 发送最终审核消息 |
|
|
|
CashRefundMessage message = new CashRefundMessage(); |
|
|
|
message.setId(cashRecordDone.getId()); |
|
|
|
message.setOrderCode(cashRecordDone.getOrderCode()); |
|
|
|
message.setStatus(cashRecordDone.getStatus()); |
|
|
|
message.setStatusDescription(getStatusDescription(cashRecordDone.getStatus())); |
|
|
|
message.setMessage("退款订单已完成"); |
|
|
|
message.setSubmitterId(cashRecordDone.getSubmitterId()); |
|
|
|
message.setAuditId(cashRecordDone.getAuditId()); |
|
|
|
message.setTimestamp(LocalDateTime.now()); |
|
|
|
|
|
|
|
rabbitTemplate.convertAndSend( |
|
|
|
RabbitMQConfig.CASH_REFUND_EXCHANGE, |
|
|
|
"refund.completed", |
|
|
|
message |
|
|
|
); |
|
|
|
} |
|
|
|
return (result > 0 ? Result.success("提交成功") : Result.error("提交失败")).getCode(); |
|
|
|
} |
|
|
|
|
|
|
|
// 辅助方法:根据状态码获取状态描述 |
|
|
|
private String getStatusDescription(Integer status) { |
|
|
|
switch (status) { |
|
|
|
case 10: |
|
|
|
return "地区财务待审核"; |
|
|
|
case 11: |
|
|
|
return "地区财务手动撤回待编辑提交"; |
|
|
|
case 12: |
|
|
|
return "地区财务驳回"; |
|
|
|
case 20: |
|
|
|
return "地区负责人待审核"; |
|
|
|
case 22: |
|
|
|
return "地区负责人驳回"; |
|
|
|
case 30: |
|
|
|
return "总部财务待审核"; |
|
|
|
case 32: |
|
|
|
return "总部财务驳回"; |
|
|
|
case 40: |
|
|
|
return "执行人待处理"; |
|
|
|
case 41: |
|
|
|
return "执行人已处理,退款结束"; |
|
|
|
default: |
|
|
|
return "未知状态"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 财务查询退款订单列表 |
|
|
|
@Override |
|
|
|
public PageInfo<CashRecordDTO> financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { |
|
|
|
PageHelper.startPage(pageNum, pageSize); |
|
|
|
@ -226,4 +354,17 @@ CashRecordDone cashRecordDone1 = new CashRecordDone(); |
|
|
|
List<CashRecordDTO> list = cashRefundMapper.financeSelect(cashRecordDTO); |
|
|
|
return new PageInfo<>(list); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageInfo<CashRecordDTO> exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { |
|
|
|
PageHelper.startPage(pageNum, pageSize); |
|
|
|
List<CashRecordDTO> list = cashRefundMapper.exSelect(cashRecordDTO); |
|
|
|
return new PageInfo<>(list); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public void addOnline(CashRecordRefund cashRecordRefund) { |
|
|
|
|
|
|
|
} |
|
|
|
} |