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 f334452..4d985ca 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java @@ -3,7 +3,6 @@ package com.ycwl.basic.controller.mobile; import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.model.jwt.JwtInfo; import com.ycwl.basic.model.mobile.goods.*; -import com.ycwl.basic.model.pc.source.resp.SourceRespVO; import com.ycwl.basic.service.mobile.GoodsService; import com.ycwl.basic.service.task.TaskService; import com.ycwl.basic.utils.ApiResponse; @@ -58,28 +57,34 @@ public class AppGoodsController { /** * 查询用户当前景区的视频合成任务状态 - * @param faceId 景区id + * * @return 0没有任务 1 合成中 2 合成成功 */ @ApiOperation("查询用户当前景区的整体视频合成任务状态 0没有任务 1 合成中 2 合成成功 ") - @GetMapping("/getTaskStatus/{faceId}") - public ApiResponse getAllTaskStatus(@PathVariable("faceId") Long faceId) { - JwtInfo worker = JwtTokenUtil.getWorker(); - return goodsService.getAllTaskStatus(worker.getUserId(),faceId); - } @GetMapping("/getTaskStatus/") - public ApiResponse getAllTaskStatus() { + public ApiResponse getAllTaskStatus() { JwtInfo worker = JwtTokenUtil.getWorker(); return goodsService.getAllTaskStatus(worker.getUserId()); } + @GetMapping("/task/face/{faceId}") + public ApiResponse getTaskStatusByFaceId(@PathVariable("faceId") Long faceId) { + JwtInfo worker = JwtTokenUtil.getWorker(); + return goodsService.getTaskStatusByFaceId(worker.getUserId(), faceId); + } + @GetMapping("/task/scenic/{scenicId}") + public ApiResponse getAllTaskStatusByScenicId(@PathVariable("scenicId") Long scenicId) { + JwtInfo worker = JwtTokenUtil.getWorker(); + return goodsService.getTaskStatusByScenicId(worker.getUserId(), scenicId); + } + /** * 查询用户当前景区的具体模版视频合成任务状态 * @param templateId 模版id * @return 1 合成中 2 合成成功 */ @ApiOperation("查询用户当前景区的具体模版视频合成任务状态 1 合成中 2 合成成功 ") - @GetMapping("/getTemplateTaskStatus/{templateId}") + @GetMapping("/task/template/{templateId}") public ApiResponse getTemplateTaskStatus(@PathVariable("templateId") Long templateId) { JwtInfo worker = JwtTokenUtil.getWorker(); return goodsService.getTemplateTaskStatus(worker.getUserId(),templateId); diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppIndexController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppIndexController.java index e4b2f4b..16fd105 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppIndexController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppIndexController.java @@ -44,5 +44,11 @@ public class AppIndexController { // return scenicService.topState(); // } - + @GetMapping("/faceAgreement") + public ApiResponse faceAgreement() { + return ApiResponse.success("人脸识别隐私协议:\n" + + "1、xxx\n1、xxx\n1、xxx\n1、xxx\n1、xxx\n1、xxx\n1、xxx\n1、xxx\n" + + "1、xxx\n1、xxx\n1、xxx\n1、xxx\n1、xxx\n1、xxx\n1、xxx\n1、xxx\n" + + "1、xxx\n1、xxx\n1、xxx\n1、xxx\n1、xxx\n1、xxx\n1、xxx\n1、xxx\n"); + } } diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppScenicController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppScenicController.java index 969eae6..1c39bf4 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppScenicController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppScenicController.java @@ -2,6 +2,8 @@ package com.ycwl.basic.controller.mobile; import com.github.pagehelper.PageInfo; import com.ycwl.basic.annotation.IgnoreToken; +import com.ycwl.basic.constant.BaseContextHandler; +import com.ycwl.basic.model.jwt.JwtInfo; import com.ycwl.basic.model.mobile.goods.GoodsPageVO; import com.ycwl.basic.model.mobile.goods.GoodsReqQuery; import com.ycwl.basic.model.mobile.scenic.ScenicAppVO; @@ -12,6 +14,7 @@ import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; import com.ycwl.basic.service.mobile.AppScenicService; import com.ycwl.basic.service.pc.ScenicService; import com.ycwl.basic.utils.ApiResponse; +import com.ycwl.basic.utils.JwtTokenUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -38,13 +41,13 @@ public class AppScenicController { } @ApiOperation("根据id查询景区详情") @IgnoreToken - @GetMapping("getDetails/{id}") + @GetMapping("/{id}") public ApiResponse getDetails(@PathVariable Long id){ return appScenicService.getDetails(id); } @ApiOperation("查询景区设备总数和拍到用户的机位数量") - @GetMapping("/deviceCountByScenicId/{scenicId}") + @GetMapping("/{scenicId}/deviceCount/") public ApiResponse deviceCountByScenicId(@PathVariable Long scenicId){ return appScenicService.deviceCountByScenicId(scenicId); } @@ -56,9 +59,10 @@ public class AppScenicController { } @ApiOperation("景区视频源素材列表") - @GetMapping("/contentList/{faceId}") + @GetMapping("/face/{faceId}/contentList") public ApiResponse> contentList(@PathVariable Long faceId) { - return appScenicService.contentList(faceId); + JwtInfo worker = JwtTokenUtil.getWorker(); + return appScenicService.faceContentList(worker.getUserId(), faceId); } diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppWxNotifyController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppWxNotifyController.java index 754bcf6..ed9ac77 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppWxNotifyController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppWxNotifyController.java @@ -9,11 +9,15 @@ import com.ycwl.basic.utils.ApiResponse; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; 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.ArrayList; +import java.util.List; + /** * @Author: songmingsong * @CreateTime: 2024-12-06 @@ -35,4 +39,12 @@ public class AppWxNotifyController { return ApiResponse.success(resJson); } + @GetMapping("/getIds") + @IgnoreToken + public ApiResponse> getIds() { + return ApiResponse.success(new ArrayList() {{ + add("5b8vTm7kvwYubqDxb3dxBqFIhc3Swt5l7QHSK5r-ZRI"); + }}); + } + } diff --git a/src/main/java/com/ycwl/basic/controller/mobile/manage/AppScenicAccountController.java b/src/main/java/com/ycwl/basic/controller/mobile/manage/AppScenicAccountController.java index 028cc19..08591f8 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/manage/AppScenicAccountController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/manage/AppScenicAccountController.java @@ -4,12 +4,14 @@ import com.ycwl.basic.annotation.IgnoreToken; import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginReq; import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginRespVO; import com.ycwl.basic.model.mobile.weChat.DTO.WeChatUserInfoDTO; +import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; import com.ycwl.basic.service.mobile.AppScenicService; import com.ycwl.basic.utils.ApiResponse; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -33,4 +35,9 @@ public class AppScenicAccountController { public ApiResponse login(@RequestBody ScenicLoginReq scenicLoginReq) throws Exception { return scenicService.login(scenicLoginReq); } + + @GetMapping("/getScenic") + public ApiResponse getMyScenic() { + return scenicService.getMyScenic(); + } } diff --git a/src/main/java/com/ycwl/basic/mapper/ScenicAccountMapper.java b/src/main/java/com/ycwl/basic/mapper/ScenicAccountMapper.java index 52c8b71..acf6f35 100644 --- a/src/main/java/com/ycwl/basic/mapper/ScenicAccountMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/ScenicAccountMapper.java @@ -12,4 +12,6 @@ public interface ScenicAccountMapper { int deleteById(Long id); int updateStatus(Long id); int deleteByScenicId(Long scenicId); + + ScenicAccountEntity findAccountById(String id); } diff --git a/src/main/java/com/ycwl/basic/model/mobile/goods/VideoGoodsDetailVO.java b/src/main/java/com/ycwl/basic/model/mobile/goods/VideoGoodsDetailVO.java index 3a0e31c..b2e7f76 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/goods/VideoGoodsDetailVO.java +++ b/src/main/java/com/ycwl/basic/model/mobile/goods/VideoGoodsDetailVO.java @@ -41,6 +41,7 @@ public class VideoGoodsDetailVO { private Date createTime; @ApiModelProperty("价格") private String price; + private String slashPrice; @ApiModelProperty("是否已购买 0否 1是") private Integer isBuy; @ApiModelProperty("镜头数") diff --git a/src/main/java/com/ycwl/basic/model/mobile/goods/VideoTaskStatusVO.java b/src/main/java/com/ycwl/basic/model/mobile/goods/VideoTaskStatusVO.java new file mode 100644 index 0000000..3ea303d --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/mobile/goods/VideoTaskStatusVO.java @@ -0,0 +1,10 @@ +package com.ycwl.basic.model.mobile.goods; + +import lombok.Data; + +@Data +public class VideoTaskStatusVO { + private Integer status; + private Long faceId; + private Long scenicId; +} diff --git a/src/main/java/com/ycwl/basic/model/pc/scenic/req/ScenicAddOrUpdateReq.java b/src/main/java/com/ycwl/basic/model/pc/scenic/req/ScenicAddOrUpdateReq.java index 2ff5333..62424cc 100644 --- a/src/main/java/com/ycwl/basic/model/pc/scenic/req/ScenicAddOrUpdateReq.java +++ b/src/main/java/com/ycwl/basic/model/pc/scenic/req/ScenicAddOrUpdateReq.java @@ -84,4 +84,6 @@ public class ScenicAddOrUpdateReq { private String account; @ApiModelProperty("密码") private String password; + private String kfCodeUrl; + private String kfPhone; } diff --git a/src/main/java/com/ycwl/basic/model/pc/scenic/resp/ScenicRespVO.java b/src/main/java/com/ycwl/basic/model/pc/scenic/resp/ScenicRespVO.java index 47f1008..0d839da 100644 --- a/src/main/java/com/ycwl/basic/model/pc/scenic/resp/ScenicRespVO.java +++ b/src/main/java/com/ycwl/basic/model/pc/scenic/resp/ScenicRespVO.java @@ -88,4 +88,6 @@ public class ScenicRespVO { private BigDecimal price; @ApiModelProperty("镜头数") private Integer lensNum; + private String kfCodeUrl; + private String kfPhone; } diff --git a/src/main/java/com/ycwl/basic/model/pc/source/req/SourceReqQuery.java b/src/main/java/com/ycwl/basic/model/pc/source/req/SourceReqQuery.java index 12a897b..4dbd52a 100644 --- a/src/main/java/com/ycwl/basic/model/pc/source/req/SourceReqQuery.java +++ b/src/main/java/com/ycwl/basic/model/pc/source/req/SourceReqQuery.java @@ -44,6 +44,7 @@ public class SourceReqQuery extends BaseQueryParameterReq { private String url; @ApiModelProperty("是否被购买:0未购买,1已购买") private Integer isBuy; + private Integer faceId; private Date startTime; private Date endTime; } diff --git a/src/main/java/com/ycwl/basic/model/pc/template/entity/TemplateEntity.java b/src/main/java/com/ycwl/basic/model/pc/template/entity/TemplateEntity.java index e3a9461..ac40718 100644 --- a/src/main/java/com/ycwl/basic/model/pc/template/entity/TemplateEntity.java +++ b/src/main/java/com/ycwl/basic/model/pc/template/entity/TemplateEntity.java @@ -65,6 +65,7 @@ public class TemplateEntity { * 价格,单位元 */ private BigDecimal price; + private BigDecimal slashPrice; /** * 是否启用,0不是,1是 */ diff --git a/src/main/java/com/ycwl/basic/model/pc/template/resp/TemplateRespVO.java b/src/main/java/com/ycwl/basic/model/pc/template/resp/TemplateRespVO.java index d6deab6..a2497fa 100644 --- a/src/main/java/com/ycwl/basic/model/pc/template/resp/TemplateRespVO.java +++ b/src/main/java/com/ycwl/basic/model/pc/template/resp/TemplateRespVO.java @@ -85,5 +85,6 @@ public class TemplateRespVO { private Date updateTime; private List children; private BigDecimal price; + private BigDecimal slashPrice; private Integer sort; } diff --git a/src/main/java/com/ycwl/basic/model/pc/video/resp/VideoRespVO.java b/src/main/java/com/ycwl/basic/model/pc/video/resp/VideoRespVO.java index abc117d..b464ab3 100644 --- a/src/main/java/com/ycwl/basic/model/pc/video/resp/VideoRespVO.java +++ b/src/main/java/com/ycwl/basic/model/pc/video/resp/VideoRespVO.java @@ -38,6 +38,7 @@ public class VideoRespVO { private String templateName; @ApiModelProperty("模版价格") private BigDecimal templatePrice; + private BigDecimal slashPrice; @ApiModelProperty("模版封面图片") private String templateCoverUrl; @ApiModelProperty("经度") diff --git a/src/main/java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java b/src/main/java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java index 074e80f..89b4876 100644 --- a/src/main/java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java +++ b/src/main/java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java @@ -6,7 +6,8 @@ import java.util.List; @Data public class SearchFaceRespVo { - private float score; + private Float score; private List sampleListIds; private String searchResultJson; + private Float firstMatchRate; } 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 f47d30e..a013216 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 @@ -21,8 +21,6 @@ import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery; import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; import com.ycwl.basic.model.pc.source.req.SourceReqQuery; import com.ycwl.basic.model.pc.source.resp.SourceRespVO; -import com.ycwl.basic.model.pc.template.req.TemplateReqQuery; -import com.ycwl.basic.model.pc.template.resp.TemplateRespVO; import com.ycwl.basic.model.pc.video.req.VideoReqQuery; import com.ycwl.basic.model.pc.video.resp.VideoRespVO; import com.ycwl.basic.service.mobile.AppScenicService; @@ -36,7 +34,6 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; /** @@ -174,6 +171,50 @@ public class AppScenicServiceImpl implements AppScenicService { return ApiResponse.success(contentList); } + @Override + public ApiResponse> faceContentList(Long userId, Long faceId) { + FaceRespVO faceRespVO = faceMapper.getById(faceId); + if (faceRespVO == null) { + return ApiResponse.success(new ArrayList<>()); + } + if (StringUtils.isBlank(faceRespVO.getMatchSampleIds())) { + return ApiResponse.success(new ArrayList<>()); + } + List contentList = templateMapper.listFor(faceRespVO.getScenicId(), faceId); + contentList.forEach(contentPageVO -> { + if (contentPageVO.getContentType() == 1) { + VideoReqQuery videoReqQuery = new VideoReqQuery(); + videoReqQuery.setScenicId(contentPageVO.getScenicId()); + videoReqQuery.setTemplateId(contentPageVO.getTemplateId()); + videoReqQuery.setMemberId(userId); + List videoList = videoMapper.list(videoReqQuery); + if (!videoList.isEmpty()) { + contentPageVO.setContentId(videoList.get(0).getId()); + } + } + }); + + SourceReqQuery sourceReqQuery = new SourceReqQuery(); + sourceReqQuery.setScenicId(faceRespVO.getScenicId()); + sourceReqQuery.setMemberId(userId); + //查询源素材 + List sourceList = sourceMapper.listGroupByType(sourceReqQuery); + sourceList.forEach(sourceRespVO -> { + ContentPageVO contentPageVO = new ContentPageVO(); + Integer type = sourceRespVO.getType(); + if(type==1){ + contentPageVO.setName("原片集"); + }else { + contentPageVO.setName("照片集"); + } + contentPageVO.setContentType(2); + contentPageVO.setSourceType(type); + contentPageVO.setIsBuy(sourceRespVO.getIsBuy()); + contentList.add(contentPageVO); + }); + + return ApiResponse.success(contentList); + } @Override public ApiResponse login(ScenicLoginReq scenicLoginReq) throws Exception { @@ -207,4 +248,14 @@ public class AppScenicServiceImpl implements AppScenicService { FaceRespVO lastFaceByUserId = faceMapper.findLastFaceByUserId(BaseContextHandler.getUserId()); return contentList(lastFaceByUserId.getId()); } + + @Override + public ApiResponse getMyScenic() { + String userId = BaseContextHandler.getUserId(); + ScenicAccountEntity account = scenicAccountMapper.findAccountById(userId); + if (account == null) { + return ApiResponse.fail("用户未绑定景区"); + } + return getDetails(account.getScenicId()); + } } 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 a9a6f79..17bb19b 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 @@ -4,9 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.mapper.*; -import com.ycwl.basic.model.jwt.JwtInfo; import com.ycwl.basic.model.mobile.goods.*; -import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO; import com.ycwl.basic.model.pc.face.resp.FaceRespVO; import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; import com.ycwl.basic.model.pc.source.req.SourceReqQuery; @@ -18,7 +16,6 @@ import com.ycwl.basic.model.pc.video.resp.VideoRespVO; import com.ycwl.basic.service.mobile.GoodsService; import com.ycwl.basic.utils.ApiResponse; import com.ycwl.basic.utils.DateUtils; -import com.ycwl.basic.utils.JwtTokenUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -27,8 +24,8 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; +import java.util.Optional; /** * @Author:longbinbin @@ -198,9 +195,11 @@ public class GoodsServiceImpl implements GoodsService { goodsDetailVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl()); goodsDetailVO.setCreateTime(videoRespVO.getCreateTime()); BigDecimal templatePrice = videoRespVO.getTemplatePrice(); + BigDecimal slashPrice = videoRespVO.getSlashPrice(); // 使用DecimalFormat格式化输出 DecimalFormat df = new DecimalFormat("0.00"); goodsDetailVO.setPrice(templatePrice==null?"":df.format(templatePrice.setScale(2, RoundingMode.HALF_UP))); + goodsDetailVO.setSlashPrice(slashPrice==null?null:df.format(slashPrice.setScale(2, RoundingMode.HALF_UP))); goodsDetailVO.setIsBuy(videoRespVO.getIsBuy()); TaskRespVO taskRespVO = taskMapper.getById(videoRespVO.getTaskId()); JSONObject paramJson = JSON.parseObject(taskRespVO.getTaskParams()); @@ -217,32 +216,39 @@ public class GoodsServiceImpl implements GoodsService { /** * 查询用户当前景区的视频合成任务状态 + * * @param faceId 景区id * @return 0没有任务 1 合成中 2 合成成功 */ @Override - public ApiResponse getAllTaskStatus(Long userId, Long faceId) { + public ApiResponse getTaskStatusByFaceId(Long userId, Long faceId) { TaskReqQuery taskReqQuery = new TaskReqQuery(); taskReqQuery.setMemberId(userId); taskReqQuery.setFaceId(faceId); - int allCount=taskMapper.countTask(taskReqQuery); - if(allCount==0){//没有任务 - return ApiResponse.success(0); + VideoTaskStatusVO response = new VideoTaskStatusVO(); + List list=taskMapper.list(taskReqQuery); + if(list.isEmpty()){//没有任务 + response.setStatus(0); + return ApiResponse.success(response); } - taskReqQuery.setStatus(2); - int count=taskMapper.countTask(taskReqQuery); - - if(count>0){//有任务在进行中 - return ApiResponse.success(1); - }else {//没有任务在进行中 - return ApiResponse.success(2); + Optional first = list.stream().filter(item -> item.getStatus() == 0 || item.getStatus() == 2).findFirst(); + if (first.isPresent()) { + response.setStatus(1); + response.setScenicId(first.get().getScenicId()); + response.setFaceId(first.get().getFaceId()); + return ApiResponse.success(response); + } else { + response.setStatus(2); + response.setScenicId(list.get(0).getScenicId()); + response.setFaceId(list.get(0).getFaceId()); + return ApiResponse.success(response); } } @Override - public ApiResponse getAllTaskStatus(Long userId) { + public ApiResponse getAllTaskStatus(Long userId) { FaceRespVO lastFaceByUserId = faceMapper.findLastFaceByUserId(String.valueOf(userId)); - return getAllTaskStatus(userId,lastFaceByUserId.getId()); + return getTaskStatusByFaceId(userId, lastFaceByUserId.getId()); } @Override @@ -263,4 +269,31 @@ public class GoodsServiceImpl implements GoodsService { } } + @Override + public ApiResponse getTaskStatusByScenicId(Long userId, Long scenicId) { + TaskReqQuery taskReqQuery = new TaskReqQuery(); + taskReqQuery.setMemberId(userId); + taskReqQuery.setScenicId(scenicId); + int allCount=taskMapper.countTask(taskReqQuery); + VideoTaskStatusVO response = new VideoTaskStatusVO(); + if(allCount==0){//没有任务 + response.setStatus(0); + return ApiResponse.success(response); + } + List list=taskMapper.list(taskReqQuery); + // 未完成是等于0或2 + Optional first = list.stream().filter(item -> item.getStatus() == 0 || item.getStatus() == 2).findFirst(); + if (first.isPresent()) { + response.setStatus(1); + response.setScenicId(first.get().getScenicId()); + response.setFaceId(first.get().getFaceId()); + return ApiResponse.success(response); + } else { + response.setStatus(2); + response.setScenicId(list.get(0).getScenicId()); + response.setFaceId(list.get(0).getFaceId()); + return ApiResponse.success(response); + } + } + } 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 d18d6a7..b3bf552 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 @@ -16,6 +16,7 @@ import com.ycwl.basic.model.task.resp.SearchFaceRespVo; import com.ycwl.basic.service.pc.FaceService; import com.ycwl.basic.service.task.TaskFaceService; import com.ycwl.basic.service.task.TaskService; +import com.ycwl.basic.task.FaceCleaner; import com.ycwl.basic.utils.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +26,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; +import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Objects; @@ -50,6 +52,8 @@ public class FaceServiceImpl implements FaceService { private float faceScore; @Autowired private TaskService taskTaskService; + @Autowired + private FaceCleaner faceCleaner; @Override public ApiResponse> pageQuery(FaceReqQuery faceReqQuery) { @@ -130,6 +134,7 @@ public class FaceServiceImpl implements FaceService { FaceEntity faceEntity = new FaceEntity(); faceEntity.setScore(searchFaceRespVo.getScore()); faceEntity.setMatchResult(searchFaceRespVo.getSearchResultJson()); + faceEntity.setFirstMatchRate(BigDecimal.valueOf(searchFaceRespVo.getFirstMatchRate())); faceEntity.setMatchSampleIds(searchFaceRespVo.getSampleListIds().stream().map(String::valueOf).collect(Collectors.joining(","))); faceEntity.setCreateAt(new Date()); faceEntity.setScenicId(scenicId); diff --git a/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java index 6435d72..e2708ef 100644 --- a/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java @@ -6,7 +6,11 @@ import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.facebody.model.v20191230.AddFaceEntityRequest; import com.aliyuncs.facebody.model.v20191230.AddFaceRequest; import com.aliyuncs.facebody.model.v20191230.AddFaceResponse; +import com.aliyuncs.facebody.model.v20191230.CreateFaceDbRequest; +import com.aliyuncs.facebody.model.v20191230.DeleteFaceDbRequest; import com.aliyuncs.facebody.model.v20191230.DeleteFaceEntityRequest; +import com.aliyuncs.facebody.model.v20191230.ListFaceEntitiesRequest; +import com.aliyuncs.facebody.model.v20191230.ListFaceEntitiesResponse; import com.aliyuncs.facebody.model.v20191230.SearchFaceRequest; import com.aliyuncs.facebody.model.v20191230.SearchFaceResponse; import com.ycwl.basic.config.FaceDetectConfig; @@ -32,6 +36,7 @@ import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.profile.DefaultProfile; +import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -62,6 +67,7 @@ public class TaskFaceServiceImpl implements TaskFaceService { FaceEntity faceEntity = new FaceEntity(); faceEntity.setId(faceId); faceEntity.setMatchResult(respVo.getSearchResultJson()); + faceEntity.setFirstMatchRate(BigDecimal.valueOf(respVo.getFirstMatchRate())); faceEntity.setScore(respVo.getScore()); faceEntity.setMatchSampleIds(StringUtils.join(respVo.getSampleListIds(), ",")); faceMapper.update(faceEntity); @@ -83,6 +89,9 @@ public class TaskFaceServiceImpl implements TaskFaceService { if (matchList.isEmpty()) { return null; } + if (matchList.get(0).getFaceItems().isEmpty()) { + return null; + } SearchFaceRespVo respVo = new SearchFaceRespVo(); List faceItems = matchList.get(0).getFaceItems().stream() .filter(faceItemsItem -> faceItemsItem.getConfidence() > 50).collect(Collectors.toList()); @@ -91,6 +100,7 @@ public class TaskFaceServiceImpl implements TaskFaceService { .map(Long::parseLong) .collect(Collectors.toList()); respVo.setSearchResultJson(JSON.toJSONString(matchList.get(0))); + respVo.setFirstMatchRate(matchList.get(0).getFaceItems().get(0).getConfidence()); respVo.setSampleListIds(faceSampleIds); respVo.setScore(matchList.get(0).getQualitieScore()); return respVo; @@ -164,4 +174,56 @@ public class TaskFaceServiceImpl implements TaskFaceService { } }); } + + @Override + public void deleteFaceDB(Long scenicId) { + ListFaceEntitiesRequest request = new ListFaceEntitiesRequest(); + request.setDbName(scenicId.toString()); + request.setLimit(200); + IAcsClient client = getClient(); + try { + while (true) { + ListFaceEntitiesResponse response = client.getAcsResponse(request); + if (response.getData().getTotalCount() == 0) { + break; + } + response.getData().getEntities().forEach(entity -> { + DeleteFaceEntityRequest deleteFaceEntityRequest = new DeleteFaceEntityRequest(); + deleteFaceEntityRequest.setDbName(entity.getDbName()); + deleteFaceEntityRequest.setEntityId(entity.getEntityId()); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + try { + client.getAcsResponse(deleteFaceEntityRequest); + } catch (ClientException e) { + log.error("删除人脸数据失败!", e); + } + }); + } + DeleteFaceDbRequest deleteFaceDbRequest = new DeleteFaceDbRequest(); + deleteFaceDbRequest.setName(scenicId.toString()); + try { + client.getAcsResponse(deleteFaceDbRequest); + } catch (ClientException e) { + log.error("删除人脸数据库失败!", e); + } + } catch (ClientException e) { + log.error("删除人脸数据库失败!", e); + } + } + + @Override + public void createFaceDB(Long scenicId) { + try { + CreateFaceDbRequest request = new CreateFaceDbRequest(); + request.setName(scenicId.toString()); + IAcsClient client = getClient(); + client.getAcsResponse(request); + } catch (ClientException e) { + log.error("阿里云添加人脸数据库失败!", e); + } + } } diff --git a/src/main/java/com/ycwl/basic/service/impl/task/TaskTaskServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/task/TaskTaskServiceImpl.java index 878c8a9..6e2f893 100644 --- a/src/main/java/com/ycwl/basic/service/impl/task/TaskTaskServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/task/TaskTaskServiceImpl.java @@ -111,19 +111,19 @@ public class TaskTaskServiceImpl implements TaskService { renderWorkerMapper.update(worker); TaskSyncRespVo resp = new TaskSyncRespVo(); // Template - String cacheJson = redisTemplate.opsForValue().get(TaskConstant.TASK_TEMPLATE_KEY_PFX + worker.getId()); - if (cacheJson == null) { - TemplateReqQuery templateReqQuery = new TemplateReqQuery(); - templateReqQuery.setPid(0L); - List templateList = templateMapper.list(templateReqQuery); - for (TemplateRespVO template : templateList) { - template.setChildren(templateMapper.getByPid(template.getId())); - } - resp.setTemplates(templateList); - redisTemplate.opsForValue().set(TaskConstant.TASK_TEMPLATE_KEY_PFX + worker.getId(), JSON.toJSONString(templateList), 60, TimeUnit.SECONDS); - } else { - resp.setTemplates(JSON.parseArray(cacheJson, TemplateRespVO.class)); - } +// String cacheJson = redisTemplate.opsForValue().get(TaskConstant.TASK_TEMPLATE_KEY_PFX + worker.getId()); +// if (cacheJson == null) { +// TemplateReqQuery templateReqQuery = new TemplateReqQuery(); +// templateReqQuery.setPid(0L); +// List templateList = templateMapper.list(templateReqQuery); +// for (TemplateRespVO template : templateList) { +// template.setChildren(templateMapper.getByPid(template.getId())); +// } +// resp.setTemplates(templateList); +// redisTemplate.opsForValue().set(TaskConstant.TASK_TEMPLATE_KEY_PFX + worker.getId(), JSON.toJSONString(templateList), 60, TimeUnit.SECONDS); +// } else { +// resp.setTemplates(JSON.parseArray(cacheJson, TemplateRespVO.class)); +// } List taskList = taskMapper.selectNotRunning(); resp.setTasks(taskList); taskList.forEach(task -> taskMapper.assignToWorker(task.getId(), worker.getId())); diff --git a/src/main/java/com/ycwl/basic/service/mobile/AppScenicService.java b/src/main/java/com/ycwl/basic/service/mobile/AppScenicService.java index 0a7752d..7d1e3bb 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/AppScenicService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/AppScenicService.java @@ -41,8 +41,11 @@ public interface AppScenicService { ApiResponse topState(); ApiResponse> contentList(Long scenicId); + ApiResponse> faceContentList(Long userId, Long faceId); ApiResponse login(ScenicLoginReq scenicLoginReq) throws Exception; ApiResponse> contentListUseDefaultFace(); + + ApiResponse getMyScenic(); } 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 829c7a0..d49b93e 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java @@ -1,7 +1,6 @@ package com.ycwl.basic.service.mobile; import com.ycwl.basic.model.mobile.goods.*; -import com.ycwl.basic.model.pc.source.resp.SourceRespVO; import com.ycwl.basic.utils.ApiResponse; import java.math.BigDecimal; @@ -46,8 +45,10 @@ public interface GoodsService { * @param userId * @return */ - ApiResponse getAllTaskStatus(Long userId ,Long faceId); - ApiResponse getAllTaskStatus(Long userId); + ApiResponse getTaskStatusByFaceId(Long userId ,Long faceId); + ApiResponse getAllTaskStatus(Long userId); ApiResponse getTemplateTaskStatus(Long userId, Long templateId); + + ApiResponse getTaskStatusByScenicId(Long userId, Long scenicId); } diff --git a/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java b/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java index aadb05b..f4ed868 100644 --- a/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java +++ b/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java @@ -12,4 +12,8 @@ public interface TaskFaceService { AddFaceRespVo addFaceSample(Long faceSampleId); void batchDeleteFace(Long scenicId); + + void deleteFaceDB(Long scenicId); + + void createFaceDB(Long scenicId); } diff --git a/src/main/java/com/ycwl/basic/utils/WxMpUtil.java b/src/main/java/com/ycwl/basic/utils/WxMpUtil.java new file mode 100644 index 0000000..0b0d80c --- /dev/null +++ b/src/main/java/com/ycwl/basic/utils/WxMpUtil.java @@ -0,0 +1,39 @@ +package com.ycwl.basic.utils; + +import com.alibaba.fastjson.JSONObject; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +import java.io.FileOutputStream; + +public class WxMpUtil { + private static final String GET_WXA_CODE_URL = "https://api.weixin.qq.com/wxa/getwxacode?access_token=%s"; + + public static void generateWXAQRCode(String accessToken, String path, String filePath) throws Exception { + String url = String.format(GET_WXA_CODE_URL, accessToken); + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(url); + JSONObject json = new JSONObject(); + json.put("path", path); + json.put("width", 430); + StringEntity entity = new StringEntity(json.toJSONString(), "utf-8"); + httpPost.setEntity(entity); + httpPost.setHeader("Content-Type", "application/json"); + + try (CloseableHttpResponse response = httpClient.execute(httpPost)) { + HttpEntity responseEntity = response.getEntity(); + if (responseEntity != null) { + byte[] bytes = EntityUtils.toByteArray(responseEntity); + try (FileOutputStream fos = new FileOutputStream(filePath)) { + fos.write(bytes); + } + } + } + } + +} diff --git a/src/main/resources/mapper/ScenicAccountMapper.xml b/src/main/resources/mapper/ScenicAccountMapper.xml index ec0eb12..909c1a3 100644 --- a/src/main/resources/mapper/ScenicAccountMapper.xml +++ b/src/main/resources/mapper/ScenicAccountMapper.xml @@ -49,4 +49,9 @@ from scenic_account where account = #{account} + \ No newline at end of file diff --git a/src/main/resources/mapper/ScenicMapper.xml b/src/main/resources/mapper/ScenicMapper.xml index 567397a..f5b68e9 100644 --- a/src/main/resources/mapper/ScenicMapper.xml +++ b/src/main/resources/mapper/ScenicMapper.xml @@ -2,8 +2,8 @@ - insert into scenic(id, `name`, introduction, phone, cover_url, longitude, latitude, radius, province, city, area, address) - values (#{id}, #{name}, #{introduction}, #{phone}, #{coverUrl},#{longitude}, #{latitude}, #{radius}, #{province}, #{city}, #{area}, #{address}) + insert into scenic(id, `name`, introduction, phone, cover_url, longitude, latitude, radius, province, city, area, address, price, kf_code_url, kf_phone) + values (#{id}, #{name}, #{introduction}, #{phone}, #{coverUrl},#{longitude}, #{latitude}, #{radius}, #{province}, #{city}, #{area}, #{address}, #{price}, #{kfCodeUrl}, #{kfPhone}) insert into scenic_config(id, scenic_id, create_time) @@ -46,6 +46,12 @@ address=#{address}, + + kf_code_url=#{kfCodeUrl}, + + + kf_phone=#{kfPhone}, + where id = #{id} @@ -146,7 +152,7 @@ diff --git a/src/main/resources/mapper/TaskMapper.xml b/src/main/resources/mapper/TaskMapper.xml index 31a9929..dac4128 100644 --- a/src/main/resources/mapper/TaskMapper.xml +++ b/src/main/resources/mapper/TaskMapper.xml @@ -85,6 +85,7 @@ from task select id, worker_id, member_id, template_id, scenic_id, task_params, video_url, `status`, result, create_time, update_time from task where status = 0 and worker_id is null + limit 1 - 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.sort + 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 from template t left join scenic s on s.id = t.scenic_id pid = 0 diff --git a/src/main/resources/mapper/VideoMapper.xml b/src/main/resources/mapper/VideoMapper.xml index 8e9d6f4..f6ef4ff 100644 --- a/src/main/resources/mapper/VideoMapper.xml +++ b/src/main/resources/mapper/VideoMapper.xml @@ -49,7 +49,7 @@