Browse Source

消息推送(11.13)

sunjiabei/feature-20251021102635-银行接口
wangguorui 2 weeks ago
parent
commit
f88b434838
  1. 76
      src/main/java/com/example/demo/RabbitMQ/CashCollectionConsumer.java
  2. 76
      src/main/java/com/example/demo/RabbitMQ/CashRefundConsumer.java
  3. 5
      src/main/java/com/example/demo/RabbitMQ/LogAspect.java
  4. 240
      src/main/java/com/example/demo/config/RabbitMQConfig.java
  5. 2
      src/main/java/com/example/demo/controller/cash/CashCollectionController.java
  6. 66
      src/main/java/com/example/demo/domain/vo/cash/CashCollectionMessage.java
  7. 76
      src/main/java/com/example/demo/domain/vo/cash/CashRefundMessage.java
  8. 145
      src/main/java/com/example/demo/serviceImpl/cash/CashAuditServiceImpl.java
  9. 186
      src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
  10. 214
      src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java
  11. 2
      src/main/resources/cashMapper/CashRefundMapper.xml

76
src/main/java/com/example/demo/RabbitMQ/CashCollectionConsumer.java

@ -0,0 +1,76 @@
package com.example.demo.RabbitMQ;
import com.example.demo.config.RabbitMQConfig;
import com.example.demo.domain.vo.cash.CashCollectionMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* 收款流程消息消费者
* 监听收款流程中各个状态变更的消息队列
*/
@Component
@Slf4j
public class CashCollectionConsumer {
/**
* 处理收款订单创建消息
* 当有新的收款订单创建时该方法会被调用
*
* @param message 收款订单消息对象
*/
@RabbitListener(queues = RabbitMQConfig.COLLECTION_CREATED_QUEUE)
public void handleCollectionCreated(CashCollectionMessage message) {
log.info("收款订单创建通知: 订单号={}, 状态={}, 提交人={}, 消息={}",
message.getOrderCode(), message.getStatus(), message.getSubmitterId(), message.getMessage());
}
/**
* 处理收款订单审核通过消息
* 当收款订单审核通过时该方法会被调用
*
* @param message 收款订单消息对象
*/
@RabbitListener(queues = RabbitMQConfig.COLLECTION_AUDITED_QUEUE)
public void handleCollectionAudited(CashCollectionMessage message) {
log.info("收款订单审核通过通知: 订单号={}, 状态={}, 审核人={}, 消息={}",
message.getOrderCode(), message.getStatus(), message.getAuditId(), message.getMessage());
}
/**
* 处理收款订单审核驳回消息
* 当收款订单被审核驳回时该方法会被调用
*
* @param message 收款订单消息对象
*/
@RabbitListener(queues = RabbitMQConfig.COLLECTION_REJECTED_QUEUE)
public void handleCollectionRejected(CashCollectionMessage message) {
log.info("收款订单审核驳回通知: 订单号={}, 状态={}, 审核人={}, 消息={}",
message.getOrderCode(), message.getStatus(), message.getAuditId(), message.getMessage());
}
/**
* 处理收款订单完成消息
* 当收款订单流程全部完成时该方法会被调用
*
* @param message 收款订单消息对象
*/
@RabbitListener(queues = RabbitMQConfig.COLLECTION_COMPLETED_QUEUE)
public void handleCollectionCompleted(CashCollectionMessage message) {
log.info("收款订单完成通知: 订单号={}, 状态={}, 消息={}",
message.getOrderCode(), message.getStatus(), message.getMessage());
}
/**
* 处理收款订单撤回消息
* 当收款订单被撤回时该方法会被调用
*
* @param message 收款订单消息对象
*/
@RabbitListener(queues = RabbitMQConfig.COLLECTION_CANCELLED_QUEUE)
public void handleCollectionCancelled(CashCollectionMessage message) {
log.info("收款订单撤回通知: 订单号={}, 状态={}, 提交人={}, 消息={}",
message.getOrderCode(), message.getStatus(), message.getSubmitterId(), message.getMessage());
}
}

76
src/main/java/com/example/demo/RabbitMQ/CashRefundConsumer.java

@ -0,0 +1,76 @@
package com.example.demo.RabbitMQ;
import com.example.demo.config.RabbitMQConfig;
import com.example.demo.domain.vo.cash.CashRefundMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* 退款流程消息消费者
* 监听退款流程中各个状态变更的消息队列
*/
@Component
@Slf4j
public class CashRefundConsumer {
/**
* 处理退款订单创建消息
* 当有新的退款订单创建时该方法会被调用
*
* @param message 退款订单消息对象
*/
@RabbitListener(queues = RabbitMQConfig.REFUND_CREATED_QUEUE)
public void handleRefundCreated(CashRefundMessage message) {
log.info("退款订单创建通知: 订单号={}, 状态={}, 提交人={}, 消息={}",
message.getOrderCode(), message.getStatus(), message.getSubmitterId(), message.getMessage());
}
/**
* 处理退款订单审核通过消息
* 当退款订单审核通过时该方法会被调用
*
* @param message 退款订单消息对象
*/
@RabbitListener(queues = RabbitMQConfig.REFUND_REVIEWED_QUEUE)
public void handleRefundReviewed(CashRefundMessage message) {
log.info("退款订单审核通过通知: 订单号={}, 状态={}, 审核人={}, 消息={}",
message.getOrderCode(), message.getStatus(), message.getAuditId(), message.getMessage());
}
/**
* 处理退款订单审核驳回消息
* 当退款订单被审核驳回时该方法会被调用
*
* @param message 退款订单消息对象
*/
@RabbitListener(queues = RabbitMQConfig.REFUND_REJECTED_QUEUE)
public void handleRefundRejected(CashRefundMessage message) {
log.info("退款订单审核驳回通知: 订单号={}, 状态={}, 审核人={}, 消息={}",
message.getOrderCode(), message.getStatus(), message.getAuditId(), message.getMessage());
}
/**
* 处理退款订单执行消息
* 当退款订单被执行时该方法会被调用
*
* @param message 退款订单消息对象
*/
@RabbitListener(queues = RabbitMQConfig.REFUND_EXECUTED_QUEUE)
public void handleRefundExecuted(CashRefundMessage message) {
log.info("退款订单执行通知: 订单号={}, 状态={}, 执行人={}, 消息={}",
message.getOrderCode(), message.getStatus(), message.getExecutorId(), message.getMessage());
}
/**
* 处理退款订单完成消息
* 当退款订单流程全部完成时该方法会被调用
*
* @param message 退款订单消息对象
*/
@RabbitListener(queues = RabbitMQConfig.REFUND_COMPLETED_QUEUE)
public void handleRefundCompleted(CashRefundMessage message) {
log.info("退款订单完成通知: 订单号={}, 状态={}, 消息={}",
message.getOrderCode(), message.getStatus(), message.getMessage());
}
}

5
src/main/java/com/example/demo/RabbitMQ/LogAspect.java

@ -44,6 +44,11 @@ public class LogAspect {
String username = SecurityUtils.getCurrentUsername();
Integer userId = SecurityUtils.getCurrentUserId();
// 添加空值检查
if (userId == null) {
log.warn("无法获取当前用户ID,使用默认值 -1");
userId = -1; // 或者使用其他默认值
}
String ip = getClientIp();
ObjectMapper mapper = new ObjectMapper();

240
src/main/java/com/example/demo/config/RabbitMQConfig.java

@ -1,6 +1,5 @@
package com.example.demo.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
@ -12,12 +11,32 @@ import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* RabbitMQ配置类
* 配置消息队列交换机以及它们之间的绑定关系
*/
@Configuration
public class RabbitMQConfig {
public static final String LOG_QUEUE = "operation_log_queue";
public static final String LOG_EXCHANGE = "operation_log_exchange";
// 收款流程相关队列和交换机常量定义
public static final String CASH_COLLECTION_EXCHANGE = "cash_collection_exchange";
public static final String COLLECTION_CREATED_QUEUE = "collection_created_queue";
public static final String COLLECTION_AUDITED_QUEUE = "collection_audited_queue";
public static final String COLLECTION_COMPLETED_QUEUE = "collection_completed_queue";
public static final String COLLECTION_CANCELLED_QUEUE = "collection_cancelled_queue";
public static final String COLLECTION_REJECTED_QUEUE = "collection_rejected_queue";
// 退款流程相关队列和交换机常量定义
public static final String CASH_REFUND_EXCHANGE = "cash_refund_exchange";
public static final String REFUND_CREATED_QUEUE = "refund_created_queue";
public static final String REFUND_REVIEWED_QUEUE = "refund_reviewed_queue";
public static final String REFUND_EXECUTED_QUEUE = "refund_executed_queue";
public static final String REFUND_COMPLETED_QUEUE = "refund_completed_queue";
public static final String REFUND_REJECTED_QUEUE = "refund_rejected_queue";
@Bean
public Queue logQueue() {
return new Queue(LOG_QUEUE, true);
@ -34,6 +53,225 @@ public class RabbitMQConfig {
.to(logExchange())
.with("log.*");
}
/**
* 创建收款流程交换机
* @return TopicExchange对象
*/
@Bean
public TopicExchange cashCollectionExchange() {
return new TopicExchange(CASH_COLLECTION_EXCHANGE);
}
/**
* 创建收款创建队列
* @return Queue对象
*/
@Bean
public Queue collectionCreatedQueue() {
return new Queue(COLLECTION_CREATED_QUEUE, true);
}
/**
* 创建收款审核队列
* @return Queue对象
*/
@Bean
public Queue collectionAuditedQueue() {
return new Queue(COLLECTION_AUDITED_QUEUE, true);
}
/**
* 创建收款完成队列
* @return Queue对象
*/
@Bean
public Queue collectionCompletedQueue() {
return new Queue(COLLECTION_COMPLETED_QUEUE, true);
}
/**
* 创建收款取消队列
* @return Queue对象
*/
@Bean
public Queue collectionCancelledQueue() {
return new Queue(COLLECTION_CANCELLED_QUEUE, true);
}
/**
* 创建收款拒绝队列
* @return Queue对象
*/
@Bean
public Queue collectionRejectedQueue() {
return new Queue(COLLECTION_REJECTED_QUEUE, true);
}
/**
* 创建退款流程交换机
* @return TopicExchange对象
*/
@Bean
public TopicExchange cashRefundExchange() {
return new TopicExchange(CASH_REFUND_EXCHANGE);
}
/**
* 创建退款创建队列
* @return Queue对象
*/
@Bean
public Queue refundCreatedQueue() {
return new Queue(REFUND_CREATED_QUEUE, true);
}
/**
* 创建退款审核队列
* @return Queue对象
*/
@Bean
public Queue refundReviewedQueue() {
return new Queue(REFUND_REVIEWED_QUEUE, true);
}
/**
* 创建退款执行队列
* @return Queue对象
*/
@Bean
public Queue refundExecutedQueue() {
return new Queue(REFUND_EXECUTED_QUEUE, true);
}
/**
* 创建退款完成队列
* @return Queue对象
*/
@Bean
public Queue refundCompletedQueue() {
return new Queue(REFUND_COMPLETED_QUEUE, true);
}
/**
* 创建退款拒绝队列
* @return Queue对象
*/
@Bean
public Queue refundRejectedQueue() {
return new Queue(REFUND_REJECTED_QUEUE, true);
}
/**
* 绑定收款创建队列到收款交换机
* @return Binding对象
*/
@Bean
public Binding collectionCreatedBinding() {
return BindingBuilder.bind(collectionCreatedQueue())
.to(cashCollectionExchange())
.with("collection.created");
}
/**
* 绑定收款审核队列到收款交换机
* @return Binding对象
*/
@Bean
public Binding collectionAuditedBinding() {
return BindingBuilder.bind(collectionAuditedQueue())
.to(cashCollectionExchange())
.with("collection.audited");
}
/**
* 绑定收款完成队列到收款交换机
* @return Binding对象
*/
@Bean
public Binding collectionCompletedBinding() {
return BindingBuilder.bind(collectionCompletedQueue())
.to(cashCollectionExchange())
.with("collection.completed");
}
/**
* 绑定收款取消队列到收款交换机
* @return Binding对象
*/
@Bean
public Binding collectionCancelledBinding() {
return BindingBuilder.bind(collectionCancelledQueue())
.to(cashCollectionExchange())
.with("collection.cancelled");
}
/**
* 绑定收款拒绝队列到收款交换机
* @return Binding对象
*/
@Bean
public Binding collectionRejectedBinding() {
return BindingBuilder.bind(collectionRejectedQueue())
.to(cashCollectionExchange())
.with("collection.rejected");
}
/**
* 绑定退款创建队列到退款交换机
* @return Binding对象
*/
@Bean
public Binding refundCreatedBinding() {
return BindingBuilder.bind(refundCreatedQueue())
.to(cashRefundExchange())
.with("refund.created");
}
/**
* 绑定退款审核队列到退款交换机
* @return Binding对象
*/
@Bean
public Binding refundReviewedBinding() {
return BindingBuilder.bind(refundReviewedQueue())
.to(cashRefundExchange())
.with("refund.reviewed");
}
/**
* 绑定退款执行队列到退款交换机
* @return Binding对象
*/
@Bean
public Binding refundExecutedBinding() {
return BindingBuilder.bind(refundExecutedQueue())
.to(cashRefundExchange())
.with("refund.executed");
}
/**
* 绑定退款完成队列到退款交换机
* @return Binding对象
*/
@Bean
public Binding refundCompletedBinding() {
return BindingBuilder.bind(refundCompletedQueue())
.to(cashRefundExchange())
.with("refund.completed");
}
/**
* 绑定退款拒绝队列到退款交换机
* @return Binding对象
*/
@Bean
public Binding refundRejectedBinding() {
return BindingBuilder.bind(refundRejectedQueue())
.to(cashRefundExchange())
.with("refund.rejected");
}
@Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();

2
src/main/java/com/example/demo/controller/cash/CashCollectionController.java

@ -87,7 +87,7 @@ public class CashCollectionController {
}
//多条件查询收款订单列表
@PostMapping("/selectCollection")
public Result selcetAll(@RequestBody Page page){
public Result selectAll(@RequestBody Page page){
try {
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");

66
src/main/java/com/example/demo/domain/vo/cash/CashCollectionMessage.java

@ -0,0 +1,66 @@
package com.example.demo.domain.vo.cash;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* 收款消息实体类
* 用于在收款流程中传递状态变更信息
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CashCollectionMessage {
/**
* 订单ID
*/
private Integer id;
/**
* 订单编号
*/
private String orderCode;
/**
* 订单状态
*/
private Integer status;
/**
* 状态描述
*/
private String statusDescription;
/**
* 消息内容
*/
private String message;
/**
* 提交人ID
*/
private Integer submitterId;
/**
* 提交人姓名
*/
private String submitterName;
/**
* 审核人ID
*/
private Integer auditId;
/**
* 审核人姓名
*/
private String auditName;
/**
* 时间戳
*/
private LocalDateTime timestamp = LocalDateTime.now();
}

76
src/main/java/com/example/demo/domain/vo/cash/CashRefundMessage.java

@ -0,0 +1,76 @@
package com.example.demo.domain.vo.cash;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* 退款消息实体类
* 用于在退款流程中传递状态变更信息
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CashRefundMessage {
/**
* 订单ID
*/
private Integer id;
/**
* 订单编号
*/
private String orderCode;
/**
* 订单状态
*/
private Integer status;
/**
* 状态描述
*/
private String statusDescription;
/**
* 消息内容
*/
private String message;
/**
* 提交人ID
*/
private Integer submitterId;
/**
* 提交人姓名
*/
private String submitterName;
/**
* 审核人ID
*/
private Integer auditId;
/**
* 审核人姓名
*/
private String auditName;
/**
* 执行人ID
*/
private Integer executorId;
/**
* 执行人姓名
*/
private String executorName;
/**
* 时间戳
*/
private LocalDateTime timestamp = LocalDateTime.now();
}

145
src/main/java/com/example/demo/serviceImpl/cash/CashAuditServiceImpl.java

@ -1,20 +1,24 @@
package com.example.demo.serviceImpl.cash;
import com.example.demo.Util.GoldTistV2;
import com.example.demo.config.RabbitMQConfig;
import com.example.demo.domain.entity.CashRecord;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.entity.UserGoldRecord;
import com.example.demo.domain.vo.cash.CashCollectionMessage;
import com.example.demo.mapper.cash.CashAuditMapper;
import com.example.demo.mapper.cash.CashCollectionMapper;
import com.example.demo.mapper.coin.AuditMapper;
import com.example.demo.mapper.coin.RechargeMapper;
import com.example.demo.service.cash.CashAuditService;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
@ -23,7 +27,7 @@ import static net.sf.jsqlparser.parser.feature.Feature.update;
/**
* @program: gold-java
* @ClassName CashAuditServiceImpl
* @description:
* @description: 处理收款订单的审核业务逻辑
* @author: Ethan
* @create: 202510-08 10:09
* @Version 1.0
@ -38,12 +42,15 @@ public class CashAuditServiceImpl implements CashAuditService {
private CashCollectionMapper cashCollectionMapper;
@Autowired
private CashAuditMapper cashAuditMapper;
@Autowired
private RabbitTemplate rabbitTemplate;
@Transactional
@Override
public boolean auditCollection(String token,Integer auditId, String orderCode, Integer action, String rejectReason) {
public boolean auditCollection(String token, Integer auditId, String orderCode, Integer action, String rejectReason) {
CashRecord order = cashCollectionMapper.selectAuditByOrderCode(orderCode);
if (order==null || order.getStatus()!=0
){
if (order == null || order.getStatus() != 0
) {
throw new IllegalArgumentException("订单不存在或已被审核");
}
CashRecord updateOrder = new CashRecord();
@ -52,54 +59,54 @@ public class CashAuditServiceImpl implements CashAuditService {
//判断是通过还是驳回更新审核状态
updateOrder.setOrderCode(orderCode);
String auditName = cashAuditMapper.getAuditName(auditId);
if (action==1){ //通过
if (action == 1) { //通过
updateOrder.setStatus(1);
if (order.getGoodsName().equals("金币充值")){
//往金币订单表加一条充值记录
UserGoldRecord rechargeOrder = new UserGoldRecord();
rechargeOrder.setOrderCode(orderCode.replaceFirst("^XJ_", "XJCZ_"));
rechargeOrder.setJwcode(order.getJwcode());
rechargeOrder.setActivity(order.getActivity());
rechargeOrder.setPermanentGold(order.getPermanentGold());
// 获取当前月份1-12
int currentMonth = LocalDate.now().getMonthValue();
// 根据当前月份设置对应字段
if (currentMonth >= 1 && currentMonth <= 6) {
// 1-6月设置12月额度6月保持默认值
rechargeOrder.setFreeJune(0);
rechargeOrder.setFreeDecember(order.getFreeGold());
} else {
// 7-12月设置6月额度12月保持默认值
rechargeOrder.setFreeJune(order.getFreeGold());
rechargeOrder.setFreeDecember(0);
}
rechargeOrder.setSumGold(order.getPermanentGold()+order.getFreeGold());
rechargeOrder.setRateId(Integer.valueOf(order.getPaymentCurrency()));
rechargeOrder.setMoney(order.getPaymentAmount().intValue());
rechargeOrder.setRemark(order.getRemark());
rechargeOrder.setVoucher(order.getVoucher());
rechargeOrder.setPayPlatform("金币系统");
rechargeOrder.setPayModel(order.getPayType());
//把时间转换成Date
Date date = Date.from(order.getPayTime().toInstant(ZoneOffset.ofHours(8)));
rechargeOrder.setPayTime(date);
rechargeOrder.setAdminId(order.getSubmitterId());
rechargeOrder.setAuditId(auditId);
rechargeOrder.setType((byte) 0);
rechargeOrder.setAuditStatus(1);
rechargeOrder.setCreateTime(new Date());
rechargeMapper.add(rechargeOrder);
//往ERP加一条充值数据
GoldTistV2.addCoinNew(order.getJwcode().toString(), 64, //充值永久金币
(double) (order.getPermanentGold() ) /100,
order.getRemark(),(double) (order.getPermanentGold() ) /100, auditName, "金币充值");
GoldTistV2.addCoinNew(order.getJwcode().toString(), 63, //充值免费
(double) (order.getFreeGold()) /100,
order.getRemark(),0, auditName, "金币充值");
//修改用户余额添加金币
User user = new User();
user.setJwcode(order.getJwcode());
user.setSumConsumePermanent(BigDecimal.valueOf(order.getPermanentGold()));
if (order.getGoodsName().equals("金币充值")) {
//往金币订单表加一条充值记录
UserGoldRecord rechargeOrder = new UserGoldRecord();
rechargeOrder.setOrderCode(orderCode.replaceFirst("^XJ_", "XJCZ_"));
rechargeOrder.setJwcode(order.getJwcode());
rechargeOrder.setActivity(order.getActivity());
rechargeOrder.setPermanentGold(order.getPermanentGold());
// 获取当前月份1-12
int currentMonth = LocalDate.now().getMonthValue();
// 根据当前月份设置对应字段
if (currentMonth >= 1 && currentMonth <= 6) {
// 1-6月设置12月额度6月保持默认值
rechargeOrder.setFreeJune(0);
rechargeOrder.setFreeDecember(order.getFreeGold());
} else {
// 7-12月设置6月额度12月保持默认值
rechargeOrder.setFreeJune(order.getFreeGold());
rechargeOrder.setFreeDecember(0);
}
rechargeOrder.setSumGold(order.getPermanentGold() + order.getFreeGold());
rechargeOrder.setRateId(Integer.valueOf(order.getPaymentCurrency()));
rechargeOrder.setMoney(order.getPaymentAmount().intValue());
rechargeOrder.setRemark(order.getRemark());
rechargeOrder.setVoucher(order.getVoucher());
rechargeOrder.setPayPlatform("金币系统");
rechargeOrder.setPayModel(order.getPayType());
//把时间转换成Date
Date date = Date.from(order.getPayTime().toInstant(ZoneOffset.ofHours(8)));
rechargeOrder.setPayTime(date);
rechargeOrder.setAdminId(order.getSubmitterId());
rechargeOrder.setAuditId(auditId);
rechargeOrder.setType((byte) 0);
rechargeOrder.setAuditStatus(1);
rechargeOrder.setCreateTime(new Date());
rechargeMapper.add(rechargeOrder);
//往ERP加一条充值数据
GoldTistV2.addCoinNew(order.getJwcode().toString(), 64, //充值永久金币
(double) (order.getPermanentGold()) / 100,
order.getRemark(), (double) (order.getPermanentGold()) / 100, auditName, "金币充值");
GoldTistV2.addCoinNew(order.getJwcode().toString(), 63, //充值免费
(double) (order.getFreeGold()) / 100,
order.getRemark(), 0, auditName, "金币充值");
//修改用户余额添加金币
User user = new User();
user.setJwcode(order.getJwcode());
user.setSumConsumePermanent(BigDecimal.valueOf(order.getPermanentGold()));
// 根据当前月份设置对应字段
if (currentMonth >= 1 && currentMonth <= 6) {
// 1-6月设置12月额度6月保持默认值
@ -112,16 +119,44 @@ public class CashAuditServiceImpl implements CashAuditService {
user.setCurrentFreeJune(BigDecimal.valueOf(order.getFreeGold()));
user.setSumFreeDecember(BigDecimal.valueOf(0));
}
user.setCurrentPermanentGold(BigDecimal.valueOf(order.getPermanentGold()));
user.setRechargeNum(1); //充值次数加一
user.setCurrentPermanentGold(BigDecimal.valueOf(order.getPermanentGold()));
user.setRechargeNum(1); //充值次数加一
auditMapper.updateUserGold(user);
}}
else if (action==2){ //驳回
}
} else if (action == 2) { //驳回
updateOrder.setStatus(2);
updateOrder.setRejectReason(rejectReason);
}
//更新订单
cashAuditMapper.updateOrder(updateOrder);
// 创建消息队列用于发送审核结果通知
CashCollectionMessage message = new CashCollectionMessage();
message.setId(order.getId());
message.setOrderCode(orderCode);
message.setStatus(updateOrder.getStatus());
message.setStatusDescription(action == 1 ? "线下财务审核通过待填手续费" : "线下财务审核驳回");
message.setMessage(action == 1 ? "收款订单审核通过" : "收款订单审核驳回");
message.setSubmitterId(order.getSubmitterId());
message.setAuditId(auditId);
message.setAuditName(auditName);
message.setTimestamp(LocalDateTime.now());
// 根据审核结果发送不同的消息
if (action == 1) {
// 发送审核通过消息
rabbitTemplate.convertAndSend(
RabbitMQConfig.CASH_COLLECTION_EXCHANGE,
"collection.audited",
message
);
} else {
// 发送审核驳回消息
rabbitTemplate.convertAndSend(
RabbitMQConfig.CASH_COLLECTION_EXCHANGE,
"collection.rejected",
message
);
}
return true;
}
}

186
src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java

@ -1,10 +1,12 @@
package com.example.demo.serviceImpl.cash;
import com.example.demo.config.RabbitMQConfig;
import com.example.demo.domain.entity.CashRecord;
import com.example.demo.domain.entity.GOrder;
import com.example.demo.domain.entity.RechargeActivity;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.cash.CashCollectionMessage;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.mapper.cash.CashCollectionMapper;
import com.example.demo.mapper.coin.MarketMapper;
@ -12,6 +14,7 @@ import com.example.demo.service.cash.CashCollectionService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -26,7 +29,7 @@ import java.util.UUID;
/**
* @program: gold-java
* @ClassName cashCollectionServiceImpl
* @description:
* @description: 处理收款相关业务逻辑
* @author: Ethan
* @create: 202509-26 11:23
* @Version 1.0
@ -39,49 +42,53 @@ public class CashCollectionServiceImpl implements CashCollectionService {
private CashCollectionMapper cashCollectionMapper;
@Autowired
private MarketMapper marketMapper;
@Autowired
private RabbitTemplate rabbitTemplate;
//新增收款订单
@Override
public String add(CashCollection cashCollection) {
if (cashCollection.getJwcode()==null){
public String add(CashCollection cashCollection) {
if (cashCollection.getJwcode() == null) {
throw new IllegalArgumentException("精网号不能为空");
}
if(cashCollection.getJwcode()<10000000||cashCollection.getJwcode()>99999999){
if (cashCollection.getJwcode() < 10000000 || cashCollection.getJwcode() > 99999999) {
throw new IllegalArgumentException("精网号必须为8位");
}
if(cashCollection.getName()== null){
if (cashCollection.getName() == null) {
throw new IllegalArgumentException("客户姓名不能为空");
}
if(cashCollection.getActivity()== null){
if (cashCollection.getActivity() == null) {
throw new IllegalArgumentException("活动不能为空");
}
if(cashCollection.getGoodsName()== null){
if (cashCollection.getGoodsName() == null) {
throw new IllegalArgumentException("商品名不能为空");
}
if (cashCollection.getGoodsName().equals("金币充值")){
if( cashCollection.getPermanentGold()== 0 && cashCollection.getFreeGold()== 0){
throw new IllegalArgumentException("金币数量不能为空");}
if (cashCollection.getGoodsName().equals("金币充值")) {
if (cashCollection.getPermanentGold() == 0 && cashCollection.getFreeGold() == 0) {
throw new IllegalArgumentException("金币数量不能为空");
}
}
if (!cashCollection.getGoodsName().equals("金币充值")){
if( cashCollection.getGoodNum()== 0 ){
throw new IllegalArgumentException("产品数量不能为空");}
if(cashCollection.getNumUnit()== null){
if (!cashCollection.getGoodsName().equals("金币充值")) {
if (cashCollection.getGoodNum() == 0) {
throw new IllegalArgumentException("产品数量不能为空");
}
if (cashCollection.getNumUnit() == null) {
throw new IllegalArgumentException("数量单位不能为空");
}
}
if(cashCollection.getPaymentCurrency()== null){
if (cashCollection.getPaymentCurrency() == null) {
throw new IllegalArgumentException("支付币种不能为空");
}
if(cashCollection.getPaymentAmount()== null){
if (cashCollection.getPaymentAmount() == null) {
throw new IllegalArgumentException("支付金额不能为空");
}
if (cashCollection.getPayType()== null){
if (cashCollection.getPayType() == null) {
throw new IllegalArgumentException("支付方式不能为空");
}
if (cashCollection.getReceivedMarket()== null){
if (cashCollection.getReceivedMarket() == null) {
throw new IllegalArgumentException("到账地区不能为空");
}
if(cashCollection.getPayTime()== null){
if (cashCollection.getPayTime() == null) {
throw new IllegalArgumentException("付款时间不能为空");
}
//生成订单号后半部分
@ -113,9 +120,25 @@ public class CashCollectionServiceImpl implements CashCollectionService {
//cashRecord.setMarket(cashCollectionMapper.getMarketByJwcode(cashRecord.getJwcode()));
//插入新收款订单
cashCollectionMapper.add(cashRecord);
// 发送收款创建消息
CashCollectionMessage message = new CashCollectionMessage();
message.setId(cashRecord.getId());
message.setOrderCode(cashRecord.getOrderCode());
message.setStatus(cashRecord.getStatus());
message.setStatusDescription("线下财务待审核");
message.setMessage("收款订单已创建");
message.setSubmitterId(cashRecord.getSubmitterId());
// 可以通过 submitterId 查询提交人姓名
message.setTimestamp(LocalDateTime.now());
rabbitTemplate.convertAndSend(
RabbitMQConfig.CASH_COLLECTION_EXCHANGE,
"collection.created",
message
);
return "添加成功";
}
//撤回未审核的订单
@Override
public String cancel(String orderCode) {
@ -123,105 +146,148 @@ public class CashCollectionServiceImpl implements CashCollectionService {
if (cashRecord == null) {
throw new IllegalArgumentException("订单不存在");
}
if (cashRecord.getStatus() != 0){
if (cashRecord.getStatus() != 0) {
throw new IllegalArgumentException("订单状态不符合条件");
}
//修改订单状态
int rows = cashCollectionMapper.updateStatus(orderCode, 5);
if (rows > 0) {
// 发送收款撤回消息
CashCollectionMessage message = new CashCollectionMessage();
message.setId(cashRecord.getId());
message.setOrderCode(cashRecord.getOrderCode());
message.setStatus(5);
message.setStatusDescription("手动撤回待编辑提交");
message.setMessage("收款订单已撤回");
message.setSubmitterId(cashRecord.getSubmitterId());
message.setAuditId(cashRecord.getAuditId());
message.setTimestamp(LocalDateTime.now());
rabbitTemplate.convertAndSend(
RabbitMQConfig.CASH_COLLECTION_EXCHANGE,
"collection.cancelled",
message
);
}
return rows > 0 ? "撤回成功" : "撤回失败";
}
//编辑并重新提交收款订单
@Override
public String reSubmit(CashRecord cashRecord) {
if (cashRecord.getJwcode()==null){
if (cashRecord.getJwcode() == null) {
throw new IllegalArgumentException("精网号不能为空");
}
if(cashRecord.getJwcode()<10000000||cashRecord.getJwcode()>99999999){
if (cashRecord.getJwcode() < 10000000 || cashRecord.getJwcode() > 99999999) {
throw new IllegalArgumentException("精网号必须为8位");
}
if(cashRecord.getName()== null){
if (cashRecord.getName() == null) {
throw new IllegalArgumentException("客户姓名不能为空");
}
if(cashRecord.getActivity()== null){
if (cashRecord.getActivity() == null) {
throw new IllegalArgumentException("活动不能为空");
}
if(cashRecord.getGoodsName()== null){
if (cashRecord.getGoodsName() == null) {
throw new IllegalArgumentException("商品名不能为空");
}
if (cashRecord.getGoodsName().equals("金币充值")){
if( cashRecord.getPermanentGold()== 0 && cashRecord.getFreeGold()== 0){
throw new IllegalArgumentException("金币数量不能为空");}
if (cashRecord.getGoodsName().equals("金币充值")) {
if (cashRecord.getPermanentGold() == 0 && cashRecord.getFreeGold() == 0) {
throw new IllegalArgumentException("金币数量不能为空");
}
}
if (!cashRecord.getGoodsName().equals("金币充值")){
if( cashRecord.getGoodNum()== 0 ){
throw new IllegalArgumentException("产品数量不能为空");}
if(cashRecord.getNumUnit()== null){
if (!cashRecord.getGoodsName().equals("金币充值")) {
if (cashRecord.getGoodNum() == 0) {
throw new IllegalArgumentException("产品数量不能为空");
}
if (cashRecord.getNumUnit() == null) {
throw new IllegalArgumentException("数量单位不能为空");
}
}
if(cashRecord.getPaymentCurrency()== null){
if (cashRecord.getPaymentCurrency() == null) {
throw new IllegalArgumentException("支付币种不能为空");
}
if(cashRecord.getPaymentAmount()== null){
if (cashRecord.getPaymentAmount() == null) {
throw new IllegalArgumentException("支付金额不能为空");
}
if (cashRecord.getPayType()== null){
if (cashRecord.getPayType() == null) {
throw new IllegalArgumentException("支付方式不能为空");
}
if (cashRecord.getReceivedMarket()== null){
if (cashRecord.getReceivedMarket() == null) {
throw new IllegalArgumentException("到账地区不能为空");
}
if(cashRecord.getPayTime()== null){
if (cashRecord.getPayTime() == null) {
throw new IllegalArgumentException("付款时间不能为空");
}
CashRecord status=cashCollectionMapper.selectByOrderCode(cashRecord.getOrderCode());
if (!status.getStatus().equals(5)){
CashRecord status = cashCollectionMapper.selectByOrderCode(cashRecord.getOrderCode());
if (!status.getStatus().equals(5)) {
throw new IllegalArgumentException("只允许编辑已撤回订单");
}
//地区根据jwcode插入弃用插入前调用接口获取地区和姓名之后前端传入
//cashRecord.setMarket(cashCollectionMapper.getMarketByJwcode(cashRecord.getJwcode()));
int rows = cashCollectionMapper.updateByOrderCode(cashRecord);
if (rows > 0) {
// 发送重新提交消息
CashCollectionMessage message = new CashCollectionMessage();
message.setId(cashRecord.getId());
message.setOrderCode(cashRecord.getOrderCode());
message.setStatus(0); // 重新提交后状态变为待审核
message.setStatusDescription("线下财务待审核");
message.setMessage("收款订单已重新提交");
message.setSubmitterId(cashRecord.getSubmitterId());
message.setTimestamp(LocalDateTime.now());
rabbitTemplate.convertAndSend(
RabbitMQConfig.CASH_COLLECTION_EXCHANGE,
"collection.created",
message
);
}
return rows > 0 ? "重新提交成功" : "重新提交失败";
}
//多条件查询收款订单列表
@Override
public PageInfo<CashCollection> selectCollection(Integer pageNum, Integer pageSize, CashCollection cashCollection) {
//将操作人的地区列表改为id
List<String> markets = marketMapper.getMarketIds(cashCollection.getMarkets());
if (markets.contains("9") || markets.contains("9999")){
markets=null;
if (markets.contains("9") || markets.contains("9999")) {
markets = null;
}
// cashCollection.setReceivedMarket(marketMapper.getMarketId(cashCollection.getReceivedMarket()));
if (cashCollection.getCashRoleId()==2) {
// cashCollection.setReceivedMarket(marketMapper.getMarketId(cashCollection.getReceivedMarket()));
if (cashCollection.getCashRoleId() == 2) {
//角色是总部时若不特地传状态传1346sql处理为1346筛选
if(cashCollection.getStatus()==null){
cashCollection.setStatus(1346);}
if (cashCollection.getStatus() == null) {
cashCollection.setStatus(1346);
}
cashCollection.setSubmitterId(null);
cashCollection.setReceivedMarket(null);
cashCollection.setSubmitterMarket(null);
}
if (cashCollection.getCashRoleId()==1){
if (cashCollection.getCashRoleId() == 1) {
//角色是地方财务提交人置空不设筛选条件,仅按收款地区提交人地区筛选
if(cashCollection.getStatus()==null){
cashCollection.setStatus(123460);}
if (cashCollection.getStatus() == null) {
cashCollection.setStatus(123460);
}
//状态为待审核和已驳回时按照提交人地区筛选
if (cashCollection.getStatus()==0||cashCollection.getStatus()==2){
cashCollection.setReceivedMarket(null);}
if (cashCollection.getStatus() == 0 || cashCollection.getStatus() == 2) {
cashCollection.setReceivedMarket(null);
}
//状态为已通过和Link通过时按收款地区筛选
if (cashCollection.getStatus()==13){
cashCollection.setSubmitterMarket(null);}
if (cashCollection.getStatus() == 13) {
cashCollection.setSubmitterMarket(null);
}
cashCollection.setSubmitterId(null);
//状态为46已通过和已退款满足收款地区或提交人地区即可
}
if (cashCollection.getCashRoleId()==0){
if (cashCollection.getCashRoleId() == 0) {
//角色是地方财务提交人置空不设筛选条件---仅当角色是0 地方客服时按提交人筛选
if(cashCollection.getStatus()==null){
cashCollection.setStatus(1234560);}
if (cashCollection.getStatus() == null) {
cashCollection.setStatus(1234560);
}
cashCollection.setSubmitterId(cashCollection.getSubmitterId());
cashCollection.setReceivedMarket(null);
}
@ -230,6 +296,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
List<CashCollection> cashCollections = cashCollectionMapper.selectCollection1(pageNum, pageSize, cashCollection);
return new PageInfo<>(cashCollections);
}
//补全手续费等内容
@Override
public String complete(CashRecord cashRecord) {
@ -239,6 +306,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
return rows > 0 ? "编辑成功" : "编辑失败";
}
//根据精网号查询姓名和地区
@Override
public User getNameAndMarket(Integer jwcode) {
@ -249,12 +317,14 @@ public class CashCollectionServiceImpl implements CashCollectionService {
return user;
}
//获取收款活动列表
@Override
public List<RechargeActivity> getActivityList() {
LocalDateTime now = LocalDateTime.now();
return cashCollectionMapper.getActivityList(now);
}
//同步g_order订单到cash_record表
@Override
@Transactional(rollbackFor = Exception.class)
@ -312,11 +382,13 @@ public class CashCollectionServiceImpl implements CashCollectionService {
//存入现金库
cashCollectionMapper.add(cashRecord);
cashCollectionMapper.markSynced(gOrder.getId());
}log.info("同步完成一批,数量 {}", gOrders.size());
}
log.info("同步完成一批,数量 {}", gOrders.size());
if (gOrders.size() < 100) {
break; // 最后一批
}
}return "同步完毕";
}
return "同步完毕";
}
@Override

214
src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java

@ -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: 202509-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);

2
src/main/resources/cashMapper/CashRefundMapper.xml

@ -133,7 +133,7 @@
</update>
<select id="select" resultType="com.example.demo.domain.vo.cash.CashRecordDone">
<select id="select" resultType="com.example.demo.domain.vo.cash.CashRecordDTO">
select
crr.id,
crr.jwcode,

Loading…
Cancel
Save