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 94b2a7d..3bf82b2 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppIndexController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppIndexController.java @@ -1,8 +1,17 @@ package com.ycwl.basic.controller.mobile; +import com.ycwl.basic.annotation.IgnoreToken; +import com.ycwl.basic.model.mobile.index.TopStateResp; +import com.ycwl.basic.model.mobile.scenic.ScenicAppVO; +import com.ycwl.basic.model.mobile.scenic.ScenicIndexVO; +import com.ycwl.basic.service.mobile.AppScenicService; +import com.ycwl.basic.utils.ApiResponse; import io.swagger.annotations.Api; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * @Author:longbinbin @@ -13,7 +22,27 @@ import org.springframework.web.bind.annotation.RestController; @Api(tags = "首页相关接口") public class AppIndexController { + @Autowired + private AppScenicService scenicService; + /** + * 首页景区列表 + * + * @return + */ + @ApiOperation(value = "首页景区列表", notes = "首页景区列表") + @PostMapping("/scenicList") + @IgnoreToken + public ApiResponse> scenicList(@RequestBody ScenicIndexVO scenicIndexVO) { + return scenicService.scenicList(scenicIndexVO); + } + + @ApiOperation(value = "顶部状态", notes = "顶部状态") + @GetMapping("/topState") + @IgnoreToken + public ApiResponse topState() { + return scenicService.topState(); + } } diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppMemberController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppMemberController.java index 201c992..3e33564 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppMemberController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppMemberController.java @@ -1,8 +1,8 @@ package com.ycwl.basic.controller.mobile; import com.ycwl.basic.annotation.IgnoreToken; -import com.ycwl.basic.model.mobile.DTO.WeChatUserInfoDTO; -import com.ycwl.basic.model.mobile.DTO.WeChatUserInfoUpdateDTO; +import com.ycwl.basic.model.mobile.weChat.DTO.WeChatUserInfoDTO; +import com.ycwl.basic.model.mobile.weChat.DTO.WeChatUserInfoUpdateDTO; import com.ycwl.basic.model.pc.member.resp.MemberRespVO; import com.ycwl.basic.service.mobile.AppMemberService; import com.ycwl.basic.utils.ApiResponse; diff --git a/src/main/java/com/ycwl/basic/mapper/pc/ScenicMapper.java b/src/main/java/com/ycwl/basic/mapper/pc/ScenicMapper.java index 8a48c68..ab84514 100644 --- a/src/main/java/com/ycwl/basic/mapper/pc/ScenicMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/pc/ScenicMapper.java @@ -1,8 +1,8 @@ package com.ycwl.basic.mapper.pc; import com.ycwl.basic.model.mobile.scenic.ScenicAppVO; +import com.ycwl.basic.model.mobile.scenic.ScenicIndexVO; import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; -import com.ycwl.basic.model.pc.scenic.entity.ScenicEntity; import com.ycwl.basic.model.pc.scenic.req.ScenicAddOrUpdateReq; import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery; import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; @@ -19,20 +19,28 @@ import java.util.List; @Mapper public interface ScenicMapper { List list(ScenicReqQuery scenicReqQuery); + ScenicRespVO getById(Long id); + int add(ScenicAddOrUpdateReq scenic); + int deleteById(Long id); + int update(ScenicAddOrUpdateReq scenic); + int updateStatus(Long id); /** * 添加景区配置 + * * @param scenicConfig * @return */ int addConfig(ScenicConfigEntity scenicConfig); + /** * 修改景区配置 + * * @param scenicConfigEntity * @return */ @@ -40,6 +48,7 @@ public interface ScenicMapper { /** * 根据景区id删除配置 + * * @param scenicId */ void deleteConfigByscenicId(Long scenicId); @@ -47,4 +56,12 @@ public interface ScenicMapper { List appList(ScenicReqQuery scenicReqQuery); ApiResponse getAppById(Long id); + + /** + * 通过经纬度计算景区距离 + * + * @param scenicIndexVO + * @return + */ + List scenicListByLnLa(ScenicIndexVO scenicIndexVO); } diff --git a/src/main/java/com/ycwl/basic/mapper/pc/SourceMapper.java b/src/main/java/com/ycwl/basic/mapper/pc/SourceMapper.java index 6dbf1c9..fb96f5a 100644 --- a/src/main/java/com/ycwl/basic/mapper/pc/SourceMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/pc/SourceMapper.java @@ -15,15 +15,26 @@ import java.util.List; @Mapper public interface SourceMapper { List list(SourceReqQuery sourceReqQuery); + SourceRespVO getById(Long id); + int add(SourceEntity source); + int deleteById(Long id); + int update(SourceEntity source); /** - * * @param sourceReqQuery * @return */ List listGroupByType(SourceReqQuery sourceReqQuery); + + /** + * 用户素材数量 + * + * @param userId + * @return + */ + int countByMemberId(String userId); } diff --git a/src/main/java/com/ycwl/basic/mapper/pc/TaskMapper.java b/src/main/java/com/ycwl/basic/mapper/pc/TaskMapper.java index 21eaeac..2ba13ed 100644 --- a/src/main/java/com/ycwl/basic/mapper/pc/TaskMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/pc/TaskMapper.java @@ -1,8 +1,5 @@ package com.ycwl.basic.mapper.pc; -import com.ycwl.basic.model.pc.scenic.entity.ScenicEntity; -import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery; -import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; import com.ycwl.basic.model.pc.task.entity.TaskEntity; import com.ycwl.basic.model.pc.task.req.TaskReqQuery; import com.ycwl.basic.model.pc.task.resp.TaskRespVO; @@ -18,9 +15,30 @@ import java.util.List; @Mapper public interface TaskMapper { List list(TaskReqQuery taskReqQuery); + TaskRespVO getById(Long id); + int add(TaskEntity task); + int deleteById(Long id); + int update(TaskEntity task); - int updateStatus(Long id,Integer status); + + int updateStatus(Long id, Integer status); + + /** + * 用户制作中的视频数量 + * + * @param userId + * @return + */ + int countByMemberIdStau(String userId); + + /** + * 用户合成的视频 + * + * @param userId + * @return + */ + int countByMemberIdStauFinish(String userId); } diff --git a/src/main/java/com/ycwl/basic/model/mobile/index/TopStateResp.java b/src/main/java/com/ycwl/basic/model/mobile/index/TopStateResp.java new file mode 100644 index 0000000..7f21cdb --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/mobile/index/TopStateResp.java @@ -0,0 +1,25 @@ +package com.ycwl.basic.model.mobile.index; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author: songmingsong + * @CreateTime: 2024-12-06 + * @Description: 顶部状态 + * @Version: 1.0 + */ +@Data +@ApiModel("顶部状态") +public class TopStateResp { + @ApiModelProperty("是否录入有效人脸") + private Boolean isFace = false; + @ApiModelProperty("是否有专属视频待制作") + private Boolean madeVideos = false; + @ApiModelProperty("是否有专属视频合成中") + private Boolean compositingVideo = false; + @ApiModelProperty("AI合成了多少个视频,null时没有合成的视频") + private Integer aiVideoNum; +} diff --git a/src/main/java/com/ycwl/basic/model/mobile/scenic/ScenicAppVO.java b/src/main/java/com/ycwl/basic/model/mobile/scenic/ScenicAppVO.java index 642ca7f..654a77c 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/scenic/ScenicAppVO.java +++ b/src/main/java/com/ycwl/basic/model/mobile/scenic/ScenicAppVO.java @@ -1,13 +1,10 @@ package com.ycwl.basic.model.mobile.scenic; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; -import java.util.Date; /** * @Author:longbinbin @@ -67,4 +64,16 @@ public class ScenicAppVO { */ @ApiModelProperty("详细地址") private String address; + + /** + * 距离 + */ + @ApiModelProperty("距离") + private BigDecimal distance; + + /** + * 机位数量 + */ + @ApiModelProperty("机位数量") + private Integer deviceNum; } diff --git a/src/main/java/com/ycwl/basic/model/mobile/scenic/ScenicIndexVO.java b/src/main/java/com/ycwl/basic/model/mobile/scenic/ScenicIndexVO.java new file mode 100644 index 0000000..437c0ec --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/mobile/scenic/ScenicIndexVO.java @@ -0,0 +1,19 @@ +package com.ycwl.basic.model.mobile.scenic; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author:songmingsong + */ +@Data +@ApiModel("首页景区列表") +public class ScenicIndexVO { + @ApiModelProperty("经度") + private BigDecimal longitude; + @ApiModelProperty("纬度") + private BigDecimal latitude; +} diff --git a/src/main/java/com/ycwl/basic/model/mobile/DTO/WeChatUserInfoDTO.java b/src/main/java/com/ycwl/basic/model/mobile/weChat/DTO/WeChatUserInfoDTO.java similarity index 92% rename from src/main/java/com/ycwl/basic/model/mobile/DTO/WeChatUserInfoDTO.java rename to src/main/java/com/ycwl/basic/model/mobile/weChat/DTO/WeChatUserInfoDTO.java index 57c7fa9..40c13c8 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/DTO/WeChatUserInfoDTO.java +++ b/src/main/java/com/ycwl/basic/model/mobile/weChat/DTO/WeChatUserInfoDTO.java @@ -1,4 +1,4 @@ -package com.ycwl.basic.model.mobile.DTO; +package com.ycwl.basic.model.mobile.weChat.DTO; import lombok.Data; diff --git a/src/main/java/com/ycwl/basic/model/mobile/DTO/WeChatUserInfoUpdateDTO.java b/src/main/java/com/ycwl/basic/model/mobile/weChat/DTO/WeChatUserInfoUpdateDTO.java similarity index 89% rename from src/main/java/com/ycwl/basic/model/mobile/DTO/WeChatUserInfoUpdateDTO.java rename to src/main/java/com/ycwl/basic/model/mobile/weChat/DTO/WeChatUserInfoUpdateDTO.java index cee1a14..be8fb93 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/DTO/WeChatUserInfoUpdateDTO.java +++ b/src/main/java/com/ycwl/basic/model/mobile/weChat/DTO/WeChatUserInfoUpdateDTO.java @@ -1,4 +1,4 @@ -package com.ycwl.basic.model.mobile.DTO; +package com.ycwl.basic.model.mobile.weChat.DTO; import lombok.Data; diff --git a/src/main/java/com/ycwl/basic/model/mobile/WeChatUserInfoModel.java b/src/main/java/com/ycwl/basic/model/mobile/weChat/WeChatUserInfoModel.java similarity index 91% rename from src/main/java/com/ycwl/basic/model/mobile/WeChatUserInfoModel.java rename to src/main/java/com/ycwl/basic/model/mobile/weChat/WeChatUserInfoModel.java index 783c893..a0bdb92 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/WeChatUserInfoModel.java +++ b/src/main/java/com/ycwl/basic/model/mobile/weChat/WeChatUserInfoModel.java @@ -1,4 +1,4 @@ -package com.ycwl.basic.model.mobile; +package com.ycwl.basic.model.mobile.weChat; import lombok.Data; diff --git a/src/main/java/com/ycwl/basic/model/pc/face/resp/FaceRespVO.java b/src/main/java/com/ycwl/basic/model/pc/face/resp/FaceRespVO.java index 6f73d29..0bed9c6 100644 --- a/src/main/java/com/ycwl/basic/model/pc/face/resp/FaceRespVO.java +++ b/src/main/java/com/ycwl/basic/model/pc/face/resp/FaceRespVO.java @@ -1,6 +1,5 @@ package com.ycwl.basic.model.pc.face.resp; -import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -25,6 +24,8 @@ public class FaceRespVO { private String matchSampleIds; @ApiModelProperty("匹配率") private BigDecimal firstMatchRate; + @ApiModelProperty("人脸图片得分,不高的提示用户重新录入") + private BigDecimal score; @ApiModelProperty("匹配的结果,JSON字符串") private String matchResult; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/AppMemberServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/AppMemberServiceImpl.java index bbc52b6..6d00dec 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/AppMemberServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/AppMemberServiceImpl.java @@ -11,8 +11,8 @@ import com.ycwl.basic.enums.WechatErrorCodeEnum; import com.ycwl.basic.exception.AppException; import com.ycwl.basic.mapper.pc.MemberMapper; import com.ycwl.basic.model.jwt.JwtInfo; -import com.ycwl.basic.model.mobile.DTO.WeChatUserInfoDTO; -import com.ycwl.basic.model.mobile.DTO.WeChatUserInfoUpdateDTO; +import com.ycwl.basic.model.mobile.weChat.DTO.WeChatUserInfoDTO; +import com.ycwl.basic.model.mobile.weChat.DTO.WeChatUserInfoUpdateDTO; import com.ycwl.basic.model.pc.member.entity.MemberEntity; import com.ycwl.basic.model.pc.member.req.MemberReqQuery; import com.ycwl.basic.model.pc.member.resp.MemberRespVO; 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 5367efb..f7ecec8 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 @@ -3,18 +3,25 @@ package com.ycwl.basic.service.impl.mobile; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ycwl.basic.constant.BaseContextHandler; -import com.ycwl.basic.mapper.pc.DeviceMapper; -import com.ycwl.basic.mapper.pc.ScenicMapper; +import com.ycwl.basic.constant.NumberConstant; +import com.ycwl.basic.mapper.pc.*; +import com.ycwl.basic.model.mobile.index.TopStateResp; import com.ycwl.basic.model.mobile.scenic.ScenicAppVO; import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO; +import com.ycwl.basic.model.mobile.scenic.ScenicIndexVO; +import com.ycwl.basic.model.pc.face.req.FaceReqQuery; +import com.ycwl.basic.model.pc.face.resp.FaceRespVO; import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery; import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; import com.ycwl.basic.service.mobile.AppScenicService; import com.ycwl.basic.utils.ApiResponse; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.List; /** @@ -29,6 +36,15 @@ public class AppScenicServiceImpl implements AppScenicService { private ScenicMapper scenicMapper; @Autowired private DeviceMapper deviceMapper; + @Autowired + private FaceMapper faceMapper; + @Autowired + private SourceMapper sourceMapper; + @Autowired + private TaskMapper taskMapper; + + @Value("${face.score}") + private BigDecimal faceScore; @Override public ApiResponse> pageQuery(ScenicReqQuery scenicReqQuery) { @@ -41,7 +57,7 @@ public class AppScenicServiceImpl implements AppScenicService { @Override public ApiResponse deviceCountByScenicId(Long scenicId) { String userId = BaseContextHandler.getUserId(); - ScenicDeviceCountVO scenicDeviceCountVO=deviceMapper.deviceCountByScenicId(scenicId,userId); + ScenicDeviceCountVO scenicDeviceCountVO = deviceMapper.deviceCountByScenicId(scenicId, userId); return ApiResponse.success(scenicDeviceCountVO); } @@ -49,4 +65,42 @@ public class AppScenicServiceImpl implements AppScenicService { public ApiResponse getDetails(Long id) { return scenicMapper.getAppById(id); } + + @Override + public ApiResponse> scenicList(ScenicIndexVO scenicIndexVO) { + List dataList = scenicMapper.scenicListByLnLa(scenicIndexVO); + return ApiResponse.success(dataList); + } + + @Override + public ApiResponse topState() { + TopStateResp topStateResp = new TopStateResp(); + String userId = BaseContextHandler.getUserId(); + if (StringUtils.isBlank(userId)) { + return ApiResponse.success(topStateResp); + } + // 查询是否有人脸 + FaceReqQuery faceReqQuery = new FaceReqQuery(); + faceReqQuery.setMemberId(Long.parseLong(userId)); + List list = faceMapper.list(faceReqQuery); + for (FaceRespVO faceRespVO : list) { + if (faceRespVO.getScore().compareTo(faceScore) >= NumberConstant.ZERO) { + topStateResp.setIsFace(true); + } + } + + // 查询是否有专属视频待制作 + int sourceNum = sourceMapper.countByMemberId(userId); + topStateResp.setMadeVideos(sourceNum > 0); + + // 是否有专属视频合成中 + int taskSynthesizingNum = taskMapper.countByMemberIdStau(userId); + topStateResp.setCompositingVideo(taskSynthesizingNum > 0); + + // AI合成了多少个视频 完成 + int taskFinishNum = taskMapper.countByMemberIdStauFinish(userId); + topStateResp.setAiVideoNum(taskFinishNum); + + return ApiResponse.success(topStateResp); + } } diff --git a/src/main/java/com/ycwl/basic/service/mobile/AppMemberService.java b/src/main/java/com/ycwl/basic/service/mobile/AppMemberService.java index 71ab6a5..afe200a 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/AppMemberService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/AppMemberService.java @@ -1,7 +1,7 @@ package com.ycwl.basic.service.mobile; -import com.ycwl.basic.model.mobile.DTO.WeChatUserInfoDTO; -import com.ycwl.basic.model.mobile.DTO.WeChatUserInfoUpdateDTO; +import com.ycwl.basic.model.mobile.weChat.DTO.WeChatUserInfoDTO; +import com.ycwl.basic.model.mobile.weChat.DTO.WeChatUserInfoUpdateDTO; import com.ycwl.basic.model.pc.member.resp.MemberRespVO; import com.ycwl.basic.utils.ApiResponse; 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 22f5264..334fcd9 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/AppScenicService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/AppScenicService.java @@ -1,12 +1,16 @@ package com.ycwl.basic.service.mobile; import com.github.pagehelper.PageInfo; +import com.ycwl.basic.model.mobile.index.TopStateResp; import com.ycwl.basic.model.mobile.scenic.ScenicAppVO; import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO; +import com.ycwl.basic.model.mobile.scenic.ScenicIndexVO; import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery; import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; import com.ycwl.basic.utils.ApiResponse; +import java.util.List; + /** * @Author:longbinbin * @Date:2024/12/6 10:23 @@ -17,4 +21,19 @@ public interface AppScenicService { ApiResponse deviceCountByScenicId(Long scenicId); ApiResponse getDetails(Long id); + + /** + * 首页景区列表,按照距离排序 + * + * @param scenicIndexVO + * @return + */ + ApiResponse> scenicList(ScenicIndexVO scenicIndexVO); + + /** + * 首页顶部状态 + * + * @return + */ + ApiResponse topState(); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 6ee3a24..9c61c8a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -88,6 +88,10 @@ wx: # 商户APIV3密钥 apiV3: 1 +# 人脸合格得分 +face: + score: 80 + #阿里云OSS aliYunOss: endpoint: "https://oss-cn-shanghai.aliyuncs.com" diff --git a/src/main/resources/mapper/pc/FaceMapper.xml b/src/main/resources/mapper/pc/FaceMapper.xml index 9fc6cb3..ba8fb9f 100644 --- a/src/main/resources/mapper/pc/FaceMapper.xml +++ b/src/main/resources/mapper/pc/FaceMapper.xml @@ -42,7 +42,7 @@ diff --git a/src/main/resources/mapper/pc/ScenicMapper.xml b/src/main/resources/mapper/pc/ScenicMapper.xml index cbc158e..1301c11 100644 --- a/src/main/resources/mapper/pc/ScenicMapper.xml +++ b/src/main/resources/mapper/pc/ScenicMapper.xml @@ -146,6 +146,31 @@ from scenic s where `status` = 1 and s.id = #{id} + diff --git a/src/main/resources/mapper/pc/SourceMapper.xml b/src/main/resources/mapper/pc/SourceMapper.xml index afbbe92..2d52821 100644 --- a/src/main/resources/mapper/pc/SourceMapper.xml +++ b/src/main/resources/mapper/pc/SourceMapper.xml @@ -54,4 +54,7 @@ group by so.type + \ No newline at end of file diff --git a/src/main/resources/mapper/pc/TaskMapper.xml b/src/main/resources/mapper/pc/TaskMapper.xml index b464552..e3714d4 100644 --- a/src/main/resources/mapper/pc/TaskMapper.xml +++ b/src/main/resources/mapper/pc/TaskMapper.xml @@ -45,4 +45,14 @@ from task from task where id = #{id} + + \ No newline at end of file