Browse Source

Merge remote-tracking branch 'origin/master'

SheepHy 5 days ago
parent
commit
b47aaf87d1
12 changed files with 144 additions and 29 deletions
  1. 7 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/my/AppEvaluateController.java
  2. 38 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/evaluate/FindEvaluatePage.java
  3. 2 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/DetailServiceImpl.java
  4. 1 6
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/stadium/StadiumConcertsVO.java
  5. 2 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppSitePlaceMapper.java
  6. 10 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/EvaluateMapper.java
  7. 2 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppSitePlaceMapper.xml
  8. 41 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/EvaluateMapper.xml
  9. 4 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IEvaluateService.java
  10. 34 5
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/EvaluateServiceImpl.java
  11. 2 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/utils/TimeRangeFinder.java
  12. 1 7
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/vo/time/NextSevenDayVo.java

+ 7 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/my/AppEvaluateController.java

@@ -12,6 +12,7 @@ import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.app.dto.PageDTO;
 import org.jeecg.modules.app.dto.evaluate.AddEvaluateDTO;
 import org.jeecg.modules.app.dto.evaluate.FindEvaluateDTO;
+import org.jeecg.modules.app.dto.evaluate.FindEvaluatePage;
 import org.jeecg.modules.system.app.dto.evaluate.FindEvaluateResponseDTO;
 import org.jeecg.modules.system.app.entity.AppOrder;
 import org.jeecg.modules.system.app.entity.Evaluate;
