Quellcode durchsuchen

fix 商务分销提成;实物分销提成发货后可获取提成

zoujiajian vor 3 Jahren
Ursprung
Commit
8d3b02893d

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

@@ -40,6 +40,12 @@ public class DistributeWaitingSendPoints extends BaseEntity{
 
 	private Date sendTime;
 
+	/**
+	 * 针对实物 是否已发货
+	 * true 已发货 默认true
+	 */
+	private Boolean isDelivery;
+
 	@Getter
 	public enum Status{
 		close("分销订单关闭,积分奖励不分发"),

+ 17 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeBusinessOrderDonRecord.java

@@ -52,8 +52,25 @@ public class UserDistributeBusinessOrderDonRecord extends BaseEntity{
 	 */
 	private BigDecimal takeMoney;
 
+	/**
+	 * 提成状态
+	 */
+	private Status status;
+
 	/**
 	 * 订单创建时间
 	 */
 	private Date orderCreatedTime;
+
+	@Getter
+	public enum Status{
+		success("成功"),
+		refund("失败"),
+		;
+		String desc;
+
+		Status(String desc) {
+			this.desc = desc;
+		}
+	}
 }

+ 8 - 5
netflix-dao/src/main/java/com/cyksj/model/views/BusinessTakeMoneyDetail.java

@@ -40,19 +40,22 @@ public class BusinessTakeMoneyDetail {
 	@DbField("count(distinct ubr.user_id)")
 	private Integer distributeNum;
 
-	@DbField("count(if(ubr.order_type = 1,1,NULL))")
+	@DbField("count(if(ubr.order_type = 1 and ubr.status = 'success',1,NULL))")
 	private Integer numOfFirstOrderThisMonth;
 
-	@DbField("cast(sum(if(ubr.order_type = 1,ubr.take_money,0))/100 as decimal(10,2))")
+	@DbField("cast(sum(if(ubr.order_type = 1 and ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
 	private BigDecimal moneyOfFirstOrderThisMonth;
 
-	@DbField("count(if(ubr.order_type = 2,1,NULL))")
+	@DbField("count(if(ubr.order_type = 2 and ubr.status = 'success',1,NULL))")
 	private Integer numOfRenewOrderThisMonth;
 
-	@DbField("cast(sum(if(ubr.order_type = 2,ubr.take_money,0))/100 as decimal(10,2))")
+	@DbField("cast(sum(if(ubr.order_type = 2 and ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
 	private BigDecimal moneyOfRenewOrderThisMonth;
 
-	@DbField("cast(sum(ubr.take_money)/100 as decimal(10,2))")
+	@DbField("cast(sum(if(ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
 	private BigDecimal takeMoney;
 
+	@DbField("cast(sum(if(ubr.status = 'refund', ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal refundMoney;
+
 }

+ 8 - 5
netflix-dao/src/main/java/com/cyksj/model/views/BusinessTakeMoneyHeadView.java

@@ -22,18 +22,21 @@ public class BusinessTakeMoneyHeadView {
 	@DbField("ubr.business_id")
 	private Long businessId;
 
-	@DbField("count(if(ubr.order_type = 1,1,NULL))")
+	@DbField("count(if(ubr.order_type = 1 and ubr.status = 'success',1,NULL))")
 	private Integer numOfFirstOrder;
 
-	@DbField("cast(sum(if(ubr.order_type = 1,ubr.take_money,0))/100 as decimal(10,2))")
+	@DbField("cast(sum(if(ubr.order_type = 1 and ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
 	private BigDecimal moneyOfFirstOrder;
 
-	@DbField("count(if(ubr.order_type = 2,1,NULL))")
+	@DbField("count(if(ubr.order_type = 2 and ubr.status = 'success',1,NULL))")
 	private Integer numOfRenewOrder;
 
-	@DbField("cast(sum(if(ubr.order_type = 2,ubr.take_money,0))/100 as decimal(10,2))")
+	@DbField("cast(sum(if(ubr.order_type = 2 and ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
 	private BigDecimal moneyOfRenewOrder;
 
-	@DbField("cast(sum(ubr.take_money)/100 as decimal(10,2))")
+	@DbField("cast(sum(if(ubr.status = 'success', ubr.take_money,0))/100 as decimal(10,2))")
 	private BigDecimal takeMoney;
+
+	@DbField("cast(sum(if(ubr.status = 'refund', ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal refundMoney;
 }

+ 2 - 2
netflix-dao/src/main/java/com/cyksj/model/views/CorpUserTagView.java

@@ -14,8 +14,8 @@ import lombok.Setter;
 @Getter
 @Setter
 @SearchBean(tables = "corp_user_follow_relation cfr left join corp_user_tag ct on ct.relation_id = cfr.id",
-where = ":tagName: and :time:",
-groupBy = "cfr.corp_user_id")
+		where = "cfr.wx_corp_id = 2 and :tagName: and :time:",
+		groupBy = "cfr.corp_user_id")
 public class CorpUserTagView {
 
 	@DbField("cfr.corp_user_id")

+ 8 - 5
netflix-dao/src/main/java/com/cyksj/model/views/DistributeBusinessView.java

@@ -32,21 +32,24 @@ public class DistributeBusinessView {
 	@DbIgnore
 	private Integer numOfRelation;
 
-	@DbField("count(if(ubr.order_type = 1,1,NULL))")
+	@DbField("count(if(ubr.order_type = 1 and ubr.status = 'success',1,NULL))")
 	private Integer numOfFirstOrderThisMonth;
 
-	@DbField("cast(sum(if(ubr.order_type = 1,ubr.take_money,0))/100 as decimal(10,2))")
+	@DbField("cast(sum(if(ubr.order_type = 1 and ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
 	private BigDecimal moneyOfFirstOrderThisMonth;
 
-	@DbField("count(if(ubr.order_type = 2,1,NULL))")
+	@DbField("count(if(ubr.order_type = 2 and ubr.status = 'success',1,NULL))")
 	private Integer numOfRenewOrderThisMonth;
 
-	@DbField("cast(sum(if(ubr.order_type = 2,ubr.take_money,0))/100 as decimal(10,2))")
+	@DbField("cast(sum(if(ubr.order_type = 2 and ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
 	private BigDecimal moneyOfRenewOrderThisMonth;
 
-	@DbField("cast(sum(ubr.take_money)/100 as decimal(10,2))")
+	@DbField("cast(sum(if(ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
 	private BigDecimal takeMoney;
 
+	@DbField("cast(sum(if(ubr.status = 'refund', ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal refundMoney;
+
 	@DbField("date_format(ubr.order_created_time,'%Y-%m')")
 	private String monthDate;
 }

+ 5 - 1
netflix-service/src/main/java/com/cyksj/service/distribute/impl/UserBusinessFrontServiceImpl.java

@@ -77,6 +77,7 @@ public class UserBusinessFrontServiceImpl implements UserBusinessFrontService {
 							.eq(UserDistributeBusinessOrderDonRecord::getBusinessId, businessId)
 							.eq(UserDistributeBusinessOrderDonRecord::getUserId, order.getUserId())
 							.eq(UserDistributeBusinessOrderDonRecord::getOrderType, 1)
+							.eq(UserDistributeBusinessOrderDonRecord::getStatus, UserDistributeBusinessOrderDonRecord.Status.success)
 							.last("limit 1"));
 					if (record == null) {
 						try {
@@ -89,6 +90,7 @@ public class UserBusinessFrontServiceImpl implements UserBusinessFrontService {
 								}
 								businessOrderDonRecordMapper.insert(record);
 								log.info("开始给商务人员:{}分配分销人:{}分销的用户:{}首单:{}提成", businessId, sharedId, order.getUserId(), order.getId());
+								redisService.del(RedisService.key.BUSINESS_FIRST_ORDER_USER_KEY.getNameFormat(order.getUserId()));
 							}
 						} catch (DuplicateKeyException e) {
 							log.error("商务:{}重复获取分销人:{}分销的用户:{}首单:{}提成", businessId, businessId, order.getUserId(), order.getId());
@@ -103,7 +105,9 @@ public class UserBusinessFrontServiceImpl implements UserBusinessFrontService {
 				UserDistributeBusinessOrderDonRecord record = businessOrderDonRecordMapper.selectOne(Wrappers.lambdaQuery(UserDistributeBusinessOrderDonRecord.class)
 						.eq(UserDistributeBusinessOrderDonRecord::getBusinessId, businessId)
 						.eq(UserDistributeBusinessOrderDonRecord::getUserId, order.getUserId())
-						.eq(UserDistributeBusinessOrderDonRecord::getOrderType, 1).last("limit 1"));
+						.eq(UserDistributeBusinessOrderDonRecord::getOrderType, 1)
+						.eq(UserDistributeBusinessOrderDonRecord::getStatus, UserDistributeBusinessOrderDonRecord.Status.success)
+						.last("limit 1"));
 				if (record != null) {
 					log.info("开始给商务人员:{}分配用户:{}首单续费提成", businessId, order.getUserId());
 					//是否更换过车票规格座位号

+ 10 - 3
netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.common.annotation.NoSubmit;
@@ -298,11 +299,17 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 		//寻找差不多过期时间规格的车位
 		relation = groupRelationFrontService.getSimilarExpiredGroupRelation(sku.getId(), sku.getMonths(), errorsRelationIds);
 		if (relation == null) {
-			GroupsTrips groups = groupsMapper.selectOne(Wrappers.lambdaQuery(GroupsTrips.class)
+			LambdaQueryWrapper<GroupsTrips> queryWrapper = Wrappers.lambdaQuery(GroupsTrips.class)
 					.eq(GroupsTrips::getSkuId, sku.getId())
 					.gt(GroupsTrips::getAvailableNum, 0).last("limit 1")
-					.ne(GroupsTrips::getStatus, GroupsTrips.Status.down)
-					.orderByAsc(GroupsTrips::getAvailableNum));
+					.eq(GroupsTrips::getStatus, GroupsTrips.Status.validity)
+					.orderByAsc(GroupsTrips::getAvailableNum);
+			GroupsTrips groups = groupsMapper.selectOne(queryWrapper);
+			//待发车
+			if (groups == null) {
+				queryWrapper.eq(GroupsTrips::getStatus, GroupsTrips.Status.waiting);
+				groups = groupsMapper.selectOne(queryWrapper);
+			}
 			if (groups == null) {
 				//新增车位 并关联
 				relation = createNewGroupTripsAndRelation(sku, groups, relation);

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

@@ -23,6 +23,7 @@ import com.cyksj.mapper.*;
 import com.cyksj.mapper.channel.ShopConfigMapper;
 import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper;
+import com.cyksj.mapper.manage.distribute.UserDistributeBusinessOrderDonRecordMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
 import com.cyksj.mapper.stock.GoodsSkuStockRelateMapper;
 import com.cyksj.model.entity.*;
@@ -119,6 +120,8 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final GoodsDonSkuMapper skuMapper;
 
+    private final UserDistributeBusinessOrderDonRecordMapper businessOrderDonRecordMapper;
+
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -174,14 +177,14 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             }
 
             //发送微信模板消息
-            TASK_POOL.execute(()->{
-                try {
-                    log.info("发送发货通知至{}用户", orderDon.getUserId());
-                    templateCommonService.sendTransportMsgNotify(orderDon, reqSetLogisticsPost, flag);
-                } catch (Exception e) {
-                    log.error("发送发货通知至{}用户失败:{}", orderDon.getUserId(), e);
-                }
-            });
+//            TASK_POOL.execute(()->{
+//                try {
+//                    log.info("发送发货通知至{}用户", orderDon.getUserId());
+//                    templateCommonService.sendTransportMsgNotify(orderDon, reqSetLogisticsPost, flag);
+//                } catch (Exception e) {
+//                    log.error("发送发货通知至{}用户失败:{}", orderDon.getUserId(), e);
+//                }
+//            });
         }else {
             if (orderDon.getStatus() == OrderDon.Status.hasPayment) {
                 orderDon.setStatus(OrderDon.Status.transport);
@@ -189,6 +192,16 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             }
             orderDonWaybillMapper.updateById(orderDonWaybill);
         }
+        //实物分销订单是否存在
+        DistributeWaitingSendPoints waitingSendPoints = distributeWaitingSendPointsMapper.selectOne(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class)
+                .eq(DistributeWaitingSendPoints::getOrderId, orderDon.getId())
+                .eq(DistributeWaitingSendPoints::getIsDelivery, false)
+                .last("limit 1"));
+        if (waitingSendPoints != null) {
+            //实物分销订单发货后再 进行提成结算期
+            waitingSendPoints.setIsDelivery(true);
+            distributeWaitingSendPointsMapper.updateById(waitingSendPoints);
+        }
         return orderDonWaybill;
     }
 
@@ -534,6 +547,15 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
                 //分销提成积分扣除
                 deductDsPoints(orderDon);
             }
+            //商务提成 因订单退款去掉
+            UserDistributeBusinessOrderDonRecord record = businessOrderDonRecordMapper.selectOne(Wrappers.lambdaQuery(UserDistributeBusinessOrderDonRecord.class)
+                    .eq(UserDistributeBusinessOrderDonRecord::getOrderId, orderDon.getId())
+                    .eq(UserDistributeBusinessOrderDonRecord::getStatus, UserDistributeBusinessOrderDonRecord.Status.success)
+                    .last("limit 1"));
+            if (record != null) {
+                record.setStatus(UserDistributeBusinessOrderDonRecord.Status.refund);
+                businessOrderDonRecordMapper.updateById(record);
+            }
         });
     }
 

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

@@ -1213,6 +1213,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 									rate = userPlatDistributeRate.getSecondRate();
 								}
 							}
+							distributeWaitingSendPoints.setIsDelivery(false);
 						}
 						returnMoney = orderMoney.multiply(BigDecimal.valueOf(rate)).divide(BigDecimal.valueOf(100));
 					}
@@ -1739,9 +1740,14 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				LambdaQueryWrapper<GroupsTrips> queryWrapper = Wrappers.lambdaQuery(GroupsTrips.class)
 						.eq(GroupsTrips::getSkuId, sku.getId())
 						.gt(GroupsTrips::getAvailableNum, 0).last("limit 1")
-						.ne(GroupsTrips::getStatus, GroupsTrips.Status.down)
+						.eq(GroupsTrips::getStatus, GroupsTrips.Status.validity)
 						.orderByAsc(GroupsTrips::getAvailableNum);
 				GroupsTrips groups = groupsMapper.selectOne(queryWrapper);
+				//待发车
+				if (groups == null) {
+					queryWrapper.eq(GroupsTrips::getStatus, GroupsTrips.Status.waiting);
+					groups = groupsMapper.selectOne(queryWrapper);
+				}
 				if (groups == null) {
 					relation = groupsFuncService.createNewGroupsTrips(sku);
 				} else {

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

@@ -188,6 +188,11 @@ public class SchedulerServiceImpl implements SchedulerService {
 						userBenefitsService.addUserBalance(userId, re_balance);
 						log.info("车票未到期清除,退款至用户user_id:{}余额:{}成功", userId, re_balance);
 						userBenefitsService.recordBalanceBySource(userId, re_balance, UserBalanceSourceRecord.Source.clear_valid);
+						//修改订单状态 为退款
+						orderDon.setStatus(OrderDon.Status.refund);
+						orderDon.setRefundBalance(re_balance);
+						orderDon.setRefundMoney(BigDecimal.ZERO);
+						orderDonMapper.updateById(orderDon);
 						return;
 					}
 					changeTickerRelation(item_groupsId, relationView, UserTicketClearedRecord.Source.timing_change_ticket);

+ 10 - 9
netflix-service/src/main/java/com/cyksj/task/Scheduler.java

@@ -257,15 +257,16 @@ public class Scheduler {
     @Scheduled(cron = "0 0 0/2 * * ?")
     @Transactional(rollbackFor = Throwable.class)
     public void distributeOrdersSendPoints() {
-        List<DistributeWaitingSendPoints> waitingSendPoints = Optional.ofNullable(distributeWaitingSendPointsMapper.selectList(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class)
-                .eq(DistributeWaitingSendPoints::getSendStatus, DistributeWaitingSendPoints.Status.waiting)
-                .lt(DistributeWaitingSendPoints::getSendTime, DateTime.now())
-                .select(DistributeWaitingSendPoints::getId,
-                        DistributeWaitingSendPoints::getOrderId,
-                        DistributeWaitingSendPoints::getPoints,
-                        DistributeWaitingSendPoints::getUserId,
-                        DistributeWaitingSendPoints::getSharedId,
-                        DistributeWaitingSendPoints::getSendTime))).orElse(new ArrayList<>());
+	    List<DistributeWaitingSendPoints> waitingSendPoints = Optional.ofNullable(distributeWaitingSendPointsMapper.selectList(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class)
+			    .eq(DistributeWaitingSendPoints::getSendStatus, DistributeWaitingSendPoints.Status.waiting)
+			    .eq(DistributeWaitingSendPoints::getIsDelivery, true)
+			    .le(DistributeWaitingSendPoints::getSendTime, DateTime.now())
+			    .select(DistributeWaitingSendPoints::getId,
+					    DistributeWaitingSendPoints::getOrderId,
+					    DistributeWaitingSendPoints::getPoints,
+					    DistributeWaitingSendPoints::getUserId,
+					    DistributeWaitingSendPoints::getSharedId,
+					    DistributeWaitingSendPoints::getSendTime))).orElse(new ArrayList<>());
         log.info("查询分销订单积分分发记录开始,条数:{}=======》", waitingSendPoints.size());
         waitingSendPoints.forEach(wait -> {
             //积分待发人

+ 1 - 1
netflix-service/src/main/java/com/cyksj/task/StatisticsDataScheduler.java

@@ -139,7 +139,7 @@ public class StatisticsDataScheduler {
 		Integer numOfCorpUser = corpUserAuths.isEmpty() ? 0 : corpUserAuths.size();
 		statisticsUserData.setNumOfCorpUser(numOfCorpUser);
 		MapBuilder builder = MapUtils.builder()
-				.put("time", String.format("ct.created_time between '%s' and '%s'", yesZeroDate, thisZeroDate))
+				.put("time", String.format("cfr.created_time between '%s' and '%s'", yesZeroDate, thisZeroDate))
 				.group("cfr.corp_user_id");
 		Number equipments = beanSearcher.searchCount(CorpUserTagView.class, builder.put("tagName", "ct.tag_name = '设备'").build());
 		statisticsUserData.setNumOfCorpEquipmentUser(equipments.intValue());

+ 1 - 1
netflix-web/src/main/java/com/cyksj/web/controller/manage/statistics/StatisticsDataController.java

@@ -213,7 +213,7 @@ public class StatisticsDataController {
 		Integer numOfCorpUser = corpUserAuths.isEmpty() ? 0 : corpUserAuths.size();
 		statisticsUserDataView.setNumOfCorpUser(numOfCorpUser);
 		MapBuilder builder = MapUtils.builder()
-				.put("time", String.format("ct.created_time between '%s' and '%s'", thisZero, thisEnd))
+				.put("time", String.format("cfr.created_time between '%s' and '%s'", thisZero, thisEnd))
 				.group("cfr.corp_user_id");
 		Number equipments = beanSearcher.searchCount(CorpUserTagView.class, builder.put("tagName", "ct.tag_name = '设备'").build());
 		statisticsUserDataView.setNumOfCorpEquipmentUser(equipments.intValue());