yuhongqi 2 тижнів тому
батько
коміт
751e54a714
19 змінених файлів з 137 додано та 15 видалено
  1. 38 0
      fs-admin/src/main/java/com/fs/course/controller/FsUserCourseCommentController.java
  2. 3 0
      fs-service/src/main/java/com/fs/course/domain/FsUserCourseComment.java
  3. 14 5
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseCommentMapper.java
  4. 1 1
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java
  5. 6 0
      fs-service/src/main/java/com/fs/course/param/FsUserCourseCommentParam.java
  6. 7 1
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseCommentServiceImpl.java
  7. 4 1
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  8. 3 3
      fs-service/src/main/java/com/fs/course/vo/FsCourseWatchLogListVO.java
  9. 3 0
      fs-service/src/main/java/com/fs/course/vo/FsUserCourseCommentListUVO.java
  10. 4 0
      fs-service/src/main/java/com/fs/course/vo/FsUserCourseCommentListVO.java
  11. 4 0
      fs-service/src/main/java/com/fs/hisStore/domain/FsStoreProductScrm.java
  12. 1 1
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderItemScrmMapper.java
  13. 27 1
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java
  14. 4 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderExportVO.java
  15. 3 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderItemExportVO.java
  16. 3 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderItemExportZMVO.java
  17. 3 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsStoreProductListQueryVO.java
  18. 5 1
      fs-service/src/main/resources/mapper/course/FsUserCourseCommentMapper.xml
  19. 4 1
      fs-user-app/src/main/java/com/fs/app/controller/course/CourseQwController.java

+ 38 - 0
fs-admin/src/main/java/com/fs/course/controller/FsUserCourseCommentController.java

@@ -270,6 +270,44 @@ public class FsUserCourseCommentController extends BaseController
         }
     }
 
+    /**
+     * 修改用户留言可见范围(0-自己可见,1-全部人可见)
+     */
+    @PreAuthorize("@ss.hasPermi('course:userCourseComment:edit')")
+    @Log(title = "用户留言可见范围", businessType = BusinessType.UPDATE)
+    @PutMapping("/updateVisibleAll")
+    public AjaxResult updateVisibleAll(@RequestBody FsUserCourseComment param) {
+        if (param.getCommentId() == null || param.getVisibleAll() == null) {
+            return AjaxResult.error("参数不完整");
+        }
+        if (param.getVisibleAll() != 0 && param.getVisibleAll() != 1) {
+            return AjaxResult.error("可见范围参数无效");
+        }
+        FsUserCourseComment update = new FsUserCourseComment();
+        update.setCommentId(param.getCommentId());
+        update.setVisibleAll(param.getVisibleAll());
+        return toAjax(fsUserCourseCommentService.updateFsUserCourseComment(update));
+    }
+
+    /**
+     * 查询指定课程小节下的用户留言(排除精选留言 type=3,支持分页)
+     */
+    @PreAuthorize("@ss.hasPermi('course:userCourseComment:list')")
+    @GetMapping("/sectionUserComments")
+    public TableDataInfo sectionUserComments(
+            @RequestParam Long courseId,
+            @RequestParam Long videoId,
+            @RequestParam(value = "nickName", required = false) String nickName) {
+        startPage();
+        FsUserCourseCommentParam param = new FsUserCourseCommentParam();
+        param.setCourseId(courseId);
+        param.setVideoId(videoId);
+        param.setNickName(nickName);
+        param.setExcludeFeatured(true);
+        List<FsUserCourseCommentListVO> list = fsUserCourseCommentService.selectFsUserCourseCommentListVO(param);
+        return getDataTable(list);
+    }
+
     /**
      * 查询精选留言历史列表(type=3)
      */

+ 3 - 0
fs-service/src/main/java/com/fs/course/domain/FsUserCourseComment.java

@@ -61,4 +61,7 @@ public class FsUserCourseComment extends BaseEntity
     /** 视频ID */
     private Long videoId;
 
+    /** 是否全部人可见:0-自己可见,1-全部人可见 */
+    private Integer visibleAll;
+
 }

+ 14 - 5
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseCommentMapper.java

