瀏覽代碼

余额明细展示

zoujiajian 2 年之前
父節點
當前提交
fffe69c000

+ 6 - 6
netflix-dao/src/main/java/com/cyksj/model/entity/UserBalanceSourceRecord.java

@@ -22,20 +22,20 @@ public class UserBalanceSourceRecord extends BaseEntity{
 
 	private String detail;
 
+	private Long orderId;
+
 	@Getter
 	public enum Source {
 		payment("购买"),
-		balance("余额支付"),
-		refund("订单退款"),
-		close("订单关闭"),
-		clear_valid("车票未到期清除"),
+		refund("退款"),
+		clear_valid("未到期车票清除"),
 		ds_transport("分销实物发货"),
 		follow_task("关注引导"),
 		rd_comment("实物评论"),
 		price_differ("订单补差价"),
-		compensate("补偿"),
+		compensate("系统补偿"),
 		manual("手动扣除")
-				;
+		;
 		String desc;
 
 		Source(String desc) {

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

@@ -712,7 +712,7 @@ 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());
+                userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getBalance(), UserBalanceSourceRecord.Source.refund, orderDon.getYhsId(), orderDon.getId(), goodsDon.getTitle() + UserBalanceSourceRecord.Source.refund.getDesc(), true);
             }
             try {
                 marketFrontService.subSpecificChanceNum(orderDon.getUserId(), orderDon.getId(), orderDon.getGoodsId(), orderDon.getUpdateTime());
@@ -726,7 +726,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             }
             if (OrderDon.Type.BALANCE.getType().equals(refundType)) {
                 if (orderDon.getMoney().compareTo(BigDecimal.ZERO) > 0) {
-                    userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getRefundBalance(), UserBalanceSourceRecord.Source.refund, orderDon.getYhsId());
+                    userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getRefundBalance(), UserBalanceSourceRecord.Source.refund, orderDon.getYhsId(), orderDon.getId(), goodsDon.getTitle() + UserBalanceSourceRecord.Source.refund.getDesc(), true);
                 }
             } else {
                 //余额退款不需要扣除积分
@@ -951,7 +951,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             if (refundBalance == null || refundBalance.compareTo(BigDecimal.ZERO) <= 0 || refundBalance.compareTo(orderDon.getMoney()) > 0) {
                 throw BusinessRuntimeException.getInstance("请输入正确的差价金额");
             }
-            userBenefitsService.addUserBalance(orderDon.getUserId(), refundBalance, UserBalanceSourceRecord.Source.price_differ, orderDon.getYhsId());
+            userBenefitsService.addUserBalance(orderDon.getUserId(), refundBalance, UserBalanceSourceRecord.Source.price_differ, orderDon.getYhsId(), orderDon.getId(), goodsDon.getTitle() + UserBalanceSourceRecord.Source.price_differ.getDesc(), true);
             orderDon.setRefundBalance(orderDonRefundBalance.add(refundBalance));
             orderDonMapper.updateById(orderDon);
         }

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/market/task/impl/TaskServiceImpl.java

@@ -154,7 +154,7 @@ public class TaskServiceImpl implements TaskService {
 						if (taskView != null) {
 							if ("关注引导".equals(taskView.getTypeName()) && taskView.getBalance().compareTo(BigDecimal.ZERO) > 0) {
 								//发送余额
-								userBenefitsService.addUserBalance(dbPlatVerify.getUserId(), taskView.getBalance(), UserBalanceSourceRecord.Source.follow_task, 0l);
+								userBenefitsService.addUserBalance(dbPlatVerify.getUserId(), taskView.getBalance(), UserBalanceSourceRecord.Source.follow_task, 0l, null, taskView.getName(), true);
 								record.setBalance(taskView.getBalance());
 							}
 						}

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonCommentServiceImpl.java

@@ -64,7 +64,7 @@ public class OrderDonCommentServiceImpl implements OrderDonCommentService {
 						.eq(OrderCommentRewardConfig::getGoodsId, goodsId).last("limit 1"));
 				if (orderCommentRewardConfig != null) {
 					BigDecimal balance = orderCommentRewardConfig.getBalance();
-					userBenefitsService.addUserBalance(orderComment.getUserId(), balance, UserBalanceSourceRecord.Source.rd_comment, 0l);
+					userBenefitsService.addUserBalance(orderComment.getUserId(), balance, UserBalanceSourceRecord.Source.rd_comment, 0l, orderComment.getOrderId(), UserBalanceSourceRecord.Source.rd_comment.getDesc(), true);
 					log.info("审核订单:{}评价成功,发放余额:{}", orderComment.getOrderId(), balance.divide(BigDecimal.valueOf(100)));
 					orderCommentMapper.update(null, Wrappers.lambdaUpdate(OrderComment.class)
 							.set(OrderComment::getBalance, balance)

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

@@ -821,7 +821,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				}
 				//返还余额
 				if (orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-					userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getBalance(), UserBalanceSourceRecord.Source.close, orderDon.getYhsId());
+					userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getBalance(), null, null, null, null, false);
 				}
 
 				//是否是礼品卡 现金支付订单
