自动化立体仓库 - WCS系统
*
lsh
2024-10-19 991dfb176737ab9d8d686a10a8ef6ec776431b55
*
6个文件已添加
2个文件已删除
8个文件已修改
732 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/WcsTaskDistributionParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkMastService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/RgvTaskReportingScheduler.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkLogScheduler.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/escalationParam/RgvTaskReportingParam.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/escalationParam/ScaleEscalationParam.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/escalationParam/StaEscalationParam.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/RgvTaskReportingHandler.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/TimeCalculatorUtils.java 387 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -57,17 +57,6 @@
    }
    /**
     * 库存统计
     */
    @RequestMapping("/stock/default/v1")
    public R queryStock(@RequestHeader(required = false) String appkey,
                        HttpServletRequest request) {
        auth(appkey, null, request);
        return R.ok().add(openService.queryStock());
    }
    private void auth(String appkey, Object obj, HttpServletRequest request) {
        log.info("{}接口被访问;appkey:{};请求数据:{}", "open/sensorType/list/auth/v1", appkey, JSON.toJSONString(obj));
        request.setAttribute("cache", obj);
src/main/java/com/zy/asrs/entity/param/WcsTaskDistributionParam.java
@@ -20,7 +20,7 @@
        add(131);add(132);add(133);
    }};
    private Integer taskNo;//工作号
    private Long taskNo;//工作号
    private String startSta;//起点
    private String endSta;//终点
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -11,6 +11,9 @@
@Repository
public interface WrkMastMapper extends BaseMapper<WrkMast> {
    @Insert("insert into asr_wrk_mast_log select * from asr_wrk_mast where wrk_no=#{workNo}")
    int saveLog(Long workNo);
    WrkMast selectByLocNo(@Param("sourceLocNo") String sourceLocNo);
    WrkMast selectByLocNo1(@Param("sourceLocNo") String sourceLocNo);
src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -7,6 +7,8 @@
public interface WrkMastService extends IService<WrkMast> {
    boolean saveLog(Long workNo);
    int getWorkingMast(Integer devpNo);
    List<WrkMast> selectToBeCompleteData();
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -179,6 +179,8 @@
                        break runRgv;
                    }
                    wrkMast.setWrkSts(2L);
                    wrkMast.setRgvNo(rgvProtocol.getRgvNo());
                    wrkMast.setAppeTime(new Date());
                    try{
                        wrkMastService.updateById(wrkMast);
                        continue ;
@@ -225,6 +227,7 @@
                        break;
                    }
                    wrkMast.setWrkSts(3L);
                    wrkMast.setAppeTime(new Date());
                    wrkMastService.updateById(wrkMast);
                }
            }
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -12,6 +12,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
@@ -33,6 +34,7 @@
    @Override
    @Transactional
    public R wcsTaskDistribution(WcsTaskDistributionParam param) {
        Date now = new Date();
        WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", param.getTaskNo()));
        if (!Cools.isEmpty(wrkMast1)){
            return R.error("工作号已存在").add("工作号已存在,taskNo="+param.getTaskNo());
@@ -43,6 +45,8 @@
        wrkMast.setStaNo(param.getEndSta$());
        wrkMast.setWrkSts(1L);
        wrkMast.setIoType(1);
        wrkMast.setModiTime(now);
        wrkMast.setAppeTime(now);
        wrkMastService.insert(wrkMast);
        return R.ok();
    }
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -13,6 +13,11 @@
public class WrkMastServiceImpl extends ServiceImpl<WrkMastMapper, WrkMast> implements WrkMastService {
    @Override
    public boolean saveLog(Long workNo) {
        return this.baseMapper.saveLog(workNo) > 0;
    }
    @Override
    public int getWorkingMast(Integer devpNo) {
        return selectCount(new EntityWrapper<WrkMast>().eq("source_sta_no", devpNo).in("wrk_sts", 1, 6));
    }
src/main/java/com/zy/asrs/task/RgvTaskReportingScheduler.java
New file
@@ -0,0 +1,43 @@
package com.zy.asrs.task;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.RgvTaskReportingHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * Created by Monkey D. Luffy on 2024.10.19
 * 广东海玛..............以下.............环穿调度.............任务完成信息上传
 */
@Slf4j
@Component
public class RgvTaskReportingScheduler {
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private RgvTaskReportingHandler rgvTaskReportingHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){//任务完成信息上传
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 3L));
        for (WrkMast wrkMast : wrkMasts){
            try{
                ReturnT<String> result = rgvTaskReportingHandler.start(wrkMast);
                if (result.getCode()==200){
                    break;
                }
            }catch (Exception e){
                log.error("工作号"+wrkMast.getWrkNo()+"任务完成信息上传处理失败,异常信息:"+e);
            }
        }
    }
}
src/main/java/com/zy/asrs/task/WorkLogScheduler.java
New file
@@ -0,0 +1,44 @@
package com.zy.asrs.task;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.WorkLogHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * Created by vincent on 2020/7/7
 */
