You've already forked FrameTour-BE
修改
This commit is contained in:
@ -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<List<ContentPageVO>> 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<ContentPageVO> 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<VideoRespVO> 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<SourceRespVO> 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<ScenicLoginRespVO> 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<ScenicRespVO> getMyScenic() {
|
||||
String userId = BaseContextHandler.getUserId();
|
||||
ScenicAccountEntity account = scenicAccountMapper.findAccountById(userId);
|
||||
if (account == null) {
|
||||
return ApiResponse.fail("用户未绑定景区");
|
||||
}
|
||||
return getDetails(account.getScenicId());
|
||||
}
|
||||
}
|
||||
|
@ -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<Integer> getAllTaskStatus(Long userId, Long faceId) {
|
||||
public ApiResponse<VideoTaskStatusVO> 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<TaskRespVO> 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<TaskRespVO> 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<Integer> getAllTaskStatus(Long userId) {
|
||||
public ApiResponse<VideoTaskStatusVO> 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<VideoTaskStatusVO> 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<TaskRespVO> list=taskMapper.list(taskReqQuery);
|
||||
// 未完成是等于0或2
|
||||
Optional<TaskRespVO> 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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<PageInfo<FaceRespVO>> 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);
|
||||
|
@ -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<SearchFaceResponse.Data.MatchListItem.FaceItemsItem> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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<TemplateRespVO> 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<TemplateRespVO> 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<TaskRespVO> taskList = taskMapper.selectNotRunning();
|
||||
resp.setTasks(taskList);
|
||||
taskList.forEach(task -> taskMapper.assignToWorker(task.getId(), worker.getId()));
|
||||
|
@ -41,8 +41,11 @@ public interface AppScenicService {
|
||||
ApiResponse<TopStateResp> topState();
|
||||
|
||||
ApiResponse<List<ContentPageVO>> contentList(Long scenicId);
|
||||
ApiResponse<List<ContentPageVO>> faceContentList(Long userId, Long faceId);
|
||||
|
||||
ApiResponse<ScenicLoginRespVO> login(ScenicLoginReq scenicLoginReq) throws Exception;
|
||||
|
||||
ApiResponse<List<ContentPageVO>> contentListUseDefaultFace();
|
||||
|
||||
ApiResponse<ScenicRespVO> getMyScenic();
|
||||
}
|
||||
|
@ -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<Integer> getAllTaskStatus(Long userId ,Long faceId);
|
||||
ApiResponse<Integer> getAllTaskStatus(Long userId);
|
||||
ApiResponse<VideoTaskStatusVO> getTaskStatusByFaceId(Long userId ,Long faceId);
|
||||
ApiResponse<VideoTaskStatusVO> getAllTaskStatus(Long userId);
|
||||
|
||||
ApiResponse<Integer> getTemplateTaskStatus(Long userId, Long templateId);
|
||||
|
||||
ApiResponse<VideoTaskStatusVO> getTaskStatusByScenicId(Long userId, Long scenicId);
|
||||
}
|
||||
|
@ -12,4 +12,8 @@ public interface TaskFaceService {
|
||||
AddFaceRespVo addFaceSample(Long faceSampleId);
|
||||
|
||||
void batchDeleteFace(Long scenicId);
|
||||
|
||||
void deleteFaceDB(Long scenicId);
|
||||
|
||||
void createFaceDB(Long scenicId);
|
||||
}
|
||||
|
Reference in New Issue
Block a user