This commit is contained in:
2025-01-02 10:45:07 +08:00
parent cfd48861d5
commit 495210c6b1
22 changed files with 261 additions and 139 deletions

View File

@@ -142,7 +142,7 @@ public class AppScenicServiceImpl implements AppScenicService {
List<MemberVideoEntity> memberVideoEntityList = videoMapper.userFaceTemplateVideo(worker.getUserId(), faceId, contentPageVO.getTemplateId());
if (!memberVideoEntityList.isEmpty()) {
contentPageVO.setIsBuy(memberVideoEntityList.get(0).getIsBuy());
contentPageVO.setContentId(memberVideoEntityList.get(0).getId());
contentPageVO.setContentId(memberVideoEntityList.get(0).getVideoId());
}
});
@@ -181,7 +181,10 @@ public class AppScenicServiceImpl implements AppScenicService {
List<MemberVideoEntity> memberVideoEntityList = videoMapper.userFaceTemplateVideo(userId, faceId, contentPageVO.getTemplateId());
if (!memberVideoEntityList.isEmpty()) {
contentPageVO.setIsBuy(memberVideoEntityList.get(0).getIsBuy());
contentPageVO.setContentId(memberVideoEntityList.get(0).getId());
contentPageVO.setContentId(memberVideoEntityList.get(0).getVideoId());
contentPageVO.setContentType(1);
} else {
contentPageVO.setContentType(0);
}
});

View File

