浏览代码

Merge remote-tracking branch 'origin/master'

lyx 3 月之前
父节点
当前提交
680cf82cf6
共有 22 个文件被更改,包括 538 次插入86 次删除
  1. 12 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreComment.java
  2. 3 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreCommentAppealLog.java
  3. 16 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreInfo.java
  4. 2 0
      alien-entity/src/main/java/shop/alien/entity/store/WebAudit.java
  5. 63 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentAppealInfoVo.java
  6. 15 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentAppealVo.java
  7. 9 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentVo.java
  8. 3 3
      alien-entity/src/main/java/shop/alien/mapper/StoreCommentAppealMapper.java
  9. 20 5
      alien-entity/src/main/java/shop/alien/mapper/StoreCommentMapper.java
  10. 3 1
      alien-entity/src/main/java/shop/alien/mapper/WebAuditMapper.java
  11. 2 5
      alien-store/src/main/java/shop/alien/store/controller/LifeCouponController.java
  12. 31 3
      alien-store/src/main/java/shop/alien/store/controller/StoreCommentAppealController.java
  13. 22 9
      alien-store/src/main/java/shop/alien/store/controller/StoreMenuController.java
  14. 1 1
      alien-store/src/main/java/shop/alien/store/service/LifeCouponService.java
  15. 23 1
      alien-store/src/main/java/shop/alien/store/service/StoreCommentAppealService.java
  16. 9 0
      alien-store/src/main/java/shop/alien/store/service/StoreMenuService.java
  17. 4 3
      alien-store/src/main/java/shop/alien/store/service/impl/LifeCouponServiceImpl.java
  18. 142 7
      alien-store/src/main/java/shop/alien/store/service/impl/StoreCommentAppealServiceImpl.java
  19. 64 7
      alien-store/src/main/java/shop/alien/store/service/impl/StoreCommentServiceImpl.java
  20. 24 0
      alien-store/src/main/java/shop/alien/store/service/impl/StoreInfoServiceImpl.java
  21. 55 39
      alien-store/src/main/java/shop/alien/store/service/impl/StoreMenuServiceImpl.java
  22. 15 2
      alien-store/src/main/java/shop/alien/store/service/impl/WebAuditServiceImpl.java

+ 12 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreComment.java

@@ -110,4 +110,16 @@ public class StoreComment extends Model<StoreComment> {
     @TableField("phone_id")
     private String phoneId;
 
+    @ApiModelProperty(value = "口味评分")
+    @TableField("taste_score")
+    private Double tasteScore;
+
+    @ApiModelProperty(value = "环境评分")
+    @TableField("en_score")
+    private Double enScore;
+
+    @ApiModelProperty(value = "服务评分")
+    @TableField("service_score")
+    private Double serviceScore;
+
 }

+ 3 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreCommentAppealLog.java

@@ -60,5 +60,8 @@ public class StoreCommentAppealLog extends Model<StoreCommentAppealLog> {
     @TableField("updated_user_id")
     private Integer updatedUserId;
 
+    @ApiModelProperty(value = "备注")
+    @TableField("log_remark")
+    private String logRemark;
 
 }

+ 16 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreInfo.java

@@ -195,4 +195,20 @@ public class StoreInfo {
 
     @TableField(exist = false)
     private String dist;
+
+    @ApiModelProperty(value = "口味评分")
+    @TableField("taste_score")
+    private Double tasteScore;
+
+    @ApiModelProperty(value = "环境评分")
+    @TableField("en_score")
+    private Double enScore;
+
+    @ApiModelProperty(value = "服务评分")
+    @TableField("service_score")
+    private Double serviceScore;
+
+    @ApiModelProperty(value = "评分")
+    @TableField("score_avg")
+    private Double scoreAvg;
 }

+ 2 - 0
alien-entity/src/main/java/shop/alien/entity/store/WebAudit.java

@@ -31,6 +31,8 @@ public class WebAudit {
 
     private String lifeActivityId;
 
+    private String couponId;
+
     private String content;
 
     private String type;

+ 63 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentAppealInfoVo.java

@@ -0,0 +1,63 @@
+package shop.alien.entity.store.vo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 评论申诉vo
+ *
+ * @author zhangchen
+ * @since 2025-08-22
+ */
+@Data
+@JsonInclude
+public class StoreCommentAppealInfoVo extends Model<StoreCommentAppealInfoVo> {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "门店id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "评论id")
+    private Integer commentId;
+
+    @ApiModelProperty(value = "商家申诉原因")
+    private String appealReason;
+
+    @ApiModelProperty(value = "图片id")
+    private String imgId;
+
+    @ApiModelProperty(value = "申诉状态: 0:待处理, 1:已驳回, 2:已同意")
+    private Integer appealStatus;
+
+    @ApiModelProperty(value = "申诉最后结果")
+    private String finalResult;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "申诉创建时间")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    private Integer updatedUserId;
+
+    @ApiModelProperty(value = "结果")
+    private Integer result;
+
+}

+ 15 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentAppealVo.java