@Slf4j
@Component
public class WorkLogScheduler {
    @Autowired
    private WorkLogHandler workLogHandler;
    @Autowired
    private WrkMastService wrkMastService;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
        List<WrkMast> wrkMasts = wrkMastService.selectToBeHistoryData();
        if (wrkMasts.isEmpty()) {
            return;
        }
        for (WrkMast wrkMast : wrkMasts) {
            try{
                ReturnT<String> result = workLogHandler.start(wrkMast);
                if (!result.isSuccess()) {
                    log.error("工作档[workNo={}]历史档处理失败", wrkMast.getWrkNo());
                }
            } catch (Exception e){
            }
        }
    }
}
src/main/java/com/zy/asrs/task/escalationParam/RgvTaskReportingParam.java
New file
@@ -0,0 +1,39 @@
package com.zy.asrs.task.escalationParam;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.utils.TimeCalculatorUtils;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/*
 *  Created by Monkey D. Luffy on 2023.07.19
 * */
@Data
public class RgvTaskReportingParam {
    private String taskNo;      //  是    字符串 工作号
    private Long during;      //  是    字符串 作业时长
    private String rgvNo;       //  是    字符串 作业小车编号
    private String startSta;    //  是    字符串 起始作业站(环穿)
    private String endSta;      //  是    字符串 目标作业站(环穿)
    private Integer status;     //  是    字符串 任务状态  1:初始  2:作业中  3:完成
    private String startTime;  //  是    字符串 开始时间(格式:yyyy--MM-dd HH:mm:ss)
    private String endTime;    //  是    字符串 结束时间(格式:yyyy--MM-dd HH:mm:ss)
    private List<String> error = new ArrayList<>();       //  是    字符串 异常信息(如无异常则为空数组)
    public RgvTaskReportingParam(){}
    public RgvTaskReportingParam(WrkMast wrkMast){
        this.taskNo = wrkMast.getWrkNo().toString();
        this.rgvNo = wrkMast.getRgvNo().toString();
        this.startTime = wrkMast.getModiTime$();
        this.endTime = wrkMast.getAppeTime$();
        this.startSta = wrkMast.getSourceStaNo().toString();
        this.endSta = wrkMast.getStaNo().toString();
        this.during = TimeCalculatorUtils.differenceInMilliseconds(wrkMast.getModiTime(),wrkMast.getAppeTime());
        this.status = wrkMast.getWrkSts().intValue();
        this.error.add(wrkMast.getErrorMemo());
    }
}
src/main/java/com/zy/asrs/task/escalationParam/ScaleEscalationParam.java
File was deleted
src/main/java/com/zy/asrs/task/escalationParam/StaEscalationParam.java
File was deleted
src/main/java/com/zy/asrs/task/handler/RgvTaskReportingHandler.java
New file
@@ -0,0 +1,100 @@
package com.zy.asrs.task.handler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.core.exception.CoolException;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.escalationParam.RgvTaskReportingParam;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
/**
 * Created by Monkey D. Luffy on 2024.10.19
 * 广东海玛..............以下.............环穿调度.............任务完成信息上传
 */
