Browse Source

反馈中心开发

liude 1 year ago
parent
commit
d588be281a
17 changed files with 330 additions and 40 deletions
  1. 43 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/FeedBackReplyDTO.java
  2. 4 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantDTO.java
  3. 2 22
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/FeedBackModifyParam.java
  4. 40 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/FeedBackReplyModifyParam.java
  5. 32 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/FeedbackReplyService.java
  6. 3 1
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/FeedbackService.java
  7. 7 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/MerchantService.java
  8. 57 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/FeedbackReplyCopier.java
  9. 15 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/FeedbackReolyMapper.java
  10. 14 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/MerchantMapper.java
  11. 5 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Merchant.java
  12. 13 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/FeedbackReplyService.java
  13. 42 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/FeedbackReplyServiceImpl.java
  14. 13 3
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/FeedbackServiceImpl.java
  15. 30 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java
  16. 0 8
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsCartItemServiceImpl.java
  17. 10 5
      vehicle-server/src/main/resources/mapper/MerchantMapper.xml

+ 43 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/FeedBackReplyDTO.java

@@ -0,0 +1,43 @@
+package com.chelvc.cloud.vehicle.api.dto;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import java.io.Serializable;
+
+/**
+ * 意见反馈回复数据模型
+ *
+ * @author liude
+ * @data 2023/1/12
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class FeedBackReplyDTO implements Serializable {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 意见反馈id
+     */
+    private Long feedbackId;
+
+    /**
+     * 回复内省 1-答复 2-提出人反馈
+     */
+    private String replyType;
+
+    /**
+     * 内容
+     */
+    private String content;
+    /**
+     * 是否已提醒 0-否 1- 是
+     */
+    private String readed;
+
+}

+ 4 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantDTO.java

@@ -131,5 +131,9 @@ public class MerchantDTO implements Serializable {
      * 购物车商品信息
      */
     private List<OmsCartItemDTO> cartItems;
+    /**
+     * 营业状态 0-营业中 1-休息中
+     */
+    private String businessStatus;
 
 }

+ 2 - 22
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/FeedBackModifyParam.java

@@ -20,28 +20,18 @@ import java.util.Date;
 @NoArgsConstructor
 @AllArgsConstructor
 public class FeedBackModifyParam implements Serializable {
-    /**
-     * 主键
-     */
-    private Long id;
-
-    /**
-     * 用户ID
-     */
-    private Long userId;
-
     /**
      * 标题
      */
     @NotEmpty(message = "标题不能为空")
-    @Size(max = 255, message = "标题长度不能大于20")
+    @Size(max = 255, message = "标题长度不能大于255")
     private String title;
 
     /**
      * 内容
      */
     @NotEmpty(message = "内容不能为空")
-    @Size(max = 5000, message = "内容长度不能大于20")
+    @Size(max = 5000, message = "内容长度不能大于5000")
     private String content;
 
     /**
@@ -63,16 +53,6 @@ public class FeedBackModifyParam implements Serializable {
      * 状态  1 - 待处理 2- 已处理 3- 已完结
      */
     private String status;
-
-    /**
-     * 创建时间
-     */
-    private Date createTime;
-
-    /**
-     * 评价时间
-     */
-    private Date evaluateTime;
     /**
      * 渠道类型  0- 用户端 1-商家端
      */

+ 40 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/FeedBackReplyModifyParam.java

@@ -0,0 +1,40 @@
+package com.chelvc.cloud.vehicle.api.param;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 意见反馈回复数据模型
+ *
+ * @author liude
+ * @data 2023/1/12
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class FeedBackReplyModifyParam implements Serializable {
+
+    /**
+     * 意见反馈id
+     */
+    private Long feedbackId;
+
+    /**
+     * 回复内省 1-答复 2-提出人反馈
+     */
+    private String replyType;
+
+    /**
+     * 内容
+     */
+    private String content;
+    /**
+     * 是否已提醒 0-否 1- 是
+     */
+    private String readed;
+
+}

+ 32 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/FeedbackReplyService.java

@@ -0,0 +1,32 @@
+package com.chelvc.cloud.vehicle.api.service;
+import com.chelvc.cloud.vehicle.api.dto.FeedBackDTO;
+import com.chelvc.cloud.vehicle.api.param.FeedBackModifyParam;
+import com.chelvc.cloud.vehicle.api.param.FeedBackReplyModifyParam;
+
+import java.util.List;
+
+/**
+ * 意见反馈回复接口
+ *
+ * @author liude
+ * @data 2024/1/12
+ */
+public interface FeedbackReplyService {
+
+    /**
+     * 新增意见反馈回复
+     *
+     * @param param 新增参数
+     * @return 主键
+     */
+    Long addFeedbackReply(FeedBackReplyModifyParam param);
+
+    /**
+     * 修改意见回复反馈
+     *
+     * @param id    主键
+     * @param param 修改参数
+     */
+    void updateFeedbackReply(Long id, FeedBackReplyModifyParam param);
+
+}

+ 3 - 1
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/FeedbackService.java

@@ -2,6 +2,8 @@ package com.chelvc.cloud.vehicle.api.service;
 import com.chelvc.cloud.vehicle.api.dto.FeedBackDTO;
 import com.chelvc.cloud.vehicle.api.param.FeedBackModifyParam;
 
+import java.util.List;
+
 /**
  * 意见反馈接口
  *
@@ -30,5 +32,5 @@ public interface FeedbackService {
      * 获取意见反馈信息
      * @return
      */
-    FeedBackDTO getFeedback();
+    List<FeedBackDTO> getFeedback(String channel);
 }

