liu 10 месяцев назад
Родитель
Сommit
8696095f76

+ 106 - 0
src/main/java/com/sqx/common/utils/MenstrualCycleCalculator.java

@@ -0,0 +1,106 @@
+package com.sqx.common.utils;
+
+import java.time.LocalDate;
+import java.time.Period;
+import java.util.ArrayList;
+import java.util.List;
+
+public class MenstrualCycleCalculator {
+    
+    /**
+     * 计算预测的下次经期开始日期
+     * @param lastPeriodStart 上次经期开始日期
+     * @param cycleLength 月经周期长度(天)
+     * @return 预测的下次经期开始日期
+     */
+    public static LocalDate predictNextPeriod(LocalDate lastPeriodStart, int cycleLength) {
+        return lastPeriodStart.plusDays(cycleLength);
+    }
+    
+    /**
+     * 计算预测的排卵日
+     * @param nextPeriodStart 预测的下次经期开始日期
+     * @return 预测的排卵日(下次经期前14天)
+     */
+    public static LocalDate predictOvulationDay(LocalDate nextPeriodStart) {
+        return nextPeriodStart.minusDays(14);
+    }
+    
+    /**
+     * 计算预测的受孕窗口期(排卵日前5天到排卵日后1天)
+     * @param ovulationDay 排卵日
+     * @return 包含受孕窗口期开始和结束日期的数组
+     */
+    public static LocalDate[] predictFertileWindow(LocalDate ovulationDay) {
+        return new LocalDate[] {
+            ovulationDay.minusDays(5),
+            ovulationDay.plusDays(1)
+        };
+    }
+    
+    /**
+     * 计算月经周期长度
+     * @param previousStart 前次经期开始日期
+     * @param currentStart 本次经期开始日期
+     * @return 周期长度(天)
+     */
+    public static int calculateCycleLength(LocalDate previousStart, LocalDate currentStart) {
+        return Period.between(previousStart, currentStart).getDays();
+    }
+    
+    /**
+     * 生成未来几个周期的预测
+     * @param lastPeriodStart 最近一次经期开始日期
+     * @param cycleLength 月经周期长度
+     * @param periodDuration 经期持续时间(天)
+     * @param numberOfCycles 要预测的周期数
+     * @return 包含预测结果的列表
+     */
+    public static List<String> generateForecast(LocalDate lastPeriodStart, 
+            int cycleLength, int periodDuration, int numberOfCycles) {
+        List<String> forecast = new ArrayList<>();
+        LocalDate nextPeriodStart = lastPeriodStart;
+        
+        for (int i = 1; i <= numberOfCycles; i++) {
+            nextPeriodStart = predictNextPeriod(nextPeriodStart, cycleLength);
+            LocalDate ovulationDay = predictOvulationDay(nextPeriodStart);
+            LocalDate[] fertileWindow = predictFertileWindow(ovulationDay);
+            
+            forecast.add(String.format("周期 %d: 预计经期 %s 至 %s | 排卵日: %s | 受孕窗口: %s 至 %s",
+                i,
+                nextPeriodStart,
+                nextPeriodStart.plusDays(periodDuration - 1),
+                ovulationDay,
+                fertileWindow[0],
+                fertileWindow[1]
+            ));
+        }
+        
+        return forecast;
+    }
+    
+    public static void main(String[] args) {
+        // 示例用法
+        LocalDate lastPeriod = LocalDate.of(2025, 8, 1);
+        int cycleLength = 28; // 平均周期长度
+        int periodDuration = 5; // 平均经期持续时间
+        
+        System.out.println("=== 经期预测 ===");
+        System.out.println("上次经期开始: " + lastPeriod);
+        System.out.println("平均周期长度: " + cycleLength + "天");
+        System.out.println("平均经期持续时间: " + periodDuration + "天");
+        System.out.println();
+        
+        System.out.println("预测下次经期开始: " + predictNextPeriod(lastPeriod, cycleLength));
+        System.out.println("预测排卵日: " + predictOvulationDay(predictNextPeriod(lastPeriod, cycleLength)));
+        
+        LocalDate[] fertileWindow = predictFertileWindow(
+            predictOvulationDay(predictNextPeriod(lastPeriod, cycleLength)));
+        System.out.println("预测受孕窗口: " + fertileWindow[0] + " 至 " + fertileWindow[1]);
+        System.out.println();
+        
+        System.out.println("=== 未来3个周期预测 ===");
+        generateForecast(lastPeriod, cycleLength, periodDuration, 3)
+            .forEach(System.out::println);
+    }
+}

+ 38 - 0
src/main/java/com/sqx/modules/lovers/controller/LoversSetMenstrualPeriodSettingController.java

@@ -0,0 +1,38 @@
+package com.sqx.modules.lovers.controller;
+
+import com.sqx.common.utils.Result;
+import com.sqx.modules.lovers.service.LoversSetMenstrualPeriodSettingService;
+import com.sqx.modules.lovers.service.LoversSetRuleService;
+import com.sqx.modules.lovers.vo.PredictDateVo;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+@Slf4j
+@Api(tags = {"管理端-情侣套餐月经期设置"})
+@RestController
+@RequestMapping("/admin/loverSetMenstrualPeriodSetting")
+public class LoversSetMenstrualPeriodSettingController {
+
+    @Autowired
+    LoversSetMenstrualPeriodSettingService loversSetMenstrualPeriodSettingService;
+
+    @GetMapping("/getDate")
+    public Result getDate(Integer durationDays,Integer intervalDays,String lastStartDate,String lastEndDate){
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate lastStart = LocalDate.parse(lastStartDate, dateTimeFormatter);
+        LocalDate start = lastStart.plusDays(intervalDays);
+        LocalDate end = start.plusDays(durationDays);
+        PredictDateVo predictDateVo = new PredictDateVo();
+        predictDateVo.setStartTime(start.format(dateTimeFormatter));
+        predictDateVo.setStartTime(end.format(dateTimeFormatter));
+        return Result.success().put("data", predictDateVo);
+    }
+
+}

+ 2 - 0
src/main/java/com/sqx/modules/lovers/service/LoversSetMenstrualPeriodSettingService.java

@@ -1,7 +1,9 @@
 package com.sqx.modules.lovers.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.sqx.common.utils.Result;
 import com.sqx.modules.lovers.entity.LoversSetMenstrualPeriodSetting;
 
 public interface LoversSetMenstrualPeriodSettingService extends IService<LoversSetMenstrualPeriodSetting> {
+
 }

+ 7 - 0
src/main/java/com/sqx/modules/lovers/service/impl/LoversSetMenstrualPeriodSettingServiceImpl.java

@@ -1,11 +1,18 @@
 package com.sqx.modules.lovers.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sqx.common.utils.Result;
 import com.sqx.modules.lovers.dao.LoversSetMenstrualPeriodSettingDao;
 import com.sqx.modules.lovers.entity.LoversSetMenstrualPeriodSetting;
 import com.sqx.modules.lovers.service.LoversSetMenstrualPeriodSettingService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 public class LoversSetMenstrualPeriodSettingServiceImpl extends ServiceImpl<LoversSetMenstrualPeriodSettingDao,LoversSetMenstrualPeriodSetting> implements LoversSetMenstrualPeriodSettingService {
+
+    @Autowired
+    LoversSetMenstrualPeriodSettingDao loversSetMenstrualPeriodSettingDao;
+
+
 }

+ 9 - 0
src/main/java/com/sqx/modules/lovers/vo/PredictDateVo.java

@@ -0,0 +1,9 @@
+package com.sqx.modules.lovers.vo;
+
+import lombok.Data;
+
+@Data
+public class PredictDateVo {
+    public String startTime;
+    public String endTime;
+}

+ 6 - 6
src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java

@@ -1660,9 +1660,9 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
                     .eq("order_id", records.get(i).getOrderId()));
             tbOrderIPage.getRecords().get(i).setOrderGoodsList(orderGoodsList);
             //判断骑手是否接单 status13为待骑手接单
-            if (records.get(i).getOrderTypeExtra() == 2 && "2".equals(records.get(i).getIndentState())) {
-                tbOrderIPage.getRecords().get(i).setStatus(13);
-            }
+//            if (records.get(i).getOrderTypeExtra() == 2 && "2".equals(records.get(i).getIndentState())) {
+//                tbOrderIPage.getRecords().get(i).setStatus(13);
+//            }
         }
         PageUtils pageUtils = new PageUtils(tbOrderIPage);
         return Result.success().put("data", pageUtils);
@@ -1693,9 +1693,9 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
             tbOrder.setShopName(goodsShop.getShopName());
             tbOrder.setShopPhone(goodsShop.getPhone());
         }
-        if (tbOrder.getOrderTypeExtra() == 2 && "2".equals(tbOrder.getIndentState())) {
-            tbOrder.setStatus(13);
-        }
+//        if (tbOrder.getOrderTypeExtra() == 2 && "2".equals(tbOrder.getIndentState())) {
+//            tbOrder.setStatus(13);
+//        }
         List<OrderGoods> orderGoodsList = orderGoodsDao.selectList(new QueryWrapper<OrderGoods>().eq("order_id", tbOrder.getOrderId()));
         tbOrder.setOrderGoodsList(orderGoodsList);
         TbIndent tbIndent = tbIndentService.getOne(new QueryWrapper<TbIndent>().eq("order_id", tbOrder.getOrderId()));