Parcourir la source

fix 商务首单虚物提成以规格维度计算

zoujiajian il y a 3 ans
Parent
commit
424fc99929

+ 10 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeBusinessRate.java

@@ -20,6 +20,16 @@ public class UserDistributeBusinessRate extends BaseEntity{
 	@NotNull
 	private Long businessId;
 
+	/**
+	 * 平台id
+	 */
+	private Long goodsId;
+
+	/**
+	 * 规格id
+	 */
+	private Long skuId;
+
 	/**
 	 * 首单提成比例
 	 */

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonSkuView.java

@@ -47,6 +47,9 @@ public class GoodsDonSkuView {
 	@DbField("gd.status")
 	private Boolean goodsDonStatus;
 
+	@DbField("gd.deleted")
+	private Boolean goodsDonDeleted;
+
 	@DbField("gdk.status")
 	private Boolean goodsDonSkuStatus;
 }

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

@@ -44,7 +44,9 @@ public class UserBusinessFrontServiceImpl implements UserBusinessFrontService {
 
 	@Override
 	public void taskDistributeRateBenefits(Long sharedId, Long businessId, OrderDon order) {
-		UserDistributeBusinessRate businessRate = userDistributeBusinessRateMapper.selectById(businessId);
+		UserDistributeBusinessRate businessRate = userDistributeBusinessRateMapper.selectOne(Wrappers.lambdaQuery(UserDistributeBusinessRate.class)
+				.eq(UserDistributeBusinessRate::getGoodsId, order.getGoodsId())
+				.eq(UserDistributeBusinessRate::getSkuId, order.getSkuId()).last("limit 1"));
 		if (businessRate != null) {
 			//首单
 			if (order.getOrderType() == 1) {
@@ -61,7 +63,7 @@ public class UserBusinessFrontServiceImpl implements UserBusinessFrontService {
 						try {
 							boolean isSuccess = redisService.setNx(RedisService.key.BUSINESS_FIRST_ORDER_USER_KEY.getNameFormat(order.getUserId()), businessId, RedisService.key.BUSINESS_FIRST_ORDER_USER_KEY.getTimeout());
 							if (isSuccess) {
-								//首单 提成
+								//首单虚物规格 提成
 								saveBusinessTakeMoneyRecord(order, businessId, sharedId, businessRate.getFirstOrderRate(), null);
 								businessOrderDonRecordMapper.insert(record);
 								log.info("开始给商务人员:{}分配分销人:{}分销的用户:{}首单:{}提成", businessId, sharedId, order.getUserId(), order.getId());
@@ -134,11 +136,11 @@ public class UserBusinessFrontServiceImpl implements UserBusinessFrontService {
 		BigDecimal takeMoney = null;
 		if (firstOrderRate != null) {
 			BigDecimal firstRate = BigDecimal.valueOf(firstOrderRate).divide(BigDecimal.valueOf(100));
-			takeMoney = orderMoney.multiply(orderMoney.multiply(firstRate));
+			takeMoney = orderMoney.multiply(firstRate);
 		}
 		if (renewOrderRate != null) {
-			BigDecimal firstRate = BigDecimal.valueOf(renewOrderRate).divide(BigDecimal.valueOf(100));
-			takeMoney = orderMoney.multiply(orderMoney.multiply(firstRate));
+			BigDecimal renewRate = BigDecimal.valueOf(renewOrderRate).divide(BigDecimal.valueOf(100));
+			takeMoney = orderMoney.multiply(renewRate);
 		}
 		record.setTakeMoney(takeMoney);
 		return record;

+ 24 - 9
netflix-service/src/main/java/com/cyksj/service/mange/business/impl/UserBusinessRateServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.mapper.manage.distribute.UserDistributeBusinessRateMapper;
 import com.cyksj.model.entity.UserDistributeBusinessRate;
 import com.cyksj.model.views.CmsUserVO;
+import com.cyksj.model.views.GoodsDonSkuView;
 import com.cyksj.service.mange.business.UserBusinessRateService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.param.Operator;
@@ -13,6 +14,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /*
  *项目名: netflix
  *文件名: UserBusinessRateServiceImpl
@@ -30,17 +33,29 @@ public class UserBusinessRateServiceImpl implements UserBusinessRateService {
 	@Override
 	public void saveBusinessRate(Long businessId) {
 		if (businessId != null) {
-			UserDistributeBusinessRate businessRate = userDistributeBusinessRateMapper.selectOne(Wrappers.lambdaQuery(UserDistributeBusinessRate.class)
-					.eq(UserDistributeBusinessRate::getBusinessId, businessId).last("limit 1"));
-			if (businessRate == null) {
-				try {
-					businessRate = new UserDistributeBusinessRate();
-					businessRate.setBusinessId(businessId);
-					userDistributeBusinessRateMapper.insert(businessRate);
-				} catch (DuplicateKeyException e) {
+			List<GoodsDonSkuView> goodsDonSkuList = beanSearcher.searchAll(GoodsDonSkuView.class, MapUtils.builder().field(GoodsDonSkuView::getType, 1)
+					.field(GoodsDonSkuView::getGoodsDonDeleted, true)
+					.field(GoodsDonSkuView::getSkuId).op(Operator.NotNull)
+					.build());
+			goodsDonSkuList.forEach(goodsDonSku -> {
+				Long goodsId = goodsDonSku.getGoodsId();
+				Long skuId = goodsDonSku.getSkuId();
+				UserDistributeBusinessRate businessRate = userDistributeBusinessRateMapper.selectOne(Wrappers.lambdaQuery(UserDistributeBusinessRate.class)
+						.eq(UserDistributeBusinessRate::getGoodsId, goodsId)
+						.eq(UserDistributeBusinessRate::getSkuId, skuId)
+						.eq(UserDistributeBusinessRate::getBusinessId, businessId).last("limit 1"));
+				if (businessRate == null) {
+					try {
+						businessRate = new UserDistributeBusinessRate();
+						businessRate.setBusinessId(businessId);
+						businessRate.setGoodsId(goodsId);
+						businessRate.setSkuId(skuId);
+						userDistributeBusinessRateMapper.insert(businessRate);
+					} catch (DuplicateKeyException e) {
 
+					}
 				}
-			}
+			});
 		}
 	}
 

+ 4 - 1
netflix-service/src/main/java/com/cyksj/service/mange/cms/CmsUserManager.java

@@ -2,6 +2,7 @@ package com.cyksj.service.mange.cms;
 
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.mapper.manage.cms.CmsMenuMapper;
 import com.cyksj.mapper.manage.cms.CmsRoleMapper;
 import com.cyksj.mapper.manage.cms.CmsUserMapper;
@@ -47,6 +48,8 @@ public class CmsUserManager {
 
 	private final UserBusinessRateService userBusinessRateService;
 
+	private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
+
 	public CmsUser getUser(Long account) {
 		return selectCacheByTemplate(() -> cacheService.getUserCache(account), () -> cmsUserMapper.selectById(account));
 	}
@@ -108,7 +111,7 @@ public class CmsUserManager {
 		Arrays.stream(roleIds.split(",")).collect(Collectors.toSet()).forEach(roleId -> {
 			CmsRole cmsRole = cmsRoleMapper.selectById(roleId);
 			if (cmsRole != null && cmsRole.getRoleName().contains("商务")) {
-				userBusinessRateService.saveBusinessRate(userId);
+				TASK_EXECUTOR.execute(() -> userBusinessRateService.saveBusinessRate(userId));
 			}
 			cmsUserRoleMapper.insert(new CmsUserRole(userId, Long.valueOf(roleId)));
 		});

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

@@ -1566,7 +1566,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 					distributeWaitingSendPoints.setSendStatus(DistributeWaitingSendPoints.Status.waiting);
 					distributeWaitingSendPoints.setSendTime(DateUtil.offsetDay(order.getPayTime(), 3));
 					distributeWaitingSendPointsMapper.insert(distributeWaitingSendPoints);
-					//暂定续费 商务可首单提成
+					//暂定虚物 商务可首单提成
 					if (businessId != null && goodsDon.getType() == 1) {
 						//给商务人员 分配提成权益
 						userBusinessFrontService.taskDistributeRateBenefits(userDistributeShared.getSharedId(), businessId, order);

+ 2 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/cms/CmsAdminUserController.java

@@ -34,6 +34,7 @@ import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.dao.DuplicateKeyException;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -86,6 +87,7 @@ public class CmsAdminUserController {
 
 	@PostMapping("/post")
 	@Log(module = "用户管理/新增用户", businessType = BusinessType.POST, isSaveRequestData = true)
+	@Transactional(rollbackFor = Throwable.class)
 	public Result<String> saveAdmin(@RequestBody @Validated CmsUserReq cmsUserReq) throws Exception {
 		Long adminId = StpUtil.getLoginIdAsLong();
 		CmsUser exist = cmsUserMapper.selectById(adminId);

+ 18 - 7
netflix-web/src/main/java/com/cyksj/web/controller/manage/distribute/DistributeController.java

@@ -33,6 +33,7 @@ import com.ejlchina.searcher.util.MapBuilder;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -378,9 +379,10 @@ public class DistributeController {
 	 */
 	@GetMapping("/get/business/rate")
 	@SaCheckPermission("distribute:businessRateView")
-	public Result<UserDistributeBusinessRate> getUserDistributeBusinessRateDetail(Long businessId) {
-		UserDistributeBusinessRate userDistributeBusinessRate = beanSearcher.searchFirst(UserDistributeBusinessRate.class, MapUtils.builder()
+	public Result<List<UserDistributeBusinessRate>> getUserDistributeBusinessRateDetail(Long businessId) {
+		List<UserDistributeBusinessRate> userDistributeBusinessRate = beanSearcher.searchAll(UserDistributeBusinessRate.class, MapUtils.builder()
 				.field(UserDistributeBusinessRate::getBusinessId, businessId)
+				.orderBy(UserDistributeBusinessRate::getGoodsId).asc()
 				.build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(userDistributeBusinessRate);
 	}
@@ -390,11 +392,20 @@ public class DistributeController {
 	 */
 	@PutMapping("/put/business/rate")
 	@Log(module = "分销管理/修改商务人员比例", businessType = BusinessType.PUT, isSaveRequestData = true)
-	public Result<String> updateBusinessRate(@RequestBody @Validated UserDistributeBusinessRate userDistributeBusinessRate) {
-		Long rateId = userDistributeBusinessRate.getId();
-		UserDistributeBusinessRate businessRate = userDistributeBusinessRateMapper.selectById(rateId);
-		BeanUtil.copyProperties(userDistributeBusinessRate, businessRate);
-		userDistributeBusinessRateMapper.updateById(businessRate);
+	public Result<String> updateBusinessRate(@RequestBody @Validated List<UserDistributeBusinessRate> rates) {
+		rates.forEach(userDistributeBusinessRate->{
+			Long rateId = userDistributeBusinessRate.getId();
+			UserDistributeBusinessRate businessRate = Optional.ofNullable(userDistributeBusinessRateMapper.selectById(rateId)).orElse(new UserDistributeBusinessRate());
+			BeanUtil.copyProperties(userDistributeBusinessRate, businessRate);
+			if (businessRate == null) {
+				try {
+					userDistributeBusinessRateMapper.insert(businessRate);
+				} catch (DuplicateKeyException e) {
+				}
+			} else {
+				userDistributeBusinessRateMapper.updateById(businessRate);
+			}
+		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult("修改比例成功");
 	}