+ 7 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/MerchantService.java

@@ -117,4 +117,11 @@ public interface MerchantService {
      * @return
      */
     public Pagination<MerchantDTO> getUserMineCartPaging(OmsCartItemPagingParam param);
+
+    /**
+     * 更改商家得营业状态
+     * @param merchantId 商家ID
+     * @param businessStatus 营业状态
+     */
+    public void updateMerchantBusinessStatus(Long merchantId,String businessStatus);
 }

+ 57 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/FeedbackReplyCopier.java

@@ -0,0 +1,57 @@
+package com.chelvc.cloud.vehicle.server.copier;
+import com.chelvc.cloud.vehicle.api.dto.FeedBackReplyDTO;
+import com.chelvc.cloud.vehicle.api.param.FeedBackReplyModifyParam;
+import com.chelvc.cloud.vehicle.server.entity.FeedBackReply;
+import org.mapstruct.Builder;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingTarget;
+import org.mapstruct.factory.Mappers;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 意见反馈回复拷贝接口
+ *
+ * @author liude
+ * @date 2024/1/16
+ */
+@Mapper(builder = @Builder(disableBuilder = true))
+public interface FeedbackReplyCopier {
+    /**
+     * 对象拷贝接口实例
+     */
+    FeedbackReplyCopier INSTANCE = Mappers.getMapper(FeedbackReplyCopier.class);
+
+    /**
+     * 意见反馈回复信息拷贝
+     *
+     * @param feedBackReply 意见反馈回复信息
+     * @return 意见反馈回复信息
+     */
+    FeedBackReplyDTO copying(FeedBackReply feedBackReply);
+
+    /**
+     * 意见反馈回复信息拷贝
+     *
+     * @param feedBackReplies 意见反馈回复信息集合
+     * @return 意见反馈回复信息列表
+     */
+    List<FeedBackReplyDTO> copying(Collection<FeedBackReply> feedBackReplies);
+
+    /**
+     * 意见反馈回复信息拷贝
+     *
+     * @param param 意见反馈回复更新参数
+     * @return 意见反馈回复信息
+     */
+    FeedBackReply copying(FeedBackReplyModifyParam param);
+
+    /**
+     * 意见反馈回复信息拷贝
+     *
+     * @param param    意见反馈回复更新参数
+     * @param feedBackReply 意见反馈回复信息
+     */
+    void copying(FeedBackReplyModifyParam param, @MappingTarget FeedBackReply feedBackReply);
+}