@@ -60,7 +61,11 @@ public class AppEvaluateController {
         if (appOrder==null){
             return Result.error("提交评价失败,未查询到订单");
         }
-        Evaluate evaluate = new Evaluate();
+        Evaluate evaluate =  evaluateService.findByOrder(appOrder.getId());
+        if (evaluate!=null) {
+            return Result.error("提交评价失败,该订单已经提交");
+        }
+        evaluate = new Evaluate();
         LoginUser principal = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         BeanUtils.copyProperties(addEvaluateDTO, evaluate);
         evaluate.setId(UuidUtils.getUUID());
@@ -76,7 +81,7 @@ public class AppEvaluateController {
     }
     @GetMapping("/findByOrderPage")
     @Operation(summary = "app订单相关评价分页查询")
-    public Result<IPage<FindEvaluateResponseDTO>> findByOrderPage(FindEvaluateDTO findEvaluateDTO) {
+    public Result<FindEvaluatePage<FindEvaluateResponseDTO>> findByOrderPage(FindEvaluateDTO findEvaluateDTO) {
         return Result.ok(evaluateService.findByOrderPage(findEvaluateDTO));
     }
 

+ 38 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/evaluate/FindEvaluatePage.java

@@ -0,0 +1,38 @@
+package org.jeecg.modules.app.dto.evaluate;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 评价专属分页
+ * @param <T>
+ */
+@Data
+public class FindEvaluatePage<T> {
+    private Long current;     // 当前页
+    private Long size;    // 每页条数
+    private Long total;       // 总记录数
+    private Long pages;       // 总页数
+    private List<T> records;     // 当前页数据
+    private BigDecimal averageScore; // 平均评分
+    private Long scoreNum; // 评价人数
+
+    // 从 IPage 构建
+    public static <T> FindEvaluatePage<T> build(IPage<T> page, BigDecimal averageScore,Long scoreNum) {
+        if (page==null){
+            return new FindEvaluatePage<>();
+        }
+        FindEvaluatePage<T> result = new FindEvaluatePage<>();
+        result.setCurrent(page.getCurrent());
+        result.setSize(page.getSize());
+        result.setTotal(page.getTotal());
+        result.setPages(page.getPages());
+        result.setRecords(page.getRecords());
+        result.setAverageScore(averageScore);
+        result.setScoreNum(scoreNum);
+        return result;
+    }
+}

+ 2 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/DetailServiceImpl.java

@@ -228,9 +228,9 @@ public class DetailServiceImpl implements IDetailService {
             List<ConcertsVO>  concertsVOList=null;
             //查询当天所有场地和场次及状态
             if (label){
-                concertsVOList= appSitePlaceMapper.findByConcertsAndTime(stadiumConcertsVO.getWeekDay(),siteId,categoryId);
+                concertsVOList= appSitePlaceMapper.findByConcertsAndTime(stadiumConcertsVO.getWeekDayAndDate(),stadiumConcertsVO.getWeekDay(),siteId,categoryId);
             }else {
-                concertsVOList= appSitePlaceMapper.findByConcerts(stadiumConcertsVO.getWeekDay(),siteId,categoryId);
+                concertsVOList= appSitePlaceMapper.findByConcerts(stadiumConcertsVO.getWeekDayDate(),stadiumConcertsVO.getWeekDay(),siteId,categoryId);
             }
 
             label=false;

+ 1 - 6
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/stadium/StadiumConcertsVO.java

@@ -1,13 +1,10 @@
 package org.jeecg.modules.app.vo.stadium;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
-import org.springframework.format.annotation.DateTimeFormat;
 
-import java.util.Date;
 import java.util.List;
 
 @Data
@@ -26,9 +23,7 @@ public class StadiumConcertsVO {
     @Schema(description = "日期加星期")
     private String weekDayAndDate;
     @Schema(description = "日期")
-    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date weekDayDate;
+    private String weekDayDate;
 //    /**当天场次总数*/
 //    @Schema(description = "当天场次总数")
 //    private String dayConcertsTotal;

+ 2 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppSitePlaceMapper.java

@@ -26,7 +26,7 @@ public interface AppSitePlaceMapper extends BaseMapper<AppSitePlace> {
      **/
     List<PlaceInfoVO.PlaceInfoGymMsgVO> getPlaceInfoNoFixation(@Param("id")String id);
 
-    List<ConcertsVO> findByConcerts(@Param("weekDay")Integer weekDay, @Param("siteId")String siteId, @Param("categoryId")String categoryId);
+    List<ConcertsVO> findByConcerts(@Param("today")String today,@Param("weekDay") Integer weekDay, @Param("siteId")String siteId, @Param("categoryId")String categoryId);
 
     StadiumConcertsResponseVO findBySidAndCid(@Param("siteId")String siteId,@Param("categoryId") String categoryId);
 
@@ -39,5 +39,5 @@ public interface AppSitePlaceMapper extends BaseMapper<AppSitePlace> {
      **/
     OrderVO.PreviewOrderPlaceGymnasiumNoFixation previewOrderPlaceGymnasiumNoFixation(@Param("placeId")String placeId);
 
-    List<ConcertsVO> findByConcertsAndTime(@Param("weekDay")Integer weekDay, @Param("siteId")String siteId, @Param("categoryId")String categoryId);
+    List<ConcertsVO> findByConcertsAndTime(@Param("today")String today,@Param("weekDay") Integer weekDay, @Param("siteId")String siteId, @Param("categoryId")String categoryId);
 }

+ 10 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/EvaluateMapper.java

@@ -23,4 +23,14 @@ public interface EvaluateMapper extends BaseMapper<Evaluate> {
     IPage<FindEvaluateResponseDTO> findBySiteId(@Param("page")  Page<FindEvaluateResponseDTO> page,@Param("siteId")  String siteId);
 
     IPage<FindEvaluateResponseDTO> findByCoursesId(@Param("page") Page<FindEvaluateResponseDTO> page,@Param("coursesIds") List<String> coursesIds);
+
+    Evaluate findByOrderId(@Param("orderId") String orderId);
+
+    Long findByAverageScore(@Param("siteId")String siteId);
+
+    Long findByScoreNum(@Param("siteId")String siteId);
+
+    Long findByAverageScoreByCoursesId(@Param("coursesIds") List<String> coursesIds);
+
+    Long findByScoreNumByCoursesId(@Param("coursesIds") List<String> coursesIds);
 }

+ 2 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppSitePlaceMapper.xml

@@ -45,7 +45,7 @@
         END AS concertStatus
         from nm_site_place a
         left join  nm_site_price_rules b on a.id = b.site_place_id
-        LEFT JOIN nm_order_pro_info c on c.product_id =b.id
+        LEFT JOIN nm_order_pro_info c on c.product_id =b.id and c.use_date_str =#{today}
         where a.site_id = #{siteId} and b.category_id =#{categoryId} and b.day_of_week =#{weekDay}
         ]]>
     </select>
@@ -82,7 +82,7 @@
         END AS concertStatus
         from nm_site_place a
         left join  nm_site_price_rules b on a.id = b.site_place_id
-        LEFT JOIN nm_order_pro_info c on c.product_id =b.id
+        LEFT JOIN nm_order_pro_info c on c.product_id =b.id and c.use_date_str =#{today}
         where a.site_id = #{siteId} and b.category_id =#{categoryId} and b.day_of_week =#{weekDay}
         ]]>
     </select>

+ 41 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/EvaluateMapper.xml

@@ -59,4 +59,45 @@
             #{coursesId}
         </foreach>
     </select>
+    <select id="findByOrderId" resultType="org.jeecg.modules.system.app.entity.Evaluate">
+        select * from nm_evaluate where order_id =#{orderId}
+    </select>
+    <select id="findByAverageScore" resultType="java.lang.Long">
+        select sum(ne.score)
+                from nm_evaluate ne
+                 left join  sys_depart sd on  ne.dept_id = sd.id
+                 LEFT JOIN nm_site ns on  ne.site_id =ns.id
+                 LEFT JOIN sys_user su on  ne.user_id =su.id
+        where 1=1 and ne.site_id =#{siteId}
+    </select>
+    <select id="findByScoreNum" resultType="java.lang.Long">
+        select count(1)
+        from nm_evaluate ne
+                 left join  sys_depart sd on  ne.dept_id = sd.id
+                 LEFT JOIN nm_site ns on  ne.site_id =ns.id
+                 LEFT JOIN sys_user su on  ne.user_id =su.id
+        where 1=1 and ne.site_id =#{siteId}
+    </select>
+    <select id="findByAverageScoreByCoursesId" resultType="java.lang.Long">
+        select sum(ne.score)
+        from nm_evaluate ne
+        left join  sys_depart sd on  ne.dept_id = sd.id
+        LEFT JOIN sys_user su on  ne.user_id =su.id
+        left join  nm_order o on ne.order_id = o.id
+        where o.product_ids in
+        <foreach collection="coursesIds" item="coursesId" open="(" separator="," close=")">
+            #{coursesId}
+        </foreach>
+    </select>
+    <select id="findByScoreNumByCoursesId" resultType="java.lang.Long">
+        select count(1)
+        from nm_evaluate ne
+        left join  sys_depart sd on  ne.dept_id = sd.id
+        LEFT JOIN sys_user su on  ne.user_id =su.id
+        left join  nm_order o on ne.order_id = o.id
+        where o.product_ids in
+        <foreach collection="coursesIds" item="coursesId" open="(" separator="," close=")">
+            #{coursesId}
+        </foreach>
+    </select>
 </mapper>

+ 4 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IEvaluateService.java

@@ -4,6 +4,7 @@ package org.jeecg.modules.system.app.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.app.dto.evaluate.FindEvaluateDTO;
+import org.jeecg.modules.app.dto.evaluate.FindEvaluatePage;
 import org.jeecg.modules.system.app.dto.evaluate.FindEvaluateRequestDTO;
 import org.jeecg.modules.system.app.dto.evaluate.FindEvaluateResponseDTO;
 import org.jeecg.modules.system.app.entity.Evaluate;
@@ -19,5 +20,7 @@ public interface IEvaluateService extends IService<Evaluate> {
 
     IPage<FindEvaluateResponseDTO> findPage(Integer pageNo, Integer pageSize, FindEvaluateRequestDTO findEvaluateRequestDTO);
 
-    IPage<FindEvaluateResponseDTO> findByOrderPage(FindEvaluateDTO findEvaluateDTO);
+    FindEvaluatePage<FindEvaluateResponseDTO> findByOrderPage(FindEvaluateDTO findEvaluateDTO);
+
+    Evaluate findByOrder(String orderId);
 }

+ 34 - 5
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/EvaluateServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang3.StringUtils;
 import org.jeecg.modules.app.dto.evaluate.FindEvaluateDTO;
+import org.jeecg.modules.app.dto.evaluate.FindEvaluatePage;
 import org.jeecg.modules.system.app.dto.evaluate.FindEvaluateRequestDTO;
 import org.jeecg.modules.system.app.dto.evaluate.FindEvaluateResponseDTO;
 import org.jeecg.modules.system.app.entity.Evaluate;
@@ -15,6 +16,8 @@ import org.jeecg.modules.system.app.utils.StringMasker;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -34,8 +37,6 @@ public class EvaluateServiceImpl extends ServiceImpl<EvaluateMapper, Evaluate> i
     private AppCoursesMapper appCoursesMapper;
 
 
-
-
     @Override
     public IPage<FindEvaluateResponseDTO> findPage(Integer pageNo, Integer pageSize, FindEvaluateRequestDTO findEvaluateRequestDTO) {
         Page<FindEvaluateResponseDTO> page = new Page<FindEvaluateResponseDTO>(pageNo, pageSize);
@@ -60,12 +61,18 @@ public class EvaluateServiceImpl extends ServiceImpl<EvaluateMapper, Evaluate> i
     }
 
     @Override
-    public IPage<FindEvaluateResponseDTO> findByOrderPage(FindEvaluateDTO findEvaluateDTO) {
+    public FindEvaluatePage<FindEvaluateResponseDTO> findByOrderPage(FindEvaluateDTO findEvaluateDTO) {
         Page<FindEvaluateResponseDTO> page = new Page<FindEvaluateResponseDTO>(findEvaluateDTO.getPageNo(), findEvaluateDTO.getPageSize());
-        IPage<FindEvaluateResponseDTO> findEvaluateResponseDTOIPage=null;
+        IPage<FindEvaluateResponseDTO> findEvaluateResponseDTOIPage=page;
         List<String> coursesIds = new ArrayList<>();
+        BigDecimal averageScore =BigDecimal.valueOf(0).setScale(1 , RoundingMode.DOWN);
+        Long scoreNum =0L;
+        Long scoreSum =0L;
         if (StringUtils.isNotEmpty(findEvaluateDTO.getSiteId())){
             findEvaluateResponseDTOIPage = evaluateMapper.findBySiteId(page,findEvaluateDTO.getSiteId());
+            scoreSum = evaluateMapper.findByAverageScore(findEvaluateDTO.getSiteId());
+            scoreNum =  evaluateMapper.findByScoreNum(findEvaluateDTO.getSiteId());
+            averageScore=calculateAverage(scoreSum,scoreNum);
         } else if (StringUtils.isNotEmpty(findEvaluateDTO.getInstructorId())) {
             coursesIds = appCoursesMapper.findByInstructorId(findEvaluateDTO.getInstructorId());
         } else if (StringUtils.isNotEmpty(findEvaluateDTO.getCoursesId())) {
@@ -73,7 +80,29 @@ public class EvaluateServiceImpl extends ServiceImpl<EvaluateMapper, Evaluate> i
         }
         if (coursesIds!=null&&!coursesIds.isEmpty()){
             findEvaluateResponseDTOIPage = evaluateMapper.findByCoursesId(page,coursesIds);
+            scoreSum = evaluateMapper.findByAverageScoreByCoursesId(coursesIds);
+            scoreNum =  evaluateMapper.findByScoreNumByCoursesId(coursesIds);
+            averageScore=calculateAverage(scoreSum,scoreNum);
         }
-        return findEvaluateResponseDTOIPage;
+
+        return  FindEvaluatePage.build(findEvaluateResponseDTOIPage, averageScore, scoreNum);
+    }
+
+    @Override
+    public Evaluate findByOrder(String orderId) {
+        return evaluateMapper.findByOrderId(orderId);
+    }
+
+    public static BigDecimal calculateAverage(Long scoreSum, Long scoreNum) {
+        if (scoreNum == 0L) {
+          return  BigDecimal.valueOf(0).setScale(1 , RoundingMode.DOWN);
+        }
+
+        // 将分子和分母都转换为BigDecimal
+        BigDecimal sum = new BigDecimal(scoreSum);
+        BigDecimal num = new BigDecimal(scoreNum);
+
+        // 计算平均数,保留1位小数并四舍五入
+        return sum.divide(num, 1, RoundingMode.HALF_UP);
     }
 }

+ 2 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/utils/TimeRangeFinder.java

@@ -6,7 +6,6 @@ import org.jeecg.modules.system.app.vo.time.NextSevenDayVo;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalTime;
-import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.time.format.TextStyle;
 import java.util.*;
@@ -92,7 +91,8 @@ public class TimeRangeFinder {
             LocalDate localDate = today.plusDays(i);
             Locale locale = Locale.CHINA;
             String format = localDate.format(formatter);
-            Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
+//            Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
+            String date = localDate.toString();
             DayOfWeek dayOfWeek = localDate.getDayOfWeek();
             int dayOfWeekNum = dayOfWeek.getValue();
             String display;

+ 1 - 7
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/vo/time/NextSevenDayVo.java

@@ -1,15 +1,11 @@
 package org.jeecg.modules.system.app.vo.time;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.util.Date;
 
 /**
  * @author DM
@@ -29,7 +25,5 @@ public class NextSevenDayVo {
     @Schema(description ="星期配合日期")
     private String weekDayAndDate;
     @Schema(description ="日期")
-    @JsonFormat( pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date weekDayDate;
+    private String weekDayDate;
 }