@Slf4j
@Service
@Transactional
public class RgvTaskReportingHandler extends AbstractHandler<String> {
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private ApiLogService apiLogService;
//    @Value("${srHangJia.url}")
    private String erpUrl = "192.168.18.229:16126";
//    @Value("${srHangJia.reportOutPath}")
    private String reportOutPath = "open/rcs/task/cs/up/default/v1";
    public ReturnT<String> start(WrkMast wrkMast) {
        try {
            Date now = new Date();
            RgvTaskReportingParam rgvTaskReportingParam = new RgvTaskReportingParam(wrkMast);
            ReturnT<String> result = postMesData(reportOutPath,rgvTaskReportingParam);
            if (result.getCode()==200){
                wrkMast.setWrkSts(4L);
                wrkMast.setAppeTime(now);
                wrkMastService.updateById(wrkMast);
                return SUCCESS;
            }else {
                log.error("任务完成信息上传失败");
            }
        }catch (Exception e){
            log.error("任务完成信息上传异常!!!"+e);
            return FAIL;
        }
        return FAIL;
    }
    private ReturnT<String> postMesData(String erpPath,Object combParam){
        if(combParam != null){
            String response = "";
            boolean success = false;
            try {
                response = new HttpHandler.Builder()
                        .setUri(erpUrl)
                        .setPath(erpPath)
                        .setJson(JSON.toJSONString(combParam))
                        .build()
                        .doPost();
                JSONObject jsonObject = JSON.parseObject(response);
                if (jsonObject.getInteger("code")==200) {
                    success = true;
                } else {
                    log.error("任务完成信息上传请求接口失败!!!url:{};request:{};response:{}"+erpUrl+erpPath, JSON.toJSONString(combParam), response);
                    throw new CoolException("上报wcs系统失败");
                }
            } catch (Exception e) {
                log.error("fail:上报wcs系统失败==>", e);
//                      TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg(e.getMessage());
            } finally {
                try {
                    // 保存接口日志
                    apiLogService.save(
                            "上报wcs系统",
                            erpUrl + erpPath,
                            null,
                            erpUrl,
                            JSON.toJSONString(combParam),
                            response,
                            success
                    );
                } catch (Exception e) {
                    log.error("任务完成信息上传保存接口日志异常,异常信息:", e);
                }
            }
        }
        return SUCCESS;
    }
}
src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
New file
@@ -0,0 +1,44 @@
package com.zy.asrs.task.handler;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
/**
 * Created by Monkey D. Luffy on 2024.10.19
 * 广东海玛..............以下.............环穿调度.............任务完成信息上传
 */