@@ -1222,24 +1222,16 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		if (orderDon.getMoney().compareTo(BigDecimal.ZERO) > 0) {
 			throw BusinessRuntimeException.getInstance("订单异常");
 		}
-		if (orderDon.getStatus() != OrderDon.Status.noPayment) {
-			throw BusinessRuntimeException.getInstance("订单状态已修改");
-		}
 		GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
 		GoodsDonSku sku = null;
 		if (orderDon.getSkuId() != null) {
 			sku = goodsDonSkuMapper.selectById(orderDon.getSkuId());
 		}
-		orderDon.setStatus(goodsDon.getType() == 1 && goodsDon.getSecondType() == 2 ? OrderDon.Status.complete : OrderDon.Status.hasPayment);
-		updateGroupsTicket(orderDon, goodsDon, sku);
 		if (orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
 			orderDon.setType(OrderDon.Type.BALANCE);
 			orderDon.setPayTime(DateTime.now());
 		}
-		this.updateById(orderDon);
-
-		//调整指定规格车队下次可 停用车位数的时间
-		groupRelationFrontService.adjustGroupsParkingTime(orderDon.getRelationId(), sku);
+		unifiedHandlerOrderNotify(orderDon, goodsDon, sku);
 	}
 
 	public void updateCarParkAndSendMsg(GoodsDon goodsDon, GoodsDonSku sku, OrderDon order) {
@@ -2186,7 +2178,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			Integer success = userMapper.deductBalance(user.getId(), subBalance, userBalance);
 			if (success != 1) throw BusinessRuntimeException.getInstance("您的余额不足!");
 			orderDon.setBalance(subBalance);
-			userBenefitsService.recordBalanceBySource(user.getId(), BigDecimal.valueOf(-subBalance.longValue()), UserBalanceSourceRecord.Source.payment);
 		}
 	}
 
@@ -2270,7 +2261,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				.in(OrderDon::getStatus, List.of(OrderDon.Status.noPayment, OrderDon.Status.close))
 				.eq(OrderDon::getId, orderDon.getId()));
 		if (!isSuccess) {
-			log.info("支付宝回调商家订单号:{}订单状态已修改", orderDon.getOrderNo());
+			log.info("该订单{}状态已修改", orderDon.getOrderNo());
 			return;
 		}
 
@@ -2293,6 +2284,11 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		//调整指定规格车队下次可 停用车位数的时间
 		groupRelationFrontService.adjustGroupsParkingTime(orderDon.getRelationId(), sku);
 
+		//余额使用记录
+		if (orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+			userBenefitsService.recordBalanceBySource(orderDon.getUserId(), orderDon.getBalance().negate(), UserBalanceSourceRecord.Source.payment, orderDon.getId(), goodsDon.getTitle() + UserBalanceSourceRecord.Source.payment);
+		}
+
 		TASK_POOL.execute(()->{
 			try {
 				//发放积分

+ 7 - 7
netflix-service/src/main/java/com/cyksj/service/scheduler/impl/SchedulerServiceImpl.java

@@ -201,19 +201,19 @@ public class SchedulerServiceImpl implements SchedulerService {
 							log.info("user_id:{},relationId:{}返回余额为0", userId, change_relationId);
 							return;
 						}
-						userBenefitsService.addUserBalance(userId, re_balance, UserBalanceSourceRecord.Source.clear_valid, relationView.getYhsId());
-						log.info("车票未到期清除,退款至用户user_id:{}余额:{}成功", userId, re_balance);
-						//修改订单状态 为退款
-						orderDon.setStatus(OrderDon.Status.refund);
-						orderDon.setRefundBalance(re_balance);
-						orderDon.setRefundMoney(BigDecimal.ZERO);
-						orderDonMapper.updateById(orderDon);
 						GoodsDon goodsDon = goodsMap.get(relationView.getGoodsId());
 						if (goodsDon == null) {
 							goodsDon = goodsDonMapper.selectById(relationView.getGoodsId());
 							if (goodsDon == null) return;
 							goodsMap.putIfAbsent(relationView.getGoodsId(), goodsDon);
 						}
+						userBenefitsService.addUserBalance(userId, re_balance, UserBalanceSourceRecord.Source.clear_valid, relationView.getYhsId(), orderDon.getId(), goodsDon.getTitle() + UserBalanceSourceRecord.Source.clear_valid.getDesc(), true);
+						log.info("车票未到期清除,退款至用户user_id:{}余额:{}成功", userId, re_balance);
+						//修改订单状态 为退款
+						orderDon.setStatus(OrderDon.Status.refund);
+						orderDon.setRefundBalance(re_balance);
+						orderDon.setRefundMoney(BigDecimal.ZERO);
+						orderDonMapper.updateById(orderDon);
 						GoodsDonSku sku = skuMap.get(orderDon.getSkuId());
 						if (sku == null) {
 							sku = skuMapper.selectById(orderDon.getSkuId());

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

@@ -26,7 +26,7 @@ public interface UserBenefitsService {
 	/**
 	 * 增加用户余额
 	 */
-	void addUserBalance(Long userId, BigDecimal addBalance, UserBalanceSourceRecord.Source source, Long yhsId);
+	void addUserBalance(Long userId, BigDecimal addBalance, UserBalanceSourceRecord.Source source, Long yhsId, Long orderId, String detail, Boolean isRecord);
 
 	/**
 	 * 扣除用户余额
@@ -36,7 +36,7 @@ public interface UserBenefitsService {
 	/**
 	 * 记录用于余额来源
 	 */
-	void recordBalanceBySource(Long userId, BigDecimal balance, UserBalanceSourceRecord.Source source);
+	void recordBalanceBySource(Long userId, BigDecimal balance, UserBalanceSourceRecord.Source source, Long orderId, String detail);
 
 	void addYhsMoney(Long userId, BigDecimal money);
 

+ 17 - 12
netflix-service/src/main/java/com/cyksj/service/user/impl/UserBenefitsServiceImpl.java

@@ -7,7 +7,10 @@ import com.cyksj.mapper.UserBalanceSourceRecordMapper;
 import com.cyksj.mapper.UserGalaxycoinRecordMapper;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.mapper.shop.YhShopDistributeOrdersDeductPointsRecordMapper;
-import com.cyksj.model.entity.*;
+import com.cyksj.model.entity.DistributeOrdersDeductPointsRecord;
+import com.cyksj.model.entity.User;
+import com.cyksj.model.entity.UserBalanceSourceRecord;
+import com.cyksj.model.entity.YhShopDistributeOrdersDeductPointsRecord;
 import com.cyksj.service.sms.SmsService;
 import com.cyksj.service.user.UserBenefitsService;
 import lombok.RequiredArgsConstructor;
@@ -72,7 +75,7 @@ public class UserBenefitsServiceImpl implements UserBenefitsService {
 	}
 
 	@Override
-	public void addUserBalance(Long userId, BigDecimal addBalance, UserBalanceSourceRecord.Source source,Long yhsId) {
+	public void addUserBalance(Long userId, BigDecimal addBalance, UserBalanceSourceRecord.Source source, Long yhsId, Long orderId, String detail, Boolean isRecord) {
 		if (addBalance.compareTo(BigDecimal.ZERO) <= 0) {
 			return;
 		}
@@ -82,15 +85,15 @@ public class UserBenefitsServiceImpl implements UserBenefitsService {
 			BigDecimal balance = user.getBalance();
 			Integer success = userMapper.addUserBalance(user.getId(), balance, addBalance);
 			if (success == 1) {
-				recordBalanceBySource(userId, addBalance, source);
-				if (envCommonService.isPrdEnv()) {
-					if (source != UserBalanceSourceRecord.Source.close && source != UserBalanceSourceRecord.Source.balance && yhsId == 0) {
-						try {
-							//短信到账提醒
-							String msg = String.format(Constant.BALANCE_NOTIFY_MSG, addBalance.divide(BigDecimal.valueOf(100)));
-							smsService.sendSmsToRelationUser(userId, msg);
-						} catch (Exception e) {
-						}
+				if (isRecord) {
+					recordBalanceBySource(userId, addBalance, source, orderId, detail);
+				}
+				if (envCommonService.isPrdEnv() && isRecord && yhsId == 0) {
+					try {
+						//短信到账提醒
+						String msg = String.format(Constant.BALANCE_NOTIFY_MSG, addBalance.divide(BigDecimal.valueOf(100)));
+						smsService.sendSmsToRelationUser(userId, msg);
+					} catch (Exception e) {
 					}
 				}
 				break;
@@ -125,11 +128,13 @@ public class UserBenefitsServiceImpl implements UserBenefitsService {
 	}
 
 	@Override
-	public void recordBalanceBySource(Long userId, BigDecimal balance, UserBalanceSourceRecord.Source source) {
+	public void recordBalanceBySource(Long userId, BigDecimal balance, UserBalanceSourceRecord.Source source, Long orderId, String detail) {
 		UserBalanceSourceRecord userBalanceSourceRecord = new UserBalanceSourceRecord();
 		userBalanceSourceRecord.setUserId(userId);
 		userBalanceSourceRecord.setBalance(balance);
 		userBalanceSourceRecord.setSource(source);
+		userBalanceSourceRecord.setOrderId(orderId);
+		userBalanceSourceRecord.setDetail(detail);
 		userBalanceSourceRecordMapper.insert(userBalanceSourceRecord);
 	}
 

+ 2 - 2
netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsUserController.java

@@ -75,7 +75,7 @@ public class CmsUserController{
 
     private final OrderDonMapper orderDonMapper;
 
-    private final UserBenefitsService UserBenefitsService;
+    private final UserBenefitsService userBenefitsService;
 
     private final UserPayOrderBlockService userPayOrderBlockService;
 
@@ -334,7 +334,7 @@ public class CmsUserController{
         if (update == 0) {
             throw BusinessRuntimeException.getInstance("扣除用户余额失败,请重试...");
         }
-        UserBenefitsService.recordBalanceBySource(userId, deductBalance.negate(), UserBalanceSourceRecord.Source.manual);
+        userBenefitsService.recordBalanceBySource(userId, deductBalance.negate(), UserBalanceSourceRecord.Source.manual, null, UserBalanceSourceRecord.Source.manual.getDesc());
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 

+ 14 - 2
netflix-web/src/main/java/com/cyksj/web/controller/payment/OrderController.java

@@ -626,6 +626,18 @@ public class OrderController {
         return "";
     }
 
-
-
+    /**
+     * 余额明细
+     */
+    @GetMapping("/get/balance/detail")
+    public Result<SearchResult<UserBalanceSourceRecord>> getUserBalanceSourceRecord() {
+        long userId = StpUserUtil.getLoginIdAsLong();
+        SearchResult<UserBalanceSourceRecord> search = beanSearcher.search(UserBalanceSourceRecord.class, MapUtils.flatBuilder(request.getParameterMap())
+                .field(UserBalanceSourceRecord::getUserId, userId)
+                .field(UserBalanceSourceRecord::getDetail).op(Operator.NotNull)
+                .orderBy(UserBalanceSourceRecord::getId).desc()
+                .onlySelect(UserBalanceSourceRecord::getBalance, UserBalanceSourceRecord::getDetail, UserBalanceSourceRecord::getCreatedTime)
+                .build());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
 }