| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.trace.consumer; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo.MesTraceLocationVisitPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo.MesTraceLocationDistributionRespVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.trace.consumer.MesTraceLocationVisitDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.trace.consumer.MesTraceLocationVisitMapper; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo.MesTraceConsumerScanDistributionReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo.MesTraceConsumerScanDistributionRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo.MesTraceConsumerScanSummaryRespVO; |
| | |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| | |
| | | |
| | | @Resource |
| | | private MesTraceConsumerScanStatisticsService statisticsService; |
| | | |
| | | @Resource |
| | | private MesTraceLocationVisitMapper locationVisitMapper; |
| | | |
| | | @GetMapping("/location-visits") |
| | | @Operation(summary = "定位授权访问记录(含位置与总数)") |
| | | @PreAuthorize("@ss.hasPermission('mes:trace-consumer-scan:query')") |
| | | public CommonResult<PageResult<MesTraceLocationVisitDO>> getLocationVisits(@Valid MesTraceLocationVisitPageReqVO reqVO) { |
| | | return success(locationVisitMapper.selectPage(reqVO)); |
| | | } |
| | | |
| | | @GetMapping("/location-distribution") |
| | | @Operation(summary = "定位授权访问的坐标网格分布") |
| | | @PreAuthorize("@ss.hasPermission('mes:trace-consumer-scan:query')") |
| | | public CommonResult<List<MesTraceLocationDistributionRespVO>> getLocationDistribution(@Valid MesTraceLocationVisitPageReqVO reqVO) { |
| | | Map<String, List<MesTraceLocationVisitDO>> groups = locationVisitMapper.selectListByFilter(reqVO).stream() |
| | | .collect(Collectors.groupingBy(e -> e.getLatitude().setScale(2, RoundingMode.HALF_UP).toPlainString() |
| | | + "," + e.getLongitude().setScale(2, RoundingMode.HALF_UP).toPlainString())); |
| | | return success(groups.entrySet().stream() |
| | | .sorted((a, b) -> Long.compare(b.getValue().size(), a.getValue().size())) |
| | | .limit(20) |
| | | .map(entry -> { |
| | | MesTraceLocationDistributionRespVO vo = new MesTraceLocationDistributionRespVO(); |
| | | String[] coordinates = entry.getKey().split(","); |
| | | vo.setLatitude(new BigDecimal(coordinates[0])); |
| | | vo.setLongitude(new BigDecimal(coordinates[1])); |
| | | vo.setCount((long) entry.getValue().size()); |
| | | return vo; |
| | | }).toList()); |
| | | } |
| | | |
| | | @GetMapping("/summary") |
| | | @Operation(summary = "消费者扫码访问汇总") |
| | |
| | | return success(statisticsService.getDistribution(reqVO)); |
| | | } |
| | | |
| | | } |
| | | } |