+ 15 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/FeedbackReolyMapper.java

@@ -0,0 +1,15 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.server.entity.FeedBackReply;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 意见反馈回复数据操作接口
+ *
+ * @author liude
+ * @date 2023/1/12
+ */
+@Mapper
+public interface FeedbackReolyMapper extends BaseMapper<FeedBackReply> {
+}

+ 14 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/MerchantMapper.java

@@ -74,6 +74,19 @@ public interface MerchantMapper extends BaseMapper<Merchant> {
                                         @Param("longitude")Double longitude,
                                         @Param("latitude")Double latitude, @Param("level")int level);
 
-
+    /**
+     * 查询用户名下得店铺
+     * @param userId 用户id
+     * @return
+     */
     List<Long> getMerchantIds(Long userId);
+
+    /**
+     * 更新商家营业状态
+     * @param merchantId 商家ID
+     * @param businessStatus 营业状态
+     */
+    public void updateMerchantBusinessStatus(@Param("merchantId")Long merchantId,
+                                             @Param("businessStatus")String businessStatus,
+                                             @Param("automatic")String automatic);
 }

+ 5 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Merchant.java

@@ -134,4 +134,9 @@ public class Merchant extends ModifyEntity<Long> {
      */
     @TableField(exist = false)
     private Integer distance;
+
+    /**
+     * 营业状态 0-营业中 1-休息中
+     */
+    private String businessStatus;
 }

+ 13 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/FeedbackReplyService.java

@@ -0,0 +1,13 @@
+package com.chelvc.cloud.vehicle.server.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chelvc.cloud.vehicle.server.entity.FeedBackReply;
+
+/**
+ * 意见反馈回复操作接口
+ *
+ * @author liude
+ * @date 2024/1/12
+ */
+public interface FeedbackReplyService extends IService<FeedBackReply> {
+}

+ 42 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/FeedbackReplyServiceImpl.java

@@ -0,0 +1,42 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.vehicle.api.param.FeedBackReplyModifyParam;
+import com.chelvc.cloud.vehicle.server.copier.FeedbackReplyCopier;
+import com.chelvc.cloud.vehicle.server.dao.FeedbackReolyMapper;
+import com.chelvc.cloud.vehicle.server.entity.FeedBackReply;
+import com.chelvc.cloud.vehicle.server.service.FeedbackReplyService;
+import com.chelvc.framework.base.context.SessionContextHolder;
+import com.chelvc.framework.base.util.ResourceUtils;
+import lombok.NonNull;
+import org.apache.dubbo.config.annotation.DubboService;
+import java.util.Date;
+
+/**
+ * 意见反馈回复业务操作实现
+ *
+ * @author liude
+ * @date 2024/1/16
+ */
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.FeedbackReplyService.class)
+public class FeedbackReplyServiceImpl extends ServiceImpl<FeedbackReolyMapper, FeedBackReply> implements FeedbackReplyService,
+        com.chelvc.cloud.vehicle.api.service.FeedbackReplyService {
+    @Override
+    public Long addFeedbackReply(@NonNull FeedBackReplyModifyParam param) {
+        FeedBackReply feedBackReply = FeedbackReplyCopier.INSTANCE.copying(param);
+        Long userId = SessionContextHolder.getId();
+        feedBackReply.setCreateTime(new Date());
+        feedBackReply.setCreator(userId);
+        feedBackReply.setReaded("0");
+        feedBackReply.setReplyType("0");
+        this.save(feedBackReply);
+        return feedBackReply.getId();
+    }
+
+    @Override
+    public void updateFeedbackReply(@NonNull Long id, @NonNull FeedBackReplyModifyParam param) {
+        FeedBackReply feedBackReply = ResourceUtils.required(this.getById(id), "该意见反馈回复不存在");
+        FeedbackReplyCopier.INSTANCE.copying(param, feedBackReply);
+        this.updateById(feedBackReply);
+    }
+
+ }