@@ -22,6 +22,12 @@ public class StoreCommentAppealVo extends StoreCommentAppeal {
     @ApiModelProperty(value = "商家申诉图片链接")
     private List<String> imgList;
 
+    @ApiModelProperty(value = "评论图片链接")
+    private List<String> commentImgList;
+
+    @ApiModelProperty(value = "商家申诉图片id")
+    private String commentImgId;
+
     @ApiModelProperty(value = "申诉状态字符串")
     private String appealStatusStr;
 
@@ -31,6 +37,12 @@ public class StoreCommentAppealVo extends StoreCommentAppeal {
     @ApiModelProperty(value = "顾客评论星级")
     private Integer commentStar;
 
+    @ApiModelProperty(value = "评分")
+    private String score;
+
+    @ApiModelProperty(value = "其他评分")
+    private String otherScore;
+
     @ApiModelProperty(value = "顾客用户名")
     private String userName;
 
@@ -56,6 +68,9 @@ public class StoreCommentAppealVo extends StoreCommentAppeal {
     @ApiModelProperty(value = "门店状态字符串")
     private String storeTypeStr;
 
+    @ApiModelProperty(value = "申诉备注")
+    private String logRemark;
+
     @ApiModelProperty(value = "申诉流程记录")
     private List<StoreCommentAppealLogVo> storeCommentAppealLogList;
 }

+ 9 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentVo.java

@@ -45,6 +45,15 @@ public class StoreCommentVo extends StoreComment {
     @ApiModelProperty(value = "评论数")
     public Integer commitCount;
 
+    @ApiModelProperty(value = "是否申诉(0否/1是)")
+    public Integer appealFlag;
+
+    @ApiModelProperty(value = "申诉状态字符串")
+    private String appealStatusStr;
+
+    @ApiModelProperty(value = "申诉状态")
+    private Integer appealStatus;
+
     @ApiModelProperty(value = "标签")
     private List<String> labels;
 

+ 3 - 3
alien-entity/src/main/java/shop/alien/mapper/StoreCommentAppealMapper.java

@@ -26,10 +26,10 @@ public interface StoreCommentAppealMapper extends BaseMapper<StoreCommentAppeal>
      * @param queryWrapper 查询条件
      * @return IPage<StoreCommentAppealVo>
      */
-    @Select("select a.*, b.dict_detail appeal_status_str, c.comment_content, c.comment_star, d.user_name, d.user_image, e.store_name, f.phone store_phone, f.name store_contact, e.store_type " +
+    @Select("select a.*, b.dict_detail appeal_status_str, c.comment_content, c.comment_star, c.score, c.other_score, d.user_name, d.user_image, e.store_name, f.phone store_phone, f.name store_contact, e.store_type " +
             "from store_comment_appeal a " +
             "left join store_dictionary b on a.appeal_status = b.dict_id and b.type_name = 'appealStatus' and b.delete_flag = 0 " +
-            "left join store_comment c on a.comment_id = c.id and c.delete_flag = 0 " +
+            "left join store_comment c on a.comment_id = c.id " +
             "left join life_user d on c.user_id = d.id and d.delete_flag = 0 " +
             "left join store_info e on a.store_id = e.id and e.delete_flag = 0 " +
             "Left join store_user f on e.id = f.store_id and f.delete_flag = 0 ${ew.customSqlSegment}")
@@ -55,7 +55,7 @@ public interface StoreCommentAppealMapper extends BaseMapper<StoreCommentAppeal>
      * @param queryWrapper 查询条件
      * @return StoreCommentAppealVo
      */
-    @Select("select a.*, b.dict_detail appeal_status_str, c.comment_content, a.created_time comment_time, c.comment_star, d.user_name, e.phone store_phone, d.user_name userName, d.user_image userImage " +
+    @Select("select a.*, b.dict_detail appeal_status_str, c.comment_content, c.score, c.other_score, a.created_time comment_time, c.comment_star,c.img_id commentImgId, d.user_name, e.phone store_phone, d.user_name userName, d.user_image userImage " +
             "from store_comment_appeal a " +
             "left join store_dictionary b on a.appeal_status = b.dict_id and b.type_name = 'appealStatus' " +
             "left join store_comment c on a.comment_id = c.id  and c.delete_flag = 0 " +

+ 20 - 5
alien-entity/src/main/java/shop/alien/mapper/StoreCommentMapper.java

@@ -109,11 +109,26 @@ public interface StoreCommentMapper extends BaseMapper<StoreComment> {
      * @param storeId 门店id
      * @return StoreCommitPercentVo
      */
-    @Select("select (select COUNT(1) from store_comment where business_type = 5 and delete_flag = 0 and reply_id is null and score >= 4 and store_id = #{storeId}) highCommentCount, " +
-            "(select COUNT(1) from store_comment where business_type = 5 and delete_flag = 0 and reply_id is null and score >= 3 and score < 4 and store_id = #{storeId}) midCommentCount, " +
-            "(select COUNT(1) from store_comment where business_type = 5 and delete_flag = 0 and reply_id is null and score < 3 and store_id = #{storeId}) lowCommentCount, " +
+    @Select("select (select COUNT(1) from store_comment where business_type = 5 and delete_flag = 0 and reply_id is null and score >= 4.5 and store_id = #{storeId}) highCommentCount, " +
+            "(select COUNT(1) from store_comment where business_type = 5 and delete_flag = 0 and reply_id is null and score >= 3 and score <= 4 and store_id = #{storeId}) midCommentCount, " +
+            "(select COUNT(1) from store_comment where business_type = 5 and delete_flag = 0 and reply_id is null and score >= 0.5 and score <= 2.5 and store_id = #{storeId}) lowCommentCount, " +
             "(select COUNT(1) from store_comment where business_type = 5 and delete_flag = 0 and score is not null and store_id = #{storeId}) allCommentCount, " +
-            "(select count(1) from store_comment where business_type = 5 and reply_id is null and store_id = #{storeId}) rootCommentCount, " +
-            "(select count(DISTINCT reply_id) from store_comment where business_type = 5 and reply_id is NOT null and store_id = #{storeId}) commentCount ")
+            "(select count(1) from store_comment where business_type = 5 and reply_id is null and delete_flag = 0 and store_id = #{storeId}) rootCommentCount, " +
+            "(select count(DISTINCT reply_id) from store_comment where reply_id is NOT null and store_id = #{storeId} and phone_id like '%store%' and delete_flag = 0) commentCount ")
     StoreCommitPercentVo getCommentByStoreId(Integer storeId);
+
+    @Select("SELECT" +
+            "SUM( score ) score," +
+            "SUM( taste_score ) tasteScore," +
+            "SUM( en_score ) enScore," +
+            "SUM( service_score ) serviceScore," +
+            "COUNT(0) total" +
+            "FROM" +
+            "`store_comment` " +
+            "WHERE" +
+            "business_type = 5 " +
+            "AND delete_flag = 0 " +
+            "AND reply_id IS NULL" +
+            "AND store_id = #{storeId}")
+    Map<String, String> getCommentCountAndScore(@Param("storeId") Integer storeId);
 }

+ 3 - 1
alien-entity/src/main/java/shop/alien/mapper/WebAuditMapper.java

@@ -22,7 +22,9 @@ public interface WebAuditMapper  extends BaseMapper<WebAudit> {
             "    WHEN 4 THEN\n" +
             "    '套餐' \n" +
             "    WHEN 5 THEN\n" +
-            "    '活动' ELSE '未知类型' \n" +
+            "    '活动' \n" +
+            "    WHEN 6 THEN\n" +
+            "    '代金券' ELSE '未知类型' \n" +
             "  END AS type,\n" +
             "  COUNT(*) AS typeSum \n" +
             "FROM\n" +

+ 2 - 5
alien-store/src/main/java/shop/alien/store/controller/LifeCouponController.java

@@ -28,12 +28,9 @@ public class LifeCouponController {
 
     @ApiOperation("新建代金券")
     @PostMapping("/addOrUpdateCoupon")
-    public R<Boolean> addOrUpdateCoupon(@RequestBody LifeCoupon lifeCoupon) {
+    public R<LifeCoupon> addOrUpdateCoupon(@RequestBody LifeCoupon lifeCoupon) {
         log.info("LifeCouponController.addOrUpdateCoupon?lifeCoupon={}", lifeCoupon.toString());
-        if (lifeCouponService.addOrUpdateCoupon(lifeCoupon)) {
-            return R.success("成功");
-        }
-        return R.fail("失败");
+        return  R.data(lifeCouponService.addOrUpdateCoupon(lifeCoupon));
     }
 
     /**

+ 31 - 3
alien-store/src/main/java/shop/alien/store/controller/StoreCommentAppealController.java

@@ -8,6 +8,8 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartRequest;
 import shop.alien.entity.result.R;
+import shop.alien.entity.store.StoreCommentAppeal;
+import shop.alien.entity.store.vo.StoreCommentAppealInfoVo;
 import shop.alien.entity.store.vo.StoreCommentAppealVo;
 import shop.alien.store.service.StoreCommentAppealService;
 
@@ -48,6 +50,22 @@ public class StoreCommentAppealController {
             @ApiImplicitParam(name = "storeId", value = "门店id", dataType = "Integer", paramType = "query", required = true),
             @ApiImplicitParam(name = "commentId", value = "评论id", dataType = "Integer", paramType = "query", required = true),
             @ApiImplicitParam(name = "appealReason", value = "申诉原因", dataType = "String", paramType = "query", required = true)})
+    @PostMapping("/addAppealNew")
+    public R<StoreCommentAppealInfoVo> addAppealNew(MultipartRequest multipartRequest,
+                                                 @RequestParam("storeId") Integer storeId,
+                                                 @RequestParam("commentId") Integer commentId,
+                                                 @RequestParam("appealReason") String appealReason) {
+        Set<String> fileNameSet = multipartRequest.getMultiFileMap().keySet();
+        log.info("StoreCommentAppealController.addAppealNew?multipartRequest={}&storeId={}&commentId={}&appealReason={}", fileNameSet, storeId, commentId, appealReason);
+        return R.data(storeCommentAppealService.addAppealNew(multipartRequest, storeId, commentId, appealReason));
+    }
+
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "商家端-新增申诉(0:申诉成功, 1:申诉失败, 2:申诉已存在)")
+    @ApiImplicitParams({@ApiImplicitParam(name = "multipartRequest", value = "文件", dataType = "File", paramType = "query", required = true),
+            @ApiImplicitParam(name = "storeId", value = "门店id", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "commentId", value = "评论id", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "appealReason", value = "申诉原因", dataType = "String", paramType = "query", required = true)})
     @PostMapping("/addAppeal")
     public R<Integer> addAppeal(MultipartRequest multipartRequest,
                                 @RequestParam("storeId") Integer storeId,
@@ -96,9 +114,9 @@ public class StoreCommentAppealController {
             @ApiImplicitParam(name = "appealStatus", value = "申诉状态: 0:待处理, 1:已驳回, 2:已同意", dataType = "String", paramType = "query")
     })
     @GetMapping("/setAppealStatus")
-    public R<Boolean> setAppealStatus(Integer id, Integer appealStatus) {
-        log.info("StoreCommentAppealController.setAppealStatus?id={}&appealStatus={}", id, appealStatus);
-        if (storeCommentAppealService.setAppealStatus(id, appealStatus)) {
+    public R<Boolean> setAppealStatus(Integer id, Integer appealStatus, @RequestParam(required = false, defaultValue = "") String logRemark) {
+        log.info("StoreCommentAppealController.setAppealStatus?id={}&appealStatus={}&logRemark={}", id, appealStatus, logRemark);
+        if (storeCommentAppealService.setAppealStatus(id, appealStatus, logRemark)) {
             return R.success("修改申诉状态成功");
         }
         return R.fail("修改申诉状态失败");
@@ -111,4 +129,14 @@ public class StoreCommentAppealController {
         log.info("StoreCommentAppealController.exportToExcel");
         return storeCommentAppealService.exportToExcel();
     }
+
+    @ApiOperationSupport(order = 7)
+    @ApiOperation("申诉历史各状态数量")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "storeId", value = "门店id", dataType = "Integer", paramType = "query", required = true)})
+    @GetMapping("/getAppealHistoryCountStatus")
+    public R getAppealHistoryCountStatus(Integer storeId) {
+        log.info("StoreCommentAppealController.getAppealHistoryCountStatus?storeId={}", storeId);
+        return R.data(storeCommentAppealService.getAppealHistoryCountStatus(storeId));
+    }
 }

+ 22 - 9
alien-store/src/main/java/shop/alien/store/controller/StoreMenuController.java

@@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
+import shop.alien.entity.store.LifeLikeRecord;
 import shop.alien.entity.store.StoreMenu;
 import shop.alien.entity.store.vo.StoreMenuVo;
 import shop.alien.store.service.StoreMenuService;
@@ -55,10 +56,10 @@ public class StoreMenuController {
     public R<String> delete(@RequestParam(value = "ids") List<Integer> ids, @RequestParam(value = "dishType") int dishType) {
         log.info("StoreRecommendController.delete?ids={}", ids);
         boolean flag = false;
-        flag =  storeMenuService.deleteMenu(ids, dishType);
-        if(flag){
+        flag = storeMenuService.deleteMenu(ids, dishType);
+        if (flag) {
             return R.success("删除成功");
-        }else{
+        } else {
             return R.fail("删除失败");
         }
     }
@@ -79,10 +80,10 @@ public class StoreMenuController {
         log.info("StoreRecommendController.getSortMenuInfo?storeMenuVo={}", storeMenuVo);
         Boolean flag = false;
         flag = storeMenuService.getSortMenuInfo(storeMenuVo);
-        if(flag){
-             return R.success("已更新排序");
-        }else{
-             return R.fail("排序失败");
+        if (flag) {
+            return R.success("已更新排序");
+        } else {
+            return R.fail("排序失败");
         }
     }
 
@@ -93,9 +94,9 @@ public class StoreMenuController {
         log.info("StoreRecommendController.saveMenuSort?storeMenuList={}", storeMenuList);
         Boolean flag = false;
         flag = storeMenuService.saveMenuSort(storeMenuList);
-        if(flag){
+        if (flag) {
             return R.success("已更新排序");
-        }else{
+        } else {
             return R.fail("排序失败");
         }
     }
@@ -110,4 +111,16 @@ public class StoreMenuController {
         log.info("StoreRecommendController.getMenuCountByStoreId?id={}", storeId);
         return R.data(storeMenuService.getMenuCountByStoreId(storeId));
     }
+
+    @ApiOperation("获取用户对该菜品是否点赞")
+    @ApiOperationSupport(order = 8)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "userId", value = "用户id", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "menuId", value = "菜品id", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping("/getMenuLikeStatus")
+    public R<Boolean> getMenuLikeStatus(String userId, Integer menuId) {
+        log.info("StoreRecommendController.getMenuLikeStatus?userId={}&menuId={}", userId, menuId);
+        return R.data(storeMenuService.getMenuLikeStatus(userId, menuId));
+    }
 }

+ 1 - 1
alien-store/src/main/java/shop/alien/store/service/LifeCouponService.java

@@ -16,7 +16,7 @@ import java.util.Map;
  */
 public interface LifeCouponService extends IService<LifeCoupon> {
 
-    boolean addOrUpdateCoupon(LifeCoupon lifeCoupon);
+    LifeCoupon addOrUpdateCoupon(LifeCoupon lifeCoupon);
 
     /**
      * 修改库存数量

+ 23 - 1
alien-store/src/main/java/shop/alien/store/service/StoreCommentAppealService.java

@@ -5,8 +5,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.multipart.MultipartRequest;
 import shop.alien.entity.store.StoreCommentAppeal;
+import shop.alien.entity.store.vo.StoreCommentAppealInfoVo;
 import shop.alien.entity.store.vo.StoreCommentAppealVo;
 
+import java.util.Map;
+
 /**
  * 评论申诉表 服务类
  *
@@ -27,6 +30,12 @@ public interface StoreCommentAppealService extends IService<StoreCommentAppeal>
     IPage<StoreCommentAppealVo> getAppealHistory(Integer pageNum, Integer pageSize, Integer storeId, String appealStatus);
 
     /**
+     * 申诉历史各状态数量
+     * @param storeId      门店id
+     */
+    Map<String, Integer> getAppealHistoryCountStatus(Integer storeId);
+
+    /**
      * 新增申诉
      *
      * @param multipartRequest 文件
@@ -38,6 +47,19 @@ public interface StoreCommentAppealService extends IService<StoreCommentAppeal>
     Integer addAppeal(MultipartRequest multipartRequest, Integer storeId, Integer commentId, String appealReason);
 
     /**
+     * 新增申诉
+     *
+     * @param multipartRequest 文件
+     * @param storeId          门店id
+     * @param commentId        评论id
+     * @param appealReason     申诉原因
+     * @return Integer(0 : 申诉成功, 1 : 申诉失败, 2 : 申诉已存在, 3 : 文本内容异常)
+     */
+    StoreCommentAppealInfoVo addAppealNew(MultipartRequest multipartRequest, Integer storeId, Integer commentId, String appealReason);
+
+
+
+    /**
      * 申诉详情
      *
      * @param id 申诉id
@@ -65,7 +87,7 @@ public interface StoreCommentAppealService extends IService<StoreCommentAppeal>
      * @param appealStatus 申诉状态: 0:待处理, 1:已驳回, 2:已同意
      * @return boolean
      */
-    boolean setAppealStatus(Integer id, Integer appealStatus);
+    boolean setAppealStatus(Integer id, Integer appealStatus,String logRemark);
 
     /**
      * 导出Excel

+ 9 - 0
alien-store/src/main/java/shop/alien/store/service/StoreMenuService.java

@@ -67,5 +67,14 @@ public interface StoreMenuService extends IService<StoreMenu> {
 
 
     StoreMenuVo getMenuCountByStoreId(int storeId);
+
+    /**
+     * 获取用户对该菜品是否点赞
+     *
+     * @param userId  用户id
+     * @param menuId 菜品id
+     * @return boolean
+     */
+    boolean getMenuLikeStatus(String userId, Integer menuId);
 }
 

+ 4 - 3
alien-store/src/main/java/shop/alien/store/service/impl/LifeCouponServiceImpl.java

@@ -62,7 +62,7 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
 
 
     @Override
-    public boolean addOrUpdateCoupon(LifeCoupon lifeCoupon) {
+    public LifeCoupon addOrUpdateCoupon(LifeCoupon lifeCoupon) {
 
         // 添加优惠tag
         //获取经营板块id
@@ -101,10 +101,11 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
         if (StringUtils.isEmpty(lifeCoupon.getId())) {
             lifeCoupon.setType(1);
             lifeCoupon.setCouponCode(UniqueRandomNumGenerator.generateUniqueCode(12));
-            return this.save(lifeCoupon);
+            this.save(lifeCoupon);
         } else {
-            return this.updateById(lifeCoupon);
+            this.updateById(lifeCoupon);
         }
+        return lifeCoupon;
     }
 
     /**

+ 142 - 7
alien-store/src/main/java/shop/alien/store/service/impl/StoreCommentAppealServiceImpl.java

@@ -2,10 +2,14 @@ package shop.alien.store.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -13,11 +17,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartRequest;
-import shop.alien.entity.store.StoreCommentAppeal;
-import shop.alien.entity.store.StoreCommentAppealLog;
-import shop.alien.entity.store.StoreDictionary;
-import shop.alien.entity.store.StoreImg;
+import shop.alien.entity.store.*;
 import shop.alien.entity.store.excelVo.util.ExcelExporter;
+import shop.alien.entity.store.vo.StoreCommentAppealLogVo;
+import shop.alien.entity.store.vo.StoreCommentAppealInfoVo;
 import shop.alien.entity.store.vo.StoreCommentAppealVo;
 import shop.alien.mapper.*;
 import shop.alien.store.service.StoreCommentAppealService;
@@ -87,6 +90,20 @@ public class StoreCommentAppealServiceImpl extends ServiceImpl<StoreCommentAppea
         return storeCommentAppealPage;
     }
 
+    @Override
+    public Map<String, Integer> getAppealHistoryCountStatus(Integer storeId) {
+        Map<String, Integer> map = new HashMap<>();
+        //全部
+        map.put("-1", storeCommentAppealMapper.selectCount(new LambdaQueryWrapper<StoreCommentAppeal>().eq(StoreCommentAppeal::getStoreId, storeId).eq(StoreCommentAppeal::getDeleteFlag, 0)));
+        //审核中
+        map.put("0", storeCommentAppealMapper.selectCount(new LambdaQueryWrapper<StoreCommentAppeal>().eq(StoreCommentAppeal::getStoreId, storeId).eq(StoreCommentAppeal::getDeleteFlag, 0).eq(StoreCommentAppeal::getAppealStatus, 0)));
+        //驳回
+        map.put("1", storeCommentAppealMapper.selectCount(new LambdaQueryWrapper<StoreCommentAppeal>().eq(StoreCommentAppeal::getStoreId, storeId).eq(StoreCommentAppeal::getDeleteFlag, 0).eq(StoreCommentAppeal::getAppealStatus, 1)));
+        // 通过
+        map.put("2", storeCommentAppealMapper.selectCount(new LambdaQueryWrapper<StoreCommentAppeal>().eq(StoreCommentAppeal::getStoreId, storeId).eq(StoreCommentAppeal::getDeleteFlag, 0).eq(StoreCommentAppeal::getAppealStatus, 2)));
+        return map;
+    }
+
     /**
      * 新增申诉
      *
@@ -160,6 +177,91 @@ public class StoreCommentAppealServiceImpl extends ServiceImpl<StoreCommentAppea
     }
 
     /**
+     * 新增申诉
+     *
+     * @param multipartRequest 文件
+     * @param storeId          门店id
+     * @param commentId        评论id
+     * @param appealReason     申诉原因
+     * @return Integer(0 : 申诉成功, 1 : 申诉失败, 2 : 申诉已存在, 3 : 文本内容异常)
+     */
+    @Override
+    public StoreCommentAppealInfoVo addAppealNew(MultipartRequest multipartRequest, Integer storeId, Integer commentId, String appealReason) {
+        StoreCommentAppealInfoVo storeCommentAppealInfoVo = new StoreCommentAppealInfoVo();
+        try {
+            Map<String, String> checkText = TextCheckUtil.check(appealReason);
+            // todo 暂时去掉校验,防止校验不通过
+//            if (null == checkText || checkText.get("result").equals("1")) {
+//                storeCommentAppealInfoVo.setResult(3);
+//                return storeCommentAppealInfoVo;
+//            }
+            List<String> fileNameSet = new ArrayList<>(multipartRequest.getMultiFileMap().keySet());
+            LambdaQueryWrapper<StoreCommentAppeal> wrapper = new LambdaQueryWrapper<>();
+            //待审批, 已通过
+            List<Integer> list = new ArrayList<>();
+            list.add(0);
+            list.add(2);
+            wrapper.eq(StoreCommentAppeal::getStoreId, storeId)
+                    .eq(StoreCommentAppeal::getCommentId, commentId)
+                    .in(StoreCommentAppeal::getAppealStatus, list)
+                    .orderByDesc(StoreCommentAppeal::getCreatedTime)
+                    .last("limit 1");
+            if (this.getOne(wrapper) != null) {
+                storeCommentAppealInfoVo.setResult(2);
+                return storeCommentAppealInfoVo;
+            }
+            /*if (this.getOne(wrapper) != null) {
+                return 2;
+            }*/
+            StoreCommentAppeal storeCommentAppeal = new StoreCommentAppeal();
+            StringBuilder imgId = new StringBuilder();
+            for (int i = 0; i < fileNameSet.size(); i++) {
+                MultipartFile multipartFile = multipartRequest.getFileMap().get(fileNameSet.get(i));
+                if (null != multipartFile) {
+                    StoreImg storeImg = new StoreImg();
+                    storeImg.setStoreId(storeId);
+                    storeImg.setImgType(9);
+                    storeImg.setImgSort(i + 1);
+                    storeImg.setImgUrl(fileUploadUtil.uploadOneFile(multipartFile));
+                    storeImgMapper.insert(storeImg);
+                    imgId.append(storeImg.getId()).append(",");
+                }
+            }
+            if (!imgId.toString().isEmpty()) {
+                storeCommentAppeal.setImgId(imgId.substring(0, imgId.length() - 1));
+            }
+            storeCommentAppeal.setStoreId(storeId);
+            storeCommentAppeal.setCommentId(commentId);
+            storeCommentAppeal.setAppealReason(appealReason);
+            storeCommentAppeal.setAppealStatus(0);
+
+            int insertResult = storeCommentAppealMapper.insert(storeCommentAppeal);
+            boolean storeCommentAppealSave = insertResult > 0;
+
+            BeanUtils.copyProperties(storeCommentAppeal, storeCommentAppealInfoVo);
+            //商家申诉
+            StoreCommentAppealLog storeCommentAppealLog = new StoreCommentAppealLog();
+            storeCommentAppealLog.setAppealId(storeCommentAppeal.getId());
+            storeCommentAppealLog.setProcessType(0);
+            storeCommentAppealLog.setDeleteFlag(0);
+            storeCommentAppealLog.setCreatedTime(storeCommentAppeal.getCreatedTime());
+            boolean result = storeCommentAppealSave && storeCommentAppealLogMapper.insert(storeCommentAppealLog) > 0;
+            //系统审核
+            StoreCommentAppealLog storeCommentAppealLogSystem = new StoreCommentAppealLog();
+            storeCommentAppealLogSystem.setAppealId(storeCommentAppeal.getId());
+            storeCommentAppealLogSystem.setProcessType(1);
+            storeCommentAppealLogSystem.setDeleteFlag(0);
+            storeCommentAppealLogSystem.setCreatedTime(storeCommentAppeal.getCreatedTime());
+            boolean resultSystem = storeCommentAppealSave && storeCommentAppealLogMapper.insert(storeCommentAppealLogSystem) > 0;
+            storeCommentAppealInfoVo.setResult(result && resultSystem ? 0 : 1);
+        } catch (Exception e) {
+            storeCommentAppealInfoVo.setResult(1);
+            return storeCommentAppealInfoVo;
+        }
+        return storeCommentAppealInfoVo;
+    }
+
+    /**
      * 申诉详情
      *
      * @param id 申诉id
@@ -170,7 +272,36 @@ public class StoreCommentAppealServiceImpl extends ServiceImpl<StoreCommentAppea
         QueryWrapper<StoreCommentAppealVo> storeCommentAppealVoQueryWrapper = new QueryWrapper<>();
         storeCommentAppealVoQueryWrapper.eq("a.id", id).eq("a.delete_flag", 0);
         StoreCommentAppealVo commentDetail = storeCommentAppealMapper.getCommentDetail(storeCommentAppealVoQueryWrapper);
-        commentDetail.setStoreCommentAppealLogList(storeCommentAppealLogMapper.getStoreCommentAppealLogVo(commentDetail.getId()));
+
+        String[] split = commentDetail.getImgId().split(",");
+        List<String> imgList = new ArrayList<>();
+        for (String s : split) {
+            StoreImg storeImg = storeImgMapper.selectById(s);
+            if (null != storeImg) {
+                imgList.add(storeImg.getImgUrl());
+            }
+        }
+        commentDetail.setImgList(imgList);
+
+        if (StringUtils.isNotEmpty(commentDetail.getCommentImgId())) {
+            String[] split2 = commentDetail.getCommentImgId().split(",");
+            List<String> imgList2 = new ArrayList<>();
+            for (String s : split2) {
+                StoreImg storeImg = storeImgMapper.selectById(s);
+                if (null != storeImg) {
+                    imgList2.add(storeImg.getImgUrl());
+                }
+            }
+            commentDetail.setCommentImgList(imgList2);
+        } else {
+            commentDetail.setCommentImgList(new ArrayList<>());
+        }
+
+        List<StoreCommentAppealLogVo> storeCommentAppealLogVo = storeCommentAppealLogMapper.getStoreCommentAppealLogVo(commentDetail.getId());
+        commentDetail.setStoreCommentAppealLogList(storeCommentAppealLogVo);
+        if (ObjectUtils.isNotEmpty(storeCommentAppealLogVo)) {
+            commentDetail.setLogRemark(storeCommentAppealLogVo.get(storeCommentAppealLogVo.size() - 1).getLogRemark());
+        }
         return commentDetail;
     }
 
@@ -242,7 +373,7 @@ public class StoreCommentAppealServiceImpl extends ServiceImpl<StoreCommentAppea
      * @return boolean
      */
     @Override
-    public boolean setAppealStatus(Integer id, Integer appealStatus) {
+    public boolean setAppealStatus(Integer id, Integer appealStatus, String logRemark) {
         StoreCommentAppeal storeCommentAppeal = new StoreCommentAppeal();
         storeCommentAppeal.setId(id);
         storeCommentAppeal.setAppealStatus(appealStatus);
@@ -256,7 +387,10 @@ public class StoreCommentAppealServiceImpl extends ServiceImpl<StoreCommentAppea
             case 2:
                 storeCommentAppeal.setFinalResult("已同意");
                 //删除原评论
-                storeCommentMapper.deleteById(this.getById(id).getCommentId());
+                StoreCommentAppeal byId = this.getById(id);
+                storeCommentMapper.deleteById(byId.getCommentId());
+                //删除原评论下的评论
+                storeCommentMapper.update(null, new LambdaUpdateWrapper<StoreComment>().eq(StoreComment::getReplyId, byId.getCommentId()).set(StoreComment::getDeleteFlag, 1));
                 break;
         }
         //商家申诉
@@ -269,6 +403,7 @@ public class StoreCommentAppealServiceImpl extends ServiceImpl<StoreCommentAppea
         }
         storeCommentAppealLog.setDeleteFlag(0);
         storeCommentAppealLog.setCreatedTime(new Date());
+        storeCommentAppealLog.setLogRemark(logRemark);
         storeCommentAppealLogMapper.insert(storeCommentAppealLog);
         return this.updateById(storeCommentAppeal);
     }

+ 64 - 7
alien-store/src/main/java/shop/alien/store/service/impl/StoreCommentServiceImpl.java

@@ -1,19 +1,25 @@
 package shop.alien.store.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartRequest;
 import shop.alien.entity.store.*;
+import shop.alien.entity.store.vo.LifeCouponVo;
+import shop.alien.entity.store.vo.StoreCommentAppealVo;
 import shop.alien.entity.store.vo.StoreCommentVo;
 import shop.alien.entity.store.vo.StoreCommitPercentVo;
 import shop.alien.mapper.*;
@@ -22,6 +28,9 @@ import shop.alien.store.util.FileUploadUtil;
 import shop.alien.util.common.DateUtils;
 import shop.alien.util.common.netease.ImageCheckUtil;
 import shop.alien.util.common.netease.TextCheckUtil;
+import shop.alien.util.common.safe.TextModerationResultVO;
+import shop.alien.util.common.safe.TextModerationUtil;
+import shop.alien.util.common.safe.TextReviewServiceEnum;
 
 import java.io.IOException;
 import java.math.BigDecimal;
@@ -55,6 +64,13 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
 
     private final LifeUserMapper lifeUserMapper;
 
+    private final StoreCommentAppealMapper storeCommentAppealMapper;
+
+    private final StoreInfoMapper storeInfoMapper;
+
+    @Autowired
+    private TextModerationUtil textModerationUtil;
+
     /**
      * 评论列表
      *
@@ -78,11 +94,11 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
         queryWrapper.eq(null != businessType, "a.business_type", businessType);
         queryWrapper.eq(null != storeId, "a.store_id", storeId);
         //好评 a>=4
-        queryWrapper.ge(null != commentLevel && 1 == commentLevel, "a.score", 4);
+        queryWrapper.ge(null != commentLevel && 1 == commentLevel, "a.score", 4.5);
         //中评 a>=2&& a<4
-        queryWrapper.ge(null != commentLevel && 2 == commentLevel, "a.score", 3).lt(null != commentLevel && 2 == commentLevel, "a.score", 4);
+        queryWrapper.ge(null != commentLevel && 2 == commentLevel, "a.score", 3).le(null != commentLevel && 2 == commentLevel, "a.score", 4);
         //差评 a<2
-        queryWrapper.lt(null != commentLevel && 3 == commentLevel, "a.score", 2);
+        queryWrapper.ge(null != commentLevel && 3 == commentLevel, "a.score", 0.5).le(null != commentLevel && 3 == commentLevel, "a.score", 2.5);
         if (null != days) {
             Date date = DateUtils.calcDays(new Date(), -days);
             queryWrapper.ge("a.created_time", DateUtils.formatDate(date, "yyyy-MM-dd"));
@@ -148,6 +164,17 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
             //低分
             storeCommentVo.setLowScore(records.get(i).getScore() <= 1);
             storeCommentVoList.add(storeCommentVo);
+
+            QueryWrapper<StoreCommentAppealVo> storeCommentAppealVoQueryWrapper = new QueryWrapper<>();
+            storeCommentAppealVoQueryWrapper.eq("a.comment_id", storeCommentVo.getId()).eq("a.delete_flag", 0).orderByDesc("a.created_time").last("limit 1");
+            StoreCommentAppealVo commentDetail = storeCommentAppealMapper.getCommentDetail(storeCommentAppealVoQueryWrapper);
+            if (ObjectUtils.isNotEmpty(commentDetail)) {
+                storeCommentVo.setAppealFlag(1);
+                storeCommentVo.setAppealStatusStr(commentDetail.getAppealStatusStr());
+                storeCommentVo.setAppealStatus(commentDetail.getAppealStatus());
+            }else {
+                storeCommentVo.setAppealFlag(0);
+            }
         }
 
         //塞图片
@@ -233,10 +260,10 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
         if (replyStatus != null) {
             if (1 == replyStatus) {
                 //只查询有回复的评论
-                collect = storeCommentVoList.stream().filter(storeCommentVo -> !storeCommentVo.getStoreComment().isEmpty()).collect(Collectors.toList());
+                collect = storeCommentVoList.stream().filter(storeCommentVo -> ObjectUtils.isNotEmpty(storeCommentVo.getStoreComment())).collect(Collectors.toList());
             } else if (2 == replyStatus) {
                 //只查询无回复的评论
-                collect = storeCommentVoList.stream().filter(storeCommentVo -> storeCommentVo.getStoreComment().isEmpty()).collect(Collectors.toList());
+                collect = storeCommentVoList.stream().filter(storeCommentVo -> ObjectUtils.isEmpty(storeCommentVo.getStoreComment())).collect(Collectors.toList());
             } else {
                 collect = storeCommentVoList;
             }
@@ -482,10 +509,18 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
     @Override
     public Integer addComment(MultipartRequest multipartRequest, Integer id, Integer businessId, Integer businessType, Integer storeId, Integer userId, Integer replyId, String commentContent, Double score, String otherScore, Integer isAnonymous, String evaluationTags, String phoneId) {
         try {
-            Map<String, String> checkText = TextCheckUtil.check(commentContent);
-            if (null == checkText || checkText.get("result").equals("1")) {
+            List<String> servicesList = Lists.newArrayList();
+            servicesList.add(TextReviewServiceEnum.COMMENT_DETECTION_PRO.getService());
+            servicesList.add(TextReviewServiceEnum.LLM_QUERY_MODERATION.getService());
+            TextModerationResultVO textCheckResult = textModerationUtil.invokeFunction(commentContent, servicesList);
+            if ("high".equals(textCheckResult.getRiskLevel())) {
                 return 2;
             }
+
+            /*Map<String, String> checkText = TextCheckUtil.check(commentContent);
+            if (null == checkText || checkText.get("result").equals("1")) {
+                return 2;
+            }*/
             StoreComment storeComment = new StoreComment();
             storeComment.setId(id);
             storeComment.setStoreId(storeId);
@@ -495,6 +530,13 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
             storeComment.setBusinessId(businessId);
             storeComment.setBusinessType(businessType);
             storeComment.setScore(score);
+
+            if (StringUtils.isNotEmpty(otherScore)) {
+                List<LifeCouponVo> lifeCouponVos = JSONArray.parseArray(otherScore, LifeCouponVo.class);
+                lifeCouponVos.stream().filter(i -> "口味".equals(i.getName())).findFirst().ifPresent(item -> storeComment.setTasteScore(Double.valueOf(item.getRateScore())));
+                lifeCouponVos.stream().filter(i -> "环境".equals(i.getName())).findFirst().ifPresent(item -> storeComment.setEnScore(Double.valueOf(item.getRateScore())));
+                lifeCouponVos.stream().filter(i -> "服务".equals(i.getName())).findFirst().ifPresent(item -> storeComment.setServiceScore(Double.valueOf(item.getRateScore())));
+            }
             storeComment.setOtherScore(otherScore);
             storeComment.setIsAnonymous(isAnonymous);
             storeComment.setEvaluationTags(evaluationTags);
@@ -534,6 +576,21 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
                 }
             }
             storeComment.setCreatedUserId(storeComment.getUserId());
+
+            Map<String, String> commentCountAndScore = storeCommentMapper.getCommentCountAndScore(storeId);
+            double total = StringUtils.isNotEmpty(commentCountAndScore.get("total")) ? Double.parseDouble(commentCountAndScore.get("total")) : 0;
+            double scoreAvg = StringUtils.isNotEmpty(commentCountAndScore.get("score")) ? Double.parseDouble(commentCountAndScore.get("score")) / total : 0;
+            double tasteScore = StringUtils.isNotEmpty(commentCountAndScore.get("tasteScore")) ? Double.parseDouble(commentCountAndScore.get("tasteScore")) / total : 0;
+            double enScore = StringUtils.isNotEmpty(commentCountAndScore.get("enScore")) ? Double.parseDouble(commentCountAndScore.get("enScore")) / total : 0;
+            double serviceScore = StringUtils.isNotEmpty(commentCountAndScore.get("serviceScore")) ? Double.parseDouble(commentCountAndScore.get("serviceScore")) / total : 0;
+            StoreInfo storeInfo = new StoreInfo();
+            storeInfo.setId(storeId);
+            storeInfo.setScoreAvg(scoreAvg);
+            storeInfo.setTasteScore(tasteScore);
+            storeInfo.setEnScore(enScore);
+            storeInfo.setServiceScore(serviceScore);
+            storeInfoMapper.updateById(storeInfo);
+
             return this.save(storeComment) ? 0 : 1;
         } catch (Exception e) {
             log.error("StoreCommentService.userComment ERROR Msg={}", e.getMessage());

+ 24 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreInfoServiceImpl.java

@@ -1357,6 +1357,30 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
                 queryWrapper.orderByDesc("collect_num");
             }
         }
+
+        if (ObjectUtils.isNotEmpty(vo.getKwyx())) {
+            if (vo.getKwyx() == 1) {
+                queryWrapper.orderByDesc("taste_score");
+            }
+        }
+
+        if (ObjectUtils.isNotEmpty(vo.getHjyx())) {
+            if (vo.getHjyx() == 1) {
+                queryWrapper.orderByDesc("en_score");
+            }
+        }
+
+        if (ObjectUtils.isNotEmpty(vo.getFwyx())) {
+            if (vo.getFwyx() == 1) {
+                queryWrapper.orderByDesc("service_score");
+            }
+        }
+
+        if (ObjectUtils.isNotEmpty(vo.getHpyx())) {
+            if (vo.getHpyx() == 1) {
+                queryWrapper.orderByDesc("score_avg");
+            }
+        }
         queryWrapper.orderByAsc("dist");
         storeInfoIPage = storeInfoMapper.getPageForDistance(page, lon + "," + lat, queryWrapper);
         List<StoreInfoVo> storeInfoVoList = storeInfoIPage.getRecords();

+ 55 - 39
alien-store/src/main/java/shop/alien/store/service/impl/StoreMenuServiceImpl.java

@@ -53,10 +53,10 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
     @Override
     public List<StoreMenuVo> getStoreMenu(Integer storeId, Integer dishType, String phoneId) {
 
-        if(dishType == 0){
+        if (dishType == 0) {
             List<StoreMenuVo> collect = storeMenuMapper.getStoreMenuList(storeId, null);
             return collect.stream().sorted(Comparator.comparing(StoreMenuVo::getSort)).collect(Collectors.toList());
-        }else {
+        } else {
             List<StoreMenuVo> collect = storeMenuMapper.getStoreMenuList(storeId, dishType);
             collect.forEach(item -> {
                 if (StringUtils.isNotEmpty(phoneId)) {
@@ -87,6 +87,7 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
 
     /**
      * 新增或修改门店菜品
+     *
      * @param storeMenu
      * @return
      */
@@ -95,36 +96,37 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
         boolean flag = false;
         LambdaQueryWrapper<StoreMenu> storeMenuLambdaQueryWrapper = new LambdaQueryWrapper<>();
         //修改菜品
-        if(storeMenu.getId()!=null){
+        if (storeMenu.getId() != null) {
             flag = this.updateById(storeMenu);
-            if(!flag){
+            if (!flag) {
                 log.error("菜单修改失败");
                 return R.fail("菜单修改失败");
             }
             return R.success("菜单修改成功");
-        }else{//新增菜品
-           if(StringUtils.isEmpty(storeMenu.getDishName())){
-               return R.fail("请输入菜品名称");
-           }
-           storeMenuLambdaQueryWrapper.eq(StoreMenu::getStoreId,storeMenu.getStoreId());
-           List<StoreMenu> menuList = this.list(storeMenuLambdaQueryWrapper);
-           if(CollectionUtil.isNotEmpty(menuList)){
-              int maxSort = menuList.stream().map(StoreMenu::getSort).reduce(Integer::max).get();
-               storeMenu.setSort(maxSort+1);
-           }else{
-               storeMenu.setSort(1);
-           }
+        } else {//新增菜品
+            if (StringUtils.isEmpty(storeMenu.getDishName())) {
+                return R.fail("请输入菜品名称");
+            }
+            storeMenuLambdaQueryWrapper.eq(StoreMenu::getStoreId, storeMenu.getStoreId());
+            List<StoreMenu> menuList = this.list(storeMenuLambdaQueryWrapper);
+            if (CollectionUtil.isNotEmpty(menuList)) {
+                int maxSort = menuList.stream().map(StoreMenu::getSort).reduce(Integer::max).get();
+                storeMenu.setSort(maxSort + 1);
+            } else {
+                storeMenu.setSort(1);
+            }
             //保存菜品
             flag = this.save(storeMenu);
-           if(!flag){
-               return R.fail("菜品新增失败");
-           }
+            if (!flag) {
+                return R.fail("菜品新增失败");
+            }
         }
         return R.success("新增菜品成功");
     }
 
     /**
      * 新增或修改门店菜品new
+     *
      * @param storeMenuVo
      * @return
      */
@@ -133,7 +135,7 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
         boolean flag = false;
         LambdaQueryWrapper<StoreMenu> storeMenuLambdaQueryWrapper = new LambdaQueryWrapper<>();
         int imgId = 0;
-        if (storeMenuVo.getImgId() == null ||storeMenuVo.getImgId() == 0) {
+        if (storeMenuVo.getImgId() == null || storeMenuVo.getImgId() == 0) {
             StoreImg storeImg = new StoreImg();
             storeImg.setStoreId(storeMenuVo.getStoreId());
             storeImg.setImgType(7);
@@ -147,13 +149,13 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
 
         // 封装storeMenu参数
         StoreMenu storeMenu = new StoreMenu();
-        BeanUtils.copyProperties(storeMenuVo,storeMenu);
+        BeanUtils.copyProperties(storeMenuVo, storeMenu);
         storeMenu.setImgId(imgId);
 
         //修改菜品
-        if(storeMenu.getId()!=null){
+        if (storeMenu.getId() != null) {
             flag = this.updateById(storeMenu);
-            if(!flag){
+            if (!flag) {
                 log.error("菜单修改失败");
                 return R.fail("菜单修改失败");
             }
@@ -161,21 +163,21 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
         } else {
             //新增菜品
             // 校验菜品参数
-            if(StringUtils.isEmpty(storeMenu.getDishName())){
+            if (StringUtils.isEmpty(storeMenu.getDishName())) {
                 return R.fail("请输入菜品名称");
             }
 
-            storeMenuLambdaQueryWrapper.eq(StoreMenu::getStoreId,storeMenu.getStoreId());
+            storeMenuLambdaQueryWrapper.eq(StoreMenu::getStoreId, storeMenu.getStoreId());
             List<StoreMenu> menuList = this.list(storeMenuLambdaQueryWrapper);
-            if(CollectionUtil.isNotEmpty(menuList)){
+            if (CollectionUtil.isNotEmpty(menuList)) {
                 int maxSort = menuList.stream().map(StoreMenu::getSort).reduce(Integer::max).get();
-                storeMenu.setSort(maxSort+1);
-            }else{
+                storeMenu.setSort(maxSort + 1);
+            } else {
                 storeMenu.setSort(1);
             }
             //保存菜品
             flag = this.save(storeMenu);
-            if(!flag){
+            if (!flag) {
                 return R.fail("菜品新增失败");
             }
         }
@@ -185,18 +187,19 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
 
     /**
      * 菜品排序信息
+     *
      * @param storeMenuVo
      * @return
      */
     @Override
     public Boolean getSortMenuInfo(StoreMenuVo storeMenuVo) {
         boolean flag = false;
-        if(CollectionUtil.isNotEmpty(storeMenuVo.getSortList())){
-            for(int i = 0; i<storeMenuVo.getSortList().size(); i++ ){
+        if (CollectionUtil.isNotEmpty(storeMenuVo.getSortList())) {
+            for (int i = 0; i < storeMenuVo.getSortList().size(); i++) {
                 LambdaQueryWrapper<StoreMenu> lambdaQueryWrapper = new LambdaQueryWrapper();
-                lambdaQueryWrapper.eq(StoreMenu::getId,storeMenuVo.getSortList().get(i).getId());
+                lambdaQueryWrapper.eq(StoreMenu::getId, storeMenuVo.getSortList().get(i).getId());
                 StoreMenu storeMenu = this.getOne(lambdaQueryWrapper);
-                storeMenu.setSort(i+1);
+                storeMenu.setSort(i + 1);
                 flag = this.updateById(storeMenu);
             }
         }
@@ -210,6 +213,7 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
 
     /**
      * 删除菜品或推荐菜 根据类型区分
+     *
      * @param ids
      * @param dishType 0:菜品 1:推荐菜
      * @return
@@ -218,12 +222,12 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
     public Boolean deleteMenu(List<Integer> ids, int dishType) {
         QueryWrapper<StoreMenu> queryWrapperMenu = new QueryWrapper<>();
         boolean flag = false;
-        if(dishType == 0){
+        if (dishType == 0) {
             flag = this.removeByIds(ids);
-        }else{
-            queryWrapperMenu.in("id",ids);
+        } else {
+            queryWrapperMenu.in("id", ids);
             List<StoreMenu> storeMenuList = baseMapper.selectList(queryWrapperMenu);
-            storeMenuList.forEach(item->{
+            storeMenuList.forEach(item -> {
                 item.setDishType(0);
                 this.updateById(item);
             });
@@ -239,12 +243,12 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
         updateWrapper.eq(StoreMenu::getStoreId, storeId);
         updateWrapper.eq(StoreMenu::getDeleteFlag, 0);
         List<StoreMenu> storeMenuList = storeMenuMapper.selectList(updateWrapper);
-        if(CollectionUtils.isNotEmpty(storeMenuList)) {
+        if (CollectionUtils.isNotEmpty(storeMenuList)) {
             storeMenuVo.setMenuCount(storeMenuList.size());
             Map<Integer, List<StoreMenu>> groupByDishType = storeMenuList.stream()
                     .collect(Collectors.groupingBy(StoreMenu::getDishType));
             List<StoreMenu> suggestList = groupByDishType.get(1);
-            if(CollectionUtils.isNotEmpty(suggestList)) {
+            if (CollectionUtils.isNotEmpty(suggestList)) {
                 storeMenuVo.setSuggestCount(suggestList.size());
             } else {
                 storeMenuVo.setSuggestCount(0);
@@ -255,4 +259,16 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
         }
         return storeMenuVo;
     }
+
+    /**
+     * 获取用户对该菜品是否点赞
+     *
+     * @param userId 用户id
+     * @param menuId 菜品id
+     * @return boolean
+     */
+    @Override
+    public boolean getMenuLikeStatus(String userId, Integer menuId) {
+        return lifeLikeRecordMapper.selectCount(new QueryWrapper<LifeLikeRecord>().eq("dianzan_id", userId).eq("huifu_id", menuId).eq("delete_flag", 0)) > 0;
+    }
 }

+ 15 - 2
alien-store/src/main/java/shop/alien/store/service/impl/WebAuditServiceImpl.java

@@ -34,10 +34,13 @@ public class WebAuditServiceImpl extends ServiceImpl<WebAuditMapper, WebAudit> i
 
     private final StoreCommentAppealMapper storeCommentAppealMapper;
 
+    private final LifeCouponMapper lifeCouponMapper;
+
     private final LifeGroupPackageMapper lifeGroupPackageMapper;
 
     private final LifeActivityMapper lifeActivityMapper;
 
+
     @Override
     public IPage<WebAudit> getOrderList(int page, int size, String status, String type) {
         IPage<WebAudit> storePage = new Page<>(page, size);
@@ -64,7 +67,9 @@ public class WebAuditServiceImpl extends ServiceImpl<WebAuditMapper, WebAudit> i
                 item.setType("套餐");
             } else if ("5".equals(item.getType())) {
                 item.setType("活动");
-            } else {
+            }else if ("6".equals(item.getType())) {
+                item.setType("代金券");
+            }  else {
                 item.setType("未知类型");
             }
         });
@@ -124,9 +129,14 @@ public class WebAuditServiceImpl extends ServiceImpl<WebAuditMapper, WebAudit> i
             newWebAudit.setLifeActivityId(countColumn.getLifeActivityId());
             LifeActivity lifeActivity = lifeActivityMapper.selectById(countColumn.getLifeActivityId());
             newWebAudit.setContent(lifeActivity.getName());
+        }
 
-
+        if (countColumn.getCouponId() != null) {
+            newWebAudit.setCouponId(countColumn.getCouponId());
+            LifeCoupon lifeCoupon = lifeCouponMapper.selectById(countColumn.getCouponId());
+            newWebAudit.setContent(lifeCoupon.getName());
         }
+
         newWebAudit.setCreatedTime(new Date());
         newWebAudit.setDeleteFlag(0);
         newWebAudit.setStatus("0");
@@ -161,6 +171,9 @@ public class WebAuditServiceImpl extends ServiceImpl<WebAuditMapper, WebAudit> i
         } else if ("5".equals(webAudit.getType())) {
             webAudit.setLifeActivityId(webAudit.getId());
             return webAudit;
+        } else if("6".equals(webAudit.getType())){
+            webAudit.setCouponId(webAudit.getId());
+            return webAudit;
         }
         return null;
     }