@@ -70,17 +70,20 @@ public interface FsUserCourseCommentMapper
     public int deleteFsUserCourseCommentByCommentIds(Long[] commentIds);
 
     @Select({"<script> " +
-            "select c.*,u.nick_name,u.phone,u.avatar from fs_user_course_comment c LEFT JOIN fs_user u ON c.user_id=u.user_id"+
+            "select c.*,u.nick_name as nickNameOriginal,u.phone,u.avatar from fs_user_course_comment c LEFT JOIN fs_user u ON c.user_id=u.user_id"+
             "<where>  \n" +
             "            <if test=\"userId != null \"> and c.user_id = #{userId}</if>\n" +
             "            <if test=\"courseId != null \"> and c.course_id = #{courseId}</if>\n" +
+            "            <if test=\"videoId != null \"> and c.video_id = #{videoId}</if>\n" +
             "            <if test=\"type != null \"> and c.type = #{type}</if>\n" +
+            "            <if test=\"excludeFeatured != null and excludeFeatured == true\"> and (c.type is null or c.type != 3) and (c.is_del = 0 or c.is_del is null)</if>\n" +
             "            <if test=\"parentId != null \"> and c.parent_id = #{parentId}</if>\n" +
             "            <if test=\"content != null  and content != ''\"> and c.content = #{content}</if>\n" +
             "            <if test=\"replyCount != null \"> and c.reply_count = #{replyCount}</if>\n" +
+            "            <if test=\"nickName != null and nickName != ''\"> and (u.nick_name like concat('%', #{nickName}, '%') or c.nick_name like concat('%', #{nickName}, '%'))</if>\n" +
             "            <if test=\"phone != null \"> and u.phone = #{phone}</if>\n" +
             "        </where>" +
-            "order by comment_id desc"+
+            "order by c.comment_id desc"+
             "</script>"})
     List<FsUserCourseCommentListVO> selectFsUserCourseCommentListVO(FsUserCourseCommentParam fsUserCourseComment);
     @Select("select c.*,u.nick_name,u.phone from fs_user_course_comment c LEFT JOIN fs_user u ON c.user_id=u.user_id where comment_id=#{commentId}")
@@ -92,16 +95,22 @@ public interface FsUserCourseCommentMapper
             "LEFT JOIN fs_user u ON c.user_id=u.user_id " +
             "LEFT  JOIN fs_user tu ON tu.user_id =c.to_user_id " +
             "LEFT JOIN fs_user_course_comment_like l ON c.comment_id=l.comment_id and #{userId}=l.user_id "+
-            "where c.is_del = 0 and  c.type = 1  \n" +
+            "where c.is_del = 0 and c.type = 1 \n" +
             "<if test=\"courseId != null \"> and c.course_id = #{courseId}</if>\n" +
             "<if test=\"videoId != null \"> and c.video_id = #{videoId}</if>\n" +