+ 13 - 3
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/FeedbackServiceImpl.java

@@ -11,6 +11,9 @@ import com.chelvc.framework.base.util.ResourceUtils;
 import lombok.NonNull;
 import org.apache.dubbo.config.annotation.DubboService;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * 意见反馈业务操作实现
  *
@@ -23,6 +26,10 @@ public class FeedbackServiceImpl extends ServiceImpl<FeedbackMapper, FeedBack> i
     @Override
     public Long addFeedback(@NonNull FeedBackModifyParam param) {
         FeedBack feedBack = FeedbackCopier.INSTANCE.copying(param);
+        Long userId = SessionContextHolder.getId();
+        feedBack.setCreateTime(new Date());
+        feedBack.setUserId(userId);
+        feedBack.setStatus("1");
         this.save(feedBack);
         return feedBack.getId();
     }
@@ -34,10 +41,13 @@ public class FeedbackServiceImpl extends ServiceImpl<FeedbackMapper, FeedBack> i
         this.updateById(feedBack);
     }
     @Override
-    public FeedBackDTO getFeedback(){
+    public List<FeedBackDTO> getFeedback(@NonNull String channel){
         Long userId = SessionContextHolder.getId();
-        FeedBack feedBack = this.lambdaQuery()
-                .eq(FeedBack::getUserId, userId).one();
+        List<FeedBack> feedBack = this.lambdaQuery()
+                .eq(FeedBack::getUserId, userId)
+                .eq(FeedBack::getChannel,channel)
+                .orderByDesc(FeedBack::getCreateTime)
+                .list();
         return FeedbackCopier.INSTANCE.copying(feedBack);
     }
 

+ 30 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java

@@ -39,7 +39,10 @@ import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
 
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -299,4 +302,31 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
         });
         return pagination;
     }
+
+    @Override
+    public void updateMerchantBusinessStatus(Long merchantId,String businessStatus){
+        Merchant merchant = ResourceUtils.required(this.getById(merchantId), "商家不存在");
+        this.baseMapper.updateMerchantBusinessStatus(merchantId,businessStatus,"1");
+    }
+
+    /**
+     * 每天定时更新商家得营业状态
+     */
+    @Scheduled(cron = "5 * * * * ?")
+    public void batchMerchantBusinessStatus(){
+        List<Merchant> merchantList = this.lambdaQuery().list();
+        merchantList.forEach(item -> {
+            String opening = "10:00:00,18:00:00";
+            String[] openStr = opening.split(",");
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
+            LocalTime time1 = LocalTime.parse(openStr[0], formatter);
+            LocalTime time2 = LocalTime.parse(openStr[1], formatter);
+            if (time1.isAfter(LocalTime.now()) && time2.isAfter(LocalTime.now())){
+                this.baseMapper.updateMerchantBusinessStatus(item.getId(),"0","0");
+            }else{
+                this.baseMapper.updateMerchantBusinessStatus(item.getId(),"1","0");
+            }
+        });
+
+    }
 }

+ 0 - 8
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsCartItemServiceImpl.java

@@ -1,12 +1,8 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.vehicle.api.dto.MerchantCartItemDTO;
 import com.chelvc.cloud.vehicle.api.dto.OmsCartItemDTO;
-import com.chelvc.cloud.vehicle.api.dto.UserAllCartItemDTO;
 import com.chelvc.cloud.vehicle.api.param.OmsCartItemModifyParam;
-import com.chelvc.cloud.vehicle.api.param.OmsCartItemPagingParam;
 import com.chelvc.cloud.vehicle.server.copier.CartItemCopier;
 import com.chelvc.cloud.vehicle.server.copier.MerchantCopier;
 import com.chelvc.cloud.vehicle.server.dao.OmsCartItemMapper;
@@ -15,9 +11,6 @@ import com.chelvc.cloud.vehicle.server.entity.OmsCartItem;
 import com.chelvc.cloud.vehicle.server.service.MerchantService;
 import com.chelvc.cloud.vehicle.server.service.OmsCartItemService;
 import com.chelvc.framework.base.context.SessionContextHolder;
