mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
新增软件购买-购买方式列表关联对应的优惠活动展示赠送时间
This commit is contained in:
+6
@@ -25,6 +25,12 @@ public class ProductDetailsRespVO {
|
|||||||
@Schema(description = "产品时长单位,0:年、1:月", example = "1")
|
@Schema(description = "产品时长单位,0:年、1:月", example = "1")
|
||||||
private Integer durationUnit;
|
private Integer durationUnit;
|
||||||
|
|
||||||
|
@Schema(description = "赠送时长", example = "1")
|
||||||
|
private Integer giftDuration;
|
||||||
|
|
||||||
|
@Schema(description = "赠送时长单位,0:年、1:月", example = "1")
|
||||||
|
private Integer giftDurationUnit;
|
||||||
|
|
||||||
@Schema(description = "产品原价", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
@Schema(description = "产品原价", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||||
private BigDecimal originalPrice;
|
private BigDecimal originalPrice;
|
||||||
|
|
||||||
|
|||||||
+46
-4
@@ -24,6 +24,7 @@ import com.cf.imes.module.system.controller.admin.funds.purchase.vo.SalesDetailR
|
|||||||
import com.cf.imes.module.system.controller.admin.funds.purchase.vo.SalesDetailsPageReqVO;
|
import com.cf.imes.module.system.controller.admin.funds.purchase.vo.SalesDetailsPageReqVO;
|
||||||
import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganCreateProductPurchaseReqVO;
|
import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganCreateProductPurchaseReqVO;
|
||||||
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageSalesTotalStatisticRespVO;
|
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageSalesTotalStatisticRespVO;
|
||||||
|
import com.cf.imes.module.system.dal.dataobject.funds.productpromotion.ProductPromotionDO;
|
||||||
import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDO;
|
import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDO;
|
||||||
import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDetailDO;
|
import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDetailDO;
|
||||||
import com.cf.imes.module.system.dal.dataobject.funds.purchase.PurchaseRecordDO;
|
import com.cf.imes.module.system.dal.dataobject.funds.purchase.PurchaseRecordDO;
|
||||||
@@ -36,6 +37,7 @@ import com.cf.imes.module.system.enums.pay.PurchaseRecordStatusEnum;
|
|||||||
import com.cf.imes.module.system.enums.pay.TradeTypeEnum;
|
import com.cf.imes.module.system.enums.pay.TradeTypeEnum;
|
||||||
import com.cf.imes.module.system.framework.snowflake.config.MybatisIdProperties;
|
import com.cf.imes.module.system.framework.snowflake.config.MybatisIdProperties;
|
||||||
import com.cf.imes.module.system.service.funds.delay.ProductDelayService;
|
import com.cf.imes.module.system.service.funds.delay.ProductDelayService;
|
||||||
|
import com.cf.imes.module.system.service.funds.productpromotion.ProductPromotionService;
|
||||||
import com.cf.imes.module.system.service.funds.products.ProductsDetailService;
|
import com.cf.imes.module.system.service.funds.products.ProductsDetailService;
|
||||||
import com.cf.imes.module.system.service.organ.OrganService;
|
import com.cf.imes.module.system.service.organ.OrganService;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
@@ -84,6 +86,9 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|||||||
@Lazy
|
@Lazy
|
||||||
private ProductDelayService productDelayService;
|
private ProductDelayService productDelayService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ProductPromotionService productPromotionService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PurchaseRecordDO getRecord(Long id) {
|
public PurchaseRecordDO getRecord(Long id) {
|
||||||
return purchaseRecordMapper.selectById(id);
|
return purchaseRecordMapper.selectById(id);
|
||||||
@@ -351,10 +356,13 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|||||||
pageReqVO.setProductId(productId);
|
pageReqVO.setProductId(productId);
|
||||||
PageResult<ProductsDetailDO> page = productsDetailService.getPage(pageReqVO);
|
PageResult<ProductsDetailDO> page = productsDetailService.getPage(pageReqVO);
|
||||||
|
|
||||||
|
// 查询可用的产品对应优惠活动
|
||||||
|
List<ProductPromotionDO> availableProductPromotionList = productPromotionService.getAvailableProductPromotionList(productId);
|
||||||
|
|
||||||
// 查询组织下的首次订购产品记录
|
// 查询组织下的首次订购产品记录
|
||||||
PurchaseRecordDO orgInitialPurchaseRecord = getOrgInitialPurchaseRecord(organId, productId);
|
PurchaseRecordDO orgInitialPurchaseRecord = getOrgInitialPurchaseRecord(organId, productId);
|
||||||
if (ObjectUtil.isNull(orgInitialPurchaseRecord)) {
|
if (ObjectUtil.isNull(orgInitialPurchaseRecord)) {
|
||||||
return getInitialProductDetailList(productsDO, page.getList());
|
return getInitialProductDetailList(productsDO, page.getList(), availableProductPromotionList);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ProductDetailsRespVO> resultList = new ArrayList<>();
|
List<ProductDetailsRespVO> resultList = new ArrayList<>();
|
||||||
@@ -370,8 +378,10 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|||||||
// 折扣
|
// 折扣
|
||||||
BigDecimal discount = detailDO.getDiscount();
|
BigDecimal discount = detailDO.getDiscount();
|
||||||
|
|
||||||
|
Integer durationUnit = detailDO.getDurationUnit();
|
||||||
|
|
||||||
// 重新计算购买价格
|
// 重新计算购买价格
|
||||||
switch (ProductDurationUnitEnum.fromStatus(detailDO.getDurationUnit())) {
|
switch (ProductDurationUnitEnum.fromStatus(durationUnit)) {
|
||||||
case YEAR -> {
|
case YEAR -> {
|
||||||
Integer duration = detailDO.getDuration();
|
Integer duration = detailDO.getDuration();
|
||||||
// 原价
|
// 原价
|
||||||
@@ -379,6 +389,8 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|||||||
newDetailRespVO.setOriginalPrice(originalPrice);
|
newDetailRespVO.setOriginalPrice(originalPrice);
|
||||||
// 折扣价格
|
// 折扣价格
|
||||||
newDetailRespVO.setCurrentPrice(originalPrice.multiply(discount).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN));
|
newDetailRespVO.setCurrentPrice(originalPrice.multiply(discount).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN));
|
||||||
|
// 补充优惠活动赠送时长
|
||||||
|
fillGiftDurationFromPromotion(duration, durationUnit, newDetailRespVO, availableProductPromotionList);
|
||||||
productDetailRespVOList.add(newDetailRespVO);
|
productDetailRespVOList.add(newDetailRespVO);
|
||||||
}
|
}
|
||||||
default -> {
|
default -> {
|
||||||
@@ -393,6 +405,8 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|||||||
oneYearRespVO.setDurationUnit(ProductDurationUnitEnum.YEAR.getCode());
|
oneYearRespVO.setDurationUnit(ProductDurationUnitEnum.YEAR.getCode());
|
||||||
oneYearRespVO.setCurrentPrice(productsDO.getPrice());
|
oneYearRespVO.setCurrentPrice(productsDO.getPrice());
|
||||||
oneYearRespVO.setOriginalPrice(productsDO.getPrice());
|
oneYearRespVO.setOriginalPrice(productsDO.getPrice());
|
||||||
|
// 补充优惠活动赠送时长
|
||||||
|
fillGiftDurationFromPromotion(1, ProductDurationUnitEnum.YEAR.getCode(), oneYearRespVO, availableProductPromotionList);
|
||||||
productDetailRespVOList.add(oneYearRespVO);
|
productDetailRespVOList.add(oneYearRespVO);
|
||||||
}
|
}
|
||||||
// 默认展示1到10月的价格
|
// 默认展示1到10月的价格
|
||||||
@@ -419,9 +433,10 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|||||||
*
|
*
|
||||||
* @param productsDO
|
* @param productsDO
|
||||||
* @param productsDetailDOS
|
* @param productsDetailDOS
|
||||||
|
* @param availableProductPromotionList
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private List<ProductDetailsRespVO> getInitialProductDetailList(ProductsDO productsDO, List<ProductsDetailDO> productsDetailDOS) {
|
private List<ProductDetailsRespVO> getInitialProductDetailList(ProductsDO productsDO, List<ProductsDetailDO> productsDetailDOS, List<ProductPromotionDO> availableProductPromotionList) {
|
||||||
List<ProductDetailsRespVO> resultList = new ArrayList<>();
|
List<ProductDetailsRespVO> resultList = new ArrayList<>();
|
||||||
// 没有首次购买记录的产品,展示的总价是产品建议价格
|
// 没有首次购买记录的产品,展示的总价是产品建议价格
|
||||||
// 1年定价
|
// 1年定价
|
||||||
@@ -437,8 +452,11 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|||||||
ProductDetailsRespVO newDetailRespVO = BeanUtils.toBean(detailDO, ProductDetailsRespVO.class);
|
ProductDetailsRespVO newDetailRespVO = BeanUtils.toBean(detailDO, ProductDetailsRespVO.class);
|
||||||
// 折扣
|
// 折扣
|
||||||
BigDecimal discount = detailDO.getDiscount();
|
BigDecimal discount = detailDO.getDiscount();
|
||||||
|
|
||||||
|
Integer durationUnit = detailDO.getDurationUnit();
|
||||||
|
|
||||||
// 重新计算购买价格
|
// 重新计算购买价格
|
||||||
switch (ProductDurationUnitEnum.fromStatus(detailDO.getDurationUnit())) {
|
switch (ProductDurationUnitEnum.fromStatus(durationUnit)) {
|
||||||
case YEAR -> {
|
case YEAR -> {
|
||||||
Integer duration = detailDO.getDuration();
|
Integer duration = detailDO.getDuration();
|
||||||
// 原价
|
// 原价
|
||||||
@@ -446,6 +464,8 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|||||||
newDetailRespVO.setOriginalPrice(originalPrice);
|
newDetailRespVO.setOriginalPrice(originalPrice);
|
||||||
// 折扣价格
|
// 折扣价格
|
||||||
newDetailRespVO.setCurrentPrice(originalPrice.multiply(discount).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN));
|
newDetailRespVO.setCurrentPrice(originalPrice.multiply(discount).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN));
|
||||||
|
// 补充优惠活动赠送时长
|
||||||
|
fillGiftDurationFromPromotion(duration, durationUnit, newDetailRespVO, availableProductPromotionList);
|
||||||
productDetailRespVOList.add(newDetailRespVO);
|
productDetailRespVOList.add(newDetailRespVO);
|
||||||
}
|
}
|
||||||
default -> {
|
default -> {
|
||||||
@@ -461,6 +481,8 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|||||||
oneYearRespVO.setDurationUnit(ProductDurationUnitEnum.YEAR.getCode());
|
oneYearRespVO.setDurationUnit(ProductDurationUnitEnum.YEAR.getCode());
|
||||||
oneYearRespVO.setCurrentPrice(productsDO.getPrice());
|
oneYearRespVO.setCurrentPrice(productsDO.getPrice());
|
||||||
oneYearRespVO.setOriginalPrice(productsDO.getPrice());
|
oneYearRespVO.setOriginalPrice(productsDO.getPrice());
|
||||||
|
// 补充优惠活动赠送时长
|
||||||
|
fillGiftDurationFromPromotion(1, ProductDurationUnitEnum.YEAR.getCode(), oneYearRespVO, availableProductPromotionList);
|
||||||
productDetailRespVOList.add(oneYearRespVO);
|
productDetailRespVOList.add(oneYearRespVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -482,6 +504,26 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|||||||
return resultList;
|
return resultList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 填充优惠活动的赠送时间
|
||||||
|
*
|
||||||
|
* @param duration
|
||||||
|
* @param durationUnit
|
||||||
|
* @param productDetailsRespVO
|
||||||
|
* @param availableProductPromotionList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private ProductDetailsRespVO fillGiftDurationFromPromotion(Integer duration, Integer durationUnit, ProductDetailsRespVO productDetailsRespVO, List<ProductPromotionDO> availableProductPromotionList) {
|
||||||
|
// 补充优惠活动的赠送时间
|
||||||
|
Optional<ProductPromotionDO> promotionOpt = availableProductPromotionList.stream().filter(p -> p.getPurchaseDuration().equals(duration) && p.getPurchaseDurationUnit().equals(durationUnit)).findFirst();
|
||||||
|
if (promotionOpt.isPresent()) {
|
||||||
|
ProductPromotionDO productPromotionDO = promotionOpt.get();
|
||||||
|
productDetailsRespVO.setGiftDuration(productPromotionDO.getGiftDuration());
|
||||||
|
productDetailsRespVO.setGiftDurationUnit(productPromotionDO.getGiftDurationUnit());
|
||||||
|
}
|
||||||
|
return productDetailsRespVO;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void invalidHistoryOrganProductPurchaseRecord(Long organId, Long purchaseRecordId) {
|
public void invalidHistoryOrganProductPurchaseRecord(Long organId, Long purchaseRecordId) {
|
||||||
purchaseRecordMapper.update(new LambdaUpdateWrapper<PurchaseRecordDO>()
|
purchaseRecordMapper.update(new LambdaUpdateWrapper<PurchaseRecordDO>()
|
||||||
|
|||||||
Reference in New Issue
Block a user