Forráskód Böngészése

新增检查计划周期生成

车车 8 hónapja
szülő
commit
11f901d0e3

+ 23 - 0
ktg-common/src/main/java/com/ktg/common/utils/DateUtils.java

@@ -201,4 +201,27 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
+
+    /**
+     * 输入1-7获取包括当日的下一个周几的日期
+     */
+    public static String getWeekDayDate(int weekDay) {
+        int dayOfWeekInput = weekDay;
+        // 将输入转换为DayOfWeek枚举
+        DayOfWeek inputDayOfWeek = DayOfWeek.of(dayOfWeekInput);
+        // 获取当前日期
+        LocalDate today = LocalDate.now();
+        // 计算下一个指定周几的日期
+        LocalDate nextSpecifiedDay = today.with(inputDayOfWeek);
+        if (nextSpecifiedDay.isBefore(today)) {
+            nextSpecifiedDay = nextSpecifiedDay.plusWeeks(1);
+        }
+        // 格式化日期为YYYY-MM-dd格式
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        String formattedDate = nextSpecifiedDay.format(formatter);
+        // 输出结果
+        System.out.println("下一个" + inputDayOfWeek + "的日期是: " + formattedDate);
+        return formattedDate;
+    }
+
 }

+ 1 - 2
ktg-iscs/src/main/java/com/ktg/iscs/controller/IsLotoStationController.java