@Slf4j
@Service
public class WorkLogHandler extends AbstractHandler<String> {
    @Autowired
    private WrkMastService wrkMastService;
    @Transactional
    public ReturnT<String> start(WrkMast wrkMast) {
        try {
            // 保存工作主档历史档
            if (!wrkMastService.saveLog(wrkMast.getWrkNo())) {
                exceptionHandle("保存工作历史档[workNo={0}]失败", wrkMast.getWrkNo());
            }
            // 删除工作主档
            if (!wrkMastService.deleteById(wrkMast)) {
                exceptionHandle("删除工作主档[workNo={0}]失败", wrkMast.getWrkNo());
            }
        } catch (Exception e) {
            log.error("fail", e);
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
        return SUCCESS;
    }
}
src/main/java/com/zy/asrs/utils/TimeCalculatorUtils.java
New file
@@ -0,0 +1,387 @@
package com.zy.asrs.utils;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.*;
public class TimeCalculatorUtils {
    //获取当前时间的小时数(24小时制):
    public static int nowTimeHour(){
        // 获取当前时间戳
        long timestamp = System.currentTimeMillis();
        // 创建Date对象,并设置时间戳
        Date date = new Date(timestamp);
        // 创建TimeZone对象,设置为中国北京时间
        TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
        // 创建Calendar对象,并设置时区
        // 注意:Calendar类中的月份是从0开始的,所以需要减去1
        Calendar calendar = Calendar.getInstance(timeZone);
        calendar.setTime(date);
        // 获取当前小时数(24小时制)
        return calendar.get(Calendar.HOUR_OF_DAY);
    }
    //获取当天小时数(24小时制)中国北京时间:
    public static int timeTimeHour(Date date){
        // 创建TimeZone对象,设置为中国北京时间
        TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
        // 创建Calendar对象,并设置时区
        // 注意:Calendar类中的月份是从0开始的,所以需要减去1
        Calendar calendar = Calendar.getInstance(timeZone);
        calendar.setTime(date);
        // 获取当前小时数(24小时制)
        return calendar.get(Calendar.HOUR_OF_DAY);
    }
    //获取前一天的日期(日期天数减一)
    public static Date timeYesterday(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        return calendar.getTime();
    }
    //获取七天前的日期(日期天数减七)
    public static Date timeFrontSevenYesterday(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, -7);
        return calendar.getTime();
    }
    //获取七天后的日期(日期天数加七)
    public static Date timeAfterSevenYesterday(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, 7);
        return calendar.getTime();
    }
    //获取相差n天的日期(日期天数加N)
    public static Date timeYesterdayN(Date date,int day){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, day);
        return calendar.getTime();
    }
    //获取年月日
    public static String timeYestMonthDay(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;  // 月份从0开始,需要加1
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        return year+"年"+month+"月"+day+"日";
    }
    //获取年
    public static int timeYest(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.YEAR);
    }
    //获取月
    public static int timeMonth(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MONTH) + 1;
    }
    //获取日
    public static int timeDay(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }
    //获取年差异
    public static int DifferenceYest(Date startDay,Date endDay){
        int startYest = timeYest(startDay);
        int endYest = timeYest(endDay);
        return endYest-startYest;
    }
    //获取月差异
    public static int DifferenceMonth(Date startDay,Date endDay){
        int startMonth = timeMonth(startDay);
        int endMonth = timeMonth(endDay);
        return endMonth-startMonth;
    }
    //获取天差异
    public static int DifferenceDayInt(Date startDay,Date endDay){
        return DifferenceDayLong(startDay,endDay).intValue();
    }
    //获取天差异
    public static Long DifferenceDayLong(Date startDay,Date endDay){
        LocalDate a = LocalDate.of(timeYest(startDay), timeMonth(startDay), timeDay(startDay));
        LocalDate b = LocalDate.of(timeYest(endDay), timeMonth(endDay), timeDay(endDay));
        return ChronoUnit.DAYS.between(a, b)+1;
    }
    //获取天差异
    public static Double DifferenceDayMorningAfternoon(Date startDay,Date endDay,int startTime,int endTime){
        double between = DifferenceDayLong(startDay, endDay).doubleValue();
        if (startTime==2){
            between = between-0.5;
        }
        if (endTime == 1){
            between = between-0.5;
        }
        return between;
    }
    //获取毫秒差异
    public static Long differenceInMilliseconds(Date startDay, Date endDay) {
        if (startDay == null || endDay == null) {
            throw new IllegalArgumentException("Dates cannot be null");
        }
        // 获取毫秒差异
        return endDay.getTime() - startDay.getTime();
    }
    public static boolean CompareData(Date startDay,Date endDay){
        // 将日期字符串解析为LocalDate对象
        LocalDate a = LocalDate.of(timeYest(startDay), timeMonth(startDay), timeDay(startDay));
        LocalDate b = LocalDate.of(timeYest(endDay), timeMonth(endDay), timeDay(endDay));
        // 比较日期
        if (a.isAfter(b)) {
            return false;
        } else if (a.isBefore(b)) {
            return true;
        } else {
            return true;
        }
    }
    //java.time.LocalDate 转换为 java.util.Date;
    public static Date DateLocalDate(LocalDate localDate) {
        return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
    }
    //获取现在日期是当月第几周
    public static int WeeklyNowMonthDay(Date date) {
//        int day = timeDay(date);
//        if (day<7){
//            if (WeeklyNowMonth(WeeklyMonday(date))>2){
//                return 1;
//            }
//        }
        return WeeklyNowMonth(WeeklyMonday(date));
    }
    public static int WeeklyNowMonth(Date date) {
//        LocalDate currentDate = LocalDate.now();
        LocalDate currentDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date));
        WeekFields weekFields = WeekFields.of(Locale.getDefault());
        int weekOfMonth = currentDate.get(weekFields.weekOfMonth());
        return weekOfMonth;
    }
    //限制两个日期是周一和周末  工作日  周一到周六
    public static void WeeklySix(Date date) {
//        LocalDate startDate = LocalDate.of(2022, 9, 5); // 假设开始日期是2022年9月5日,周一
        LocalDate startDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date));
        System.out.println("当前日期 " + startDate + " 周");
        LocalDate endDate = startDate.plus(6, ChronoUnit.DAYS); // 结束日期是开始日期加上6天
        System.out.println("当前日期加上6天是 " + endDate + " 周");
        // 如果开始日期不是周一,则将它调整到下一个周一
        if (startDate.getDayOfWeek() != DayOfWeek.MONDAY) {
            startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        }
        // 如果结束日期不是周末(即周六或周日),则将它调整到下一个周末
        if (endDate.getDayOfWeek() != DayOfWeek.SATURDAY && endDate.getDayOfWeek() != DayOfWeek.SUNDAY) {
            endDate = endDate.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
        }
        // 确保两个日期之间相隔七天
        while (startDate.plus(7, ChronoUnit.DAYS).isBefore(endDate)) {
            startDate = startDate.plus(7, ChronoUnit.DAYS);
        }
        System.out.println("开始日期:" + startDate);
        System.out.println("结束日期:" + endDate);
    }
    //限制两个日期是周一和周末  周一到周日
    public static List<Date> WeeklySeven(Date date) {
//        LocalDate startDate = LocalDate.of(2022, 9, 5); // 假设开始日期是2022年9月5日,周一
        LocalDate startDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date));
