You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
7.7 KiB

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.domain.vo.coin.Messages;
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;
import static net.sf.jsqlparser.parser.feature.Feature.update;
/**
* @program: gold-java
* @ClassName CashAuditServiceImpl
* @description: 处理收款订单的审核业务逻辑
* @author: Ethan
* @create: 2025−10-08 10:09
* @Version 1.0
**/
@Service
public class CashAuditServiceImpl implements CashAuditService {
@Autowired
private AuditMapper auditMapper;
@Autowired
private RechargeMapper rechargeMapper;
@Autowired
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) {
CashRecord order = cashCollectionMapper.selectAuditByOrderCode(orderCode);
if (order == null || order.getStatus() != 0
) {
throw new IllegalArgumentException("订单不存在或已被审核");
}
CashRecord updateOrder = new CashRecord();
//设置审核人
updateOrder.setAuditId(auditId);
//判断是通过还是驳回,更新审核状态
updateOrder.setOrderCode(orderCode);
String auditName = cashAuditMapper.getAuditName(auditId);
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 (currentMonth >= 1 && currentMonth <= 6) {
// 1-6月:设置12月额度,6月保持默认值
user.setSumFreeJune(BigDecimal.valueOf(0));
user.setSumFreeDecember(BigDecimal.valueOf(order.getFreeGold()));
user.setCurrentFreeDecember(BigDecimal.valueOf(order.getFreeGold()));
} else {
// 7-12月:设置6月额度,12月保持默认值
user.setSumFreeJune(BigDecimal.valueOf(order.getFreeGold()));
user.setCurrentFreeJune(BigDecimal.valueOf(order.getFreeGold()));
user.setSumFreeDecember(BigDecimal.valueOf(0));
}
user.setCurrentPermanentGold(BigDecimal.valueOf(order.getPermanentGold()));
user.setRechargeNum(1); //充值次数加一
auditMapper.updateUserGold(user);
}
} else if (action == 2) { //驳回
updateOrder.setStatus(2);
updateOrder.setRejectReason(rejectReason);
}
//更新订单
cashAuditMapper.updateOrder(updateOrder);
// 创建消息队列,用于发送审核结果通知
Messages message = new Messages();
message.setJwcode(order.getJwcode());
message.setName(order.getName());
message.setStatus(updateOrder.getStatus());
message.setDesc(order.getJwcode() + action==1?"收款记录需补充手续费,前往填写":"现金收款申请已被驳回,前往查看驳回理");
message.setTitle(action==1?"收款订单审核通过":"收款订单审核驳回");
message.setType(1);
message.setTypeId(order.getId());
message.setMarket(Integer.valueOf(order.getMarket()));
rabbitTemplate.convertAndSend(RabbitMQConfig.CASH_COLLECTION_EXCHANGE, "cash.collection.save", message);
// 根据审核结果发送不同的消息
if (action == 1) {
// 发送审核通过消息
rabbitTemplate.convertAndSend(
RabbitMQConfig.CASH_COLLECTION_EXCHANGE,
"collection.audited",
message
);
} else {
// 发送审核驳回消息
rabbitTemplate.convertAndSend(
RabbitMQConfig.CASH_COLLECTION_EXCHANGE,
"collection.rejected",
message
);
}
return true;
}
}