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.

520 lines
28 KiB

7 months ago
7 months ago
7 months ago
7 months ago
  1. package com.example.demo.serviceImpl.coin;
  2. import com.example.demo.Util.GoldTistV2;
  3. import com.example.demo.Util.SimpleIdGenerator;
  4. import com.example.demo.config.GlobalExceptionHandler;
  5. import com.example.demo.domain.entity.User;
  6. import com.example.demo.domain.entity.UserGoldRecord;
  7. import com.example.demo.domain.vo.coin.*;
  8. import com.example.demo.exception.RedCheckException;
  9. import com.example.demo.mapper.Temporary.RedMapper;
  10. import com.example.demo.mapper.coin.AuditMapper;
  11. import com.example.demo.mapper.coin.MarketMapper;
  12. import com.example.demo.mapper.coin.UserMapper;
  13. import com.example.demo.service.Temporary.RedService;
  14. import com.example.demo.service.coin.AdminService;
  15. import com.example.demo.service.coin.AuditService;
  16. import com.example.demo.service.coin.GeneralService;
  17. import com.github.pagehelper.PageHelper;
  18. import com.github.pagehelper.PageInfo;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import java.math.BigDecimal;
  24. import java.math.RoundingMode;
  25. import java.util.Calendar;
  26. import java.util.Date;
  27. import java.util.GregorianCalendar;
  28. import java.util.List;
  29. /**
  30. * @program: gold-java
  31. * @ClassName AuditServiceImpl
  32. * @description: 审核模块
  33. * @author: Ethan
  34. * @create: 202506-19 17:38
  35. * @Version 1.0
  36. **/
  37. @Service
  38. @Slf4j
  39. public class AuditServiceImpl implements AuditService {
  40. @Autowired
  41. private AuditMapper auditMapper;
  42. @Autowired
  43. private UserMapper userMapper;
  44. @Autowired
  45. private RedMapper redMapper;
  46. @Autowired
  47. private AdminService adminService;
  48. @Autowired
  49. private GeneralService generalService;
  50. @Autowired
  51. private MarketMapper marketMapper;
  52. @Autowired
  53. private RedService redService;
  54. /*
  55. 审核订单并修改用户余额等
  56. */
  57. @Transactional(rollbackFor = Exception.class)
  58. @Override
  59. public boolean auditOrder(String token, String orderCode, Integer auditId, Integer action,String rejectReason,BigDecimal price,String linkId) throws Exception {
  60. if (linkId== null){
  61. linkId=orderCode;
  62. }
  63. UserGoldRecord order=auditMapper.selectOrderByOrderCode(orderCode);
  64. if (price== null){
  65. price= BigDecimal.valueOf(order.getPermanentGold());
  66. }
  67. Date date =new Date();
  68. //状态为0待审核或4第一次红包退款失败的订单才能审核
  69. if (order == null || (order.getAuditStatus() != 0 && order.getAuditStatus() !=4)) {
  70. throw new IllegalArgumentException("订单不存在或已被审核");
  71. }
  72. GoldUser userNow = userMapper.selectUser(order.getJwcode().toString());
  73. //更新订单的审核状态和审核人
  74. UserGoldRecord updateOrder = new UserGoldRecord();
  75. updateOrder.setOrderCode(orderCode);
  76. updateOrder.setAuditId(auditId);
  77. String auditName = auditMapper.getName(auditId);
  78. //判断是通过还是驳回
  79. if (action==2){ //驳回
  80. if (order.getType()==2) { //退款
  81. //2.获取对应的订单(退款订单号去掉开头"TK"即为对应原始订单)
  82. String oldOrderCode = order.getOrderCode().replaceFirst("TK_", "");
  83. //3.更新消费订单是否已退款状态为0
  84. UserGoldRecord oldOrder = auditMapper.selectAllOrderByOrderCode(oldOrderCode);
  85. if (oldOrderCode != null&&(oldOrder.getType()==1||oldOrder.getType()==0)){ //确保是消费或充值订单
  86. auditMapper.updateOrderRefund(oldOrderCode,(byte)0);
  87. }else {
  88. throw new IllegalArgumentException("找不到对应的订单或不是有效订单");
  89. } }
  90. updateOrder.setAuditStatus(2);
  91. updateOrder.setRejectReason(rejectReason);
  92. updateOrder.setAuditTime(new Date());
  93. // 执行审核更新
  94. auditMapper.updateOrder(updateOrder);
  95. }else if (action==1) { //通过
  96. //判断是充值还是退款
  97. if (order.getType()==0){ //充值
  98. //更新用户余额
  99. User update = new User();
  100. Date oldFirstRecharge = userMapper.getFirstRecharge(order.getJwcode().toString());
  101. update.setJwcode(order.getJwcode()); //精网号
  102. update.setSumPermanentGold(BigDecimal.valueOf(order.getPermanentGold())); //历史永久金币
  103. update.setSumFreeJune(BigDecimal.valueOf(order.getFreeJune())); //历史六月免费金币
  104. update.setSumFreeDecember(BigDecimal.valueOf(order.getFreeDecember())); //历史十二月免费金币
  105. update.setSumTaskGold(BigDecimal.valueOf(order.getTaskGold())); //历史任务金币
  106. update.setCurrentPermanentGold(BigDecimal.valueOf(order.getPermanentGold())); //当前永久金币
  107. update.setCurrentFreeJune(BigDecimal.valueOf(order.getFreeJune())); //当前六月免费金币
  108. update.setCurrentFreeDecember(BigDecimal.valueOf(order.getFreeDecember())); //当前十二月免费金币
  109. update.setCurrentTaskGold(BigDecimal.valueOf(order.getTaskGold())); //当前任务金币
  110. update.setRechargeNum(1); //充值次数加一
  111. /*
  112. 判断是否更新首充时间
  113. 1.用户当前首充时间为空
  114. 2.用户当前首充时间小于当前时间
  115. 3.用户当前首充时间等于2020-01-01 00:00:00
  116. */
  117. // 构造 2020-01-01 00:00:00
  118. Date placeholder = new GregorianCalendar(2020, Calendar.JANUARY, 1, 0, 0).getTime();
  119. if(oldFirstRecharge== null||oldFirstRecharge.after(date)||placeholder.equals(oldFirstRecharge)){
  120. auditMapper.updateFirstRecharge(order.getJwcode());//设置首充时间为当前时间
  121. }
  122. auditMapper.updateUserGold(update);
  123. //累充
  124. try {
  125. BigDecimal sum = BigDecimal.valueOf(
  126. order.getPermanentGold())
  127. .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP) ;
  128. redService.addAmount(order.getJwcode(), sum, 1); // ← 直接调你写好的方法!
  129. } catch (Exception e) {
  130. log.warn("红包累加失败,主流程继续 | jwcode={}", order.getJwcode(), e);
  131. }
  132. try {
  133. redService.sendJwcode(order.getJwcode(),order.getLinkId());
  134. log.info("精网号发送成功 | jwcode={}", order.getJwcode());
  135. }catch (Exception e){
  136. log.warn("精网号发送失败,主流程继续 | jwcode={}", order.getJwcode(), e);
  137. }
  138. //erp增加充值数据
  139. GoldTistV2.addCoinNew(order.getJwcode().toString(), 64, //充值永久金币
  140. (double) (order.getPermanentGold() ) /100, order.getLinkId()
  141. ,order.getRemark(),(double) (order.getPermanentGold() ) /100, auditName, "金币充值");
  142. GoldTistV2.addCoinNew(order.getJwcode().toString(), 63, //充值免费
  143. (double) (order.getFreeDecember()+order.getFreeJune() ) /100, order.getLinkId(),
  144. order.getRemark(),0, auditName, "金币充值");
  145. }else if (order.getType()==2) { //退款
  146. //对非强制退款订单进行退红包校验
  147. if (order.getAuditStatus()!=4){
  148. try {
  149. String result = redService.checkRed(price, linkId);
  150. // 设置到全局上下文
  151. AuditContext.setRedCheckResult(result);
  152. } catch (RedCheckException e) {
  153. // 业务失败(flag=false)
  154. int num = e.getNum();
  155. String logMsg = String.format(
  156. "红包退票失败,orderId=%s,还需扣除金币数=%d",
  157. linkId, num
  158. );
  159. log.error(logMsg);
  160. updateOrder.setAuditStatus(4);
  161. updateOrder.setRedDiff(BigDecimal.valueOf(num* 100L));
  162. auditMapper.updateOrder(updateOrder);
  163. AuditContext.setFailMsg(logMsg);
  164. return false;
  165. } catch (Exception e) {
  166. // 网络异常 / 系统异常
  167. log.error("红包接口调用异常", e);
  168. throw new RuntimeException(e);
  169. }}
  170. //2.获取对应的订单(退款订单号去掉开头"TK"即为对应原始订单)
  171. String oldOrderCode = order.getOrderCode().replaceFirst("TK_", "");
  172. UserGoldRecord oldOrder = auditMapper.selectAllOrderByOrderCode(oldOrderCode);
  173. //更新用户余额
  174. User update = new User();
  175. update.setJwcode(order.getJwcode());
  176. update.setCurrentPermanentGold(BigDecimal.valueOf(order.getPermanentGold())); //当前永久金币
  177. update.setCurrentFreeJune(BigDecimal.valueOf(order.getFreeJune())); //当前六月免费金币
  178. update.setCurrentFreeDecember(BigDecimal.valueOf(order.getFreeDecember())); //当前十二月免费金币
  179. update.setCurrentTaskGold(BigDecimal.valueOf(order.getTaskGold())); //当前任务金币
  180. auditMapper.updateUserGold(update);
  181. //商品消费退款
  182. //erp增加退款数据
  183. if(oldOrder.getType()==1){
  184. int type = 2;
  185. //额外扣金币抵扣红包
  186. if (order.getAuditStatus()==4){
  187. // 检查用户余额是否足够抵扣红包差额
  188. if (price.add(order.getRedDiff()).compareTo(userNow.getNowSumGold()) > 0) {
  189. log.error("用户余额不足,无法抵扣红包 - 红包差额: {}, 用户余额: {}",
  190. order.getRedDiff(), userNow.getNowSumGold());
  191. throw new IllegalArgumentException("用户余额不足,无法抵扣红包");
  192. }
  193. ConsumeUser consumeUser = new ConsumeUser();
  194. // 1. 先扣除免费金币
  195. if (order.getRedDiff().compareTo(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune() + order.getFreeDecember()))) <= 0) {
  196. // 红包差额小于等于免费金币,只扣免费金币
  197. consumeUser.setJwcode(order.getJwcode());
  198. consumeUser.setFreeGold(order.getRedDiff());
  199. consumeUser.setPermanentGold(BigDecimal.ZERO);
  200. consumeUser.setTaskGold(BigDecimal.ZERO);
  201. } else {
  202. // 2. 免费金币不足,扣除免费+永久金币
  203. BigDecimal remainingAfterFree = order.getRedDiff().subtract(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune() + order.getFreeDecember())));
  204. if (remainingAfterFree.compareTo(userNow.getNowPermanentGold().add(BigDecimal.valueOf(order.getPermanentGold()))) <= 0) {
  205. consumeUser.setJwcode(order.getJwcode());
  206. consumeUser.setFreeGold(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune() + order.getFreeDecember())));
  207. consumeUser.setPermanentGold(remainingAfterFree);
  208. consumeUser.setTaskGold(BigDecimal.ZERO);
  209. } else {
  210. // 3. 免费+永久金币仍不足,扣除全部免费+永久+部分任务金币
  211. BigDecimal remainingAfterPermanent = remainingAfterFree.subtract(userNow.getNowPermanentGold().add(BigDecimal.valueOf(order.getPermanentGold())));
  212. if (remainingAfterPermanent.compareTo(userNow.getNowTaskGold().add(BigDecimal.valueOf(order.getTaskGold()))) <= 0) {
  213. consumeUser.setJwcode(order.getJwcode());
  214. consumeUser.setFreeGold(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune() + order.getFreeDecember())));
  215. consumeUser.setPermanentGold(userNow.getNowPermanentGold().add(BigDecimal.valueOf(order.getPermanentGold())));
  216. consumeUser.setTaskGold(remainingAfterPermanent);
  217. } else {
  218. throw new IllegalArgumentException("用户金币不足,无法抵扣红包");
  219. }
  220. }
  221. }
  222. consumeUser.setSumGold(order.getRedDiff());
  223. consumeUser.setAdminId(order.getAdminId());
  224. consumeUser.setRemark(order.getRemark());
  225. consumeUser.setPrice(price);
  226. // 执行金币抵扣红包
  227. redService.updateRed(consumeUser);
  228. //link扣除已有红包
  229. redService.consumeRed(linkId);
  230. }
  231. //link扣除已有红包
  232. else if (AuditContext.getRedCheckResult()!=null &&!AuditContext.getRedCheckResult().equals("old")){
  233. redService.consumeRed(linkId);
  234. }
  235. else {
  236. Exception e = new Exception("旧订单退款");
  237. String title = "旧订单退款";
  238. String detail= ("精网号:"+order.getJwcode())+"\n金币订单号:"+orderCode+"\n永久金币:"+Math.abs(order.getPermanentGold())/100+
  239. "\n免费金币:"+Math.abs((order.getFreeJune()+order.getFreeDecember()))/100+"\n任务金币:"+Math.abs(order.getTaskGold())/100+
  240. "\n退款类型:"+order.getRefundType()+"\n商品名:"+order.getGoodsName()+"\n备注:"+order.getRemark();
  241. GlobalExceptionHandler.sendFeishuAlert(e, title, detail);
  242. }
  243. // 执行审核更新
  244. redMapper.update(order.getJwcode(),type,price.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
  245. if (order.getPermanentGold()!=0||order.getFreeJune()!=0||order.getFreeDecember()!=0||order.getTaskGold()!=0){
  246. GoldTistV2.addCoinNew(order.getJwcode().toString(), 55, //退款免费-商品
  247. (double) (order.getFreeDecember()+order.getFreeJune()) /100,SimpleIdGenerator.generateId(),
  248. order.getRemark(),0, auditName, "退款商品"+order.getGoodsName());
  249. GoldTistV2.addCoinNew(order.getJwcode().toString(), 56, //退款永久-商品
  250. (double) (order.getPermanentGold()) /100,SimpleIdGenerator.generateId(),
  251. order.getRemark(),order.getPermanentGold(), auditName, "退款商品"+order.getGoodsName());
  252. GoldTistV2.addCoinNew(order.getJwcode().toString(), 57, //退款任务-商品
  253. (double) (order.getTaskGold() ) /100,SimpleIdGenerator.generateId(),
  254. order.getRemark(),0, auditName, "退款商品"+order.getGoodsName());}
  255. else {
  256. //0金币消耗,往erp传一条金币为空的记录
  257. GoldTistV2.addCoinRecordNew(String.valueOf(order.getJwcode()), order.getRemark(),auditName,order.getGoodsName());
  258. }
  259. }//金币充值退款
  260. else if (oldOrder.getType()==0){
  261. //判断够不够扣
  262. if(userNow.getNowPermanentGold().compareTo(BigDecimal.valueOf(Math.abs(order.getPermanentGold()))) < 0
  263. || userNow.getNowFreeGold().compareTo(BigDecimal.valueOf(Math.abs(order.getFreeDecember() + order.getFreeJune()))) < 0
  264. || userNow.getNowTaskGold().compareTo(BigDecimal.valueOf(Math.abs(order.getTaskGold()))) < 0){
  265. log.error("用户余额不足,无法退款");
  266. throw new IllegalArgumentException("用户余额不足,无法退款");
  267. }
  268. int type = 1; //红包充值累计
  269. //额外扣金币抵扣红包
  270. if (order.getAuditStatus()==4){
  271. // 检查用户余额是否足够抵扣红包差额
  272. if (price.add(order.getRedDiff()).compareTo(userNow.getNowSumGold()) > 0) {
  273. log.error("用户余额不足,无法抵扣红包 - 红包差额: {}, 用户余额: {}",
  274. order.getRedDiff(), userNow.getNowSumGold());
  275. throw new IllegalArgumentException("用户余额不足,无法抵扣红包");
  276. }
  277. ConsumeUser consumeUser = new ConsumeUser();
  278. // 1. 先扣除免费金币
  279. if (order.getRedDiff().compareTo(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune() + order.getFreeDecember()))) <= 0) {
  280. // 红包差额小于等于免费金币,只扣免费金币
  281. consumeUser.setJwcode(order.getJwcode());
  282. consumeUser.setFreeGold(order.getRedDiff());
  283. consumeUser.setPermanentGold(BigDecimal.ZERO);
  284. consumeUser.setTaskGold(BigDecimal.ZERO);
  285. } else {
  286. // 2. 免费金币不足,扣除免费+永久金币
  287. BigDecimal remainingAfterFree = order.getRedDiff().subtract(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune() + order.getFreeDecember())));
  288. if (remainingAfterFree.compareTo(userNow.getNowPermanentGold().add(BigDecimal.valueOf(order.getPermanentGold()))) <= 0) {
  289. consumeUser.setJwcode(order.getJwcode());
  290. consumeUser.setFreeGold(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune() + order.getFreeDecember())));
  291. consumeUser.setPermanentGold(remainingAfterFree);
  292. consumeUser.setTaskGold(BigDecimal.ZERO);
  293. } else {
  294. // 3. 免费+永久金币仍不足,扣除全部免费+永久+部分任务金币
  295. BigDecimal remainingAfterPermanent = remainingAfterFree.subtract(userNow.getNowPermanentGold().add(BigDecimal.valueOf(order.getPermanentGold())));
  296. if (remainingAfterPermanent.compareTo(userNow.getNowTaskGold().add(BigDecimal.valueOf(order.getTaskGold()))) <= 0) {
  297. consumeUser.setJwcode(order.getJwcode());
  298. consumeUser.setFreeGold(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune() + order.getFreeDecember())));
  299. consumeUser.setPermanentGold(userNow.getNowPermanentGold().add(BigDecimal.valueOf(order.getPermanentGold())));
  300. consumeUser.setTaskGold(remainingAfterPermanent);
  301. } else {
  302. throw new IllegalArgumentException("用户金币不足,无法抵扣红包");
  303. }
  304. }
  305. }
  306. consumeUser.setSumGold(order.getRedDiff());
  307. consumeUser.setAdminId(order.getAdminId());
  308. consumeUser.setRemark(order.getRemark());
  309. consumeUser.setPrice(price);
  310. // 执行金币抵扣红包
  311. redService.updateRed(consumeUser);
  312. //link扣除已有红包
  313. redService.consumeRed(linkId);
  314. }
  315. //link扣除已有红包
  316. else if (AuditContext.getRedCheckResult()!=null &&!AuditContext.getRedCheckResult().equals("old")){
  317. redService.consumeRed(linkId);
  318. }
  319. else {
  320. Exception e = new Exception("旧订单退款");
  321. String title = "旧订单退款";
  322. String detail= ("精网号:"+order.getJwcode())+"\n金币订单号:"+orderCode+"\n永久金币:"+Math.abs(order.getPermanentGold())/100+
  323. "\n免费金币:"+Math.abs((order.getFreeJune()+order.getFreeDecember()))/100+"\n任务金币:"+Math.abs(order.getTaskGold())/100+
  324. "\n退款类型:"+order.getRefundType()+"\n商品名:"+order.getGoodsName()+"\n备注:"+order.getRemark();
  325. GlobalExceptionHandler.sendFeishuAlert(e, title, detail);
  326. }
  327. // 执行审核更新
  328. redMapper.update(order.getJwcode(),type,price.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
  329. if(order.getTaskGold()==0){ //无任务金币统一走免费+永久
  330. GoldTistV2.addCoinNew(order.getJwcode().toString(), 58, //退款免费+永久金币-充值
  331. (double) (order.getFreeDecember()+order.getFreeJune()+order.getPermanentGold() ) /100,SimpleIdGenerator.generateId(),
  332. order.getRemark(),(double) order.getPermanentGold() / 100, auditName, "退款金币充值");}
  333. if (order.getTaskGold()!=0){
  334. GoldTistV2.addCoinNew(order.getJwcode().toString(), 59, //退款任务+永久金币-充值
  335. (double) (order.getTaskGold()+order.getPermanentGold() ) /100,SimpleIdGenerator.generateId(),
  336. order.getRemark(),(double) order.getPermanentGold() / 100, auditName, "退款金币充值");}
  337. }
  338. }
  339. updateOrder.setAuditStatus(1);
  340. updateOrder.setAuditTime(new Date());
  341. auditMapper.updateOrder(updateOrder);
  342. }
  343. return true;
  344. }
  345. /*
  346. * 多条件查询充值订单列表
  347. */
  348. @Override
  349. public PageInfo<RechargeAudit> selectRechargeBy(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit) {
  350. List<String> markets = marketMapper.getMarketIds(rechargeAudit.getMarkets());
  351. if (markets.contains("9") || markets.contains("9999")){
  352. markets=null;
  353. }
  354. rechargeAudit.setMarkets(markets);
  355. PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
  356. List<RechargeAudit> rechargeAudits = auditMapper.selectRechargeBy(pageNum, pageSize, rechargeAudit);
  357. // rechargeAudit.setFreeGold(rechargeAudit.getFreeJune()+rechargeAudit.getFreeDecember());
  358. return new PageInfo<>(rechargeAudits);
  359. }
  360. /*
  361. 多条件查询退款订单
  362. */
  363. @Override
  364. public PageInfo<RefundAudit> selectRefundBy(Integer pageNum, Integer pageSize, RefundAudit refundAudit) {
  365. List<String> markets = marketMapper.getMarketIds(refundAudit.getMarkets());
  366. if (markets.contains("9") || markets.contains("9999")){
  367. markets=null;
  368. }
  369. refundAudit.setMarkets(markets);
  370. PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
  371. List<RefundAudit> refundAudits = auditMapper.selectRefundBy(pageNum, pageSize, refundAudit);
  372. //refundAudit.setFreeGold(refundAudit.getFreeJune()+refundAudit.getFreeDecember());
  373. return new PageInfo<>(refundAudits);
  374. }
  375. /*
  376. 充值审核金币合计数
  377. */
  378. @Override
  379. public Gold sumRechargeGold(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit) {
  380. Gold gold = new Gold();
  381. //获取充值审核订单列表
  382. List<String> markets = marketMapper.getMarketIds(rechargeAudit.getMarkets());
  383. if (markets.contains("9") || markets.contains("9999")){
  384. markets=null;
  385. }
  386. rechargeAudit.setMarkets(markets);
  387. List<RechargeAudit> rechargeAudits = auditMapper.selectRechargeBy(1, 500000, rechargeAudit);
  388. // 初始化累加器
  389. int totalNum=0;
  390. int permanentGoldSum = 0;
  391. int freeGoldSum = 0;
  392. // 遍历消费记录并累加金币
  393. for (RechargeAudit recharge : rechargeAudits) {
  394. // 累加永久金币
  395. if (recharge.getPermanentGold() != null) {
  396. permanentGoldSum += recharge.getPermanentGold();
  397. }
  398. // 累加免费金币
  399. if (recharge.getFreeJune() != null||recharge.getFreeDecember() != null) {
  400. freeGoldSum = freeGoldSum+recharge.getFreeJune()+recharge.getFreeDecember();
  401. }
  402. // 每遍历一条记录,总条数加1
  403. totalNum++;
  404. }
  405. // 将累加结果设置到Gold对象
  406. gold.setPermanentGolds(BigDecimal.valueOf(permanentGoldSum));
  407. gold.setFreeGolds(BigDecimal.valueOf(freeGoldSum));
  408. gold.setTotalNum(totalNum);
  409. return gold;
  410. }
  411. /*
  412. 退款审核合计数
  413. */
  414. @Override
  415. public Gold sumRefundGold(Integer pageNum, Integer pageSize, RefundAudit refundAudit) {
  416. Gold gold = new Gold();
  417. //获取充值审核订单列表
  418. List<String> markets = marketMapper.getMarketIds(refundAudit.getMarkets());
  419. if (markets.contains("9") || markets.contains("9999")){
  420. markets=null;
  421. }
  422. refundAudit.setMarkets(markets);
  423. List<RefundAudit> refundAudits = auditMapper.selectRefundBy(1, 500000, refundAudit);
  424. // 初始化累加器
  425. int totalNum=0;
  426. int permanentGoldSum = 0;
  427. int freeGoldSum = 0;
  428. int taskGoldSum = 0;
  429. // 遍历消费记录并累加金币
  430. for (RefundAudit refund : refundAudits) {
  431. // 累加永久金币
  432. if (refund.getPermanentGold() != null) {
  433. permanentGoldSum += refund.getPermanentGold();
  434. }
  435. // 累加免费金币
  436. if (refund.getFreeJune() != null||refund.getFreeDecember()!=null) {
  437. freeGoldSum += refund.getFreeJune()+refund.getFreeDecember();
  438. }
  439. //累加任务金币
  440. if(refund.getTaskGold()!=null)
  441. taskGoldSum+=refund.getTaskGold();
  442. // 每遍历一条记录,总条数加1
  443. totalNum++;
  444. }
  445. // 将累加结果设置到Gold对象
  446. gold.setPermanentGolds(BigDecimal.valueOf(permanentGoldSum));
  447. gold.setFreeGolds(BigDecimal.valueOf(freeGoldSum));
  448. gold.setTotalNum(totalNum);
  449. gold.setTaskGolds(BigDecimal.valueOf(taskGoldSum));
  450. return gold;
  451. }
  452. public class AuditContext {
  453. private static final ThreadLocal<String> FAIL_MSG = new ThreadLocal<>();
  454. private static final ThreadLocal<String> RED_CHECK_RESULT = new ThreadLocal<>();
  455. public static void setFailMsg(String msg) {
  456. FAIL_MSG.set(msg);
  457. }
  458. public static String getFailMsg() {
  459. return FAIL_MSG.get();
  460. }
  461. public static void setRedCheckResult(String result) {
  462. RED_CHECK_RESULT.set(result);
  463. }
  464. public static String getRedCheckResult() {
  465. return RED_CHECK_RESULT.get();
  466. }
  467. public static void clear() {
  468. FAIL_MSG.remove();
  469. RED_CHECK_RESULT.remove();
  470. }
  471. }
  472. }