//        System.out.println("当前日期 " + startDate + " 周");
        LocalDate endDate = startDate.plus(6, ChronoUnit.DAYS); // 结束日期是开始日期加上6天
//        System.out.println("当前日期加上6天是 " + endDate + " 周");
        // 如果开始日期不是周一,则将它调整到下一个周一
        if (startDate.getDayOfWeek() != DayOfWeek.MONDAY) {
            startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        }
        // 如果结束日期不是周日,则将它调整到下一个周日
        if (endDate.getDayOfWeek() != DayOfWeek.SUNDAY) {
            endDate = endDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
        }
        // 确保两个日期之间相隔七天
        while (startDate.plus(7, ChronoUnit.DAYS).isBefore(endDate)) {
            startDate = startDate.plus(7, ChronoUnit.DAYS);
        }
        List<Date> dateList = new ArrayList<>();
        dateList.add(DateLocalDate(startDate));
        dateList.add(DateLocalDate(endDate));
        return dateList;
//        System.out.println("开始日期:" + startDate);
//        System.out.println("结束日期:" + endDate);
    }
    //判断是不是周一
    public static boolean WeeklyOneSign(Date date) {
        LocalDate localDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date));
        // 判断是不是周一
        if (localDate.getDayOfWeek() != DayOfWeek.MONDAY) {
            return false;
        }
        return true;
    }
    //获取本周周一
    public static Date WeeklyMonday (Date date) {
        LocalDate localDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date));
        // 下周周一
        localDate = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        // 将LocalDate转换为Date
        Date monday = DateLocalDate(localDate);
        // 则将它调整到本周周一
        return timeFrontSevenYesterday(monday);
    }
    //获取当前日期所在的周一及周日时间
    public static List<Date> WeeklyMondayAndSundayNow(Date date) {
        Date nowMonday = WeeklyMonday(date);
        return WeeklySeven(nowMonday);
    }
    //获取当前日期上一周周一及周日时间
    public static List<Date> WeeklyMondayAndSundayFront(Date date) {
        Date nowMonday = WeeklyMonday(date);
        Date frontSevenYesterday = timeFrontSevenYesterday(nowMonday);
        return WeeklySeven(frontSevenYesterday);
    }
    //获取当前日期下一周周一及周日时间
    public static List<Date> WeeklyMondayAndSundayAfter(Date date) {
        Date nowMonday = WeeklyMonday(date);
        Date afterSevenYesterday = timeAfterSevenYesterday(nowMonday);
        return WeeklySeven(afterSevenYesterday);
    }
    //获取周一到周末
    public static List<Date> WeeklyDays(Date date){
        Date nowMonday = WeeklyMonday(date);
        List<Date> dateList = new ArrayList<>();
        dateList.add(nowMonday);
        for (int i = 1; i<7 ; i++){
            dateList.add(timeYesterdayN(nowMonday,i));
        }
        return dateList;
    }
    //获取周一到周末
    public static List<Date> WeeklyListDays(List<Date> dates){
        Date date = dates.get(0);
        Date nowMonday = WeeklyMonday(date);
        List<Date> dateList = new ArrayList<>();
        dateList.add(nowMonday);
        for (int i = 1; i<7 ; i++){
            dateList.add(timeYesterdayN(nowMonday,i));
        }
        return dateList;
    }
    public static void main(String[] args) {
        Date now = new Date();
        int weeklyNowMonth = WeeklyNowMonthDay(now);
        System.out.println("当前日期是第 " + weeklyNowMonth + " 周");
        LocalDate startDate1 = LocalDate.of(2024, 2, 29);
        int weeklyNowMonth1 = WeeklyNowMonthDay(DateLocalDate(startDate1));
        System.out.println("当前日期是第 " + weeklyNowMonth1 + " 周");
        LocalDate startDate2 = LocalDate.of(2024, 3, 5);
        int weeklyNowMonth2 = WeeklyNowMonthDay(DateLocalDate(startDate2));
        System.out.println("当前日期是第 " + weeklyNowMonth2 + " 周");
        LocalDate startDate3 = LocalDate.of(2024, 3, 10);
        int weeklyNowMonth3 = WeeklyNowMonthDay(DateLocalDate(startDate3));
        System.out.println("当前日期是第 " + weeklyNowMonth3 + " 周");
        LocalDate startDate4 = LocalDate.of(2024, 3, 31);
        int weeklyNowMonth4 = WeeklyNowMonthDay(DateLocalDate(startDate4));
        System.out.println("当前日期是第 " + weeklyNowMonth4 + " 周");
        LocalDate startDate5 = LocalDate.of(2024, 4, 1);
        int weeklyNowMonth5 = WeeklyNowMonthDay(DateLocalDate(startDate5));
        System.out.println("当前日期是第 " + weeklyNowMonth5 + " 周");
        LocalDate startDate6 = LocalDate.of(2024, 4, 7);
        int weeklyNowMonth6 = WeeklyNowMonthDay(DateLocalDate(startDate6));
        System.out.println("当前日期是第 " + weeklyNowMonth6 + " 周");
    }
//    public static void main(String[] args) {
//        Date now = new Date();
//        //本周
//        List<Date> dateList = WeeklyMondayAndSundayNow(now);
//        for (Date date : dateList){
//            System.out.println("------------------------------");
//            System.out.println(date);
//        }
//        //上周
//        List<Date> dateList1 = WeeklyMondayAndSundayFront(now);
//        for (Date date : dateList1){
//            System.out.println("------------------------------");
//            System.out.println(date);
//        }
//        //下周
//        List<Date> dateList2 = WeeklyMondayAndSundayAfter(now);
//        for (Date date : dateList2){
//            System.out.println("------------------------------");
//            System.out.println(date);
//        }
//        //周
//        List<Date> dateList3 = WeeklyDays(now);
//        for (Date date : dateList3){
//            System.out.println("------------------------------");
//            System.out.println(date);
//        }
//    }
}
src/main/resources/mapper/WrkMastMapper.xml
@@ -80,7 +80,7 @@
    <select id="selectToBeHistoryData" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where wrk_sts=5
        where wrk_sts=4
        or (wrk_sts=15 and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and dateadd(mi,15,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp))