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; } }