@@ -9,8 +9,10 @@ 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;
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
import com.ycwl.basic.model.pc.task.req.TaskReqQuery;
import com.ycwl.basic.model.pc.task.entity.TaskEntity;
import com.ycwl.basic.model.pc.task.resp.TaskRespVO;
import com.ycwl.basic.model.pc.video.entity.MemberVideoEntity;
import com.ycwl.basic.model.pc.video.entity.VideoEntity;
import com.ycwl.basic.model.pc.video.req.VideoReqQuery;
import com.ycwl.basic.model.pc.video.resp.VideoRespVO;
import com.ycwl.basic.service.mobile.GoodsService;
@@ -25,6 +27,7 @@ import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -61,7 +64,7 @@ public class GoodsServiceImpl implements GoodsService {
goodsPageVO.setGoodsName(videoRespVO.getTemplateName());
goodsPageVO.setScenicId(videoRespVO.getScenicId());
goodsPageVO.setScenicName(videoRespVO.getScenicName());
goodsPageVO.setGoodsType(1);
goodsPageVO.setGoodsType(0);
goodsPageVO.setGoodsId(videoRespVO.getId());
goodsPageVO.setTemplateName(videoRespVO.getTemplateName());
goodsPageVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl());
@@ -79,10 +82,10 @@ public class GoodsServiceImpl implements GoodsService {
GoodsPageVO goodsPageVO = new GoodsPageVO();
if (type == 1) {
goodsPageVO.setGoodsName("原片集");
goodsPageVO.setGoodsType(2);
goodsPageVO.setGoodsType(1);
} else {
goodsPageVO.setGoodsName("照片集");
goodsPageVO.setGoodsType(3);
goodsPageVO.setGoodsType(2);
}
goodsPageVO.setScenicId(query.getScenicId());
goodsList.add(goodsPageVO);
@@ -126,7 +129,7 @@ public class GoodsServiceImpl implements GoodsService {
goodsDetailVO.setScenicName(sourceRespVO.getScenicName());
goodsDetailVO.setLongitude(sourceRespVO.getLongitude());
goodsDetailVO.setLatitude(sourceRespVO.getLatitude());
goodsDetailVO.setGoodsType(2);
goodsDetailVO.setGoodsType(sourceType);
goodsDetailVO.setSourceType(sourceType);
goodsDetailVO.setGoodsId(sourceRespVO.getId());
goodsDetailVO.setVideoUrl(sourceRespVO.getVideoUrl());
@@ -144,20 +147,20 @@ public class GoodsServiceImpl implements GoodsService {
public ApiResponse<BigDecimal> queryPrice(GoodsPriceQueryReq queryPriceData) {
Integer goodsType = queryPriceData.getGoodsType();
if(goodsType==1){//成片vlog
if(goodsType==0){//成片vlog
//成片的价格就是成片所用template的价格
Long videoId = queryPriceData.getGoodsId();
VideoRespVO videoRespVO = videoMapper.getById(videoId);
if(videoRespVO==null){
return ApiResponse.fail("该vlog不存在或已失效");
}
BigDecimal tmplatePrice = videoRespVO.getTemplatePrice();
if(tmplatePrice==null){
BigDecimal templatePrice = videoRespVO.getTemplatePrice();
if(templatePrice==null){
return ApiResponse.fail("该vlog使用的模板价格或状态异常,请联系管理员");
}
return ApiResponse.success(tmplatePrice);
return ApiResponse.success(templatePrice);
}else if(goodsType==2){//原素材
}else if(goodsType==1 || goodsType == 2){//原素材
//原素材的价格就是原素材对应景区定的价格
Long scenicId = queryPriceData.getScenicId();
ScenicRespVO scenicRespVO = scenicMapper.getById(scenicId);
@@ -174,27 +177,35 @@ public class GoodsServiceImpl implements GoodsService {
}
@Override
public ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(Long goodsId) {
public ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(Long userId, Long videoId) {
MemberVideoEntity entity = videoMapper.queryUserVideo(userId, videoId);
if (entity == null) {
return ApiResponse.fail("该视频不属于您");
}
VideoGoodsDetailVO goodsDetailVO = new VideoGoodsDetailVO();
VideoRespVO videoRespVO = videoMapper.getById(goodsId);
VideoRespVO videoRespVO = videoMapper.getById(videoId);
if(videoRespVO==null){
return ApiResponse.fail("该vlog不存在或已失效");
}
goodsDetailVO.setGoodsName(videoRespVO.getTemplateName());
goodsDetailVO.setScenicId(videoRespVO.getScenicId());
goodsDetailVO.setScenicName(videoRespVO.getScenicName());
goodsDetailVO.setGoodsType(1);
goodsDetailVO.setGoodsType(0);
goodsDetailVO.setGoodsId(videoRespVO.getId());
goodsDetailVO.setVideoUrl(videoRespVO.getVideoUrl());
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());
if (entity.getIsBuy() == 1) {
goodsDetailVO.setIsBuy(1);
} else {
goodsDetailVO.setIsBuy(0);
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)));
}
TaskRespVO taskRespVO = taskMapper.getById(videoRespVO.getTaskId());
JSONObject paramJson = JSON.parseObject(taskRespVO.getTaskParams());
long deviceCount;
@@ -204,7 +215,7 @@ public class GoodsServiceImpl implements GoodsService {
deviceCount = paramJson.keySet().stream().filter(StringUtils::isNumeric).count();
}
goodsDetailVO.setLensNum((int) deviceCount);
goodsDetailVO.setFaceId(taskRespVO.getFaceId());
goodsDetailVO.setFaceId(entity.getFaceId());
return ApiResponse.success(goodsDetailVO);
}
@@ -216,27 +227,28 @@ public class GoodsServiceImpl implements GoodsService {
*/
@Override
public ApiResponse<VideoTaskStatusVO> getTaskStatusByFaceId(Long userId, Long faceId) {
TaskReqQuery taskReqQuery = new TaskReqQuery();
taskReqQuery.setMemberId(userId);
taskReqQuery.setFaceId(faceId);
List<TaskEntity> taskList = videoMapper.listTaskByFaceRelation(userId, faceId);
VideoTaskStatusVO response = new VideoTaskStatusVO();
List<TaskRespVO> list=taskMapper.list(taskReqQuery);
if(list.isEmpty()){//没有任务
response.setFaceId(faceId);
if (taskList.isEmpty()) {
response.setStatus(0);
return ApiResponse.success(response);
}
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());
long nullTask = taskList.stream().filter(Objects::isNull).count();
if (nullTask > 0) {
response.setStatus(0);
return ApiResponse.success(response);
}
Optional<TaskEntity> taskEntity = taskList.stream().filter(task -> 1 == task.getStatus()).findFirst();
if (taskEntity.isPresent()) {
response.setTemplateId(taskEntity.get().getTemplateId());
VideoEntity video = videoMapper.findByTaskId(taskEntity.get().getId());
response.setVideoId(video.getId());
response.setStatus(1);
} else {
response.setStatus(2);
}
return ApiResponse.success(response);
}
@Override
@@ -246,48 +258,52 @@ public class GoodsServiceImpl implements GoodsService {
}
@Override
public ApiResponse<Integer> getTemplateTaskStatus(Long userId, Long templateId) {
TaskReqQuery taskReqQuery = new TaskReqQuery();
taskReqQuery.setMemberId(userId);
taskReqQuery.setTemplateId(templateId);
int allCount=taskMapper.countTask(taskReqQuery);
if(allCount==0){//没有任务
return ApiResponse.success(0);
public ApiResponse<VideoTaskStatusVO> getTemplateTaskStatus(Long userId, Long faceId, Long templateId) {
List<TaskEntity> taskList = videoMapper.listTaskByFaceTemplateRelation(userId, faceId, templateId);
VideoTaskStatusVO response = new VideoTaskStatusVO();
response.setFaceId(faceId);
if (taskList.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<TaskEntity> taskEntity = taskList.stream().filter(task -> task.getStatus() == 1).findFirst();
if (taskEntity.isPresent()) {
response.setTemplateId(taskEntity.get().getTemplateId());
VideoEntity video = videoMapper.findByTaskId(taskEntity.get().getId());
response.setVideoId(video.getId());
response.setStatus(1);
} else {
response.setStatus(2);
}
return ApiResponse.success(response);
}
@Override
public ApiResponse<VideoTaskStatusVO> getTaskStatusByScenicId(Long userId, Long scenicId) {
TaskReqQuery taskReqQuery = new TaskReqQuery();
taskReqQuery.setMemberId(userId);
taskReqQuery.setScenicId(scenicId);
int allCount=taskMapper.countTask(taskReqQuery);
FaceRespVO faceVO = faceMapper.getByMemberId(userId, scenicId);
VideoTaskStatusVO response = new VideoTaskStatusVO();
if(allCount==0){//没有任务
response.setScenicId(scenicId);
if (faceVO == null) {
// 从来没露脸
response.setStatus(-2);
return ApiResponse.success(response);
}
response.setFaceId(faceVO.getId());
List<TaskEntity> taskList = videoMapper.listTaskByScenicRelation(userId, scenicId);
if (taskList.isEmpty()) {
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()) {
Optional<TaskEntity> taskEntity = taskList.stream().filter(task -> task.getStatus() == 1).findFirst();
if (taskEntity.isPresent()) {
response.setTemplateId(taskEntity.get().getTemplateId());
VideoEntity video = videoMapper.findByTaskId(taskEntity.get().getId());
response.setVideoId(video.getId());
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);
}
return ApiResponse.success(response);
}
}

View File

@@ -212,7 +212,7 @@ public class WxPayServiceImpl implements WxPayService {
List<OrderItemEntity> orderItemList = orderMapper.listOrderItemByOrderId(orderId);
orderItemList.forEach(orderItemVO -> {
switch (orderItemVO.getGoodsType()) {
case 1: // 成片
case 0: // 成片
MemberVideoEntity memberVideoEntity = new MemberVideoEntity();
memberVideoEntity.setMemberId(byId.getMemberId());
memberVideoEntity.setVideoId(orderItemVO.getGoodsId());
@@ -220,6 +220,7 @@ public class WxPayServiceImpl implements WxPayService {
memberVideoEntity.setOrderId(orderId);
videoMapper.updateRelation(memberVideoEntity);
break;
case 1: // 源视频
case 2: // 源素材
MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
memberSourceEntity.setMemberId(byId.getMemberId());
@@ -252,12 +253,13 @@ public class WxPayServiceImpl implements WxPayService {
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
statisticsRecordAddReq.setMemberId(orderData.getMemberId());
// TODO
//如果订单在商品创建后30分钟内支付,则为现场支付,否则为事后支付
if(DateUtils.addDateMinute(createTime,30).compareTo(payAt)>0){//
// if(DateUtils.addDateMinute(createTime,30).compareTo(payAt)>0){//
statisticsRecordAddReq.setType(StatisticEnum.ON_SITE_PAYMENT.code);
}else {
statisticsRecordAddReq.setType(StatisticEnum.POST_PAYMENT.code);
}
// }else {
// statisticsRecordAddReq.setType(StatisticEnum.POST_PAYMENT.code);
// }
statisticsRecordAddReq.setScenicId(orderData.getScenicId());
statisticsRecordAddReq.setMorphId(orderId);
statisticsMapper.addStatisticsRecord(statisticsRecordAddReq);