@@ -110,8 +110,7 @@ public class IsLotoStationController extends BaseController
     @PostMapping("/updateIsLotoStation")
     public CommonResult<Boolean> updateIsLotoStation(@RequestBody @Parameter(name = "isLotoStation", description = "修改数据类,放到body") IsLotoStation isLotoStation)
     {
-        isLotoStation.setUpdateBy(String.valueOf(SecurityUtils.getUserId()));
-        return CommonResult.success(isLotoStationService.updateById(isLotoStation));
+        return CommonResult.success(isLotoStationService.updateIsLotoStation(isLotoStation));
     }
 
     /**

+ 11 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/IsMailNotifyConfig.java

@@ -47,5 +47,16 @@ public class IsMailNotifyConfig extends BaseBean
     @ApiModelProperty(value = "状态(0-未激活 1-已激活)")
     private String status;
 
+    @ApiModelProperty(value = "计划频率")
+    private String planFrequency;
+
+    @ApiModelProperty(value = "计日期")
+    private String planDate;
+
+    @ApiModelProperty(value = "物资柜id(逗号分隔)")
+    private String cabinetIds;
+
+    @ApiModelProperty(value = "检察员")
+    private Long checkUserId;
 
 }

+ 2 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/IIsLotoStationService.java

@@ -23,4 +23,6 @@ public interface IIsLotoStationService extends IService<IsLotoStation> {
 
     Boolean updatePointsBindingLoto(BindingPointDTO dto);
 
+    Boolean updateIsLotoStation(IsLotoStation isLotoStation);
+
 }

+ 11 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsLotoStationServiceImpl.java

@@ -151,4 +151,15 @@ public class IsLotoStationServiceImpl extends ServiceImpl<IsLotoStationMapper, I
         }
         return true;
     }
+
+    @Override
+    public Boolean updateIsLotoStation(IsLotoStation isLotoStation) {
+        Assert.notNull(isLotoStation.getLotoId(), "主键id不能为空!");
+        update(Wrappers.<IsLotoStation>lambdaUpdate()
+                .eq(IsLotoStation::getLotoId, isLotoStation.getLotoId())
+                .set(IsLotoStation::getLotoName, isLotoStation.getLotoName())
+                .set(IsLotoStation::getOrderNum, isLotoStation.getOrderNum())
+                .set(IsLotoStation::getWorkstationId, isLotoStation.getWorkstationId() != null ? isLotoStation.getWorkstationId() : null));
+        return true;
+    }
 }

+ 7 - 1
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMachineryServiceImpl.java

@@ -103,7 +103,13 @@ public class IsMachineryServiceImpl extends ServiceImpl<IsMachineryMapper, IsMac
             ancestors = "0";
         }
         isMachinery.setAncestors(ancestors);
-        updateById(isMachinery);
+        update(Wrappers.<IsMachinery>lambdaUpdate()
+                .eq(IsMachinery::getMachineryId, isMachinery.getMachineryId())
+                .set(IsMachinery::getAncestors, isMachinery.getAncestors())
+                .set(IsMachinery::getMachineryName, isMachinery.getMachineryName())
+                .set(IsMachinery::getWorkstationId, isMachinery.getWorkstationId())
+                .set(IsMachinery::getLotoId, isMachinery.getLotoId())
+                .set(IsMachinery::getMachineryImg, StringUtils.isBlank(isMachinery.getMachineryImg()) ? null : isMachinery.getMachineryImg()));
         return true;
     }
 

+ 2 - 1
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/StatisticsApiServiceImpl.java

@@ -68,7 +68,8 @@ public class StatisticsApiServiceImpl implements StatisticsApiService {
     @Override
     public HomePageVO getHomePage(String startTime, String endTime) {
         // 1.第一部分
-        List<IsMaterials> materialsList = iIsMaterialsService.list();
+        List<IsMaterials> materialsList = iIsMaterialsService.list(Wrappers.<IsMaterials>lambdaQuery()
+                .isNotNull(IsMaterials::getMaterialsCabinetId));
         // 1.1物资总数
         int materialsCount = materialsList.size();
         // 1.2柜中物资

+ 85 - 0
ktg-quartz/src/main/java/com/ktg/quartz/task/CheckPlanTask.java

@@ -0,0 +1,85 @@
+package com.ktg.quartz.task;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ktg.common.utils.DateUtils;
+import com.ktg.common.utils.StringUtils;
+import com.ktg.iscs.domain.IsMailNotifyConfig;
+import com.ktg.iscs.domain.IsMaterialsCheckPlan;
+import com.ktg.iscs.domain.dto.checkPlan.AddCheckPlanDTO;
+import com.ktg.iscs.service.IIsMailNotifyConfigService;
+import com.ktg.iscs.service.IIsMaterialsCheckPlanService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.time.YearMonth;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 定时发送检查物资柜提醒邮件
+ *
+ * @author CGJ
+ */
+@Slf4j
+@Component("checkPlanTask")
+public class CheckPlanTask {
+
+    @Autowired
+    private IIsMailNotifyConfigService isMailNotifyConfigService;
+    @Autowired
+    private IIsMaterialsCheckPlanService iIsMaterialsCheckPlanService;
+
+
+    public void addCheckPlan(String templateCode) {
+        if (StringUtils.isNotBlank(templateCode)) {
+            // 1.查询当前检查计划模板
+            IsMailNotifyConfig notifyConfig = isMailNotifyConfigService.getOne(Wrappers.<IsMailNotifyConfig>lambdaQuery()
+                    .eq(IsMailNotifyConfig::getTemplateCode, templateCode));
+            // 2.如果检查计划存在
+            if (notifyConfig != null) {
+                // 3.获取当前设定的检查参数(频率&日期)
+                String planFrequency = notifyConfig.getPlanFrequency();
+                String planDate = notifyConfig.getPlanDate();
+                if ("月".equals(planFrequency)) {
+                    // 获取当前日期
+                    LocalDate currentDate = LocalDate.now();
+                    // 获取当前年月
+                    YearMonth currentYearMonth = YearMonth.from(currentDate);
+                    // 获取当月的最大天数
+                    int maxDay = currentYearMonth.lengthOfMonth();
+                    // 4.如果当前的频率是月为单位
+                    planDate = StringUtils.isBlank(planDate) ? "01" : planDate;
+                    planDate = Integer.parseInt(planDate) > maxDay ? String.valueOf(maxDay) : planDate;
+                    // 4.1获取当前年月
+                    String monthPlanDate = currentYearMonth + "-" + planDate;
+                    checkAndAddPlan(monthPlanDate, notifyConfig);
+                } else if ("周".equals(planFrequency)) {
+                    // 5.如果当前频率是周,获取包括今天的最近一次周内的日期
+                    String weekDayDate = DateUtils.getWeekDayDate(Integer.parseInt(planDate));
+                    checkAndAddPlan(weekDayDate, notifyConfig);
+                }
+            }
+        }
+    }
+
+    private void checkAndAddPlan(String planDate, IsMailNotifyConfig notifyConfig) {
+        // 4.2检查当前是否已经生成过计划,如果没有则生成一下
+        List<IsMaterialsCheckPlan> checkPlans = iIsMaterialsCheckPlanService.list(Wrappers.<IsMaterialsCheckPlan>lambdaQuery()
+                .eq(IsMaterialsCheckPlan::getPlanDate, planDate));
+        if (checkPlans.isEmpty()) {
+            AddCheckPlanDTO addCheckPlanDTO = new AddCheckPlanDTO();
+            addCheckPlanDTO.setPlanName("物资检查计划" + planDate);
+            addCheckPlanDTO.setWorkstationId(null);
+            addCheckPlanDTO.setPlanDate(DateUtils.toDate(LocalDate.parse(planDate)));
+            addCheckPlanDTO.setCheckUserId(notifyConfig.getCheckUserId());
+            addCheckPlanDTO.setCabinetIds(Arrays.stream(notifyConfig.getCabinetIds().split(","))
+                    .map(Long::parseLong)
+                    .collect(Collectors.toList()));
+            iIsMaterialsCheckPlanService.insertIsMaterialsCheckPlan(addCheckPlanDTO);
+        }
+    }
+
+}