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.

271 lines
12 KiB

2 months ago
2 months ago
2 months ago
2 months ago
  1. package com.example.demo.serviceImpl.coin;
  2. import com.example.demo.Util.GoldTistV2;
  3. import com.example.demo.domain.entity.User;
  4. import com.example.demo.domain.entity.UserGoldRecord;
  5. import com.example.demo.domain.vo.coin.Gold;
  6. import com.example.demo.domain.vo.coin.GoldUser;
  7. import com.example.demo.domain.vo.coin.RechargeAudit;
  8. import com.example.demo.domain.vo.coin.RefundAudit;
  9. import com.example.demo.mapper.coin.AuditMapper;
  10. import com.example.demo.mapper.coin.MarketMapper;
  11. import com.example.demo.mapper.coin.UserMapper;
  12. import com.example.demo.service.coin.AdminService;
  13. import com.example.demo.service.coin.AuditService;
  14. import com.example.demo.service.coin.GeneralService;
  15. import com.github.pagehelper.PageHelper;
  16. import com.github.pagehelper.PageInfo;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.transaction.annotation.Transactional;
  20. import java.math.BigDecimal;
  21. import java.util.Calendar;
  22. import java.util.Date;
  23. import java.util.GregorianCalendar;
  24. import java.util.List;
  25. /**
  26. * @program: gold-java
  27. * @ClassName AuditServiceImpl
  28. * @description: 审核模块
  29. * @author: Ethan
  30. * @create: 202506-19 17:38
  31. * @Version 1.0
  32. **/
  33. @Service
  34. public class AuditServiceImpl implements AuditService {
  35. @Autowired
  36. private AuditMapper auditMapper;
  37. @Autowired
  38. private UserMapper userMapper;
  39. @Autowired
  40. private AdminService adminService;
  41. @Autowired
  42. private GeneralService generalService;
  43. @Autowired
  44. private MarketMapper marketMapper;
  45. /*
  46. 审核订单并修改用户余额等
  47. */
  48. @Transactional
  49. @Override
  50. public boolean auditOrder(String token, String orderCode, Integer auditId, Integer action,String rejectReason) {
  51. UserGoldRecord order=auditMapper.selectOrderByOrderCode(orderCode);
  52. Date date =new Date();
  53. if (order == null || order.getAuditStatus() != 0) {
  54. throw new IllegalArgumentException("订单不存在或已被审核");
  55. }
  56. //更新订单的审核状态和审核人
  57. UserGoldRecord updateOrder = new UserGoldRecord();
  58. updateOrder.setOrderCode(orderCode);
  59. updateOrder.setAuditId(auditId);
  60. String auditName = auditMapper.getName(auditId);
  61. //判断是通过还是驳回
  62. if (action==2){ //驳回
  63. if (order.getType()==2) { //退款
  64. //2.获取对应的消费订单(退款订单号去掉开头"TK"即为对应消费订单)
  65. String consumeOrderCode = order.getOrderCode().replaceFirst("TK", "");
  66. //3.更新消费订单是否已退款状态为0
  67. UserGoldRecord consumeOrder = auditMapper.selectAllOrderByOrderCode(consumeOrderCode);
  68. if (consumeOrderCode != null&&consumeOrder.getType()==1){ //确保是消费订单
  69. auditMapper.updateOrderRefund(consumeOrderCode,(byte)0);
  70. }else {
  71. throw new IllegalArgumentException("找不到对应的订单或不是有效订单");
  72. } }
  73. updateOrder.setAuditStatus(2);
  74. updateOrder.setRejectReason(rejectReason);
  75. updateOrder.setAuditTime(new Date());
  76. // 执行审核更新
  77. auditMapper.updateOrder(updateOrder);
  78. }else if (action==1) { //通过
  79. //判断是充值还是退款
  80. if (order.getType()==0){ //充值
  81. //更新用户余额
  82. User update = new User();
  83. Date oldFirstRecharge = userMapper.getFirstRecharge(order.getJwcode().toString());
  84. update.setJwcode(order.getJwcode()); //精网号
  85. update.setSumPermanentGold(BigDecimal.valueOf(order.getPermanentGold())); //历史永久金币
  86. update.setSumFreeJune(BigDecimal.valueOf(order.getFreeJune())); //历史六月免费金币
  87. update.setSumFreeDecember(BigDecimal.valueOf(order.getFreeDecember())); //历史十二月免费金币
  88. update.setSumTaskGold(BigDecimal.valueOf(order.getTaskGold())); //历史任务金币
  89. update.setCurrentPermanentGold(BigDecimal.valueOf(order.getPermanentGold())); //当前永久金币
  90. update.setCurrentFreeJune(BigDecimal.valueOf(order.getFreeJune())); //当前六月免费金币
  91. update.setCurrentFreeDecember(BigDecimal.valueOf(order.getFreeDecember())); //当前十二月免费金币
  92. update.setCurrentTaskGold(BigDecimal.valueOf(order.getTaskGold())); //当前任务金币
  93. update.setRechargeNum(1); //充值次数加一
  94. /*
  95. 判断是否更新首充时间
  96. 1.用户当前首充时间为空
  97. 2.用户当前首充时间小于当前时间
  98. 3.用户当前首充时间等于2020-01-01 00:00:00
  99. */
  100. // 构造 2020-01-01 00:00:00
  101. Date placeholder = new GregorianCalendar(2020, Calendar.JANUARY, 1, 0, 0).getTime();
  102. if(oldFirstRecharge== null||oldFirstRecharge.after(date)||placeholder.equals(oldFirstRecharge)){
  103. auditMapper.updateFirstRecharge(order.getJwcode());//设置首充时间为当前时间
  104. }
  105. auditMapper.updateUserGold(update);
  106. //erp增加充值数据
  107. // if(update.getJwcode().equals(94226013)){
  108. GoldTistV2.addCoinNew(order.getJwcode().toString(), 64, //充值永久金币
  109. (double) (order.getPermanentGold() ) /100,
  110. order.getRemark(),0, auditName, "金币充值");
  111. GoldTistV2.addCoinNew(order.getJwcode().toString(), 63, //充值免费
  112. (double) (order.getFreeDecember()+order.getFreeJune() ) /100,
  113. order.getRemark(),0, auditName, "金币充值");
  114. // }
  115. }else if (order.getType()==2) { //退款
  116. //更新用户余额
  117. User update = new User();
  118. update.setJwcode(order.getJwcode());
  119. update.setCurrentPermanentGold(BigDecimal.valueOf(order.getPermanentGold())); //当前永久金币
  120. update.setCurrentFreeJune(BigDecimal.valueOf(order.getFreeJune())); //当前六月免费金币
  121. update.setCurrentFreeDecember(BigDecimal.valueOf(order.getFreeDecember())); //当前十二月免费金币
  122. update.setCurrentTaskGold(BigDecimal.valueOf(order.getTaskGold())); //当前任务金币
  123. auditMapper.updateUserGold(update);
  124. //erp增加退款数据
  125. // if(update.getJwcode().equals(94226013)){
  126. GoldTistV2.addCoinNew(order.getJwcode().toString(), 56, //退款永久金币
  127. (double) (order.getPermanentGold() ) /100,
  128. order.getRemark(),0, order.getPayPlatform(), "退款商品"+order.getGoodsName());
  129. GoldTistV2.addCoinNew(order.getJwcode().toString(), 55, //退款免费
  130. (double) (order.getFreeDecember()+order.getFreeJune() ) /100,
  131. order.getRemark(),0, order.getPayPlatform(), "退款商品"+order.getGoodsName());
  132. GoldTistV2.addCoinNew(order.getJwcode().toString(), 57, //退款任务
  133. (double) (order.getTaskGold() ) /100,
  134. order.getRemark(),0, order.getPayPlatform(), "退款商品"+order.getGoodsName());
  135. // }
  136. }
  137. updateOrder.setAuditStatus(1);
  138. updateOrder.setAuditTime(new Date());
  139. // 执行审核更新
  140. auditMapper.updateOrder(updateOrder);
  141. }
  142. return true;
  143. }
  144. /*
  145. * 多条件查询充值订单列表
  146. */
  147. @Override
  148. public PageInfo<RechargeAudit> selectRechargeBy(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit) {
  149. List<String> markets = marketMapper.getMarketIds(rechargeAudit.getMarkets());
  150. if (markets.contains("9") || markets.contains("9999")){
  151. markets=null;
  152. }
  153. rechargeAudit.setMarkets(markets);
  154. PageHelper.startPage(pageNum, pageSize);
  155. List<RechargeAudit> rechargeAudits = auditMapper.selectRechargeBy(pageNum, pageSize, rechargeAudit);
  156. // rechargeAudit.setFreeGold(rechargeAudit.getFreeJune()+rechargeAudit.getFreeDecember());
  157. return new PageInfo<>(rechargeAudits);
  158. }
  159. /*
  160. 多条件查询退款订单
  161. */
  162. @Override
  163. public PageInfo<RefundAudit> selectRefundBy(Integer pageNum, Integer pageSize, RefundAudit refundAudit) {
  164. List<String> markets = marketMapper.getMarketIds(refundAudit.getMarkets());
  165. if (markets.contains("9") || markets.contains("9999")){
  166. markets=null;
  167. }
  168. refundAudit.setMarkets(markets);
  169. PageHelper.startPage(pageNum, pageSize);
  170. List<RefundAudit> refundAudits = auditMapper.selectRefundBy(pageNum, pageSize, refundAudit);
  171. //refundAudit.setFreeGold(refundAudit.getFreeJune()+refundAudit.getFreeDecember());
  172. return new PageInfo<>(refundAudits);
  173. }
  174. /*
  175. 充值审核金币合计数
  176. */
  177. @Override
  178. public Gold sumRechargeGold(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit) {
  179. Gold gold = new Gold();
  180. //获取充值审核订单列表
  181. List<String> markets = marketMapper.getMarketIds(rechargeAudit.getMarkets());
  182. if (markets.contains("9") || markets.contains("9999")){
  183. markets=null;
  184. }
  185. rechargeAudit.setMarkets(markets);
  186. List<RechargeAudit> rechargeAudits = auditMapper.selectRechargeBy(1, 500000, rechargeAudit);
  187. // 初始化累加器
  188. int totalNum=0;
  189. int permanentGoldSum = 0;
  190. int freeGoldSum = 0;
  191. // 遍历消费记录并累加金币
  192. for (RechargeAudit recharge : rechargeAudits) {
  193. // 累加永久金币
  194. if (recharge.getPermanentGold() != null) {
  195. permanentGoldSum += recharge.getPermanentGold();
  196. }
  197. // 累加免费金币
  198. if (recharge.getFreeJune() != null||recharge.getFreeDecember() != null) {
  199. freeGoldSum = freeGoldSum+recharge.getFreeJune()+recharge.getFreeDecember();
  200. }
  201. // 每遍历一条记录,总条数加1
  202. totalNum++;
  203. }
  204. // 将累加结果设置到Gold对象
  205. gold.setPermanentGolds(BigDecimal.valueOf(permanentGoldSum));
  206. gold.setFreeGolds(BigDecimal.valueOf(freeGoldSum));
  207. gold.setTotalNum(totalNum);
  208. return gold;
  209. }
  210. /*
  211. 退款审核合计数
  212. */
  213. @Override
  214. public Gold sumRefundGold(Integer pageNum, Integer pageSize, RefundAudit refundAudit) {
  215. Gold gold = new Gold();
  216. //获取充值审核订单列表
  217. List<String> markets = marketMapper.getMarketIds(refundAudit.getMarkets());
  218. if (markets.contains("9") || markets.contains("9999")){
  219. markets=null;
  220. }
  221. refundAudit.setMarkets(markets);
  222. List<RefundAudit> refundAudits = auditMapper.selectRefundBy(1, 500000, refundAudit);
  223. // 初始化累加器
  224. int totalNum=0;
  225. int permanentGoldSum = 0;
  226. int freeGoldSum = 0;
  227. int taskGoldSum = 0;
  228. // 遍历消费记录并累加金币
  229. for (RefundAudit refund : refundAudits) {
  230. // 累加永久金币
  231. if (refund.getPermanentGold() != null) {
  232. permanentGoldSum += refund.getPermanentGold();
  233. }
  234. // 累加免费金币
  235. if (refund.getFreeJune() != null||refund.getFreeDecember()!=null) {
  236. freeGoldSum += refund.getFreeJune()+refund.getFreeDecember();
  237. }
  238. //累加任务金币
  239. if(refund.getTaskGold()!=null)
  240. taskGoldSum+=refund.getTaskGold();
  241. // 每遍历一条记录,总条数加1
  242. totalNum++;
  243. }
  244. // 将累加结果设置到Gold对象
  245. gold.setPermanentGolds(BigDecimal.valueOf(permanentGoldSum));
  246. gold.setFreeGolds(BigDecimal.valueOf(freeGoldSum));
  247. gold.setTotalNum(totalNum);
  248. gold.setTaskGolds(BigDecimal.valueOf(taskGoldSum));
  249. return gold;
  250. }
  251. }