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 5402e76..81531fc 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java @@ -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> goodsList(@RequestBody GoodsReqQuery query) { + public ApiResponse> goodsList(@RequestBody GoodsReqQuery query) { return goodsService.goodsList(query); } @ApiOperation("源素材(原片/照片)商品列表") @PostMapping("/sourceGoodsList") - public ApiResponse> sourceGoodsList(@RequestBody GoodsReqQuery query) { + public ApiResponse> sourceGoodsList(@RequestBody GoodsReqQuery query) { return goodsService.sourceGoodsList(query); } -// @ApiOperation("成片vlog商品详情") -// @GetMapping("/getVideoGoodsDetail/{goodId}") -// public ApiResponse videoGoodsDetail(@RequestBody GoodsReqQuery query) { -// -// return ApiResponse.success(""); -// } + @ApiOperation("成片vlog商品详情") + @GetMapping("/getVideoGoodsDetail/{goodId}") + public ApiResponse videoGoodsDetail(@PathVariable("goodId") Long goodsId) { + return goodsService.videoGoodsDetail(goodsId); + } @ApiOperation("查询价格") @PostMapping("/queryPrice") diff --git a/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsDetailVO.java b/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsDetailVO.java new file mode 100644 index 0000000..60d24d0 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsDetailVO.java @@ -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; + +/** + * @Author:longbinbin + * @Date:2024/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时为videoId,goodsType=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; +} diff --git a/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsVO.java b/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsPageVO.java similarity index 80% rename from src/main/java/com/ycwl/basic/model/mobile/goods/GoodsVO.java rename to src/main/java/com/ycwl/basic/model/mobile/goods/GoodsPageVO.java index 78128b8..b011bd3 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsVO.java +++ b/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsPageVO.java @@ -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; /** * @Author:longbinbin * @Date:2024/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("商品(vlog)id goodsType为1时才有值") private Long goodsId; @ApiModelProperty("模版封面图片") private String templateCoverUrl; diff --git a/src/main/java/com/ycwl/basic/model/pc/order/req/OrderAddOrUpdateReq.java b/src/main/java/com/ycwl/basic/model/pc/order/req/OrderAddOrUpdateReq.java index 1f846c0..02f5120 100644 --- a/src/main/java/com/ycwl/basic/model/pc/order/req/OrderAddOrUpdateReq.java +++ b/src/main/java/com/ycwl/basic/model/pc/order/req/OrderAddOrUpdateReq.java @@ -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 orderItemList; + @ApiModelProperty("订单商品明细") + private List goodsItemList; } diff --git a/src/main/java/com/ycwl/basic/model/pc/source/resp/SourceRespVO.java b/src/main/java/com/ycwl/basic/model/pc/source/resp/SourceRespVO.java index 00ff142..d575279 100644 --- a/src/main/java/com/ycwl/basic/model/pc/source/resp/SourceRespVO.java +++ b/src/main/java/com/ycwl/basic/model/pc/source/resp/SourceRespVO.java @@ -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; } 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 400ceb9..09a8467 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 @@ -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> goodsList(GoodsReqQuery query) { + public ApiResponse> goodsList(GoodsReqQuery query) { //查询原素材 - List goodsList = new ArrayList<>(); + List goodsList = new ArrayList<>(); VideoReqQuery videoReqQuery = new VideoReqQuery(); videoReqQuery.setScenicId(query.getScenicId()); @@ -43,16 +45,16 @@ public class GoodsServiceImpl implements GoodsService { //查询成片vlog List 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 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> sourceGoodsList(GoodsReqQuery query) { - SourceReqQuery sourceReqQuery = new SourceReqQuery(); + public ApiResponse> 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 list = sourceMapper.list(sourceReqQuery); - return ApiResponse.success(list); + List 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 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); + } } diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java index e59b250..fc6a1c3 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java @@ -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 orderItemList = order.getOrderItemList(); + List goodsItemList = order.getGoodsItemList(); List 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(); 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 62469d0..65866cf 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java @@ -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> goodsList(GoodsReqQuery query); + ApiResponse> goodsList(GoodsReqQuery query); /** * 查询源素材商品列表 * @param query * @return */ - ApiResponse> sourceGoodsList(GoodsReqQuery query); + ApiResponse> sourceGoodsList(GoodsReqQuery query); /** * 查询订单应付价格 @@ -35,4 +36,11 @@ public interface GoodsService { * @return */ ApiResponse queryPrice(GoodsPriceQueryReq queryPriceData); + + /** + * + * @param goodsId 商品(vlog)id + * @return + */ + ApiResponse videoGoodsDetail(Long goodsId); } diff --git a/src/main/resources/mapper/pc/SourceMapper.xml b/src/main/resources/mapper/pc/SourceMapper.xml index 2d52821..34df173 100644 --- a/src/main/resources/mapper/pc/SourceMapper.xml +++ b/src/main/resources/mapper/pc/SourceMapper.xml @@ -34,6 +34,7 @@ and so.create_time >= #{startTime} and so.create_time <= #{endTime} + order by so.create_time desc