From 1b11342e5d088b8062d0e997d3d70f6d90a222ac Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 26 Jan 2025 02:21:27 +0800 Subject: [PATCH] 2 --- .../controller/mobile/AppGoodsController.java | 4 +- .../controller/mobile/AppTaskController.java | 8 +- .../manage/AppScenicOrderController.java | 38 +++++ .../manage/AppStatisticsController.java | 1 + .../basic/controller/pc/ScenicController.java | 5 + .../basic/controller/viid/ViidController.java | 139 ++++++++++++------ .../com/ycwl/basic/enums/StatisticEnum.java | 1 + .../mobile/scenic/content/ContentPageVO.java | 1 + .../statistic/resp/AppStatisticsFunnelVO.java | 3 +- .../pc/device/entity/DeviceConfigEntity.java | 1 + .../model/pc/order/resp/OrderItemVO.java | 1 + .../ratelimiter/SlidingWindowRateLimiter.java | 9 +- .../basic/repository/DeviceRepository.java | 8 +- .../basic/repository/ScenicRepository.java | 3 + .../basic/repository/SourceRepository.java | 11 +- .../impl/mobile/AppScenicServiceImpl.java | 3 + .../impl/mobile/AppStatisticsServiceImpl.java | 26 ++-- .../service/impl/mobile/GoodsServiceImpl.java | 33 +++-- .../service/impl/mobile/WxPayServiceImpl.java | 18 ++- .../service/impl/pc/FaceServiceImpl.java | 11 +- .../service/impl/pc/ScenicServiceImpl.java | 3 + .../basic/service/mobile/GoodsService.java | 8 +- .../task/impl/TaskFaceServiceImpl.java | 34 +++-- .../task/impl/TaskTaskServiceImpl.java | 2 +- .../task/DownloadNotificationTasker.java | 7 +- .../ycwl/basic/task/DynamicTaskGenerator.java | 4 +- .../java/com/ycwl/basic/utils/WxMpUtil.java | 4 +- src/main/resources/mapper/DeviceMapper.xml | 3 +- src/main/resources/mapper/OrderMapper.xml | 11 +- src/main/resources/mapper/ScenicMapper.xml | 3 + .../resources/mapper/StatisticsMapper.xml | 34 +++-- src/main/resources/mapper/TemplateMapper.xml | 6 +- 32 files changed, 310 insertions(+), 133 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/controller/mobile/manage/AppScenicOrderController.java diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java index 01a87f0..a1caf6a 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java @@ -71,7 +71,7 @@ public class AppGoodsController { @GetMapping("/getTaskStatus/") public ApiResponse getAllTaskStatus() { JwtInfo worker = JwtTokenUtil.getWorker(); - return goodsService.getAllTaskStatus(worker.getUserId()); + return ApiResponse.success(goodsService.getAllTaskStatus(worker.getUserId())); } /** @@ -84,6 +84,6 @@ public class AppGoodsController { @GetMapping("/task/face/{faceId}/template/{templateId}") public ApiResponse getTemplateTaskStatus(@PathVariable("faceId") Long faceId, @PathVariable("templateId") Long templateId) { JwtInfo worker = JwtTokenUtil.getWorker(); - return goodsService.getTaskStatusByTemplateId(worker.getUserId(), faceId, templateId); + return ApiResponse.success(goodsService.getTaskStatusByTemplateId(worker.getUserId(), faceId, templateId)); } } diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppTaskController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppTaskController.java index 31085eb..0e63d13 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppTaskController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppTaskController.java @@ -29,13 +29,15 @@ public class AppTaskController { @IgnoreLogReq public ApiResponse getTaskStatusByFaceId(@PathVariable("faceId") Long faceId) { JwtInfo worker = JwtTokenUtil.getWorker(); - return goodsService.getTaskStatusByFaceId(worker.getUserId(), faceId); + return ApiResponse.success(goodsService.getTaskStatusByFaceId(worker.getUserId(), faceId)); } @GetMapping("/scenic/{scenicId}") @IgnoreLogReq public ApiResponse getAllTaskStatusByScenicId(@PathVariable("scenicId") Long scenicId) { JwtInfo worker = JwtTokenUtil.getWorker(); - return goodsService.getTaskStatusByScenicId(worker.getUserId(), scenicId); + VideoTaskStatusVO taskStatus = goodsService.getTaskStatusByScenicId(worker.getUserId(), scenicId); + taskStatus.setScenicId(scenicId); + return ApiResponse.success(taskStatus); } /** @@ -49,7 +51,7 @@ public class AppTaskController { @IgnoreLogReq public ApiResponse getTemplateTaskStatus(@PathVariable("faceId") Long faceId, @PathVariable("templateId") Long templateId) { JwtInfo worker = JwtTokenUtil.getWorker(); - return goodsService.getTaskStatusByTemplateId(worker.getUserId(), faceId, templateId); + return ApiResponse.success(goodsService.getTaskStatusByTemplateId(worker.getUserId(), faceId, templateId)); } @PostMapping("/submit") diff --git a/src/main/java/com/ycwl/basic/controller/mobile/manage/AppScenicOrderController.java b/src/main/java/com/ycwl/basic/controller/mobile/manage/AppScenicOrderController.java new file mode 100644 index 0000000..46cb23d --- /dev/null +++ b/src/main/java/com/ycwl/basic/controller/mobile/manage/AppScenicOrderController.java @@ -0,0 +1,38 @@ +package com.ycwl.basic.controller.mobile.manage; + +import com.ycwl.basic.constant.BaseContextHandler; +import com.ycwl.basic.mapper.ScenicAccountMapper; +import com.ycwl.basic.model.pc.order.req.OrderReqQuery; +import com.ycwl.basic.model.pc.order.resp.OrderRespVO; +import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity; +import com.ycwl.basic.service.pc.OrderService; +import com.ycwl.basic.utils.ApiResponse; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/api/mobile/scenic/order/v1") +@Api(tags = "景区账号相关接口") +public class AppScenicOrderController { + @Autowired + private OrderService orderService; + @Autowired + private ScenicAccountMapper scenicAccountMapper; + + @PostMapping("/list") + public ApiResponse> list(@RequestBody OrderReqQuery query) { + String userId = BaseContextHandler.getUserId(); + ScenicAccountEntity account = scenicAccountMapper.findAccountById(userId); + if (account == null) { + return ApiResponse.fail("用户未绑定景区"); + } + query.setScenicId(account.getScenicId()); + return orderService.list(query); + } +} diff --git a/src/main/java/com/ycwl/basic/controller/mobile/manage/AppStatisticsController.java b/src/main/java/com/ycwl/basic/controller/mobile/manage/AppStatisticsController.java index 2edc1e0..6860faa 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/manage/AppStatisticsController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/manage/AppStatisticsController.java @@ -64,6 +64,7 @@ public class AppStatisticsController { @ApiOperation("统计数据记录") @PostMapping("/addStatistics") + @IgnoreToken public ApiResponse addStatistics(@RequestBody StatisticsRecordAddReq req) { return statisticsService.addStatistics(req); diff --git a/src/main/java/com/ycwl/basic/controller/pc/ScenicController.java b/src/main/java/com/ycwl/basic/controller/pc/ScenicController.java index 669cf98..082618c 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/ScenicController.java +++ b/src/main/java/com/ycwl/basic/controller/pc/ScenicController.java @@ -82,4 +82,9 @@ public class ScenicController { scenicService.saveConfig(id, config); return ApiResponse.success(null); } + @PostMapping("/saveConfig/undefined") + public ApiResponse saveConfig(@RequestBody ScenicConfigEntity config) { + scenicService.addConfig(config); + return ApiResponse.success(null); + } } diff --git a/src/main/java/com/ycwl/basic/controller/viid/ViidController.java b/src/main/java/com/ycwl/basic/controller/viid/ViidController.java index d332563..68280f1 100644 --- a/src/main/java/com/ycwl/basic/controller/viid/ViidController.java +++ b/src/main/java/com/ycwl/basic/controller/viid/ViidController.java @@ -5,9 +5,11 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.ycwl.basic.annotation.IgnoreLogReq; import com.ycwl.basic.annotation.IgnoreToken; +import com.ycwl.basic.annotation.RequestToFile; import com.ycwl.basic.mapper.DeviceMapper; import com.ycwl.basic.mapper.FaceSampleMapper; import com.ycwl.basic.mapper.SourceMapper; +import com.ycwl.basic.model.pc.device.entity.DeviceConfigEntity; import com.ycwl.basic.model.pc.device.entity.DeviceEntity; import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity; import com.ycwl.basic.model.pc.source.entity.SourceEntity; @@ -50,6 +52,7 @@ import java.util.Date; import java.util.List; import java.util.TimeZone; import java.util.UUID; +import java.util.stream.Collectors; @IgnoreToken @RestController @@ -190,6 +193,7 @@ public class ViidController { */ @RequestMapping(value = "/Faces", method = RequestMethod.POST) @IgnoreLogReq + @RequestToFile public VIIDBaseResp faces(@RequestBody FaceUploadReq req) { FaceListObject faceListObject = req.getFaceListObject(); List faceObject = faceListObject.getFaceObject(); @@ -198,7 +202,6 @@ public class ViidController { for (FaceObject face : faceObject) { // 设置FaceId faceId = face.getFaceID(); - Long newFaceSampleId = SnowFlakeUtil.getLongId(); // 获取图片信息 SubImageList subImageList = face.getSubImageList(); // 判断人脸对象中的列表是否为空 @@ -207,14 +210,31 @@ public class ViidController { if (device == null) { continue; } - Date shotTime = new Date(); + DeviceConfigEntity deviceConfig = deviceRepository.getDeviceConfig(device.getId()); + int viidMode = 0; + if (deviceConfig != null && deviceConfig.getViidType() != null) { + viidMode = deviceConfig.getViidType(); + } + Date shotTime = null; if (StringUtils.isNotBlank(face.getShotTime())) { try { shotTime = sdfTime.parse(face.getShotTime()); } catch (ParseException e) { - throw new RuntimeException(e); + log.warn("拍摄时间时间转换失败,使用当前时间。错误entity:{}", face); } } + if (shotTime == null) { + if (StringUtils.isNotBlank(face.getFaceAppearTime())) { + try { + shotTime = sdfTime.parse(face.getFaceAppearTime()); + } catch (ParseException e) { + log.warn("拍摄时间时间转换失败,使用当前时间。错误entity:{}", face); + } + } + } + if (shotTime == null) { + shotTime = new Date(); + } Long scenicId = device.getScenicId(); if (scenicId == null) { continue; @@ -225,48 +245,79 @@ public class ViidController { facePosition.setRbY(face.getRightBtmY()); facePosition.setRbX(face.getRightBtmX()); if (ObjectUtil.isNotEmpty(subImageList) && CollUtil.isNotEmpty(subImageList.getSubImageInfoObject())) { - // 遍历每个图片对象 - for (SubImageInfoObject subImage : subImageList.getSubImageInfoObject()) { - // base64转换成MultipartFIle - MultipartFile file = ImageUtils.base64ToMultipartFile(subImage.getData()); - String ext = subImage.getFileFormat(); - if (ext.equalsIgnoreCase("jpeg")) { - ext = "jpg"; + if (viidMode == 0) { + // 遍历每个图片对象 + // 先找到type14的图片 + List type14ImageList = subImageList.getSubImageInfoObject().stream().filter(subImage -> "14".equals(subImage.getType())).collect(Collectors.toList()); + for (SubImageInfoObject subImage : subImageList.getSubImageInfoObject()) { + // base64转换成MultipartFIle + MultipartFile file = ImageUtils.base64ToMultipartFile(subImage.getData()); + String ext = subImage.getFileFormat(); + if (ext.equalsIgnoreCase("jpeg")) { + ext = "jpg"; + } + IStorageAdapter adapter = StorageFactory.use("faces"); + // Type=11 人脸 + if (subImage.getType().equals("11")) { + // 上传oss + FaceSampleEntity faceSample = new FaceSampleEntity(); + Long newFaceSampleId = SnowFlakeUtil.getLongId(); + faceSample.setId(newFaceSampleId); + faceSample.setScenicId(scenicId); + faceSample.setDeviceId(device.getId()); + faceSample.setStatus(0); + faceSample.setCreateAt(shotTime); + String url = adapter.uploadFile(file, "user-face", UUID.randomUUID() + "." + ext); + faceSample.setFaceUrl(url); + faceSampleMapper.add(faceSample); + DynamicTaskGenerator.addTask(faceSample.getId()); + taskFaceService.addFaceSample(faceSample.getId()); + for (SubImageInfoObject _subImage : type14ImageList) { + facePosition.setImgHeight(_subImage.getHeight()); + facePosition.setImgWidth(_subImage.getWidth()); + SourceEntity source = new SourceEntity(); + source.setId(SnowFlakeUtil.getLongId()); + source.setDeviceId(device.getId()); + source.setScenicId(device.getScenicId()); + source.setFaceSampleId(newFaceSampleId); + source.setCreateTime(shotTime); + source.setType(2); + // 上传oss + MultipartFile _file = ImageUtils.base64ToMultipartFile(_subImage.getData()); + String _sourceUrl = adapter.uploadFile(_file, "user-photo", UUID.randomUUID() + "." + ext); + source.setUrl(_sourceUrl); + source.setPosJson(JSON.toJSONString(facePosition)); + sourceMapper.add(source); + } + log.info("人脸信息及原图{}张入库成功!设备ID:{}", type14ImageList.size(), deviceID); + } } - IStorageAdapter adapter = StorageFactory.use("faces"); - // Type=11 人脸 - if (subImage.getType().equals("11")) { - // 上传oss - FaceSampleEntity faceSample = new FaceSampleEntity(); - faceSample.setId(newFaceSampleId); - faceSample.setScenicId(scenicId); - faceSample.setDeviceId(device.getId()); - faceSample.setStatus(0); - faceSample.setCreateAt(shotTime); - String url = adapter.uploadFile(file, "user-face", UUID.randomUUID() + "." + ext); - faceSample.setFaceUrl(url); - faceSampleMapper.add(faceSample); - log.info("人脸信息入库成功!设备ID:{}", deviceID); - DynamicTaskGenerator.addTask(faceSample.getId()); - taskFaceService.addFaceSample(faceSample.getId()); - } - // Type=14 场景图 - else if (subImage.getType().equals("14")) { - facePosition.setImgHeight(subImage.getHeight()); - facePosition.setImgWidth(subImage.getWidth()); - SourceEntity source = new SourceEntity(); - source.setId(SnowFlakeUtil.getLongId()); - source.setDeviceId(device.getId()); - source.setScenicId(device.getScenicId()); - source.setFaceSampleId(newFaceSampleId); - source.setCreateTime(shotTime); - source.setType(2); - // 上传oss - String url = adapter.uploadFile(file, "user-photo", UUID.randomUUID() + "." + ext); - source.setUrl(url); - source.setPosJson(JSON.toJSONString(facePosition)); - sourceMapper.add(source); - log.info("源照片入库成功!设备ID:{}", deviceID); + } else if (viidMode == 1) { + for (SubImageInfoObject subImage : subImageList.getSubImageInfoObject()) { + // base64转换成MultipartFIle + MultipartFile file = ImageUtils.base64ToMultipartFile(subImage.getData()); + String ext = subImage.getFileFormat(); + if (ext.equalsIgnoreCase("jpeg")) { + ext = "jpg"; + } + IStorageAdapter adapter = StorageFactory.use("faces"); + // Type=14 人脸,传™的,有这么传的嘛 + if (subImage.getType().equals("14")) { + // 上传oss + FaceSampleEntity faceSample = new FaceSampleEntity(); + Long newFaceSampleId = SnowFlakeUtil.getLongId(); + faceSample.setId(newFaceSampleId); + faceSample.setScenicId(scenicId); + faceSample.setDeviceId(device.getId()); + faceSample.setStatus(0); + faceSample.setCreateAt(shotTime); + String url = adapter.uploadFile(file, "user-face", UUID.randomUUID() + "." + ext); + faceSample.setFaceUrl(url); + faceSampleMapper.add(faceSample); + DynamicTaskGenerator.addTask(faceSample.getId()); + taskFaceService.addFaceSample(faceSample.getId()); + log.info("模式1人脸信息入库成功!设备ID:{}", deviceID); + } } } } diff --git a/src/main/java/com/ycwl/basic/enums/StatisticEnum.java b/src/main/java/com/ycwl/basic/enums/StatisticEnum.java index 386c3e9..05b4cc5 100644 --- a/src/main/java/com/ycwl/basic/enums/StatisticEnum.java +++ b/src/main/java/com/ycwl/basic/enums/StatisticEnum.java @@ -13,6 +13,7 @@ public enum StatisticEnum { MESSAGE_PUSH(6,"消息推送"), DOWNLOAD(8,"下载"), CLICK_ON_PAYMENT(9,"点击支付、购买"), + OTHER_ENTER(10,"其他渠道进入"), ; diff --git a/src/main/java/com/ycwl/basic/model/mobile/scenic/content/ContentPageVO.java b/src/main/java/com/ycwl/basic/model/mobile/scenic/content/ContentPageVO.java index 1b228e9..7cbe555 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/scenic/content/ContentPageVO.java +++ b/src/main/java/com/ycwl/basic/model/mobile/scenic/content/ContentPageVO.java @@ -33,4 +33,5 @@ public class ContentPageVO { @ApiModelProperty("是否购买:0未购买,1已购买") private Integer isBuy; private BigDecimal duration; + private Integer goodsType; } diff --git a/src/main/java/com/ycwl/basic/model/mobile/statistic/resp/AppStatisticsFunnelVO.java b/src/main/java/com/ycwl/basic/model/mobile/statistic/resp/AppStatisticsFunnelVO.java index 7df85da..76306a1 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/statistic/resp/AppStatisticsFunnelVO.java +++ b/src/main/java/com/ycwl/basic/model/mobile/statistic/resp/AppStatisticsFunnelVO.java @@ -13,7 +13,8 @@ import lombok.Data; public class AppStatisticsFunnelVO { @ApiModelProperty("镜头检测游客数") - private Integer cameraShotOfMemberNum; +// private Integer cameraShotOfMemberNum; + private String cameraShotOfMemberNum; @ApiModelProperty("镜头检测游客数_扫码访问人数_转化率") private String csom_scaom; @ApiModelProperty("扫码访问人数") diff --git a/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceConfigEntity.java b/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceConfigEntity.java index e37d35e..1c0eed6 100644 --- a/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceConfigEntity.java +++ b/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceConfigEntity.java @@ -15,6 +15,7 @@ public class DeviceConfigEntity { * 设备id */ private Long deviceId; + private Integer viidType; /** * 启用时间 */ diff --git a/src/main/java/com/ycwl/basic/model/pc/order/resp/OrderItemVO.java b/src/main/java/com/ycwl/basic/model/pc/order/resp/OrderItemVO.java index c0c1972..711c554 100644 --- a/src/main/java/com/ycwl/basic/model/pc/order/resp/OrderItemVO.java +++ b/src/main/java/com/ycwl/basic/model/pc/order/resp/OrderItemVO.java @@ -31,6 +31,7 @@ public class OrderItemVO { @ApiModelProperty("商品ID,goods_type=1关联video.id,=2关联source.id") private Long goodsId; private Long faceId; + private String faceUrl; @ApiModelProperty("景区名称") private String scenicName; @ApiModelProperty("商品名称 模版名称/原片x个/照片x个") diff --git a/src/main/java/com/ycwl/basic/ratelimiter/SlidingWindowRateLimiter.java b/src/main/java/com/ycwl/basic/ratelimiter/SlidingWindowRateLimiter.java index 68db5ff..54c2069 100644 --- a/src/main/java/com/ycwl/basic/ratelimiter/SlidingWindowRateLimiter.java +++ b/src/main/java/com/ycwl/basic/ratelimiter/SlidingWindowRateLimiter.java @@ -12,11 +12,14 @@ public class SlidingWindowRateLimiter { public SlidingWindowRateLimiter(int maxRequestsPerSecond) { this.semaphore = new Semaphore(maxRequestsPerSecond); - // Schedule a task to release all permits every second - scheduler.scheduleAtFixedRate(() -> semaphore.release(maxRequestsPerSecond - semaphore.availablePermits()), 1, 1, TimeUnit.SECONDS); + scheduler.scheduleAtFixedRate(() -> { + if (semaphore.availablePermits() < maxRequestsPerSecond) { + semaphore.release(1); + } + }, 0, (1000 / maxRequestsPerSecond), TimeUnit.MILLISECONDS); } - public void allowRequest() throws InterruptedException { + public void aquire() throws InterruptedException { semaphore.acquire(); } diff --git a/src/main/java/com/ycwl/basic/repository/DeviceRepository.java b/src/main/java/com/ycwl/basic/repository/DeviceRepository.java index c4ced9a..f6bc66e 100644 --- a/src/main/java/com/ycwl/basic/repository/DeviceRepository.java +++ b/src/main/java/com/ycwl/basic/repository/DeviceRepository.java @@ -70,8 +70,12 @@ public class DeviceRepository { } if (redisTemplate.hasKey(String.format(DEVICE_CACHE_KEY, deviceNo))) { DeviceEntity device = getDeviceByDeviceNo(deviceNo); - redisTemplate.delete(String.format(DEVICE_CACHE_KEY, device.getNo())); - clearDeviceCache(device.getId()); + if (device != null) { + redisTemplate.delete(String.format(DEVICE_CACHE_KEY, device.getNo())); + clearDeviceCache(device.getId()); + } else { + redisTemplate.delete(String.format(DEVICE_CACHE_KEY, deviceNo)); + } } redisTemplate.delete(String.format(DEVICE_CACHE_KEY, deviceNo)); return true; diff --git a/src/main/java/com/ycwl/basic/repository/ScenicRepository.java b/src/main/java/com/ycwl/basic/repository/ScenicRepository.java index d1a2da9..d1306f1 100644 --- a/src/main/java/com/ycwl/basic/repository/ScenicRepository.java +++ b/src/main/java/com/ycwl/basic/repository/ScenicRepository.java @@ -70,6 +70,9 @@ public class ScenicRepository { return JSONObject.parseObject(redisTemplate.opsForValue().get(String.format(SCENIC_MP_NOTIFY_CACHE_KEY, scenicId)), ScenicMpNotifyVO.class); } MpConfigEntity mpConfig = getScenicMpConfig(scenicId); + if (mpConfig == null) { + return null; + } ScenicMpNotifyVO mpNotifyConfig = new ScenicMpNotifyVO(); mpNotifyConfig.setAppId(mpConfig.getAppId()); mpNotifyConfig.setAppSecret(mpConfig.getAppSecret()); diff --git a/src/main/java/com/ycwl/basic/repository/SourceRepository.java b/src/main/java/com/ycwl/basic/repository/SourceRepository.java index 480a2bc..1d1b9be 100644 --- a/src/main/java/com/ycwl/basic/repository/SourceRepository.java +++ b/src/main/java/com/ycwl/basic/repository/SourceRepository.java @@ -8,6 +8,7 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.util.List; +import java.util.Objects; @Component public class SourceRepository { @@ -44,10 +45,16 @@ public class SourceRepository { switch (type) { case 1: List videoSourceList = sourceMapper.listVideoByFaceRelation(userId, faceId); - return videoSourceList.stream().anyMatch(item -> Integer.valueOf(1).equals(item.getIsBuy())); + if (videoSourceList == null || videoSourceList.isEmpty()) { + return false; + } + return videoSourceList.stream().filter(Objects::nonNull).anyMatch(item -> Integer.valueOf(1).equals(item.getIsBuy())); case 2: List imageSourceList = sourceMapper.listImageByFaceRelation(userId, faceId); - return imageSourceList.stream().anyMatch(item -> Integer.valueOf(1).equals(item.getIsBuy())); + if (imageSourceList == null || imageSourceList.isEmpty()) { + return false; + } + return imageSourceList.stream().filter(Objects::nonNull).anyMatch(item -> Integer.valueOf(1).equals(item.getIsBuy())); default: return false; } diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/AppScenicServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/AppScenicServiceImpl.java index 2ada2da..fae44c0 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/AppScenicServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/AppScenicServiceImpl.java @@ -110,6 +110,7 @@ public class AppScenicServiceImpl implements AppScenicService { List contentList = templateMapper.listFor(faceRespVO.getScenicId()); contentList.forEach(contentPageVO -> { List memberVideoEntityList = videoMapper.userFaceTemplateVideo(userId, faceId, contentPageVO.getTemplateId()); + contentPageVO.setGoodsType(0); contentPageVO.setContentType(1); if (!memberVideoEntityList.isEmpty()) { contentPageVO.setIsBuy(memberVideoEntityList.get(0).getIsBuy()); @@ -145,6 +146,8 @@ public class AppScenicServiceImpl implements AppScenicService { sourceImageContent.setName("照片集"); sourceVideoContent.setScenicId(faceRespVO.getScenicId()); sourceImageContent.setScenicId(faceRespVO.getScenicId()); + sourceVideoContent.setGoodsType(1); + sourceImageContent.setGoodsType(2); sourceVideoContent.setContentType(2); sourceImageContent.setContentType(2); sourceVideoContent.setLockType(1); diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/AppStatisticsServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/AppStatisticsServiceImpl.java index c9c3d8f..7ee6c45 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/AppStatisticsServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/AppStatisticsServiceImpl.java @@ -141,7 +141,8 @@ public class AppStatisticsServiceImpl implements AppStatisticsService { //扫码访问人数 Integer scanCodeVisitorOfMemberNum=statisticsMapper.countScanCodeOfMember(query); //镜头检测游客数_扫码访问人数_转化率 - vo.setCsom_scaom(calculateConversionRate(scanCodeVisitorOfMemberNum,cameraShotOfMemberNum)); +// vo.setCsom_scaom(calculateConversionRate(scanCodeVisitorOfMemberNum,cameraShotOfMemberNum)); + vo.setCsom_scaom("-"); //上传头像(人脸)人数 Integer uploadFaceOfMemberNum=statisticsMapper.countUploadFaceOfMember(query); //扫码访问人数_上传头像人数_转化率 @@ -170,9 +171,8 @@ public class AppStatisticsServiceImpl implements AppStatisticsService { //点击购买人数_支付订单人数_转化率 vo.setCpom_pom((calculateConversionRate(payOfMemberNum,clickOnPayOfMemberNum))); //总访问人数 - //TODO 2024/12/12 17:56 目前只有扫码访问的方式,所以这里总访问人数先等于扫码访问人数 -// Integer totalVisitorOfMemberNum =statisticsMapper.countTotalVisitorOfMember(query); - Integer totalVisitorOfMemberNum =scanCodeVisitorOfMemberNum; + Integer totalVisitorOfMemberNum =statisticsMapper.countTotalVisitorOfMember(query); +// Integer totalVisitorOfMemberNum =scanCodeVisitorOfMemberNum; //生成视频条数 Integer completeOfVideoNum =statisticsMapper.countCompleteOfVideo(query); //预览视频条数 @@ -186,7 +186,8 @@ public class AppStatisticsServiceImpl implements AppStatisticsService { //退款订单金额 BigDecimal refundOfOrderAmount =statisticsMapper.countRefundAmount(query); - vo.setCameraShotOfMemberNum(cameraShotOfMemberNum); +// vo.setCameraShotOfMemberNum(cameraShotOfMemberNum); + vo.setCameraShotOfMemberNum("-"); vo.setScanCodeVisitorOfMemberNum(scanCodeVisitorOfMemberNum); vo.setUploadFaceOfMemberNum(uploadFaceOfMemberNum); vo.setPushOfMemberNum(pushOfMemberNum); @@ -212,9 +213,13 @@ public class AppStatisticsServiceImpl implements AppStatisticsService { @Override public ApiResponse addStatistics(StatisticsRecordAddReq req) { // req.setId(SnowFlakeUtil.getLongId()); - JwtInfo worker = JwtTokenUtil.getWorker(); - Long userId = worker.getUserId(); - req.setMemberId(userId); + try { + JwtInfo worker = JwtTokenUtil.getWorker(); + Long userId = worker.getUserId(); + req.setMemberId(userId); + } catch (Exception ignored) { + + } Integer type = req.getType(); if(type==null){ return ApiResponse.fail("类型不能为空"); @@ -331,6 +336,7 @@ public class AppStatisticsServiceImpl implements AppStatisticsService { int scanCode=statisticsMapper.countScanCodeOfMember(query); //查询付费人数 int pay=statisticsMapper.countPayOfMember(query); + int payCount=statisticsMapper.countPayOfOrder(query); if(cycle==1){ //当前周期的支付订单金额 @@ -340,9 +346,9 @@ public class AppStatisticsServiceImpl implements AppStatisticsService { vo.setNowPreviewPay("0.00"); vo.setNowScanCodePay("0.00"); }else { - BigDecimal previewPay = new BigDecimal(preview).divide(new BigDecimal(pay), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + BigDecimal previewPay = new BigDecimal(payCount).divide(new BigDecimal(preview), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); vo.setNowPreviewPay(df.format(previewPay)); - BigDecimal scanCodePay = new BigDecimal(scanCode).divide(new BigDecimal(pay), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + BigDecimal scanCodePay = new BigDecimal(pay).divide(new BigDecimal(scanCode), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); vo.setNowScanCodePay(df.format(scanCodePay)); } }else if(cycle==2){ diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java index 28d1af4..8864165 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java @@ -8,6 +8,7 @@ import com.ycwl.basic.mapper.*; import com.ycwl.basic.model.mobile.goods.*; import com.ycwl.basic.model.mobile.order.IsBuyRespVO; import com.ycwl.basic.model.mobile.order.PriceObj; +import com.ycwl.basic.model.pc.face.entity.FaceEntity; import com.ycwl.basic.model.pc.face.resp.FaceRespVO; import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; import com.ycwl.basic.model.pc.source.req.SourceReqQuery; @@ -17,6 +18,7 @@ import com.ycwl.basic.model.pc.template.resp.TemplateRespVO; import com.ycwl.basic.model.pc.video.entity.MemberVideoEntity; import com.ycwl.basic.model.pc.video.req.VideoReqQuery; import com.ycwl.basic.model.pc.video.resp.VideoRespVO; +import com.ycwl.basic.repository.FaceRepository; import com.ycwl.basic.repository.OrderRepository; import com.ycwl.basic.repository.ScenicRepository; import com.ycwl.basic.repository.VideoTaskRepository; @@ -62,6 +64,8 @@ public class GoodsServiceImpl implements GoodsService { private OrderRepository orderRepository; @Autowired private OrderBiz orderBiz; + @Autowired + private FaceRepository faceRepository; public ApiResponse> goodsList(GoodsReqQuery query) { //查询原素材 @@ -250,15 +254,20 @@ public class GoodsServiceImpl implements GoodsService { * @return 0没有任务 1 合成中 2 合成成功 */ @Override - public ApiResponse getTaskStatusByFaceId(Long userId, Long faceId) { + public VideoTaskStatusVO getTaskStatusByFaceId(Long userId, Long faceId) { + FaceEntity face = faceRepository.getFace(faceId); List taskList = videoMapper.listRelationByFace(userId, faceId); VideoTaskStatusVO response = new VideoTaskStatusVO(); response.setFaceId(faceId); + if (face == null) { + response.setStatus(0); + return response; + } + response.setScenicId(face.getScenicId()); if (taskList.isEmpty()) { response.setStatus(0); - return ApiResponse.success(response); + return response; } - response.setScenicId(taskList.get(0).getScenicId()); List templateList = templateRepository.getTemplateListByScenicId(response.getScenicId()); List templateIds = templateList.stream().map(TemplateRespVO::getId).collect(Collectors.toList()); response.setMaxCount(templateList.size()); @@ -277,7 +286,7 @@ public class GoodsServiceImpl implements GoodsService { response.setTemplateId(notFinishedTasks.get(0).getTemplateId()); response.setTaskId(notFinishedTasks.get(0).getTaskId()); response.setStatus(2); - return ApiResponse.success(response); + return response; } MemberVideoEntity lastVideo = taskList.get(taskList.size() - 1); response.setTaskId(lastVideo.getTaskId()); @@ -285,24 +294,24 @@ public class GoodsServiceImpl implements GoodsService { response.setVideoId(lastVideo.getVideoId()); response.setCount(taskList.size()); response.setStatus(1); - return ApiResponse.success(response); + return response; } @Override - public ApiResponse getAllTaskStatus(Long userId) { + public VideoTaskStatusVO getAllTaskStatus(Long userId) { FaceRespVO lastFaceByUserId = faceMapper.findLastFaceByUserId(String.valueOf(userId)); return getTaskStatusByFaceId(userId, lastFaceByUserId.getId()); } @Override - public ApiResponse getTaskStatusByTemplateId(Long userId, Long faceId, Long templateId) { + public VideoTaskStatusVO getTaskStatusByTemplateId(Long userId, Long faceId, Long templateId) { List taskList = videoMapper.listRelationByFaceAndTemplate(userId, faceId, templateId); VideoTaskStatusVO response = new VideoTaskStatusVO(); response.setFaceId(faceId); response.setTemplateId(templateId); if (taskList.isEmpty()) { response.setStatus(0); - return ApiResponse.success(response); + return response; } response.setScenicId(taskList.get(0).getScenicId()); response.setMaxCount(templateRepository.getTemplateListByScenicId(response.getScenicId()).size()); @@ -319,7 +328,7 @@ public class GoodsServiceImpl implements GoodsService { response.setTemplateId(notFinishedTasks.get(0).getTemplateId()); response.setTaskId(notFinishedTasks.get(0).getTaskId()); response.setStatus(2); - return ApiResponse.success(response); + return response; } MemberVideoEntity lastVideo = taskList.get(taskList.size() - 1); response.setTaskId(lastVideo.getTaskId()); @@ -332,18 +341,18 @@ public class GoodsServiceImpl implements GoodsService { response.setStatus(1); response.setVideoId(lastVideo.getVideoId()); } - return ApiResponse.success(response); + return response; } @Override - public ApiResponse getTaskStatusByScenicId(Long userId, Long scenicId) { + public VideoTaskStatusVO getTaskStatusByScenicId(Long userId, Long scenicId) { FaceRespVO faceVO = faceMapper.getByMemberId(userId, scenicId); VideoTaskStatusVO response = new VideoTaskStatusVO(); response.setScenicId(scenicId); if (faceVO == null) { // 从来没露脸 response.setStatus(-2); - return ApiResponse.success(response); + return response; } return getTaskStatusByFaceId(userId, faceVO.getId()); } diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/WxPayServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/WxPayServiceImpl.java index afb6f64..976e16f 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/WxPayServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/WxPayServiceImpl.java @@ -47,6 +47,7 @@ import com.ycwl.basic.service.HttpService; import com.ycwl.basic.service.mobile.WxPayService; import com.ycwl.basic.service.pc.OrderService; import com.ycwl.basic.utils.ApiResponse; +import com.ycwl.basic.utils.DateUtils; import com.ycwl.basic.utils.SnowFlakeUtil; import com.ycwl.basic.utils.WXPayUtil; import lombok.extern.slf4j.Slf4j; @@ -233,13 +234,18 @@ public class WxPayServiceImpl implements WxPayService { StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq(); statisticsRecordAddReq.setMemberId(orderData.getMemberId()); - // TODO - //如果订单在商品创建后30分钟内支付,则为现场支付,否则为事后支付 -// if(DateUtils.addDateMinute(createTime,30).compareTo(payAt)>0){// + Calendar calendar = Calendar.getInstance(); + calendar.setTime(createTime); + calendar.set(Calendar.HOUR_OF_DAY, 21); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + // TODO: 他的购买的内容于内容生成当天晚9点之前算现场订单,否则算推送订单 + if(calendar.getTime().compareTo(payAt)>0){// statisticsRecordAddReq.setType(StatisticEnum.ON_SITE_PAYMENT.code); -// }else { -// statisticsRecordAddReq.setType(StatisticEnum.POST_PAYMENT.code); -// } + }else { + statisticsRecordAddReq.setType(StatisticEnum.POST_PAYMENT.code); + } + calendar.clear(); statisticsRecordAddReq.setScenicId(orderData.getScenicId()); statisticsRecordAddReq.setMorphId(orderId); statisticsMapper.addStatisticsRecord(statisticsRecordAddReq); diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java index 0d404a7..1aacb62 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java @@ -147,7 +147,7 @@ public class FaceServiceImpl implements FaceService { if (face == null) { return false; } - return face.getScenicId().equals(scenicId); + return face.getMemberId().equals(userId); }).findAny(); if (faceAny.isPresent()) { oldFaceId = faceAny.get(); @@ -197,6 +197,7 @@ public class FaceServiceImpl implements FaceService { } SearchFaceRespVo scenicDbSearchResult = faceService.searchFace(face.getScenicId(), face.getFaceUrl()); FaceEntity faceEntity = new FaceEntity(); + faceEntity.setId(faceId); faceEntity.setScore(scenicDbSearchResult.getScore()); faceEntity.setMatchResult(scenicDbSearchResult.getSearchResultJson()); if (scenicDbSearchResult.getFirstMatchRate() != null) { @@ -210,6 +211,8 @@ public class FaceServiceImpl implements FaceService { faceEntity.setMemberId(face.getMemberId()); faceEntity.setFaceUrl(face.getFaceUrl()); List sampleListIds = scenicDbSearchResult.getSampleListIds(); + faceMapper.update(faceEntity); + faceRepository.clearFaceCache(faceEntity.getId()); if (sampleListIds != null && !sampleListIds.isEmpty()) {// 匹配原片:照片 List sourceEntities = sourceMapper.listBySampleIds(sampleListIds); List memberSourceEntityList = sourceEntities.stream().map(sourceEntity -> { @@ -231,16 +234,14 @@ public class FaceServiceImpl implements FaceService { }).collect(Collectors.toList()); if (!memberSourceEntityList.isEmpty()) { sourceMapper.addRelations(memberSourceEntityList); - taskTaskService.autoCreateTaskByFaceId(faceEntity.getId()); + taskTaskService.autoCreateTaskByFaceId(face.getId()); VideoPieceGetter.Task task = new VideoPieceGetter.Task(); - task.faceId = faceEntity.getId(); + task.faceId = face.getId(); task.faceSampleIds = sampleListIds; task.memberId = face.getMemberId(); VideoPieceGetter.addTask(task); } } - faceMapper.update(faceEntity); - faceRepository.clearFaceCache(faceEntity.getId()); return scenicDbSearchResult; } diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/ScenicServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/ScenicServiceImpl.java index d7faa52..fc18ef2 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/ScenicServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/ScenicServiceImpl.java @@ -148,6 +148,9 @@ public class ScenicServiceImpl implements ScenicService { @Override public ApiResponse addConfig(ScenicConfigEntity scenicConfig) { + if (scenicConfig.getId() == null) { + scenicConfig.setId(SnowFlakeUtil.getLongId()); + } int i = scenicMapper.addConfig(scenicConfig); if (i > 0) { scenicRepository.clearCache(scenicConfig.getScenicId()); diff --git a/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java b/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java index cfdae2c..a7d90b3 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java @@ -39,10 +39,10 @@ public interface GoodsService { * @param userId * @return */ - ApiResponse getAllTaskStatus(Long userId); - ApiResponse getTaskStatusByFaceId(Long userId ,Long faceId); - ApiResponse getTaskStatusByTemplateId(Long userId, Long faceId, Long templateId); - ApiResponse getTaskStatusByScenicId(Long userId, Long scenicId); + VideoTaskStatusVO getAllTaskStatus(Long userId); + VideoTaskStatusVO getTaskStatusByFaceId(Long userId ,Long faceId); + VideoTaskStatusVO getTaskStatusByTemplateId(Long userId, Long faceId, Long templateId); + VideoTaskStatusVO getTaskStatusByScenicId(Long userId, Long scenicId); ApiResponse sourceGoodsInfo(Long userId, Long sourceId); } diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java index e94526b..f47b912 100644 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java @@ -49,7 +49,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; @@ -87,7 +86,12 @@ public class TaskFaceServiceImpl implements TaskFaceService { private SourceMapper sourceMapper; @Autowired private OrderBiz orderBiz; - private SlidingWindowRateLimiter limiter = new SlidingWindowRateLimiter(5); // 阿里云人脸检索限制qps=5 + // 阿里云人脸检索限制qps=2 + private final SlidingWindowRateLimiter addEntityLimiter = new SlidingWindowRateLimiter(1); + // 阿里云人脸检索限制qps=5 + private final SlidingWindowRateLimiter searchFaceLimiter = new SlidingWindowRateLimiter(4); + private final SlidingWindowRateLimiter deleteDbLimiter = new SlidingWindowRateLimiter(1); + private final SlidingWindowRateLimiter deleteEntityLimiter = new SlidingWindowRateLimiter(1); private IAcsClient getClient() { DefaultProfile profile = DefaultProfile.getProfile( @@ -163,6 +167,10 @@ public class TaskFaceServiceImpl implements TaskFaceService { request.setLimit(100); // request.setQualityScoreThreshold(60f); FaceDetectLog log = FaceDetectLog.quickCreate("预留字段", request); + try { + searchFaceLimiter.aquire(); + } catch (InterruptedException ignored) { + } try { SearchFaceResponse response = client.getAcsResponse(request); log.fillResponse(response); @@ -197,7 +205,7 @@ public class TaskFaceServiceImpl implements TaskFaceService { .collect(Collectors.toList()); log.matchLocalRecord(records); List faceSampleIds = records.stream() - .filter(record -> record.getScore() > 0.6) + .filter(record -> record.getScore() > 0.525F) .map(MatchLocalRecord::getFaceSampleId) .collect(Collectors.toList()); respVo.setFirstMatchRate(matchList.get(0).getFaceItems().get(0).getScore()); @@ -235,9 +243,8 @@ public class TaskFaceServiceImpl implements TaskFaceService { request.setEntityId(entityId); IAcsClient client = getClient(); try { - limiter.allowRequest(); - } catch (InterruptedException e) { - return null; + addEntityLimiter.aquire(); + } catch (InterruptedException ignored) { } try { client.getAcsResponse(request); @@ -256,7 +263,7 @@ public class TaskFaceServiceImpl implements TaskFaceService { respVo.setScore(acsResponse.getData().getQualitieScore()); return respVo; } catch (ClientException e) { - log.error("addFaceEntity", e); + log.error("addFace", e); return null; } } @@ -283,6 +290,10 @@ public class TaskFaceServiceImpl implements TaskFaceService { DeleteFaceEntityRequest request = new DeleteFaceEntityRequest(); request.setDbName(scenicId.toString()); request.setEntityId(entityId); + try { + deleteEntityLimiter.aquire(); + } catch (InterruptedException ignored) { + } try { client.getAcsResponse(request); } catch (ClientException e) { @@ -310,9 +321,8 @@ public class TaskFaceServiceImpl implements TaskFaceService { deleteFaceEntityRequest.setDbName(entity.getDbName()); deleteFaceEntityRequest.setEntityId(entity.getEntityId()); try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); + deleteEntityLimiter.aquire(); + } catch (InterruptedException ignored) { } try { client.getAcsResponse(deleteFaceEntityRequest); @@ -323,6 +333,10 @@ public class TaskFaceServiceImpl implements TaskFaceService { } DeleteFaceDbRequest deleteFaceDbRequest = new DeleteFaceDbRequest(); deleteFaceDbRequest.setName(dbName); + try { + deleteDbLimiter.aquire(); + } catch (InterruptedException ignored) { + } client.getAcsResponse(deleteFaceDbRequest); removeFaceDBCache(dbName); } catch (ClientException e) { diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java index e216ee3..356d481 100644 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java @@ -545,7 +545,7 @@ public class TaskTaskServiceImpl implements TaskService { } ScenicEntity scenic = scenicRepository.getScenic(item.getScenicId()); String title = "您在【" + scenic.getName() + "】的专属影像"; - String page = "pages/videoSynthesis/buy?scenicId=" + item.getScenicId() + "&faceId=" + item.getFaceId() + "&id=" + item.getVideoId(); + String page = "pages/videoSynthesis/index?scenicId=" + item.getScenicId() + "&faceId=" + item.getFaceId(); /** * 视频名称 {{thing1.DATA}} * 生成时间 {{time4.DATA}} diff --git a/src/main/java/com/ycwl/basic/task/DownloadNotificationTasker.java b/src/main/java/com/ycwl/basic/task/DownloadNotificationTasker.java index 3cc5f25..2d2b9b4 100644 --- a/src/main/java/com/ycwl/basic/task/DownloadNotificationTasker.java +++ b/src/main/java/com/ycwl/basic/task/DownloadNotificationTasker.java @@ -57,7 +57,7 @@ public class DownloadNotificationTasker { log.info("发送模板消息"); ScenicEntity scenic = scenicRepository.getScenic(item.getScenicId()); String title = "您在【" + scenic.getName() + "】的专属影像"; - String page = "pages/videoSynthesis/buy?scenicId=" + item.getScenicId() + "&faceId=" + item.getFaceId() + "&id=" + item.getVideoId(); + String page = "pages/videoSynthesis/index?scenicId=" + item.getScenicId() + "&faceId=" + item.getFaceId(); /** * 景区 {{thing1.DATA}} * 备注 {{thing3.DATA}} @@ -91,6 +91,9 @@ public class DownloadNotificationTasker { MpConfigEntity scenicMp = scenicRepository.getScenicMpConfig(member.getScenicId()); ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(item.getScenicId()); Integer videoStoreDay = scenicConfig.getVideoStoreDay(); + if (videoStoreDay == null) { + videoStoreDay = 3; + } // 发送模板消息 String templateId = scenicRepository.getVideoPreExpireTemplateId(item.getScenicId()); if (StringUtils.isBlank(templateId)) { @@ -100,7 +103,7 @@ public class DownloadNotificationTasker { log.info("发送模板消息"); ScenicEntity scenic = scenicRepository.getScenic(item.getScenicId()); String title = "您在【" + scenic.getName() + "】的专属影像"; - String page = "pages/videoSynthesis/buy?scenicId=" + item.getScenicId() + "&faceId=" + item.getFaceId() + "&id=" + item.getVideoId(); + String page = "pages/videoSynthesis/index?scenicId=" + item.getScenicId() + "&faceId=" + item.getFaceId(); /** * 影像名称 {{thing1.DATA}} * 过期时间 {{time2.DATA}} diff --git a/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java b/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java index 2694263..77e5610 100644 --- a/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java +++ b/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java @@ -85,12 +85,12 @@ public class DynamicTaskGenerator { public static void addTask(Long faceSampleId) { Date createTime = new Date(); - // 两分钟后 + // 半分钟后 createTime.setTime(createTime.getTime() + 30000L); queue.add(new Task(faceSampleId, createTime)); } - @Scheduled(fixedRate = 10000L) + @Scheduled(fixedDelay = 500L) public void doTask() { Task task = queue.poll(); if (task == null) { diff --git a/src/main/java/com/ycwl/basic/utils/WxMpUtil.java b/src/main/java/com/ycwl/basic/utils/WxMpUtil.java index 46dfc20..ae1db1b 100644 --- a/src/main/java/com/ycwl/basic/utils/WxMpUtil.java +++ b/src/main/java/com/ycwl/basic/utils/WxMpUtil.java @@ -41,7 +41,7 @@ public class WxMpUtil { JSONObject json = new JSONObject(); json.put("env_version", "trial"); json.put("path", path); - json.put("width", 430); + json.put("width", 1000); StringEntity entity = new StringEntity(json.toJSONString(), "utf-8"); httpPost.setEntity(entity); httpPost.setHeader("Content-Type", "application/json"); @@ -58,6 +58,6 @@ public class WxMpUtil { } public static void main(String[] args) throws Exception { - generateWXAQRCode("wxe7ff26af70bfc37c", "5252fbbc68513bc77b7cc0052b9f9695", "pages/home/index?scenicId=3942994647776890880", "a.jpg"); + generateWXAQRCode("wxe7ff26af70bfc37c", "5252fbbc68513bc77b7cc0052b9f9695", "pages/home/index?scenicId=3946669713328836608", "cxzh_t.jpg"); } } diff --git a/src/main/resources/mapper/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml index ef36258..7870c93 100644 --- a/src/main/resources/mapper/DeviceMapper.xml +++ b/src/main/resources/mapper/DeviceMapper.xml @@ -29,7 +29,8 @@ update device_config - set store_type = #{storeType}, + set viid_type = #{viidType}, + store_type = #{storeType}, store_config_json = #{storeConfigJson}, store_expire_day = #{storeExpireDay}, online_check = #{onlineCheck}, diff --git a/src/main/resources/mapper/OrderMapper.xml b/src/main/resources/mapper/OrderMapper.xml index 0564bc9..f4eca11 100644 --- a/src/main/resources/mapper/OrderMapper.xml +++ b/src/main/resources/mapper/OrderMapper.xml @@ -63,14 +63,16 @@ - select t.id, t.scenic_id, s.name as scenic_name, t.`name`, t.cover_url, t.status, t.create_time, t.update_time, t.price, t.slash_price, t.sort + select t.*, s.name as scenic_name from template t left join scenic s on s.id = t.scenic_id pid = 0 @@ -84,12 +84,12 @@