+            "<if test=\"userId != null\"> and (c.visible_all = 1 or c.user_id = #{userId})</if>\n" +
+            "<if test=\"userId == null\"> and c.visible_all = 1</if>\n" +
             "<if test=\"sortType != null and sortType == 1\"> order by c.likes desc </if>" +
             "<if test=\"sortType != null and sortType == 2\"> order by c.comment_id desc </if>" +
             "</script>"})
     List<FsUserCourseCommentListUVO> selectFsUserCourseCommentListUVO(FsUserCourseCommentUParam param);
     @Select({"<script> " +
-            "select c.*,u.nick_name as nickNameOriginal,u.avatar,tu.nick_name to_nick_name from fs_user_course_comment c LEFT JOIN fs_user u ON c.user_id=u.user_id LEFT  JOIN fs_user tu ON tu.user_id =c.to_user_id " +
-            "where c.user_id=#{userId} " +
+            "select c.*,u.nick_name as nickNameOriginal,u.avatar,tu.nick_name to_nick_name from fs_user_course_comment c " +
+            "LEFT JOIN fs_user u ON c.user_id=u.user_id " +
+            "LEFT JOIN fs_user tu ON tu.user_id =c.to_user_id " +
+            "where (c.is_del = 0 or c.is_del is null) " +
+            "and (c.type is null or c.type != 3) " +
+            "and (c.user_id = #{userId} or c.visible_all = 1) " +
             "<if test='courseId != null'> and c.course_id = #{courseId}</if>" +
             "<if test='videoId != null'> and c.video_id = #{videoId}</if>" +
             " order by c.create_time desc" +

+ 1 - 1
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java

@@ -169,7 +169,7 @@ public interface FsUserCourseVideoMapper extends BaseMapper<FsUserCourseVideo> {
             "LEFT JOIN fs_user_course_video_red_package p on p.video_id= v.video_id and p.company_id =#{maps.companyId} and p.data_type = 1 " +
             "where v.is_del = 0 and  v.course_id = #{maps.courseId}   " +
             "<if test = ' maps.title!=null and maps.title != \"\" '> " +
-            "and v.title = #{maps.title} " +
+            "and v.title like concat('%', #{maps.title}, '%')  " +
             "</if>" +
             " order by v.course_sort  " +
             "</script>"})

+ 6 - 0
fs-service/src/main/java/com/fs/course/param/FsUserCourseCommentParam.java

@@ -43,4 +43,10 @@ public class FsUserCourseCommentParam {
     private Date createTime;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
+
+    /** 视频小节 id */
+    private Long videoId;
+
+    /** 为 true 时排除精选留言(type=3) */
+    private Boolean excludeFeatured;
 }

+ 7 - 1
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseCommentServiceImpl.java

@@ -104,7 +104,13 @@ public class FsUserCourseCommentServiceImpl implements IFsUserCourseCommentServi
 
     @Override
     public List<FsUserCourseCommentListVO> selectFsUserCourseCommentListVO(FsUserCourseCommentParam fsUserCourseComment) {
-        return fsUserCourseCommentMapper.selectFsUserCourseCommentListVO(fsUserCourseComment);
+        List<FsUserCourseCommentListVO> list = fsUserCourseCommentMapper.selectFsUserCourseCommentListVO(fsUserCourseComment);
+        list.forEach(comment -> {
+            if (StringUtils.isEmpty(comment.getNickName())) {
+                comment.setNickName(comment.getNickNameOriginal());
+            }
+        });
+        return list;
     }
 
     @Override

+ 4 - 1
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -4738,7 +4738,10 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                     fsStoreProductScrm.setOffShelfTime(offShelfTime);
                     fsStoreProductScrm.setCardPopupTime(cardPopupTime);
                     fsStoreProductScrm.setCardCloseTime(cardCloseTime);
-
+                    if (originalNode != null && originalNode.has("hotSaleTags") && !originalNode.path("hotSaleTags").isNull()) {
+                        String hotSaleTags = originalNode.path("hotSaleTags").asText();
+                        fsStoreProductScrm.setHotSaleTags(StringUtils.isNotBlank(hotSaleTags) ? hotSaleTags : null);
+                    }
 
                     fsPackageListVOS.add(fsStoreProductScrm);
                 }

+ 3 - 3
fs-service/src/main/java/com/fs/course/vo/FsCourseWatchLogListVO.java

@@ -23,7 +23,7 @@ public class FsCourseWatchLogListVO extends BaseEntity
     private Long logId;
 
     /** 会员id */
-//    @Excel(name = "会员id")
+    @Excel(name = "用户ID")
     private Long userId;
 
     /** 小程序昵称 */
@@ -96,8 +96,8 @@ public class FsCourseWatchLogListVO extends BaseEntity
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date campPeriodTime;
 
-    /** 所属团队 */
-//    @Excel(name = "所属团队")
+    /** 所属公司 */
+    @Excel(name = "所属公司")
     private String companyName;
 
     /** 所属团队编号 */

+ 3 - 0
fs-service/src/main/java/com/fs/course/vo/FsUserCourseCommentListUVO.java

@@ -49,4 +49,7 @@ public class FsUserCourseCommentListUVO {
     private List<FsUserCourseCommentReplyListUVO> replyList;
     //是否点赞 1是 0否
     private Integer isLike;
+
+    /** 是否全部人可见:0-自己可见,1-全部人可见 */
+    private Integer visibleAll;
 }

+ 4 - 0
fs-service/src/main/java/com/fs/course/vo/FsUserCourseCommentListVO.java

