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 1a4ba27..8ffbf29 100644
--- a/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java
+++ b/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java
@@ -1,10 +1,7 @@
 package com.ycwl.basic.controller.mobile;
 
 import com.ycwl.basic.model.jwt.JwtInfo;
-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.GoodsPageVO;
+import com.ycwl.basic.model.mobile.goods.*;
 import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
 import com.ycwl.basic.service.mobile.GoodsService;
 import com.ycwl.basic.utils.ApiResponse;
@@ -44,7 +41,7 @@ public class AppGoodsController {
 
     @ApiOperation("成片vlog商品详情")
     @GetMapping("/getVideoGoodsDetail/{goodId}")
-    public ApiResponse<GoodsDetailVO> videoGoodsDetail(@PathVariable("goodId") Long goodsId) {
+    public ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(@PathVariable("goodId") Long goodsId) {
         return goodsService.videoGoodsDetail(goodsId);
     }
 
diff --git a/src/main/java/com/ycwl/basic/mapper/pc/DeviceMapper.java b/src/main/java/com/ycwl/basic/mapper/pc/DeviceMapper.java
index d496826..86f81df 100644
--- a/src/main/java/com/ycwl/basic/mapper/pc/DeviceMapper.java
+++ b/src/main/java/com/ycwl/basic/mapper/pc/DeviceMapper.java
@@ -6,6 +6,7 @@ import com.ycwl.basic.model.pc.device.req.DeviceAddOrUpdateReq;
 import com.ycwl.basic.model.pc.device.req.DeviceReqQuery;
 import com.ycwl.basic.model.pc.device.resp.DeviceRespVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -25,5 +26,5 @@ public interface DeviceMapper {
 
     List<DeviceRespVO> listByScenicId(Long scenicId);
 
-    ScenicDeviceCountVO deviceCountByScenicId(Long scenicId, String userId);
+    ScenicDeviceCountVO deviceCountByScenicId(@Param("scenicId") Long scenicId,@Param("userId") Long userId);
 }
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
index 60d24d0..bf22a23 100644
--- a/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsDetailVO.java
+++ b/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsDetailVO.java
@@ -39,4 +39,8 @@ public class GoodsDetailVO {
     private String videoUrl;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
+    @ApiModelProperty("价格")
+    private BigDecimal price;
+    @ApiModelProperty("是否已购买 0否 1是")
+    private Integer isBuy;
 }
diff --git a/src/main/java/com/ycwl/basic/model/mobile/goods/VideoGoodsDetailVO.java b/src/main/java/com/ycwl/basic/model/mobile/goods/VideoGoodsDetailVO.java
new file mode 100644
index 0000000..2cf15be
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/model/mobile/goods/VideoGoodsDetailVO.java
@@ -0,0 +1,48 @@
+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("vlog商品详情")
+public class VideoGoodsDetailVO {
+    @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;
+    @ApiModelProperty("价格")
+    private BigDecimal price;
+    @ApiModelProperty("是否已购买 0否 1是")
+    private Integer isBuy;
+    @ApiModelProperty("镜头数")
+    private Integer lensNum;
+}
diff --git a/src/main/java/com/ycwl/basic/model/pc/order/resp/OrderItemVO.java b/src/main/java/com/ycwl/basic/model/pc/order/resp/OrderItemVO.java
index 57a9df8..1e790a6 100644
--- a/src/main/java/com/ycwl/basic/model/pc/order/resp/OrderItemVO.java
+++ b/src/main/java/com/ycwl/basic/model/pc/order/resp/OrderItemVO.java
@@ -19,6 +19,8 @@ public class OrderItemVO {
      */
     @ApiModelProperty("订单id")
     private Long orderId;
+    @ApiModelProperty("商品类型,1成片,2源素材")
+    private Integer goodsType;
     /**
      * 商品ID,goods_type=1关联video.id,=2关联source.id,=3关联template.id
      */
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 7da34ab..68afd1d 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
@@ -72,8 +72,8 @@ public class AppScenicServiceImpl implements AppScenicService {
 
     @Override
     public ApiResponse<ScenicDeviceCountVO> deviceCountByScenicId(Long scenicId) {
-        String userId = BaseContextHandler.getUserId();
-        ScenicDeviceCountVO scenicDeviceCountVO = deviceMapper.deviceCountByScenicId(scenicId, userId);
+        JwtInfo worker = JwtTokenUtil.getWorker();
+        ScenicDeviceCountVO scenicDeviceCountVO = deviceMapper.deviceCountByScenicId(scenicId, worker.getUserId());
         return ApiResponse.success(scenicDeviceCountVO);
     }
 
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 2313e19..cf4c69a 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
@@ -1,14 +1,9 @@
 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.TaskMapper;
-import com.ycwl.basic.mapper.pc.VideoMapper;
+import com.ycwl.basic.mapper.pc.*;
 import com.ycwl.basic.model.jwt.JwtInfo;
-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.GoodsPageVO;
+import com.ycwl.basic.model.mobile.goods.*;
+import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO;
 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;
@@ -39,6 +34,8 @@ public class GoodsServiceImpl implements GoodsService {
      private ScenicMapper scenicMapper;
      @Autowired
      private TaskMapper taskMapper;
+     @Autowired
+     private DeviceMapper deviceMapper;
 
      public ApiResponse<List<GoodsPageVO>> goodsList(GoodsReqQuery query) {
          JwtInfo worker = JwtTokenUtil.getWorker();
@@ -171,9 +168,12 @@ public class GoodsServiceImpl implements GoodsService {
     }
 
     @Override
-    public ApiResponse<GoodsDetailVO> videoGoodsDetail(Long goodsId) {
-        GoodsDetailVO goodsDetailVO = new GoodsDetailVO();
+    public ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(Long goodsId) {
+        VideoGoodsDetailVO goodsDetailVO = new VideoGoodsDetailVO();
         VideoRespVO videoRespVO = videoMapper.getById(goodsId);
+        if(videoRespVO==null){
+            return ApiResponse.fail("该vlog不存在或已失效");
+        }
         goodsDetailVO.setGoodsName(videoRespVO.getTemplateName());
         goodsDetailVO.setScenicId(videoRespVO.getScenicId());
         goodsDetailVO.setScenicName(videoRespVO.getScenicName());
@@ -184,6 +184,10 @@ public class GoodsServiceImpl implements GoodsService {
         goodsDetailVO.setVideoUrl(videoRespVO.getVideoUrl());
         goodsDetailVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl());
         goodsDetailVO.setCreateTime(videoRespVO.getCreateTime());
+        goodsDetailVO.setPrice(videoRespVO.getTemplatePrice());
+        goodsDetailVO.setIsBuy(videoRespVO.getIsBuy());
+        ScenicDeviceCountVO scenicDeviceCountVO = deviceMapper.deviceCountByScenicId(videoRespVO.getScenicId(), -1L);
+        goodsDetailVO.setLensNum(scenicDeviceCountVO.getTotalDeviceCount());
         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 a6f4c2b..51ca65e 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
@@ -264,6 +264,7 @@ public class OrderServiceImpl implements OrderService {
                 OrderItemVO itemVO = orderItemList.get(NumberConstant.ZERO);
                 appRespVO.setScenicName(itemVO.getScenicName());
                 appRespVO.setGoodsName(itemVO.getGoodsName());
+                appRespVO.setSourceType(itemVO.getSourceType());
             }
         }
         PageInfo<OrderAppRespVO> pageInfo = new PageInfo<>(list);
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 b2b85b5..4cf84c9 100644
--- a/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java
+++ b/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java
@@ -1,9 +1,6 @@
 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.GoodsPageVO;
+import com.ycwl.basic.model.mobile.goods.*;
 import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
 import com.ycwl.basic.utils.ApiResponse;
 
@@ -42,7 +39,7 @@ public interface GoodsService {
      * @param goodsId 商品(vlog)id
      * @return
      */
-    ApiResponse<GoodsDetailVO> videoGoodsDetail(Long goodsId);
+    ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(Long goodsId);
 
     /**
      * 查询当前用户的成片合成任务状态
diff --git a/src/main/resources/mapper/pc/DeviceMapper.xml b/src/main/resources/mapper/pc/DeviceMapper.xml
index 59de37b..d805506 100644
--- a/src/main/resources/mapper/pc/DeviceMapper.xml
+++ b/src/main/resources/mapper/pc/DeviceMapper.xml
@@ -68,7 +68,7 @@
         left join (
             select count(1) shotDeviceCount,scenic_id
             from source
-            where scenic_id = #{scenicId}
+            where scenic_id = #{scenicId} and member_id=#{userId}
             group by device_id
              )b on a.scenic_id = b.scenic_id
     </select>
diff --git a/src/main/resources/mapper/pc/OrderMapper.xml b/src/main/resources/mapper/pc/OrderMapper.xml
index d0322f6..e5873a6 100644
--- a/src/main/resources/mapper/pc/OrderMapper.xml
+++ b/src/main/resources/mapper/pc/OrderMapper.xml
@@ -47,9 +47,9 @@
         <result column="create_at" property="createAt"/>
         <result column="update_at" property="updateAt"/>
         <result column="cover_url" property="coverUrl"/>
-        <collection property="orderItemList" ofType="com.ycwl.basic.model.pc.order.resp.OrderItemVO">
+        <collection property="orderItemList" select="getOrderItemList" column="id" ofType="com.ycwl.basic.model.pc.order.resp.OrderItemVO">
             <result column="oiId" property="id"/>
-            <result column="id" property="orderId"/>
+            <result column="orderId" property="orderId"/>
             <result column="goods_id" property="goodsId"/>
             <result column="scenicName" property="scenicName"/>
             <result column="goodsName" property="goodsName"/>
@@ -58,14 +58,29 @@
             <result column="sourceType" property="sourceType"/>
         </collection>
     </resultMap>
+    <select id="getOrderItemList" parameterType="java.lang.Integer" resultType="com.ycwl.basic.model.pc.order.resp.OrderItemVO">
+        select oi.id oiId,oi.order_id orderId,oi.goods_id,
+               sc.name scenicName,t.cover_url coverUrl,
+               if(oi.goods_type='1',t.name,(select count(1) from order_item oi2  where oi2.order_id=oi.order_id)) as goodsName,
+               if(oi.goods_type='1',vd.video_url,sr.video_url) videoUrl,
+               if(oi.goods_type='2',sr.url,null) imgUrl,
+               if(oi.goods_type='2',sr.type,null) sourceType
+        from order_item oi
+        left join source sr on oi.goods_type='2' and oi.goods_id = sr.id
+        left join video vd on oi.goods_type='1' and oi.goods_id = vd.id
+        left join template t on oi.goods_type='1' and vd.template_id=t.id
+        left join scenic sc on (oi.goods_type='1' and vd.scenic_id=sc.id) or (oi.goods_type='2' and sr.scenic_id=sc.id)
+        where oi.order_id=#{id}
+    </select>
+
     <insert id="add">
         insert into `order`(id, member_id, openid,price, pay_price, remark, broker_id, promo_code,goods_type,scenic_id)
         VALUES (#{id}, #{memberId}, #{openid},#{price}, #{payPrice}, #{remark}, #{brokerId}, #{promoCode},#{goodsType},#{scenicId})
     </insert>
     <insert id="addOrderItems">
-        insert into order_item(id, order_id, goods_id) VALUES
+        insert into order_item(id, order_id,goods_type, goods_id) VALUES
         <foreach collection="orderItems" item="item" index="index" separator=",">
-            (#{item.id}, #{item.orderId}, #{item.goodsId})
+            (#{item.id}, #{item.orderId}, #{item.goodsType},#{item.goodsId})
         </foreach>
     </insert>
     <update id="update">
@@ -107,7 +122,7 @@
     <select id="list" resultMap="PCBaseResultMap">
         select o.id, o.member_id,m.nickname ,m.real_name , o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
                refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, o.goods_type, oi.goods_id
-        from `order` o
+        from `order`  AS o
         left join member m on o.member_id = m.id
         left join order_item oi on o.id = oi.order_id
         left join source sr on o.goods_type='2' and oi.goods_id = sr.id
@@ -207,7 +222,7 @@
                 and m.real_name like concat('%',#{memberRealName},'%')
             </if>
             <if test="price!= null ">
-                and price = #{price}
+                and o.price = #{price}
             </if>
             <if test="payPrice!= null ">
                 and pay_price = #{payPrice}
@@ -257,20 +272,16 @@
         </where>
     </select>
     <select id="appList" resultMap="AppBaseResultMap">
-        select o.id, o.member_id,m.nickname ,m.real_name , o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
-        refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, o.goods_type, oi.goods_id,
-        sc.name scenicName,t.cover_url coverUrl,
-        if(o.goods_type='1',t.name,(select count(1) from order_item oi2  where oi2.order_id=o.id)) as goodsName,
-        if(o.goods_type='1',vd.video_url,sr.video_url) videoUrl,
-        if(o.goods_type='2',sr.url,null) imgUrl,
-        if(o.goods_type='2',sr.type,null) sourceType
-        from `order` o
+        select DISTINCT  o.id, o.member_id,m.nickname ,m.real_name , o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
+        refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at, o.goods_type,
+        t.cover_url coverUrl
+        from `order`  AS o
         left join member m on o.member_id = m.id
         left join order_item oi on o.id = oi.order_id
         left join source sr on o.goods_type='2' and oi.goods_id = sr.id
         left join video vd on o.goods_type='1' and oi.goods_id = vd.id
-        left join template t on o.goods_type='1' and vd.template_id=t.id
-        left join scenic sc on (o.goods_type='1' and vd.scenic_id=sc.id) or (o.goods_type='2' and sr.scenic_id=sc.id)
+                left join template t on o.goods_type='1' and vd.template_id=t.id
+
         <where>
             <if test="memberId!=null">
                 and o.member_id=#{memberId}
@@ -290,14 +301,10 @@
         order by o.create_at desc
     </select>
     <select id="appDetail" resultMap="AppBaseResultMap">
-        select o.id, o.member_id,m.nickname ,m.real_name , o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
-               refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, o.goods_type, oi.goods_id,
-               sc.name scenicName,
-               if(o.goods_type='1',t.name,(select count(1) from order_item oi2  where oi2.order_id=o.id)) as goodsName,
-               if(o.goods_type='1',vd.video_url,sr.video_url) videoUrl,
-               if(o.goods_type='2',sr.url,null) imgUrl,
-               if(o.goods_type='2',sr.type,null) sourceType
-        from `order` o
+        select distinct o.id, o.member_id,m.nickname ,m.real_name , o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
+               refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,o.goods_type
+                ,t.cover_url coverUrl
+        from `order`  AS o
                  left join member m on o.member_id = m.id
                  left join order_item oi on o.id = oi.order_id
                  left join source sr on o.goods_type='2' and oi.goods_id = sr.id