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.

220 lines
10 KiB

package com.example.demo.serviceImpl.cash;
import com.example.demo.Util.GoldTistV2;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.entity.UserGoldRecord;
import com.example.demo.domain.vo.cash.CashRecordDone;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.mapper.cash.CashRefundMapper;
import com.example.demo.mapper.coin.AuditMapper;
import com.example.demo.mapper.coin.MarketMapper;
import com.example.demo.mapper.coin.RefundMapper;
import com.example.demo.service.cash.RefundService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import java.util.UUID;
import static org.apache.commons.lang3.StringUtils.substring;
/**
* @program: GOLD
* @ClassName CashRefundServiceImpl
* @description:
* @author: huangqizhen
* @create: 2025−09-28 15:02
* @Version 1.0
**/
@Service
public class CashRefundServiceImpl implements RefundService {
@Autowired
private CashRefundMapper cashRefundMapper;
@Autowired
private RefundMapper refundMapper;
@Autowired
private AuditMapper auditMapper;
@Autowired
private MarketMapper marketMapper;
@Override
public PageInfo<CashRecordDone> select(Integer pageNum, Integer pageSize, CashRecordDone cashRecordDone) {
PageHelper.startPage(pageNum, pageSize);
// System.out.println(goldDetail.getMarkets());
List<CashRecordDone> list = cashRefundMapper.select(cashRecordDone);
return new PageInfo<>(list);
}
@Override
public int add(CashRecordDone cashRecordDone) throws Exception {
if(cashRecordDone.getHandlingCharge()== null){
throw new Exception("未输入手续费") ;
}
if(cashRecordDone.getJwcode()==null){
throw new Exception("未输入精网号") ;
}
if(cashRecordDone.getPaymentAmount()== null){
throw new Exception("未输入付款金额") ;
}
if(cashRecordDone.getPaymentCurrency()== null){
throw new Exception("未输入付款币种") ;
}
if(cashRecordDone.getRefundModel()== null){
throw new Exception("请填充退款类型") ;
}
if(cashRecordDone.getRefundReason()== null){
throw new Exception("请填写退款理由") ;
}
CashRecordDone cashRecordDonetwo = new CashRecordDone();
cashRecordDonetwo.setAreaServise(cashRecordDone.getAreaServise());
cashRefundMapper.addAudit(cashRecordDonetwo);
cashRecordDone.setAuditId(cashRecordDonetwo.getId());
cashRecordDone.setOrderType(2);
cashRecordDone.setStatus(10);
//生成订单号后半部分
String orderNumber = cashRecordDone.getOrderCode();
//构建订单信息
cashRecordDone.setOrderCode("TK" + orderNumber); //订单号
cashRecordDone.setMarket(marketMapper.getMarketId(cashRecordDone.getMarket()));
cashRecordDone.setReceivedMarket(marketMapper.getMarketId(cashRecordDone.getReceivedMarket()));
cashRefundMapper.insert(cashRecordDone);
CashRecordDone cashRecordDone1 = new CashRecordDone();
cashRecordDone1.setId(cashRecordDone.getId());
cashRecordDone1.setStatus(6);
if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null)
return cashRefundMapper.updateStatus(cashRecordDone1);
else return Result.error("提交失败").getCode();
}
@Override
public int update(CashRecordDone cashRecordDone) throws Exception {
if (cashRecordDone.getJwcode()== null) {
throw new RuntimeException("未输入精网号");
}
if (cashRecordDone.getPaymentAmount()== null) {
throw new RuntimeException("未输入付款金额");
}
if (cashRecordDone.getPaymentCurrency()== null){
throw new RuntimeException("未输入付款币种");
}
if (cashRecordDone.getRefundModel()== null) {
throw new RuntimeException("请填写退款类型");
}
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){
throw new RuntimeException("未输入订单号");
}
CashRecordDone cashRecordDone1 = new CashRecordDone();
cashRecordDone1.setOrderCode(cashRecordDone.getOrderCode().substring(2));
cashRecordDone1.setStatus(4);
if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null){
cashRefundMapper.updateStatus(cashRecordDone1);
}}
cashRefundMapper.updateAudit(cashRecordDone);
int result = cashRefundMapper.review(cashRecordDone);
return (result > 0 ? Result.success("提交成功") : Result.error("提交失败")).getCode();
}
@Override
public int executor(CashRecordDone cashRecordDone) throws Exception {
if(cashRecordDone.getRefundVoucher()== null){
throw new RuntimeException("未输入退款凭证");
}
if(cashRecordDone.getRefundTime()== null){
throw new RuntimeException("未输入退款时间");
}
if(cashRecordDone.getRefundRemark()== null){
throw new RuntimeException("未输入退款备注");
}
if(cashRecordDone.getRefundChannels()== null){
throw new RuntimeException("未输入退款途径");
}
if(cashRecordDone.getRefundCurrency()== null){
throw new RuntimeException("未输入退款币种");
}
if(cashRecordDone.getRefundAmount()== null){
throw new RuntimeException("未输入退款金额");
}
int result = cashRefundMapper.executor(cashRecordDone);
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.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 &&
(cashRecordDone.getGoodsName().equals("金币充值") ||
cashRecordDone.getGoodsName().contains("金币充值"))) {
UserGoldRecord userGoldRecord = new UserGoldRecord();
userGoldRecord.setOrderCode(cashRecordDone.getOrderCode());
userGoldRecord.setType((byte) 2);
userGoldRecord.setIsRefund((byte) 1);
userGoldRecord.setRefundType("金币退款");
userGoldRecord.setCrefundModel(cashRecordDone.getRefundModel());
userGoldRecord.setJwcode(cashRecordDone.getJwcode());
userGoldRecord.setSumGold(cashRecordDone.getPermanentGold()+cashRecordDone.getFreeGold());
userGoldRecord.setPermanentGold(cashRecordDone.getPermanentGold());
int currentMonth = LocalDate.now().getMonthValue();
if (currentMonth >= 1 && currentMonth <= 6) {
// 1-6月:设置12月额度,6月保持默认值
userGoldRecord.setFreeJune(0);
userGoldRecord.setFreeDecember(cashRecordDone.getFreeGold());
} else {
// 7-12月:设置6月额度,12月保持默认值
userGoldRecord.setFreeJune(cashRecordDone.getFreeGold());
userGoldRecord.setFreeDecember(0);
}
userGoldRecord.setGoodsName(cashRecordDone.getGoodsName());
userGoldRecord.setPayPlatform("金币系统");
userGoldRecord.setRemark(cashRecordDone.getRemark());
userGoldRecord.setAdminId(cashRecordDone.getAuditId());
userGoldRecord.setAuditStatus(1);
userGoldRecord.setTaskGold(0);
String auditName = auditMapper.getName(cashRecordDone.getAuditId());
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, "退款金币充值");}
cashRefundMapper.updateAudit(cashRecordDone);
int result = cashRefundMapper.review(cashRecordDone);
return (result > 0 ? Result.success("提交成功") : Result.error("提交失败")).getCode();
}
}