@@ -18,6 +18,7 @@ public class FsUserCourseCommentListVO {
     @Excel(name = "课堂id")
     private Long courseId;
     private String nickName;
+    private String nickNameOriginal;
     private String phone;
     private String avatar;
 
@@ -44,4 +45,7 @@ public class FsUserCourseCommentListVO {
     private Date createTime;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
+
+    /** 是否全部人可见:0-自己可见,1-全部人可见 */
+    private Integer visibleAll;
 }

+ 4 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreProductScrm.java

@@ -379,6 +379,10 @@ public class FsStoreProductScrm extends BaseEntity
     @TableField(exist = false)
     private String offShelfTime;
 
+    /** 热卖标签(逗号分隔,最多3个,可为空) */
+    @TableField(exist = false)
+    private String hotSaleTags;
+
     /** 过滤商品id */
     private Long[] excludeProductIds;
 

+ 1 - 1
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderItemScrmMapper.java

@@ -76,7 +76,7 @@ public interface FsStoreOrderItemScrmMapper
     List<FsStoreOrderItemVO> selectFsStoreOrderItemListAndProductByOrderId(Long id);
 
     @Select({"<script> " +
-            "select i.*,o.user_id,psps.cost,o.pay_postage,o.total_num,o.status,fspcs.cate_name, o.real_name,o.user_phone,o.user_address,o.create_time,o.pay_time,o.delivery_sn,o.delivery_name,o.delivery_id, c.company_name ,cu.nick_name as company_user_nick_name ,cu.phonenumber as company_usere_phonenumber,o.upload_time ,CASE WHEN o.certificates IS NULL OR o.certificates = '' THEN 0 ELSE 1 END AS is_upload,p.title as package_name,cts.name as scheduleName,sp_latest.pay_money, sp_latest.bank_transaction_id as bankTransactionId, o.delivery_send_time," +
+            "select i.*,o.user_id,u.nickname,psps.cost,o.pay_postage,o.total_num,o.status,fspcs.cate_name, o.real_name,o.user_phone,o.user_address,o.create_time,o.pay_time,o.delivery_sn,o.delivery_name,o.delivery_id, c.company_name ,cu.nick_name as company_user_nick_name ,cu.phonenumber as company_usere_phonenumber,o.upload_time ,CASE WHEN o.certificates IS NULL OR o.certificates = '' THEN 0 ELSE 1 END AS is_upload,p.title as package_name,cts.name as scheduleName,sp_latest.pay_money, sp_latest.bank_transaction_id as bankTransactionId, o.delivery_send_time," +
             " o.order_code, o.pay_price, o.pay_money, o.deduction_price,o.pay_delivery, o.order_type,psps.price " +
             ", CASE o.is_audit WHEN 1 THEN '是' ELSE '否' END AS isAudit " +
             ", sas.audit_remark as auditRemark, sas.reason_level1_text as reasonValue1, sas.reason_level2_text as reasonValue2 " +

+ 27 - 1
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java

@@ -1280,7 +1280,33 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
 
     @Override
     public List<FsStoreProductListQueryVO> selectFsStoreProductGoodListQuery(BaseQueryParam param) {
-        return fsStoreProductMapper.selectFsStoreProductGoodListQuery(medicalMallConfig, param);
+        List<FsStoreProductListQueryVO> list = fsStoreProductMapper.selectFsStoreProductGoodListQuery(medicalMallConfig, param);
+        if (list == null || list.isEmpty()) {
+            return list;
+        }
+        try {
+            List<Long> productIds = list.stream()
+                    .map(FsStoreProductListQueryVO::getProductId)
+                    .filter(Objects::nonNull)
+                    .distinct()
+                    .collect(Collectors.toList());
+            if (productIds.isEmpty()) {
+                return list;
+            }
+            List<FsStoreProductTagNameVO> tagNames = fsStoreProductTagRelationScrmMapper.selectProductTagNamesByProductIds(productIds);
+            Map<Long, List<String>> tagMap = new LinkedHashMap<>();
+            for (FsStoreProductTagNameVO tn : tagNames) {
+                tagMap.computeIfAbsent(tn.getProductId(), k -> new ArrayList<>()).add(tn.getTagName());
+            }
+            for (FsStoreProductListQueryVO vo : list) {
+                if (vo.getProductId() != null) {
+                    vo.setTagList(tagMap.getOrDefault(vo.getProductId(), new ArrayList<>()));
+                }
+            }
+        } catch (Exception e) {
+            log.error("批量查询商品标签失败", e);
+        }
+        return list;
     }
 
     @Override

+ 4 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderExportVO.java

@@ -27,6 +27,10 @@ public class FsStoreOrderExportVO implements Serializable
     private String orderCode;
     @Excel(name = "会员ID")
     private Long userId;
+
+    @Excel(name = "用户昵称")
+    private String nickname;
+
     /** 额外订单号 */
     @Excel(name = "管易云订单号")
     private String extendOrderId;

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderItemExportVO.java

@@ -27,6 +27,9 @@ public class FsStoreOrderItemExportVO implements Serializable
     @Excel(name = "会员ID")
     private Long userId;
 
+    @Excel(name = "用户昵称")
+    private String nickname;
+
     @Excel(name = "产品名称")
     private String productName;
 

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderItemExportZMVO.java

@@ -29,6 +29,9 @@ public class FsStoreOrderItemExportZMVO implements Serializable {
     @Excel(name = "会员ID")
     private Long userId;
 
+    @Excel(name = "用户昵称")
+    private String nickname;
+
     @Excel(name = "产品名称")
     private String productName;
 

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreProductListQueryVO.java

@@ -80,4 +80,7 @@ public class FsStoreProductListQueryVO implements Serializable
     /** 活动结束时间 */
     private java.util.Date activityEndTime;
 
+    /** 产品标签名称列表 */
+    private List<String> tagList = new ArrayList<>();
+
 }

+ 5 - 1
fs-service/src/main/resources/mapper/course/FsUserCourseCommentMapper.xml

@@ -19,10 +19,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="isDel"    column="is_del"    />
         <result property="nickName"    column="nick_name"    />
         <result property="videoId"    column="video_id"    />
+        <result property="visibleAll"    column="visible_all"    />
     </resultMap>
 
     <sql id="selectFsUserCourseCommentVo">
-        select comment_id,to_user_id, user_id,is_del, course_id, type, parent_id, content, reply_count, create_time, update_time, likes, nick_name, video_id from fs_user_course_comment
+        select comment_id,to_user_id, user_id,is_del, course_id, type, parent_id, content, reply_count, create_time, update_time, likes, nick_name, video_id, visible_all from fs_user_course_comment
     </sql>
 
     <select id="selectFsUserCourseCommentList" parameterType="FsUserCourseComment" resultMap="FsUserCourseCommentResult">
@@ -61,6 +62,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isDel != null">is_del,</if>
             <if test="nickName != null">nick_name,</if>
             <if test="videoId != null">video_id,</if>
+            <if test="visibleAll != null">visible_all,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="userId != null">#{userId},</if>
@@ -76,6 +78,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isDel != null">#{isDel},</if>
             <if test="nickName != null">#{nickName},</if>
             <if test="videoId != null">#{videoId},</if>
+            <if test="visibleAll != null">#{visibleAll},</if>
          </trim>
     </insert>
 
@@ -95,6 +98,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isDel != null">is_del = #{isDel},</if>
             <if test="nickName != null">nick_name = #{nickName},</if>
             <if test="videoId != null">video_id = #{videoId},</if>
+            <if test="visibleAll != null">visible_all = #{visibleAll},</if>
         </trim>
         where comment_id = #{commentId}
     </update>

+ 4 - 1
fs-user-app/src/main/java/com/fs/app/controller/course/CourseQwController.java

@@ -594,7 +594,10 @@ public class CourseQwController extends AppBaseController {
                     fsStoreProductScrm.setOffShelfTime(offShelfTime);
                     fsStoreProductScrm.setCardPopupTime(cardPopupTime);
                     fsStoreProductScrm.setCardCloseTime(cardCloseTime);
-
+                    if (originalNode != null && originalNode.has("hotSaleTags") && !originalNode.path("hotSaleTags").isNull()) {
+                        String hotSaleTags = originalNode.path("hotSaleTags").asText();
+                        fsStoreProductScrm.setHotSaleTags(org.apache.commons.lang3.StringUtils.isNotBlank(hotSaleTags) ? hotSaleTags : null);
+                    }
 
                     fsPackageListVOS.add(fsStoreProductScrm);
                 }