From ddf8a89cb0ea9a30eb7df04c3397c10fbe4aee06 Mon Sep 17 00:00:00 2001 From: Tankaikai Date: Wed, 19 Mar 2025 09:58:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/DataSummaryController.java | 1 + .../param/DataSummaryProductSaleParam.java | 10 +++ .../mapper/ShopOrderStatisticMapper.java | 13 +++ .../order/mapper/ShopProdStatisticMapper.java | 6 ++ .../service/impl/DataSummaryServiceImpl.java | 74 ++++++++++++++-- .../service/impl/SaleSummaryServiceImpl.java | 6 +- .../mapper/ShopOrderStatisticMapper.xml | 70 ++++++++++++++++ .../mapper/ShopProdStatisticMapper.xml | 84 +++++++++++++++++++ .../service/impl/ProductServiceImpl.java | 37 ++++++-- 9 files changed, 284 insertions(+), 17 deletions(-) diff --git a/cash-api/order-server/src/main/java/com/czg/controller/admin/DataSummaryController.java b/cash-api/order-server/src/main/java/com/czg/controller/admin/DataSummaryController.java index c4c511431..7b759b8aa 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/admin/DataSummaryController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/admin/DataSummaryController.java @@ -86,6 +86,7 @@ public class DataSummaryController { * @param day 天数 */ @GetMapping("datePayType") + @OperationLog("支付占比饼图 左下") @SaStaffCheckPermission("yun_xu_cha_kan_jing_ying_shu_ju") //@SaAdminCheckPermission("dataSummary:datePayType") public CzgResult shopSummaryPayType(@RequestParam Integer day) { diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/param/DataSummaryProductSaleParam.java b/cash-common/cash-common-service/src/main/java/com/czg/order/param/DataSummaryProductSaleParam.java index 9a8e97136..2b8a185a9 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/param/DataSummaryProductSaleParam.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/param/DataSummaryProductSaleParam.java @@ -36,5 +36,15 @@ public class DataSummaryProductSaleParam implements Serializable { */ @JSONField(serialize = false) private Long shopId; + /** + * 开始日期 + */ + @JSONField(serialize = false) + private String beginDate; + /** + * 结束日期 + */ + @JSONField(serialize = false) + private String endDate; } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopOrderStatisticMapper.java b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopOrderStatisticMapper.java index 7868e9992..88694049c 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopOrderStatisticMapper.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopOrderStatisticMapper.java @@ -3,6 +3,11 @@ package com.czg.service.order.mapper; import com.czg.order.entity.ShopOrderStatistic; import com.czg.order.param.DataSummaryTradeParam; import com.mybatisflex.core.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; /** * 映射层。 @@ -10,9 +15,17 @@ import com.mybatisflex.core.BaseMapper; * @author zs * @since 2025-03-07 */ +@Mapper public interface ShopOrderStatisticMapper extends BaseMapper { ShopOrderStatistic getTradeData(DataSummaryTradeParam param); long getNewMemberCount(DataSummaryTradeParam param); + List> getPayTypeAmountCount(DataSummaryTradeParam param); + + List> getVipRechargeAmountCount(DataSummaryTradeParam param); + + BigDecimal getCustomerUnitPrice(DataSummaryTradeParam param); + + BigDecimal getTableTurnoverRate(DataSummaryTradeParam param); } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopProdStatisticMapper.java b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopProdStatisticMapper.java index f857ebe80..960afacd1 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopProdStatisticMapper.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopProdStatisticMapper.java @@ -20,8 +20,14 @@ public interface ShopProdStatisticMapper extends BaseMapper { List findProdRandingSummaryPage(DataSummaryProductSaleParam param); + List findProdRandingSummaryPage2(DataSummaryProductSaleParam param); + SaleSummaryCountVo getSaleSummaryCount(SaleSummaryCountParam param); + SaleSummaryCountVo getSaleSummaryCount2(SaleSummaryCountParam param); + List findSaleSummaryList(SaleSummaryCountParam param); + List findSaleSummaryList2(SaleSummaryCountParam param); + } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DataSummaryServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DataSummaryServiceImpl.java index a9b819c66..14c7747de 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DataSummaryServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DataSummaryServiceImpl.java @@ -1,7 +1,10 @@ package com.czg.service.order.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DatePattern; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ReflectUtil; import com.czg.order.entity.OrderInfo; import com.czg.order.entity.ShopOrderStatistic; import com.czg.order.enums.PayEnums; @@ -22,9 +25,13 @@ import com.mybatisflex.core.query.QueryWrapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 数据统计Service实现类 @@ -44,15 +51,66 @@ public class DataSummaryServiceImpl implements DataSummaryService { @Override public ShopOrderStatistic getTradeData(DataSummaryTradeParam param) { - ShopOrderStatistic shopOrderStatistic = shopOrderStatisticMapper.getTradeData(param); - if (shopOrderStatistic == null) { - shopOrderStatistic = new ShopOrderStatistic(); + List funs = Arrays.asList("getPayTypeAmountCount", "getVipRechargeAmountCount", "getNewMemberCount", "getCustomerUnitPrice", "getTableTurnoverRate"); + Map collect = funs.parallelStream().collect(Collectors.toMap(fun -> fun, fun -> + ReflectUtil.invoke(shopOrderStatisticMapper, fun, param) + )); + /*Map collect = new ConcurrentHashMap<>(); + for (String fun : funs) { + Object invoke = ReflectUtil.invoke(shopOrderStatisticMapper, fun, param); + collect.put(fun, ObjUtil.defaultIfNull(invoke,BigDecimal.ZERO)); + }*/ + ShopOrderStatistic data = new ShopOrderStatistic(); + //List> list = shopOrderStatisticMapper.getPayTypeAmountCount(param); + List> list = (List>) collect.get("getPayTypeAmountCount"); + if (CollUtil.isEmpty(list)) { + return data; } + Map sum = list.stream().collect(Collectors.toMap(item -> Convert.toStr(item.get("payType")), item -> Convert.toBigDecimal(item.get("amount")))); + Map count = list.stream().collect(Collectors.toMap(item -> Convert.toStr(item.get("payType")), item -> Convert.toLong(item.get("count")))); + data.setWechatPayAmount(sum.getOrDefault(PayEnums.WECHAT_MINI.getValue(), BigDecimal.ZERO)); + data.setWechatPayCount(count.getOrDefault(PayEnums.WECHAT_MINI.getValue(), 0L)); + data.setAliPayAmount(sum.getOrDefault(PayEnums.ALIPAY_MINI.getValue(), BigDecimal.ZERO)); + data.setAliPayCount(count.getOrDefault(PayEnums.ALIPAY_MINI.getValue(), 0L)); + data.setScanPayAmount(sum.getOrDefault(PayEnums.MAIN_SCAN.getValue(), BigDecimal.ZERO)); + data.setScanPayCount(count.getOrDefault(PayEnums.MAIN_SCAN.getValue(), 0L)); + data.setCashPayAmount(sum.getOrDefault(PayEnums.CASH_PAY.getValue(), BigDecimal.ZERO)); + data.setCashPayCount(count.getOrDefault(PayEnums.CASH_PAY.getValue(), 0L)); + data.setCreditPayAmount(sum.getOrDefault(PayEnums.CREDIT_PAY.getValue(), BigDecimal.ZERO)); + data.setCreditPayCount(count.getOrDefault(PayEnums.CREDIT_PAY.getValue(), 0L)); + //List> list1 = shopOrderStatisticMapper.getVipRechargeAmountCount(param); + List> list1 = (List>) collect.get("getVipRechargeAmountCount"); + Map sum1 = list1.stream().collect(Collectors.toMap(item -> Convert.toStr(item.get("bizCode")), item -> Convert.toBigDecimal(item.get("amount")))); + Map count1 = list1.stream().collect(Collectors.toMap(item -> Convert.toStr(item.get("bizCode")), item -> Convert.toLong(item.get("count")))); + data.setRechargeAmount(NumberUtil.add(sum1.getOrDefault("cashIn", BigDecimal.ZERO), sum1.getOrDefault("wechatIn", BigDecimal.ZERO), sum1.getOrDefault("alipayIn", BigDecimal.ZERO))); + data.setMemberPayAmount(sum1.getOrDefault("orderPay", BigDecimal.ZERO).abs()); + data.setMemberPayCount(count1.getOrDefault("orderPay", 0L)); + data.setSaleAmount(NumberUtil.add(data.getWechatPayAmount(), data.getAliPayAmount(), data.getScanPayAmount(), data.getCashPayAmount(), data.getCreditPayAmount())); + BigDecimal refundAmount = list.stream().filter(item -> item.get("payType") != null).map(item -> Convert.toBigDecimal(item.get("refund"), BigDecimal.ZERO)).reduce(BigDecimal.ZERO, BigDecimal::add); + data.setRefundAmount(refundAmount); + long refundCount = list.stream().filter(item -> item.get("payType") != null).map(item -> Convert.toLong(item.get("refundCount"), 0L)).reduce(0L, Long::sum); + data.setRefundCount(refundCount); + //long newMemberCount = shopOrderStatisticMapper.getNewMemberCount(param); + long newMemberCount = (long) collect.get("getNewMemberCount"); + data.setNewMemberCount(newMemberCount); + //BigDecimal customerUnitPrice = shopOrderStatisticMapper.getCustomerUnitPrice(param); + BigDecimal customerUnitPrice = (BigDecimal) collect.get("getCustomerUnitPrice"); + data.setCustomerUnitPrice(NumberUtil.nullToZero(customerUnitPrice).setScale(2, java.math.RoundingMode.HALF_UP)); + //BigDecimal tableTurnoverRate = shopOrderStatisticMapper.getTableTurnoverRate(param); + BigDecimal tableTurnoverRate = (BigDecimal) collect.get("getTableTurnoverRate"); + data.setTableTurnoverRate(tableTurnoverRate); + BigDecimal discountAmount = list.stream().filter(item -> item.get("payType") != null).map(item -> Convert.toBigDecimal(item.get("discount"), BigDecimal.ZERO)).reduce(BigDecimal.ZERO, BigDecimal::add); + long discountCount = list.stream().filter(item -> item.get("payType") != null).map(item -> Convert.toLong(item.get("discountCount"), 0L)).reduce(0L, Long::sum); + data.setDiscountAmount(discountAmount); + data.setDiscountCount(discountCount); + return data; + + /*ShopOrderStatistic shopOrderStatistic = shopOrderStatisticMapper.getTradeData(param); + long newMemberCount = shopOrderStatisticMapper.getNewMemberCount(param); + data.setNewMemberCount(newMemberCount); shopOrderStatistic.setCustomerUnitPrice(shopOrderStatistic.getCustomerUnitPrice().setScale(2, java.math.RoundingMode.HALF_UP)); shopOrderStatistic.setTableTurnoverRate(shopOrderStatistic.getTableTurnoverRate().setScale(2, java.math.RoundingMode.HALF_UP)); - long newMemberCount = shopOrderStatisticMapper.getNewMemberCount(param); - shopOrderStatistic.setNewMemberCount(newMemberCount); - return shopOrderStatistic; + return shopOrderStatistic;*/ } @Override @@ -66,8 +124,10 @@ public class DataSummaryServiceImpl implements DataSummaryService { days.add(thisDay); } param.setDays(days); + param.setBeginDate(days.getFirst() + " 00:00:00"); + param.setEndDate(days.getLast() + " 23:59:59"); PageHelper.startPage(PageUtil.buildPageHelp()); - PageInfo pageInfo = new PageInfo<>(shopProdStatisticMapper.findProdRandingSummaryPage(param)); + PageInfo pageInfo = new PageInfo<>(shopProdStatisticMapper.findProdRandingSummaryPage2(param)); return PageUtil.convert(pageInfo); } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/SaleSummaryServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/SaleSummaryServiceImpl.java index e8c62aa6d..2b2f6d6a5 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/SaleSummaryServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/SaleSummaryServiceImpl.java @@ -27,7 +27,7 @@ public class SaleSummaryServiceImpl implements SaleSummaryService { @Override public SaleSummaryCountVo summaryCount(SaleSummaryCountParam param) { - SaleSummaryCountVo saleSummaryCount = shopProdStatisticMapper.getSaleSummaryCount(param); + SaleSummaryCountVo saleSummaryCount = shopProdStatisticMapper.getSaleSummaryCount2(param); if (saleSummaryCount == null) { saleSummaryCount = new SaleSummaryCountVo(); } @@ -37,12 +37,12 @@ public class SaleSummaryServiceImpl implements SaleSummaryService { @Override public Page summaryPage(SaleSummaryCountParam param) { PageHelper.startPage(PageUtil.buildPageHelp()); - PageInfo pageInfo = new PageInfo<>(shopProdStatisticMapper.findSaleSummaryList(param)); + PageInfo pageInfo = new PageInfo<>(shopProdStatisticMapper.findSaleSummaryList2(param)); return PageUtil.convert(pageInfo); } @Override public List summaryList(SaleSummaryCountParam param) { - return shopProdStatisticMapper.findSaleSummaryList(param); + return shopProdStatisticMapper.findSaleSummaryList2(param); } } diff --git a/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml b/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml index 1ddf8dca3..0a2153b78 100644 --- a/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml +++ b/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml @@ -50,4 +50,74 @@ ]]> + + + + diff --git a/cash-service/order-service/src/main/resources/mapper/ShopProdStatisticMapper.xml b/cash-service/order-service/src/main/resources/mapper/ShopProdStatisticMapper.xml index af18069ea..160ac40a7 100644 --- a/cash-service/order-service/src/main/resources/mapper/ShopProdStatisticMapper.xml +++ b/cash-service/order-service/src/main/resources/mapper/ShopProdStatisticMapper.xml @@ -74,4 +74,88 @@ group by t1.prod_id ORDER BY sum( t1.sale_count ) DESC,max(t1.id) DESC + + + diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java index b8cd0e8da..c6b84450c 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java @@ -352,7 +352,11 @@ public class ProductServiceImpl extends ServiceImpl impl } prodSku.setIsGrounding(isSale); prodSkuMapper.update(prodSku); - long normalCount = prodSkuMapper.selectCountByQuery(QueryWrapper.create().eq(ProdSku::getProductId, prodSku.getProductId()).eq(ProdSku::getIsDel, DeleteEnum.NORMAL.value())); + long normalCount = prodSkuMapper.selectCountByQuery(QueryWrapper.create() + .eq(ProdSku::getProductId, prodSku.getProductId()) + .eq(ProdSku::getIsGrounding, YesNoEnum.NO.value()) + .eq(ProdSku::getIsDel, DeleteEnum.NORMAL.value()) + ); if (normalCount == 0) { UpdateChain.of(Product.class) .set(Product::getIsSale, isSale) @@ -388,17 +392,36 @@ public class ProductServiceImpl extends ServiceImpl impl String type = param.getType(); Long id = param.getId(); Integer isSoldOut = param.getIsSoldOut(); - UpdateChain.of(ProdSku.class) - .set(ProdSku::getIsPauseSale, isSoldOut) - .eq(ProdSku::getId, id) - .eq(ProdSku::getShopId, shopId) - .update(); - if (ProductIsSaleTypeEnum.PRODUCT.value().equals(type)) { + if (ProductIsSaleTypeEnum.SKU.value().equals(type)) { + ProdSku prodSku = prodSkuMapper.selectOneById(id); + if (prodSku == null) { + throw new CzgException("SKU不存在"); + } + prodSku.setIsPauseSale(isSoldOut); + prodSkuMapper.update(prodSku); + long normalCount = prodSkuMapper.selectCountByQuery(QueryWrapper.create() + .eq(ProdSku::getProductId, prodSku.getProductId()) + .eq(ProdSku::getIsPauseSale, YesNoEnum.NO.value()) + .eq(ProdSku::getIsDel, DeleteEnum.NORMAL.value()) + ); + if (normalCount == 0) { + UpdateChain.of(Product.class) + .set(Product::getIsSoldStock, isSoldOut) + .eq(Product::getId, prodSku.getProductId()) + .eq(Product::getShopId, shopId) + .update(); + } + } else if (ProductIsSaleTypeEnum.PRODUCT.value().equals(type)) { UpdateChain.of(Product.class) .set(Product::getIsSoldStock, isSoldOut) .eq(Product::getId, id) .eq(Product::getShopId, shopId) .update(); + UpdateChain.of(ProdSku.class) + .set(ProdSku::getIsPauseSale, isSoldOut) + .eq(ProdSku::getProductId, id) + .eq(ProdSku::getShopId, shopId) + .update(); } }