From 3d237ccfcc5aa5534bda80131287e1562e2e0ad3 Mon Sep 17 00:00:00 2001 From: Cui Zhi Feng <7426394+wuxixiaocui@user.noreply.gitee.com> Date: 星期五, 30 八月 2024 15:51:32 +0800 Subject: [PATCH] 会员价展示 --- src/main/java/com/mzl/flower/service/BaseService.java | 39 +++++++++++++ src/main/java/com/mzl/flower/service/flower/FlowerCategoryService.java | 11 +++ src/main/java/com/mzl/flower/service/payment/OrderService.java | 13 ++++ src/main/java/com/mzl/flower/dto/response/flower/FlowerShowListDTO.java | 5 + src/main/java/com/mzl/flower/dto/response/flower/FlowerCategoryTreeDTO.java | 6 ++ src/main/java/com/mzl/flower/service/flower/FlowerService.java | 50 +++++++++++----- src/main/java/com/mzl/flower/dto/response/flower/FlowerShowDTO.java | 5 + src/main/java/com/mzl/flower/dto/response/flower/FlowerCartListWrapDTO.java | 2 src/main/java/com/mzl/flower/dto/response/flower/FlowerCartListDTO.java | 6 ++ 9 files changed, 120 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/mzl/flower/dto/response/flower/FlowerCartListDTO.java b/src/main/java/com/mzl/flower/dto/response/flower/FlowerCartListDTO.java index 4063993..74e15a2 100644 --- a/src/main/java/com/mzl/flower/dto/response/flower/FlowerCartListDTO.java +++ b/src/main/java/com/mzl/flower/dto/response/flower/FlowerCartListDTO.java @@ -26,4 +26,10 @@ private Long paramId; private Integer realSales;//真实销量 + + @ApiModelProperty(value = "会员价") + private BigDecimal priceMember; + + @ApiModelProperty(value = "会员价总价") + private BigDecimal totalMember; } diff --git a/src/main/java/com/mzl/flower/dto/response/flower/FlowerCartListWrapDTO.java b/src/main/java/com/mzl/flower/dto/response/flower/FlowerCartListWrapDTO.java index fe52698..e14e221 100644 --- a/src/main/java/com/mzl/flower/dto/response/flower/FlowerCartListWrapDTO.java +++ b/src/main/java/com/mzl/flower/dto/response/flower/FlowerCartListWrapDTO.java @@ -14,7 +14,7 @@ @ApiModelProperty(value = "供应商名称") private String supplierName; - @ApiModelProperty(value = "供应商名称") + @ApiModelProperty(value = "商品列表") private List<FlowerCartListDTO> flowerList; } diff --git a/src/main/java/com/mzl/flower/dto/response/flower/FlowerCategoryTreeDTO.java b/src/main/java/com/mzl/flower/dto/response/flower/FlowerCategoryTreeDTO.java index 047dc51..93ababc 100644 --- a/src/main/java/com/mzl/flower/dto/response/flower/FlowerCategoryTreeDTO.java +++ b/src/main/java/com/mzl/flower/dto/response/flower/FlowerCategoryTreeDTO.java @@ -51,6 +51,12 @@ @ApiModelProperty(value = "最高价") private BigDecimal priceHigh; + @ApiModelProperty(value = "最低价(会员)") + private BigDecimal priceLowMember; + + @ApiModelProperty(value = "最高价(会员)") + private BigDecimal priceHighMember; + @ApiModelProperty(value = "库存") private Integer stock; diff --git a/src/main/java/com/mzl/flower/dto/response/flower/FlowerShowDTO.java b/src/main/java/com/mzl/flower/dto/response/flower/FlowerShowDTO.java index 76ace54..9eeced2 100644 --- a/src/main/java/com/mzl/flower/dto/response/flower/FlowerShowDTO.java +++ b/src/main/java/com/mzl/flower/dto/response/flower/FlowerShowDTO.java @@ -3,6 +3,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.math.BigDecimal; + @Data public class FlowerShowDTO extends FlowerSupplierDTO { @@ -29,4 +31,7 @@ private Integer shopnum; private Integer realSales;//真实销量 + + @ApiModelProperty(value = "会员价") + private BigDecimal priceMember; } diff --git a/src/main/java/com/mzl/flower/dto/response/flower/FlowerShowListDTO.java b/src/main/java/com/mzl/flower/dto/response/flower/FlowerShowListDTO.java index 1526929..d2d6d6f 100644 --- a/src/main/java/com/mzl/flower/dto/response/flower/FlowerShowListDTO.java +++ b/src/main/java/com/mzl/flower/dto/response/flower/FlowerShowListDTO.java @@ -3,6 +3,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.math.BigDecimal; + @Data public class FlowerShowListDTO extends FlowerSupplierListDTO { @@ -24,4 +26,7 @@ @ApiModelProperty(value = "是否推荐") private Boolean recommend; + + @ApiModelProperty(value = "会员价") + private BigDecimal priceMember; } diff --git a/src/main/java/com/mzl/flower/service/BaseService.java b/src/main/java/com/mzl/flower/service/BaseService.java index bd1d2cb..b796271 100644 --- a/src/main/java/com/mzl/flower/service/BaseService.java +++ b/src/main/java/com/mzl/flower/service/BaseService.java @@ -10,6 +10,7 @@ import com.mzl.flower.dto.response.payment.OrderSalesItemChargeDTO; import com.mzl.flower.entity.customer.Customer; import com.mzl.flower.entity.flower.*; +import com.mzl.flower.entity.menber.Member; import com.mzl.flower.entity.partner.Partner; import com.mzl.flower.entity.payment.FeeService; import com.mzl.flower.entity.payment.OrderItemSales; @@ -17,6 +18,7 @@ import com.mzl.flower.entity.supplier.Supplier; import com.mzl.flower.mapper.customer.CustomerMapper; import com.mzl.flower.mapper.flower.FlowerCategoryMapper; +import com.mzl.flower.mapper.member.MemberMapper; import com.mzl.flower.mapper.partner.PartnerMapper; import com.mzl.flower.mapper.supplier.SupplierMapper; import com.mzl.flower.mapper.system.UserMapper; @@ -25,6 +27,7 @@ import org.springframework.data.redis.core.RedisTemplate; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.*; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -56,6 +59,13 @@ @Autowired private FlowerCategoryMapper flowerCategoryMapper; + + @Autowired + private MemberMapper memberMapper; + + protected Member getMember(Long levelId){ + return memberMapper.selectById(levelId); + } protected double getServiceFeeRate(List<FeeService> fees, Integer saleCount){ int sc = saleCount == null ? 0 : saleCount; @@ -463,6 +473,35 @@ return p; } + /** + * 计算会员单价 + * + * @param price + * @param member + * @return + */ + protected BigDecimal calculateMemberPrice(BigDecimal price, Member member){ + if(price == null || member == null){ + return price; + } + BigDecimal r = price; + + String discountType = member.getDiscountType(); + if(Constants.DISCOUNT_TYPE.ratio.name().equals(discountType)){ + BigDecimal discountRatio = getAmount(member.getDiscountRatio()); + r = price.multiply(discountRatio).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); + } else if (Constants.DISCOUNT_TYPE.amount.name().equals(discountType)){ + BigDecimal discountAmount = getAmount(member.getDiscountAmount()); + r = price.subtract(discountAmount); + } + + if(r.doubleValue() < 0){ + r = new BigDecimal(0); + } + + return r; + } + protected Customer getCustomerByUserId(String userId){ Customer p = customerMapper.selectOne(new QueryWrapper<Customer>() .eq("user_id", userId)); diff --git a/src/main/java/com/mzl/flower/service/flower/FlowerCategoryService.java b/src/main/java/com/mzl/flower/service/flower/FlowerCategoryService.java index 3000ec0..41f590e 100644 --- a/src/main/java/com/mzl/flower/service/flower/FlowerCategoryService.java +++ b/src/main/java/com/mzl/flower/service/flower/FlowerCategoryService.java @@ -13,12 +13,15 @@ import com.mzl.flower.dto.response.flower.FlowerCategoryDTO; import com.mzl.flower.dto.response.flower.FlowerCategoryShowDTO; import com.mzl.flower.dto.response.flower.FlowerCategoryTreeDTO; +import com.mzl.flower.entity.customer.Customer; import com.mzl.flower.entity.flower.Flower; import com.mzl.flower.entity.flower.FlowerCategory; import com.mzl.flower.entity.flower.FlowerCategoryDaily; +import com.mzl.flower.entity.menber.Member; import com.mzl.flower.mapper.flower.FlowerCategoryDailyMapper; import com.mzl.flower.mapper.flower.FlowerCategoryMapper; import com.mzl.flower.mapper.flower.FlowerMapper; +import com.mzl.flower.mapper.member.MemberMapper; import com.mzl.flower.service.BaseService; import com.mzl.flower.utils.TreeBuilderUtil; import io.micrometer.core.instrument.util.StringUtils; @@ -154,7 +157,11 @@ List<FlowerCategoryTreeDTO> treeList = new ArrayList<>(); List<FlowerCategoryTreeDTO> result = new ArrayList<>(); if(tLs != null && tLs.size() > 0){ - Long partnerId = getCurrentCustomerPartner(); + Customer p = getCurrentCustomerWithoutCheck(); + Long partnerId = p == null ? null : p.getPartnerId(); + Long levelId = p == null ? null : p.getLevelId(); + Member member = getMember(levelId); + for(FlowerCategoryTreeDTO t : tLs){ if(t.getParentId() != null && t.getFlowerCount() == 0){ continue; @@ -165,6 +172,8 @@ JSONObject o = parseObject(ppp, JSONObject.class); t.setPriceLow(o.getBigDecimal("priceLow")); t.setPriceHigh(o.getBigDecimal("priceHigh")); + t.setPriceLowMember(calculateMemberPrice(t.getPriceLow(), member)); + t.setPriceHighMember(calculateMemberPrice(t.getPriceHigh(), member)); } treeList.add(t); diff --git a/src/main/java/com/mzl/flower/service/flower/FlowerService.java b/src/main/java/com/mzl/flower/service/flower/FlowerService.java index 77dbb9c..9c63b20 100644 --- a/src/main/java/com/mzl/flower/service/flower/FlowerService.java +++ b/src/main/java/com/mzl/flower/service/flower/FlowerService.java @@ -11,6 +11,7 @@ import com.mzl.flower.entity.customer.Collect; import com.mzl.flower.entity.customer.Customer; import com.mzl.flower.entity.flower.*; +import com.mzl.flower.entity.menber.Member; import com.mzl.flower.entity.payment.Cart; import com.mzl.flower.entity.payment.Order; import com.mzl.flower.entity.payment.OrderItem; @@ -467,20 +468,7 @@ dto.setUserId(SecurityUtils.getUserId()); dto.setParamId(paramService.getParamIdByCategoryId(dto.getCategory())); List<FlowerShowListDTO> ls = flowerMapper.selectFlowerShowList(page, dto); - if(ls != null && ls.size() > 0){ - Long partnerId = getCurrentCustomerPartner(); - for(FlowerShowListDTO s : ls){ - BigDecimal price = getFinalPrice(partnerId, s.getCategory() - , s.getId(), s.getPrice(), s.getLevel()); - s.setPrice(price); - s.setCollection(s.getCollectCount() > 0); - s.setShopnum(s.getShopnum() == null ? 0 : s.getShopnum()); - - if(s.getSales() != null && s.getRealSales() != null){ - s.setSales(s.getSales() + s.getRealSales()); - } - } - } + prepareShowList(ls); page.setRecords(ls); @@ -507,10 +495,14 @@ if(pId == null){ pId = getCurrentCustomerPartner(); } + Customer p = getCurrentCustomerWithoutCheck(); + Long levelId = p == null ? null : p.getLevelId(); + Member member = getMember(levelId); BigDecimal price = getFinalPrice(pId, dto.getCategory() , s.getId(), dto.getPrice(), dto.getLevel()); dto.setPrice(price); + dto.setPriceMember(calculateMemberPrice(price, member)); String userId = SecurityUtils.getUserId(); if(StringUtils.isNotEmpty(userId)) { @@ -611,8 +603,33 @@ dto.setParamId(paramService.getParamIdByCategoryId(dto.getCategory())); List<FlowerShowListDTO> flowerShowListDTOS = flowerMapper.myCollect(page, dto); + prepareShowList(flowerShowListDTOS); + page.setRecords(flowerShowListDTOS); return page; + } + + private void prepareShowList(List<FlowerShowListDTO> ls){ + if(ls != null && ls.size() > 0){ + Customer p = getCurrentCustomerWithoutCheck(); + Long partnerId = p == null ? null : p.getPartnerId(); + Long levelId = p == null ? null : p.getLevelId(); + Member member = getMember(levelId); + + for(FlowerShowListDTO s : ls){ + BigDecimal price = getFinalPrice(partnerId, s.getCategory() + , s.getId(), s.getPrice(), s.getLevel()); + s.setPrice(price); + s.setPriceMember(calculateMemberPrice(price, member)); + + s.setCollection(s.getCollectCount() > 0); + s.setShopnum(s.getShopnum() == null ? 0 : s.getShopnum()); + + if(s.getSales() != null && s.getRealSales() != null){ + s.setSales(s.getSales() + s.getRealSales()); + } + } + } } public Page<FlowerShowListDTO> myBrowseHistory(Page page, FlowerShowQueryDTO dto) { @@ -626,6 +643,8 @@ }*/ dto.setParamId(paramService.getParamIdByCategoryId(dto.getCategory())); List<FlowerShowListDTO> flowerShowListDTOS = flowerMapper.myBrowseHistory(page, dto); + prepareShowList(flowerShowListDTOS); + page.setRecords(flowerShowListDTOS); return page; } @@ -634,7 +653,8 @@ if(dto.getZoneId()!=null && dto.getZoneId().size()>0){//添加专区 for (Long zoneId : dto.getZoneId()) { for(Long flowerId : dto.getIds()) { - FlowerZoneMap fzp = flowerZoneMapMapper.selectOne(new QueryWrapper<FlowerZoneMap>().eq("flower_id", flowerId).eq("zone_id", zoneId)); + FlowerZoneMap fzp = flowerZoneMapMapper.selectOne(new QueryWrapper<FlowerZoneMap>() + .eq("flower_id", flowerId).eq("zone_id", zoneId)); if(fzp==null){ fzp = new FlowerZoneMap(); fzp.setFlowerId(flowerId); diff --git a/src/main/java/com/mzl/flower/service/payment/OrderService.java b/src/main/java/com/mzl/flower/service/payment/OrderService.java index 5866419..c9bab5f 100644 --- a/src/main/java/com/mzl/flower/service/payment/OrderService.java +++ b/src/main/java/com/mzl/flower/service/payment/OrderService.java @@ -24,6 +24,7 @@ import com.mzl.flower.entity.customer.Address; import com.mzl.flower.entity.customer.Customer; import com.mzl.flower.entity.flower.FlowerSupplierSaleNum; +import com.mzl.flower.entity.menber.Member; import com.mzl.flower.entity.partner.Partner; import com.mzl.flower.entity.payment.*; import com.mzl.flower.entity.supplier.Station; @@ -211,13 +212,18 @@ if (ls != null && ls.size() > 0) { Customer customer = getCurrentCustomer(); Long partnerId = customer.getPartnerId(); + Long levelId = customer.getLevelId(); + Member member = getMember(levelId); Map<Long, FlowerCartListWrapDTO> map = new HashMap<>(); for (FlowerCartListDTO c : ls) { BigDecimal price = getFinalPrice(partnerId, c.getCategory() , c.getId(), c.getPrice(), c.getLevel()); c.setPrice(price); + c.setPriceMember(calculateMemberPrice(price, member)); + c.setTotal(price.multiply(new BigDecimal(c.getNum()))); + c.setTotalMember(c.getPriceMember().multiply(new BigDecimal(c.getNum()))); if (c.getSales() != null && c.getRealSales() != null) { c.setSales(c.getSales() + c.getRealSales()); @@ -265,6 +271,8 @@ List<FlowerCartListDTO> ls = flowerMapper.selectFlowerOrderList(ids); Customer customer = getCurrentCustomer(); Long partnerId = customer.getPartnerId(); + Long levelId = customer.getLevelId(); + Member member = getMember(levelId); double totalWeight = 0D; int num = 0; @@ -288,7 +296,10 @@ , c.getId(), c.getPrice(), c.getLevel()); BigDecimal price = priceDTO.getPrice(); c.setPrice(price); + c.setPriceMember(calculateMemberPrice(price, member)); + c.setTotal(price.multiply(new BigDecimal(c.getNum()))); + c.setTotalMember(c.getPriceMember().multiply(new BigDecimal(c.getNum())));//使用会员价计算总价 if (priceMap != null) { priceMap.put(c.getId(), priceDTO); @@ -348,6 +359,8 @@ deliveryName = d.getName(); } + //TODO 优惠券和会员价相关修改 + String userId = SecurityUtils.getUserId(); Order order = new Order(); order.setId(UUIDGenerator.getUUID()); -- Gitblit v1.9.3