-import com.chelvc.framework.common.model.Pagination;
-import com.chelvc.framework.common.util.StringUtils;
-import com.chelvc.framework.database.util.PagingUtils;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.dubbo.config.annotation.DubboService;
@@ -26,7 +19,6 @@ import org.springframework.context.annotation.Lazy;
 
 import java.util.Date;
 import java.util.List;
-import java.util.Objects;
 
 /**
  * 购物车Service业务层处理

+ 10 - 5
vehicle-server/src/main/resources/mapper/MerchantMapper.xml

@@ -2,14 +2,14 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.chelvc.cloud.vehicle.server.dao.MerchantMapper">
     <sql id="BASIC_MERCHANT_SELECT">
-        select mt.id, mt.user_id, mt.name, mt.logo, mt.banners, mt.liaison, mt.mobile, mt.opening, mt.address,
+        select mt.id, mt.user_id, mt.name, mt.logo, mt.banners, mt.liaison, mt.mobile, mt.opening, mt.address,mt.business_status,
         mt.score, mt.sale, mt.good_review,mt.region, mt.longitude, mt.latitude, mt.recommend, mt.status, mt.creator,
         mt.create_time,mt.updater, mt.update_time
         from `merchant` mt
     </sql>
 
     <select id="listNearbyMerchants" resultType="com.chelvc.cloud.vehicle.api.dto.MerchantDTO">
-        select mt.id, mt.name, mt.logo, mt.score, mt.sale, mt.address,
+        select mt.id, mt.name, mt.logo, mt.score, mt.sale, mt.address,mt.business_status,
         round(st_distance_sphere(
             point(mt.longitude, mt.latitude), point(#{param.longitude}, #{param.latitude})
         )) distance
@@ -19,7 +19,7 @@
     </select>
 
     <select id="listRecommendMerchants" resultType="com.chelvc.cloud.vehicle.api.dto.MerchantDTO">
-        select mt.id, mt.name, mt.logo, mt.score, mt.sale, mt.address,
+        select mt.id, mt.name, mt.logo, mt.score, mt.sale, mt.address,mt.business_status,
         round(st_distance_sphere(
             point(mt.longitude, mt.latitude), point(#{param.longitude}, #{param.latitude})
         )) distance
@@ -29,7 +29,7 @@
     </select>
 
     <select id="listSimpleMerchants" resultType="com.chelvc.cloud.vehicle.api.dto.MerchantDTO">
-        select mt.id, mt.name, mt.logo, mt.score, mt.sale, mt.address,
+        select mt.id, mt.name, mt.logo, mt.score, mt.sale, mt.address,mt.business_status,
         round(st_distance_sphere(
             point(mt.longitude, mt.latitude), point(#{longitude}, #{latitude})
         )) distance
@@ -71,7 +71,7 @@
     <select id="getMerchantById" resultType="com.chelvc.cloud.vehicle.server.entity.Merchant">
         select mt.id, mt.user_id as userId, mt.name, mt.logo, mt.banners, mt.liaison, mt.mobile,
         mt.opening, mt.address, mt.score, mt.sale, mt.good_review as goodReview,mt.region, mt.longitude,
-        mt.latitude, mt.recommend, mt.status, mt.creator,
+        mt.latitude, mt.recommend, mt.status, mt.creator,mt.business_status,
         mt.create_time as createTime,
         round(st_distance_sphere(
         point(mt.longitude, mt.latitude), point(#{param.longitude}, #{param.latitude})
@@ -128,4 +128,9 @@
         select m.id from merchant m left join oms_cart_item ca on m.id = ca.merchant_id
         where ca.id is not null and  ca.user_id = #{userId}
     </select>
+
+    <update id="updateMerchantBusinessStatus">
+        update merchant set business_status = #{businessStatus} ,automatic = #{automatic}
+        where id = #{merchantId}
+    </update>
 </mapper>