From 933c5dd8ed6715290c6863a8a8d2797582f62af7 Mon Sep 17 00:00:00 2001 From: zxl <763096477@qq.com> Date: 星期一, 22 九月 2025 15:28:39 +0800 Subject: [PATCH] 调整订单页面,以及新增pvuv,订单统计接口 --- framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewServiceImpl.java | 1 framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java | 8 + framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java | 65 +++++++++++++ framework/src/main/java/cn/lili/modules/lmk/enums/general/StatisticsSearchTypeEnum.java | 21 ++++ framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java | 9 + framework/src/main/java/cn/lili/modules/lmk/domain/vo/SelectVO.java | 26 +++++ framework/src/main/java/cn/lili/modules/statistics/entity/dto/StatisticsQueryParam.java | 4 framework/src/main/java/cn/lili/modules/lmk/domain/vo/PvUvVO.java | 31 ++++++ manager-api/src/main/java/cn/lili/controller/lmk/StatisticsController.java | 84 ++++++++++++++++ manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java | 26 +++++ framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java | 5 + 11 files changed, 278 insertions(+), 2 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PvUvVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PvUvVO.java new file mode 100644 index 0000000..f8fe8ef --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PvUvVO.java @@ -0,0 +1,31 @@ +package cn.lili.modules.lmk.domain.vo; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * lmk-shop-java + * + * @author : zxl + * @date : 2025-09-19 15:26 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PvUvVO { + + /** + * pv鎶樼嚎鍥炬暟鎹� + */ + private List<Long> pvData; + + /** + * uv鎶樼嚎鍥炬暟鎹� + */ + private List<Long> uvData; + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/SelectVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/SelectVO.java new file mode 100644 index 0000000..98e1022 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/SelectVO.java @@ -0,0 +1,26 @@ +package cn.lili.modules.lmk.domain.vo; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * lmk-shop-java + * + * @author : zxl + * @date : 2025-09-22 10:09 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SelectVO { + /** + * 涓嬫媺妗唅d + */ + private String id; + /** + * 涓嬫媺妗唋abel + */ + private String label; +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/StatisticsSearchTypeEnum.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/StatisticsSearchTypeEnum.java new file mode 100644 index 0000000..a6bbffe --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/StatisticsSearchTypeEnum.java @@ -0,0 +1,21 @@ +package cn.lili.modules.lmk.enums.general; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 缁熻鎼滅储绫诲瀷鏋氫妇 + */ +@Getter +@AllArgsConstructor +public enum StatisticsSearchTypeEnum { + + TODAY("浠婂ぉ"), + YESTERDAY("鏄ㄥぉ"), + LAST_SEVEN("杩囧幓涓冨ぉ"), + LAST_THIRTY("杩囧幓涓�涓湀"); + + private final String desc; + + +} diff --git a/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java index 98bb2f9..9834813 100644 --- a/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java @@ -14,6 +14,7 @@ import cn.lili.common.utils.BeanUtil; import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.SnowFlake; +import cn.lili.common.utils.StringUtils; import cn.lili.modules.order.aftersale.aop.AfterSaleLogPoint; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO; @@ -155,7 +156,13 @@ afterSaleApplyVO.setReturnGoods(false); } else { afterSaleApplyVO.setReturnMoney(true); - afterSaleApplyVO.setReturnGoods(true); + + if(StringUtils.isNotBlank(order.getOrderStatus()) && DeliverStatusEnum.UNDELIVERED.name().equals(order.getOrderStatus())){ + afterSaleApplyVO.setReturnGoods(false); + }else { + afterSaleApplyVO.setReturnGoods(true); + } + } afterSaleApplyVO.setAccountType(order.getPaymentMethod()); diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java index 87e1e94..898cfaf 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java @@ -119,6 +119,7 @@ private String couponFlag; + private String storeSelectId; public <T> QueryWrapper<T> queryWrapper() { AuthUser currentUser = UserContext.getCurrentUser(); @@ -128,6 +129,7 @@ if (CharSequenceUtil.isNotEmpty(keywords)) { wrapper.and(keyWrapper -> keyWrapper.like("o.sn", keywords).or().like("oi.goods_name", keywords)); } + //鏇村叿瑙掕壊鏌ヨ鐨� if (currentUser != null) { //鎸夊崠瀹舵煡璇� wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.STORE.name()), "o.store_id", currentUser.getStoreId()); @@ -140,6 +142,9 @@ wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.MEMBER.name()) && memberId == null, "o.member_id", currentUser.getId()); } + //鎸変笅鎷夋閫夋嫨鏌ヨ + wrapper.eq(CharSequenceUtil.isNotEmpty(storeSelectId), "o.store_id", storeSelectId); + //鎸夌収涔板鏌ヨ wrapper.like(CharSequenceUtil.isNotEmpty(memberId), "o.member_id", memberId); diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java index 27f7281..5755e82 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java @@ -1,5 +1,6 @@ package cn.lili.modules.order.order.service; +import cn.lili.base.Result; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.lmk.domain.vo.OrderCountVO; import cn.lili.modules.member.entity.dto.MemberAddressDTO; @@ -10,6 +11,7 @@ import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleXcxVO; import cn.lili.modules.order.order.entity.vo.PaymentLog; +import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; import cn.lili.modules.system.entity.vo.Traces; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -352,4 +354,10 @@ Order updateSellerRemark(String orderSn, String sellerRemark); + /** + * 鑾峰緱姣忔棩璁㈠崟缁熻鏁版嵁 璁㈠崟缁熻鎶樼嚎鍥剧敤 + * @param queryParam + * @return + */ + Result getOrderCount(StatisticsQueryParam queryParam); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index d458917..74673e8 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -10,6 +10,7 @@ import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; +import cn.lili.base.Result; import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; @@ -56,6 +57,7 @@ import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.PintuanService; +import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; import cn.lili.modules.store.entity.dto.StoreDeliverGoodsAddressDTO; import cn.lili.modules.store.service.StoreDetailService; import cn.lili.modules.system.aspect.annotation.SystemLogPoint; @@ -86,6 +88,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Cell; @@ -109,6 +112,9 @@ import java.io.InputStream; import java.math.BigDecimal; import java.net.URLEncoder; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -1267,6 +1273,65 @@ return order; } + @Override + public Result getOrderCount(StatisticsQueryParam queryParam) { + LocalDateTime startTime = null; + LocalDateTime endTime = LocalDateTime.now(); // 缁撴潫鏃堕棿榛樿鏄綋鍓嶆椂闂� + int days = 0; + + switch (queryParam.getSearchType()) { + case "TODAY": + // 浠婂ぉ锛氫粠浠婂ぉ0鐐瑰埌鐜板湪 + startTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); + days = 1; + break; + case "YESTERDAY": + // 鏄ㄥぉ锛氫粠鏄ㄥぉ0鐐瑰埌鏄ㄥぉ23:59:59 + LocalDate yesterday = LocalDate.now().minusDays(1); + startTime = LocalDateTime.of(yesterday, LocalTime.MIN); + endTime = LocalDateTime.of(yesterday, LocalTime.MAX); + days = 1; + break; + case "LAST_SEVEN": + // 杩囧幓涓冨ぉ锛氫粠7澶╁墠0鐐瑰埌鐜板湪 + startTime = LocalDateTime.of(LocalDate.now().minusDays(6), LocalTime.MIN); + days = 7; + break; + case "LAST_THIRTY": + // 杩囧幓30澶╋細浠�30澶╁墠0鐐瑰埌鐜板湪 + startTime = LocalDateTime.of(LocalDate.now().minusDays(29), LocalTime.MIN); + days = 30; + break; + default: + return Result.error("涓嶆敮鎸佺殑鏃堕棿鑼冨洿绫诲瀷"); + } + +// 2. 鏌ヨ璇ユ椂闂磋寖鍥村唴鐨勬瘡鏃ヨ鍗曟暟閲忥紙鎸夋棩鏈熷垎缁勶級 +// LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery(); +// queryWrapper.between(Order::getCreateTime, startTime, endTime); +// // 鎸夋棩鏈熷垎缁勶紙鎻愬彇鏃ユ湡閮ㄥ垎锛� +// +// // 鎵ц鏌ヨ锛岃繑鍥炴棩鏈熷拰鏁伴噺鐨勬槧灏勶紙day -> count锛� +// List<Map<String, Object>> maps = baseMapper.selectMaps(queryWrapper); +// Map<String, Long> dayCountMap = maps.stream() +// .collect(Collectors.toMap( +// map -> map.get("day").toString(), // 鏃ユ湡瀛楃涓诧紙濡�2023-09-19锛� +// map -> Long.valueOf(map.get("count").toString()) // 璁㈠崟鏁伴噺 +// )); +// +// // 3. 鐢熸垚瀹屾暣鐨勬棩鏈熷垪琛紙纭繚鍗充娇鏌愬ぉ娌℃湁璁㈠崟涔熶細杩斿洖0锛� +// List<Long> orderCounts = new ArrayList<>(days); +// for (int i = 0; i < days; i++) { +// // 璁$畻褰撳墠寰幆瀵瑰簲鐨勬棩鏈燂紙浠巗tartTime寮�濮嬬殑绗琲澶╋級 +// LocalDate currentDate = startTime.toLocalDate().plusDays(i); +// String dateStr = currentDate.toString(); // 杞负yyyy-MM-dd鏍煎紡 +// // 浠庢槧灏勪腑鑾峰彇鏁伴噺锛屾病鏈夊垯涓�0 +// orderCounts.add(dayCountMap.getOrDefault(dateStr, 0L)); +// } + + return null; + } + /** * 铏氭嫙鎴愬洟 * diff --git a/framework/src/main/java/cn/lili/modules/statistics/entity/dto/StatisticsQueryParam.java b/framework/src/main/java/cn/lili/modules/statistics/entity/dto/StatisticsQueryParam.java index 37b985e..1afef2c 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/entity/dto/StatisticsQueryParam.java +++ b/framework/src/main/java/cn/lili/modules/statistics/entity/dto/StatisticsQueryParam.java @@ -3,6 +3,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import cn.lili.modules.lmk.enums.general.StatisticsSearchTypeEnum; /** * 缁熻鏌ヨ鍙傛暟 * @@ -13,6 +14,9 @@ public class StatisticsQueryParam { @ApiModelProperty(value = "蹇嵎鎼滅储", allowableValues = "TODAY, YESTERDAY, LAST_SEVEN, LAST_THIRTY") + /** + * @see StatisticsSearchTypeEnum + */ private String searchType; @ApiModelProperty(value = "绫诲瀷锛氬勾锛圷EAR锛夈�佹湀锛圡ONTH锛�") diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewServiceImpl.java index 5438f3d..48b678f 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewServiceImpl.java @@ -226,7 +226,6 @@ //鑾峰彇褰撳墠鏃堕棿 Calendar calendar = Calendar.getInstance(); - calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0); calendar.set(Calendar.MILLISECOND, 0); //濡傛灉鏄粖澶╃殑缁熻锛屽垯浠巖edis 涓嬁锛屽惁鍒欎粠鏁版嵁搴撲腑鎷� diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/StatisticsController.java b/manager-api/src/main/java/cn/lili/controller/lmk/StatisticsController.java new file mode 100644 index 0000000..54337e4 --- /dev/null +++ b/manager-api/src/main/java/cn/lili/controller/lmk/StatisticsController.java @@ -0,0 +1,84 @@ +package cn.lili.controller.lmk; + + +import cn.lili.base.Result; +import cn.lili.common.enums.ResultUtil; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.lmk.domain.vo.PvUvVO; +import cn.lili.modules.lmk.enums.general.StatisticsSearchTypeEnum; +import cn.lili.modules.order.order.service.OrderService; +import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; +import cn.lili.modules.statistics.entity.vo.PlatformViewVO; +import cn.lili.modules.statistics.service.PlatformViewService; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + * lmk-shop-java + * 缁熻鏁版嵁鎺у埗灞� + * + * @author : zxl + * @date : 2025-09-16 16:36 + **/ +@RestController +@AllArgsConstructor +@RequestMapping("/manager/lmk/statistics") +public class StatisticsController { + private final OrderService orderService; + + @ApiOperation(value = "鑾峰彇pv銆乽v娴侀噺鏁版嵁 琛ㄥ崟鑾峰彇") + @GetMapping("/pvUv") + public Result getPVUVData(StatisticsQueryParam queryParam) { + //TODO 鑾峰緱 pv/uv鏁版嵁 + PvUvVO pvUvVO = new PvUvVO(); + List<Long> pvData = new ArrayList<>(); + List<Long> uvData = new ArrayList<>(); + switch (queryParam.getSearchType()) { + case "TODAY": + // 浠婂ぉ鐨勬暟鎹細娣诲姞1 + pvData.add(1L); + uvData.add(9L); + break; + + case "YESTERDAY": + // 鏄庡ぉ鐨勬暟鎹細娣诲姞1 + pvData.add(1L); + uvData.add(10L); + break; + + case "LAST_SEVEN": + // 杩囧幓涓冨ぉ鐨勬暟鎹細娣诲姞1, 2, 3 + for(int i =1;i<=7;i++){ + pvData.add((long) i); + uvData.add((long) i+7); + } + + break; + + case "LAST_THIRTY": + // 杩囧幓涓�涓湀鐨勬暟鎹細鍙互鏍规嵁闇�瑕佽嚜瀹氫箟锛岃繖閲岀ず渚嬫坊鍔�1鍒�5 + for(int i =1;i<=30;i++){ + pvData.add((long) i); + uvData.add((long) i+7); + } + break; + + } + pvUvVO.setPvData(pvData); + pvUvVO.setUvData(uvData); + return Result.ok().data(pvUvVO); + } + + @GetMapping("/orderCount") + public Result getOrderCount(StatisticsQueryParam queryParam) { + return orderService.getOrderCount(queryParam); + } + + +} diff --git a/manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java b/manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java index c964d0a..baa5e71 100644 --- a/manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java @@ -2,6 +2,7 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.NumberUtil; +import cn.lili.base.Result; import cn.lili.common.aop.annotation.PreventDuplicateSubmissions; import cn.lili.common.context.ThreadContextHolder; import cn.lili.common.enums.ResultCode; @@ -9,6 +10,7 @@ import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.lmk.domain.vo.OrderCountVO; +import cn.lili.modules.lmk.domain.vo.SelectVO; import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dto.OrderExportDTO; @@ -18,8 +20,11 @@ import cn.lili.modules.order.order.service.OrderPackageService; import cn.lili.modules.order.order.service.OrderPriceService; import cn.lili.modules.order.order.service.OrderService; +import cn.lili.modules.store.entity.dos.Store; +import cn.lili.modules.store.mapper.StoreMapper; import cn.lili.utils.COSUtil; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -29,6 +34,7 @@ import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import java.util.ArrayList; import java.util.List; /** @@ -41,6 +47,8 @@ @RequestMapping("/manager/order/order") @Api(tags = "绠$悊绔�,璁㈠崟API") public class OrderManagerController { + @Autowired + private StoreMapper storeMapper; /** * 璁㈠崟 @@ -59,6 +67,24 @@ @Autowired private COSUtil cosUtil; + @ApiModelProperty(value = "搴楅摵涓嬫媺") + @GetMapping("/storeSelect") + public ResultMessage<List<SelectVO>> getStoreSelect(){ + List<Store> storeList = + new LambdaQueryChainWrapper<>(storeMapper) + .eq(Store::getDeleteFlag,Boolean.FALSE) + .list(); + List<SelectVO> selectVOS = new ArrayList<>(); + for (Store store : storeList){ + SelectVO vo = new SelectVO(); + vo.setId(store.getId()); + vo.setLabel(store.getStoreName()); + selectVOS.add(vo); + } + return ResultUtil.data(selectVOS); + + } + @ApiOperation(value = "鏌ヨ璁㈠崟鍒楄〃鍒嗛〉") @GetMapping public ResultMessage<IPage<OrderSimpleVO>> queryMineOrder(OrderSearchParams orderSearchParams) { -- Gitblit v1.8.0