Merge remote-tracking branch 'origin/master'

This commit is contained in:
songmingsong
2024-12-06 16:15:30 +08:00
9 changed files with 170 additions and 62 deletions

View File

@ -1,8 +1,9 @@
package com.ycwl.basic.controller.mobile;
import com.ycwl.basic.model.mobile.goods.GoodsDetailVO;
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
import com.ycwl.basic.model.mobile.goods.GoodsReqQuery;
import com.ycwl.basic.model.mobile.goods.GoodsVO;
import com.ycwl.basic.model.mobile.goods.GoodsPageVO;
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
import com.ycwl.basic.service.mobile.GoodsService;
import com.ycwl.basic.utils.ApiResponse;
@ -29,22 +30,21 @@ public class AppGoodsController {
@ApiOperation("商品列表")
@PostMapping("/goodsList")
public ApiResponse<List<GoodsVO>> goodsList(@RequestBody GoodsReqQuery query) {
public ApiResponse<List<GoodsPageVO>> goodsList(@RequestBody GoodsReqQuery query) {
return goodsService.goodsList(query);
}
@ApiOperation("源素材(原片/照片)商品列表")
@PostMapping("/sourceGoodsList")
public ApiResponse<List<SourceRespVO>> sourceGoodsList(@RequestBody GoodsReqQuery query) {
public ApiResponse<List<GoodsDetailVO>> sourceGoodsList(@RequestBody GoodsReqQuery query) {
return goodsService.sourceGoodsList(query);
}
// @ApiOperation("成片vlog商品详情")
// @GetMapping("/getVideoGoodsDetail/{goodId}")
// public ApiResponse<GoodsVO> videoGoodsDetail(@RequestBody GoodsReqQuery query) {
//
// return ApiResponse.success("");
// }
@ApiOperation("成片vlog商品详情")
@GetMapping("/getVideoGoodsDetail/{goodId}")
public ApiResponse<GoodsDetailVO> videoGoodsDetail(@PathVariable("goodId") Long goodsId) {
return goodsService.videoGoodsDetail(goodsId);
}
@ApiOperation("查询价格")
@PostMapping("/queryPrice")

View File

@ -0,0 +1,42 @@
package com.ycwl.basic.model.mobile.goods;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Authorlongbinbin
* @Date2024/12/5 15:10
*/
@Data
@ApiModel("商品详情")
public class GoodsDetailVO {
@ApiModelProperty("商品名称")
private String goodsName;
@ApiModelProperty("景区id")
private Long scenicId;
@ApiModelProperty("景区名称")
private String scenicName;
@ApiModelProperty("经度")
private BigDecimal longitude;
@ApiModelProperty("纬度")
private BigDecimal latitude;
@ApiModelProperty("商品类型 1:成片视频 2:源素材")
private Integer goodsType;
@ApiModelProperty("源素材类型 1:视频 2:图片")
private Integer sourceType;
@ApiModelProperty("商品id goodsType=1时为videoIdgoodsType=2时为sourceId")
private Long goodsId;
@ApiModelProperty("模版封面图片")
private String templateCoverUrl;
@ApiModelProperty("图片文件存储地址")
private String url;
@ApiModelProperty("视频文件存储地址")
private String videoUrl;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}

View File

@ -1,21 +1,18 @@
package com.ycwl.basic.model.mobile.goods;
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @Authorlongbinbin
* @Date2024/12/5 15:10
*/
@Data
@ApiModel("商品")
public class GoodsVO {
@ApiModel("移动端商品列表响应信息")
public class GoodsPageVO {
@ApiModelProperty("商品名称")
private String goodsName;
@ApiModelProperty("景区id")
@ -30,7 +27,7 @@ public class GoodsVO {
private Integer goodsType;
@ApiModelProperty("源素材类型 1:视频 2:图片")
private Integer sourceType;
@ApiModelProperty("商品id goodsType为1时才有值")
@ApiModelProperty("商品vlogid goodsType为1时才有值")
private Long goodsId;
@ApiModelProperty("模版封面图片")
private String templateCoverUrl;

View File

@ -1,6 +1,7 @@
package com.ycwl.basic.model.pc.order.req;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ycwl.basic.model.mobile.goods.GoodsDetailVO;
import com.ycwl.basic.model.pc.order.entity.OrderItemEntity;
import com.ycwl.basic.model.pc.order.resp.OrderItemVO;
import io.swagger.annotations.ApiModel;
@ -96,6 +97,6 @@ public class OrderAddOrUpdateReq {
@ApiModelProperty("订单退款时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date refundAt;
@ApiModelProperty("订单明细")
private List<OrderItemDTO> orderItemList;
@ApiModelProperty("订单商品明细")
private List<GoodsDetailVO> goodsItemList;
}

View File

@ -51,6 +51,4 @@ public class SourceRespVO {
private String videoUrl;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
}

View File

@ -3,9 +3,10 @@ package com.ycwl.basic.service.impl.mobile;
import com.ycwl.basic.mapper.pc.ScenicMapper;
import com.ycwl.basic.mapper.pc.SourceMapper;
import com.ycwl.basic.mapper.pc.VideoMapper;
import com.ycwl.basic.model.mobile.goods.GoodsDetailVO;
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
import com.ycwl.basic.model.mobile.goods.GoodsReqQuery;
import com.ycwl.basic.model.mobile.goods.GoodsVO;
import com.ycwl.basic.model.mobile.goods.GoodsPageVO;
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;
@ -13,6 +14,7 @@ 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;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -32,9 +34,9 @@ public class GoodsServiceImpl implements GoodsService {
@Autowired
private ScenicMapper scenicMapper;
public ApiResponse<List<GoodsVO>> goodsList(GoodsReqQuery query) {
public ApiResponse<List<GoodsPageVO>> goodsList(GoodsReqQuery query) {
//查询原素材
List<GoodsVO> goodsList = new ArrayList<>();
List<GoodsPageVO> goodsList = new ArrayList<>();
VideoReqQuery videoReqQuery = new VideoReqQuery();
videoReqQuery.setScenicId(query.getScenicId());
@ -43,16 +45,16 @@ public class GoodsServiceImpl implements GoodsService {
//查询成片vlog
List<VideoRespVO> videoList = videoMapper.list(videoReqQuery);
videoList.forEach(videoRespVO -> {
GoodsVO goodsVO = new GoodsVO();
goodsVO.setGoodsName(videoRespVO.getTemplateName());
goodsVO.setScenicId(videoRespVO.getScenicId());
goodsVO.setScenicName(videoRespVO.getScenicName());
goodsVO.setLongitude(videoRespVO.getLongitude());
goodsVO.setLatitude(videoRespVO.getLatitude());
goodsVO.setGoodsType(1);
goodsVO.setGoodsId(videoRespVO.getId());
goodsVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl());
goodsList.add(goodsVO);
GoodsPageVO goodsPageVO = new GoodsPageVO();
goodsPageVO.setGoodsName(videoRespVO.getTemplateName());
goodsPageVO.setScenicId(videoRespVO.getScenicId());
goodsPageVO.setScenicName(videoRespVO.getScenicName());
goodsPageVO.setLongitude(videoRespVO.getLongitude());
goodsPageVO.setLatitude(videoRespVO.getLatitude());
goodsPageVO.setGoodsType(1);
goodsPageVO.setGoodsId(videoRespVO.getId());
goodsPageVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl());
goodsList.add(goodsPageVO);
});
@ -63,34 +65,69 @@ public class GoodsServiceImpl implements GoodsService {
//查询源素材
List<SourceRespVO> sourceList = sourceMapper.listGroupByType(sourceReqQuery);
sourceList.forEach(sourceRespVO -> {
GoodsVO goodsVO = new GoodsVO();
GoodsPageVO goodsPageVO = new GoodsPageVO();
Integer type = sourceRespVO.getType();
if(type==1){
goodsVO.setGoodsName("原片集");
goodsPageVO.setGoodsName("原片集");
}else {
goodsVO.setGoodsName("照片集");
goodsPageVO.setGoodsName("照片集");
}
goodsVO.setScenicId(sourceRespVO.getScenicId());
goodsVO.setScenicName(sourceRespVO.getScenicName());
goodsVO.setLongitude(sourceRespVO.getLongitude());
goodsVO.setLatitude(sourceRespVO.getLatitude());
goodsVO.setGoodsType(2);
goodsVO.setSourceType(type);
goodsList.add(goodsVO);
goodsPageVO.setScenicId(sourceRespVO.getScenicId());
goodsPageVO.setScenicName(sourceRespVO.getScenicName());
goodsPageVO.setLongitude(sourceRespVO.getLongitude());
goodsPageVO.setLatitude(sourceRespVO.getLatitude());
goodsPageVO.setGoodsType(2);
goodsPageVO.setSourceType(type);
goodsList.add(goodsPageVO);
});
return ApiResponse.success(goodsList);
}
@Override
public ApiResponse<List<SourceRespVO>> sourceGoodsList(GoodsReqQuery query) {
SourceReqQuery sourceReqQuery = new SourceReqQuery();
public ApiResponse<List<GoodsDetailVO>> sourceGoodsList(GoodsReqQuery query) {
Integer sourceType = query.getSourceType();
SourceReqQuery sourceReqQuery = new SourceReqQuery();
sourceReqQuery.setScenicId(query.getScenicId());
sourceReqQuery.setIsBuy(query.getIsBuy());
sourceReqQuery.setMemberId(query.getMemberId());
sourceReqQuery.setType(query.getSourceType());
sourceReqQuery.setType(sourceType);
List<SourceRespVO> list = sourceMapper.list(sourceReqQuery);
return ApiResponse.success(list);
List<GoodsDetailVO> goodsDetailVOList = new ArrayList<>();
String goodsNamePrefix = "";
if(sourceType==1){
goodsNamePrefix="视频";
}else if (sourceType==2){
goodsNamePrefix="图片";
}else {
goodsNamePrefix="其他类型";
}
//图片编号
int i=1;
for (SourceRespVO sourceRespVO : list) {
GoodsDetailVO goodsDetailVO = new GoodsDetailVO();
String shootingTime = DateUtils.format(sourceRespVO.getCreateTime(), "yyyy.MM.dd HH:mm:ss");
if(i<10){
goodsDetailVO.setGoodsName(goodsNamePrefix +"0"+i+" "+shootingTime);
}else {
goodsDetailVO.setGoodsName(goodsNamePrefix +i+" "+shootingTime);
}
goodsDetailVO.setScenicId(sourceRespVO.getScenicId());
goodsDetailVO.setScenicName(sourceRespVO.getScenicName());
goodsDetailVO.setLongitude(sourceRespVO.getLongitude());
goodsDetailVO.setLatitude(sourceRespVO.getLatitude());
goodsDetailVO.setGoodsType(2);
goodsDetailVO.setSourceType(sourceType);
goodsDetailVO.setGoodsId(sourceRespVO.getId());
goodsDetailVO.setVideoUrl(sourceRespVO.getVideoUrl());
goodsDetailVO.setUrl(sourceRespVO.getUrl());
goodsDetailVO.setCreateTime(sourceRespVO.getCreateTime());
goodsDetailVOList.add(goodsDetailVO);
i++;
}
return ApiResponse.success(goodsDetailVOList);
}
@Override
@ -125,4 +162,21 @@ public class GoodsServiceImpl implements GoodsService {
}
return ApiResponse.fail("不合法的商品,请联系管理员");
}
@Override
public ApiResponse<GoodsDetailVO> videoGoodsDetail(Long goodsId) {
GoodsDetailVO goodsDetailVO = new GoodsDetailVO();
VideoRespVO videoRespVO = videoMapper.getById(goodsId);
goodsDetailVO.setGoodsName(videoRespVO.getTemplateName());
goodsDetailVO.setScenicId(videoRespVO.getScenicId());
goodsDetailVO.setScenicName(videoRespVO.getScenicName());
goodsDetailVO.setLongitude(videoRespVO.getLongitude());
goodsDetailVO.setLatitude(videoRespVO.getLatitude());
goodsDetailVO.setGoodsType(1);
goodsDetailVO.setGoodsId(videoRespVO.getId());
goodsDetailVO.setVideoUrl(videoRespVO.getVideoUrl());
goodsDetailVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl());
goodsDetailVO.setCreateTime(videoRespVO.getCreateTime());
return ApiResponse.success(goodsDetailVO);
}
}

View File

@ -11,6 +11,7 @@ import com.ycwl.basic.exception.AppException;
import com.ycwl.basic.mapper.pc.OrderMapper;
import com.ycwl.basic.mapper.pc.SourceMapper;
import com.ycwl.basic.mapper.pc.VideoMapper;
import com.ycwl.basic.model.mobile.goods.GoodsDetailVO;
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
import com.ycwl.basic.model.mobile.order.RefundOrderReq;
import com.ycwl.basic.model.pc.member.resp.MemberRespVO;
@ -92,12 +93,15 @@ public class OrderServiceImpl implements OrderService {
if (add == NumberConstant.ZERO) {
return ApiResponse.fail("订单添加失败");
} else {
List<OrderItemDTO> orderItemList = order.getOrderItemList();
List<GoodsDetailVO> goodsItemList = order.getGoodsItemList();
List<OrderItemEntity> orderItems = new ArrayList<>();
orderItemList.forEach(orderItemDTO -> {
goodsItemList.forEach(goodsDto -> {
OrderItemEntity orderItemEntity = new OrderItemEntity();
BeanUtil.copyProperties(orderItemDTO, orderItemEntity);
orderItemEntity.setId(SnowFlakeUtil.getLongId());
orderItemEntity.setOrderId(orderId);
orderItemEntity.setGoodsType(goodsDto.getGoodsType());
orderItemEntity.setGoodsId(goodsDto.getGoodsId());
orderItems.add(orderItemEntity);
});
int addOrderItems = orderMapper.addOrderItems(orderItems);
if (addOrderItems == NumberConstant.ZERO) {
@ -105,21 +109,24 @@ public class OrderServiceImpl implements OrderService {
return ApiResponse.fail("订单添加失败");
}
/* 成片的时候子订单只会有一个,素材的时候 子订单多个且价格与子订单数量无关,只与子订单商品对应景区定义的价格相同*/
GoodsPriceQueryReq goodsPriceQueryReq = new GoodsPriceQueryReq();
Integer goodsType = order.getOrderItemList().get(NumberConstant.ZERO).getGoodsType();
Long goodsId = order.getOrderItemList().get(NumberConstant.ZERO).getGoodsId();
GoodsDetailVO goodsDetailVO = goodsItemList.get(NumberConstant.ZERO);
Integer goodsType = goodsDetailVO.getGoodsType();
Long goodsId = goodsDetailVO.getGoodsId();
String goodsName = null;
if (goodsType == NumberConstant.ONE) {
VideoRespVO videoRespVO = videoMapper.getById(goodsId);
goodsName = videoRespVO.getTemplateName();
goodsName = goodsDetailVO.getGoodsName();
} else if (goodsType == NumberConstant.TWO) {
SourceRespVO sourceRespVO = sourceMapper.getById(goodsId);
goodsName = SourceTypeNameEnum.getRemark(sourceRespVO.getType());
Integer sourceType = goodsDetailVO.getSourceType();
goodsName = SourceTypeNameEnum.getRemark(sourceType);
}
BigDecimal price = goodsService.queryPrice(goodsPriceQueryReq.setGoodsId(goodsId)
.setGoodsType(goodsType)).getData();
/* 成片的时候子订单只会有一个,素材的时候 子订单多个且价格与子订单数量无关,只与子订单商品对应景区定义的价格相同*/
GoodsPriceQueryReq goodsPriceQueryReq = new GoodsPriceQueryReq();
goodsPriceQueryReq.setGoodsId(goodsId);
goodsPriceQueryReq.setGoodsType(goodsType);
goodsPriceQueryReq.setScenicId(goodsDetailVO.getScenicId());
BigDecimal price = goodsService.queryPrice(goodsPriceQueryReq).getData();
MemberRespVO memberRespVO = memberService.getUserInfo().getData();
WXPayOrderReqVO wxPayOrderReqVO = new WXPayOrderReqVO();

View File

@ -1,8 +1,9 @@
package com.ycwl.basic.service.mobile;
import com.ycwl.basic.model.mobile.goods.GoodsDetailVO;
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
import com.ycwl.basic.model.mobile.goods.GoodsReqQuery;
import com.ycwl.basic.model.mobile.goods.GoodsVO;
import com.ycwl.basic.model.mobile.goods.GoodsPageVO;
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
import com.ycwl.basic.utils.ApiResponse;
@ -20,14 +21,14 @@ public interface GoodsService {
* @param query 查询条件
* @return
*/
ApiResponse<List<GoodsVO>> goodsList(GoodsReqQuery query);
ApiResponse<List<GoodsPageVO>> goodsList(GoodsReqQuery query);
/**
* 查询源素材商品列表
* @param query
* @return
*/
ApiResponse<List<SourceRespVO>> sourceGoodsList(GoodsReqQuery query);
ApiResponse<List<GoodsDetailVO>> sourceGoodsList(GoodsReqQuery query);
/**
* 查询订单应付价格
@ -35,4 +36,11 @@ public interface GoodsService {
* @return
*/
ApiResponse<BigDecimal> queryPrice(GoodsPriceQueryReq queryPriceData);
/**
*
* @param goodsId 商品vlogid
* @return
*/
ApiResponse<GoodsDetailVO> videoGoodsDetail(Long goodsId);
}