src/main/java/com/mzl/flower/entity/ip/UserAccess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/mapper/ip/UserAccessMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/service/statistics/StatisticsService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/web/customer/FlowerCustomerController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/mzl/flower/entity/ip/UserAccess.java
对比新文件 @@ -0,0 +1,21 @@ package com.mzl.flower.entity.ip; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.time.LocalDateTime; @Data @TableName("user_access_info") public class UserAccess { @TableId(value = "id", type = IdType.AUTO) private Long id; private String ipId; // ip地址+用户ID private LocalDateTime createTime; } src/main/java/com/mzl/flower/mapper/ip/UserAccessMapper.java
对比新文件 @@ -0,0 +1,11 @@ package com.mzl.flower.mapper.ip; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mzl.flower.entity.ip.BlackList; import com.mzl.flower.entity.ip.UserAccess; import org.springframework.stereotype.Repository; @Repository public interface UserAccessMapper extends BaseMapper<UserAccess> { } src/main/java/com/mzl/flower/service/statistics/StatisticsService.java
@@ -1,8 +1,10 @@ package com.mzl.flower.service.statistics; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzl.flower.config.exception.ValidationException; import com.mzl.flower.config.security.SecurityUtils; import com.mzl.flower.constant.Constants; import com.mzl.flower.dto.request.flower.FlowerQueryDTO; import com.mzl.flower.dto.request.payment.OrderItemSalesQueryDTO; @@ -12,19 +14,24 @@ import com.mzl.flower.dto.response.statistics.RateStatisticsDTO; import com.mzl.flower.dto.response.statistics.SaleStatisticsDTO; import com.mzl.flower.entity.customer.Customer; import com.mzl.flower.entity.ip.UserAccess; import com.mzl.flower.entity.payment.Order; import com.mzl.flower.entity.supplier.Supplier; import com.mzl.flower.mapper.customer.CustomerMapper; import com.mzl.flower.mapper.flower.FlowerMapper; import com.mzl.flower.mapper.ip.UserAccessMapper; import com.mzl.flower.mapper.payment.*; import com.mzl.flower.mapper.supplier.SupplierMapper; import com.mzl.flower.service.BaseService; import com.mzl.flower.utils.IpUtil; import io.micrometer.core.instrument.util.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; @@ -54,6 +61,9 @@ @Autowired private CustomerMapper customerMapper; @Autowired private UserAccessMapper userAccessMapper; public SaleStatisticsDTO getSaleStatistics(String date){ if(StringUtils.isEmpty(date)){ @@ -298,7 +308,17 @@ RateStatisticsDTO dto = new RateStatisticsDTO(); //TODO 用户访问量:点击到交易大厅或者商品详情页面计算,同一个用户,每天只计算一次(包含游客)(并计算新增量,计算日环比) Integer cT = userAccessMapper.selectCount(new QueryWrapper<UserAccess>() .gt("create_time", begin) .le("create_time", end) ); dto.setCountToday(cT.longValue()); Integer cY = userAccessMapper.selectCount(new QueryWrapper<UserAccess>() .gt("create_time", beginY) .le("create_time", endY) ); dto.setCountRate(getRate(cT, cY)); return dto; } @@ -360,4 +380,30 @@ return 100D; } public void addUserAccessRecord(HttpServletRequest request){ String userId = SecurityUtils.getUserId(); String ip = null; try { ip = IpUtil.getIpAddress(request); } catch (IOException e) { ip = "127.0.0.1"; } String ipId = ip+":"+(StringUtils.isBlank(userId)?"0":userId); LocalDate localDate = LocalDate.now(); LocalDateTime end = localDate.atTime(23, 59, 59); LocalDateTime begin = localDate.atTime(0, 0, 0); int count = userAccessMapper.selectCount(new LambdaQueryWrapper<UserAccess>() .eq(UserAccess::getIpId, ipId) .gt(UserAccess::getCreateTime, begin) .le(UserAccess::getCreateTime, end)); if(count==0){ UserAccess record = new UserAccess(); record.setIpId(ipId); record.setCreateTime(LocalDateTime.now()); userAccessMapper.insert(record); } } } src/main/java/com/mzl/flower/web/customer/FlowerCustomerController.java
@@ -19,6 +19,7 @@ import com.mzl.flower.service.flower.FlowerParamService; import com.mzl.flower.service.flower.FlowerService; import com.mzl.flower.service.payment.OrderService; import com.mzl.flower.service.statistics.StatisticsService; import com.mzl.flower.service.transport.TransportService; import com.wechat.pay.java.service.payments.jsapi.model.PrepayResponse; import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; @@ -32,6 +33,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.validation.ValidationException; import javax.validation.constraints.NotBlank; import java.util.HashMap; @@ -59,10 +61,13 @@ @Autowired private TransportService transportService; @Autowired private StatisticsService statisticsService; @GetMapping("/category/tree") @ApiOperation(value = "获取商品分类树") public ResponseEntity<ReturnDataDTO<List<FlowerCategoryTreeDTO>>> selectCategoryTree(FlowerCategoryQueryDTO dto){ public ResponseEntity<ReturnDataDTO<List<FlowerCategoryTreeDTO>>> selectCategoryTree(FlowerCategoryQueryDTO dto, HttpServletRequest request){ statisticsService.addUserAccessRecord(request); return returnData(R.SUCCESS.getCode(), categoryService.selectCustomerCategoryTree(dto)); } @@ -97,7 +102,8 @@ @ApiImplicitParam(name = "id", value = "商品id", required = true, dataType = "Long", paramType = "query"), @ApiImplicitParam(name = "partnerId", value = "合伙人id", required = true, dataType = "Long", paramType = "query"), }) public ResponseEntity<ReturnDataDTO<FlowerShowDTO>> getShowFlowerDetail(Long id, Long partnerId) { public ResponseEntity<ReturnDataDTO<FlowerShowDTO>> getShowFlowerDetail(Long id, Long partnerId,HttpServletRequest request) { statisticsService.addUserAccessRecord(request); return returnData(R.SUCCESS.getCode(), flowerService.getShowFlowerDetail(id, partnerId)); }