Explorar el Código

fix 银河币退款

zoujiajian hace 2 años
padre
commit
2bb88d02a7

+ 8 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/UserGalaxycoinRecord.java

@@ -16,6 +16,11 @@ import java.math.BigDecimal;
 public class UserGalaxycoinRecord extends BaseEntity{
     private Long userId;
 
+    /**
+     * 主订单id
+     */
+    private Long mOid;
+
     private BigDecimal galaxycoin;
 
     private String remark;
@@ -25,7 +30,9 @@ public class UserGalaxycoinRecord extends BaseEntity{
     @Getter
     public enum Source {
         payment("下单"),
-        refund("订单退款");
+        close("订单关闭返还"),
+        refund_return("订单退款返还"),
+        refund_deduct("订单退款扣除");
         String desc;
 
         Source(String desc) {

+ 21 - 6
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -178,6 +178,8 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
     private final OrderMasterDonService orderMasterDonService;
 
     private final CouponMapper couponMapper;
+
+    private final UserGalaxycoinRecordMapper userGalaxycoinRecordMapper;
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -740,6 +742,25 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             if (orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
                 userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getBalance(), UserBalanceSourceRecord.Source.balance, orderDon.getYhsId());
             }
+
+            //存在银河币支付,退还银河币
+            BigDecimal galaxycoin = orderDon.getGalaxycoin();
+            if (galaxycoin.compareTo(BigDecimal.ZERO) > 0) {
+                userBenefitsService.updateGalaxycoin(orderDon.getUserId(), orderDon.getMOid(), galaxycoin, UserGalaxycoinRecord.Source.refund_return);
+            }
+            //退款多少扣除多少银河币
+            BigDecimal refundGalaxycoin = orderDon.getRefundMoney().add(orderDon.getBalance());
+            if (refundGalaxycoin.compareTo(BigDecimal.ZERO) > 0) {
+                UserGalaxycoinRecord userGalaxycoinRecord = userGalaxycoinRecordMapper.selectOne(Wrappers.lambdaQuery(UserGalaxycoinRecord.class)
+                        .eq(UserGalaxycoinRecord::getMOid, orderDon.getMOid())
+                        .eq(UserGalaxycoinRecord::getSource, UserGalaxycoinRecord.Source.payment)
+                        .last("limit 1"));
+                //存在下单返银河币
+                if (userGalaxycoinRecord != null) {
+                    userBenefitsService.updateGalaxycoin(orderDon.getUserId(), orderDon.getMOid(), refundGalaxycoin.negate(), UserGalaxycoinRecord.Source.refund_return);
+                }
+            }
+
             try {
                 marketFrontService.subSpecificChanceNum(orderDon.getUserId(), orderDon.getId(), orderDon.getGoodsId(), orderDon.getUpdateTime());
                 if (goodsDon.getType() == 2) {
@@ -851,12 +872,6 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             if (gcCash != null && gcCash.compareTo(BigDecimal.ZERO) > 0) {
                 giftCardOrderUseRecordService.returnGiftCardCash(orderDon.getId());
             }
-
-            //记录银河币明细
-            BigDecimal refundGalaxycoin = orderDon.getGalaxycoin();
-            if (refundGalaxycoin.compareTo(BigDecimal.ZERO) > 0) {
-                userBenefitsService.updateGalaxycoin(orderDon.getUserId(), refundGalaxycoin.negate(), UserGalaxycoinRecord.Source.refund);
-            }
         });
     }
 

+ 4 - 4
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -1215,9 +1215,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 					}
 
 					//返还银河币
-					BigDecimal refundGalaxycoin = orderDon.getGalaxycoin();
-					if (refundGalaxycoin.compareTo(BigDecimal.ZERO) > 0) {
-						userBenefitsService.updateGalaxycoin(orderDon.getUserId(), refundGalaxycoin.negate(), UserGalaxycoinRecord.Source.refund);
+					BigDecimal galaxycoin = orderDon.getGalaxycoin();
+					if (galaxycoin.compareTo(BigDecimal.ZERO) > 0) {
+						userBenefitsService.updateGalaxycoin(orderDon.getUserId(), orderDon.getMOid(), galaxycoin, UserGalaxycoinRecord.Source.close);
 					}
 
 					//是否是礼品卡 现金支付订单
@@ -2710,7 +2710,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				//购买成功 实付金额等额转换银河币
 				BigDecimal addGalaxycoin = orderDon.getMoney();
 				if (addGalaxycoin.compareTo(BigDecimal.ZERO) > 0) {
-					TASK_POOL.execute(() -> userBenefitsService.updateGalaxycoin(orderDon.getUserId(), addGalaxycoin, UserGalaxycoinRecord.Source.payment));
+					TASK_POOL.execute(() -> userBenefitsService.updateGalaxycoin(orderDon.getUserId(), orderDon.getMOid(), addGalaxycoin, UserGalaxycoinRecord.Source.payment));
 				}
 			} catch (Exception e) {
 				log.error("回调修改订单信息错误,orderId:{},error:{}", orderDon.getId(), StringUtil.getErrorText(e));

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/user/UserBenefitsService.java

@@ -54,5 +54,5 @@ public interface UserBenefitsService {
 	/**
 	 * 修改用户银河币
 	 */
-	void updateGalaxycoin(Long userId, BigDecimal addGalaxycoin, UserGalaxycoinRecord.Source source);
+	void updateGalaxycoin(Long userId, Long mOid, BigDecimal addGalaxycoin, UserGalaxycoinRecord.Source source);
 }

+ 2 - 1
netflix-service/src/main/java/com/cyksj/service/user/impl/UserBenefitsServiceImpl.java

@@ -191,7 +191,7 @@ public class UserBenefitsServiceImpl implements UserBenefitsService {
 
 
 	@Override
-	public void updateGalaxycoin(Long userId, BigDecimal addGalaxycoin, UserGalaxycoinRecord.Source source) {
+	public void updateGalaxycoin(Long userId, Long mOid, BigDecimal addGalaxycoin, UserGalaxycoinRecord.Source source) {
 		if (addGalaxycoin.compareTo(BigDecimal.ZERO) == 0) {
 			return;
 		}
@@ -201,6 +201,7 @@ public class UserBenefitsServiceImpl implements UserBenefitsService {
 			Integer success = userMapper.updateGalaxycoin(user.getId(), addGalaxycoin, user.getGalaxycoin());
 			if (success == 1) break;
 			UserGalaxycoinRecord record = new UserGalaxycoinRecord();
+			record.setMOid(mOid);
 			record.setUserId(userId);
 			record.setGalaxycoin(addGalaxycoin);
 			record.setSource(source);

+ 31 - 0
netflix-web/src/main/java/com/cyksj/web/util/EasyExcelUtils.java

@@ -17,6 +17,9 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @ClassName EasyExcelUtils
@@ -64,6 +67,34 @@ public class EasyExcelUtils {
 		}
 	}
 
+	public class CompletableFutureDemo6{
+		public void main(String[] args) throws ExecutionException, InterruptedException{
+			CompletableFuture<Integer> thenCombineResult = CompletableFuture.supplyAsync(() -> {
+				System.out.println(Thread.currentThread().getName() + "\t" + "---come in 1");
+				return 10;
+			}).thenCombine(CompletableFuture.supplyAsync(() -> {
+				System.out.println(Thread.currentThread().getName() + "\t" + "---come in 2");
+				return 20;
+			}), (x,y) -> {
+				System.out.println(Thread.currentThread().getName() + "\t" + "---come in 3");
+				return x + y;
+			}).thenCombine(CompletableFuture.supplyAsync(() -> {
+				System.out.println(Thread.currentThread().getName() + "\t" + "---come in 4");
+				return 30;
+			}),(a,b) -> {
+				System.out.println(Thread.currentThread().getName() + "\t" + "---come in 5");
+				return a + b;
+			});
+			System.out.println("-----主线程结束,END");
+			System.out.println(thenCombineResult.get());
+
+
+			// 主线程不要立刻结束,否则CompletableFuture默认使用的线程池会立刻关闭:
+			try { TimeUnit.SECONDS.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); }
+		}
+	}
+
+
 	/**
 	 *
 	 * 校验