cpT
2025-06-30 de4f2b6569689626176abfef75be69e72eba8ed8
#改造
5个文件已修改
1个文件已添加
449 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/TaskWrkController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/TimeCalculatorUtils.java 358 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/TaskWrkController.java
@@ -246,6 +246,8 @@
        taskWrk.setMemo("手动强制删除!!!");
        taskWrk.setModiTime(now);
        taskWrk.setModiUser(getUserId());
        taskWrk.setCompleteTime(now);
        taskWrk.setCancelTime(now);
        if (!taskWrkService.updateById(taskWrk)){
            log.error("删除失败" + taskWrk);
            return R.error("删除失败" + taskWrk);
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.controller.CrnController;
import com.zy.asrs.domain.enums.TaskStatusType;
@@ -106,6 +107,7 @@
    private TaskWrkLogServiceImpl taskWrkLogService;
    @Autowired
    private BasPlcerrorLogServiceImpl basPlcerrorLogService;
    public Long currentTimeMilliConnectCrnAuto= 0L;
    public void generateStoreWrkFile() {
        try {
@@ -721,26 +723,61 @@
                    log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId());
                    continue;
                }
                if (crnProtocol.getLaneNo()!=0 && (crnProtocol.getBay()!=1 || crnProtocol.getLevel()!=1)){
                    if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.statusType == CrnStatusType.IDLE && crnProtocol.getTaskNo() != 0) {
                if (System.currentTimeMillis()-currentTimeMilliConnectCrnAuto<1000*60*10){
                    continue;
                }
                if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.statusType == CrnStatusType.IDLE && crnProtocol.getLoaded().equals((short)0) && crnProtocol.getLaneNo()!=0 && crnProtocol.getTaskNo() == 0 ) {
                    if (crnProtocol.getBay()!=1 || crnProtocol.getLevel()!=1){
                        //获取工作档
                        List<TaskWrk> taskWrks = taskWrkMapper.selectByLaneNo(crnProtocol.getLaneNo());
                        if (!taskWrks.isEmpty()) {
                            continue;
                        }
                        List<TaskWrkLog> taskWrkLogs = taskWrkLogService.selectList(new EntityWrapper<TaskWrkLog>().eq("CRN_NO",crnProtocol.getLaneNo()).orderBy("COMPLETE_TIME",true));
                        if (taskWrkLogs.isEmpty()) {
                            CrnCommand command = new CrnCommand();
                            if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(4, command))) {
                                log.error("堆垛机自动回源点失败,堆垛机号={}", crnProtocol.getCrnNo());
                        if (!taskWrkLogs.isEmpty()) {
                            TaskWrkLog taskWrkLog = taskWrkLogs.get(0);
                            Date completeTime = taskWrkLog.getCompleteTime();
                            if (completeTime==null){
                                completeTime = taskWrkLog.getCancelTime();
                                if (completeTime==null){
                                    completeTime = taskWrkLog.getModiTime();
                                }
                            }
                            long differenceInSeconds = TimeCalculatorUtils.differenceInMilliseconds(completeTime, new Date());
                            if (differenceInSeconds <= 60*10*1000) {
                                return;
                            }
                        }
//                        long differenceInSeconds = TimeCalculatorUtils.differenceInMilliseconds(taskWrkLogs.get(0).getCompleteTime(), new Date());
//                        if (differenceInSeconds <= 1000) {
//                            return;
//                        }
                        // 命令下发区 --------------------------------------------------------------------------
                        CrnCommand crnCommand = new CrnCommand();
                        crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号
                        crnCommand.setCrnNo(crnProtocol.getLaneNo()); // 堆垛机巷道编号
                        crnCommand.setTaskNo((short)999); // 工作号
                        crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                        crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式:  库位移转
                        crnCommand.setSourcePosX((short) 0);     // 源库位排
                        crnCommand.setSourcePosY((short) 0);     // 源库位列
                        crnCommand.setSourcePosZ((short) 0);   // 源库位层
                        int row = crnProtocol.getLaneNo() * 2;
                        crnCommand.setDestinationPosX((short) row);     // 目标库位排
                        crnCommand.setDestinationPosY((short) 1);     // 目标库位层
                        crnCommand.setDestinationPosZ((short) 1);     // 目标库位列
                        if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
                            log.error("堆垛机自动回源点失败,堆垛机号={}", crnProtocol.getCrnNo());
                            if (System.currentTimeMillis()-currentTimeMilliConnectCrnAuto>1000*60*10){
                                try{
                                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                    deviceErrorService.addDeviceError("CrnErr", crnProtocol.getCrnNo(), "堆垛机自动回源点失败");
                                } catch (Exception e2){
                                }
                                if (currentTimeMilliConnectCrnAuto == 0){
                                    currentTimeMilliConnectCrnAuto = System.currentTimeMillis()-1000*60*10-1;
                                } else {
                                    currentTimeMilliConnectCrnAuto = System.currentTimeMillis();
                                }
                            }
                        }
                    }
                }
            } catch (Exception e){
src/main/java/com/zy/asrs/utils/TimeCalculatorUtils.java
New file
@@ -0,0 +1,358 @@
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 {
    //获取七天前的日期(日期天数减七)
    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 long differenceInSeconds(Date startDay, Date endDay) {
        if (startDay == null || endDay == null) {
            throw new IllegalArgumentException("Dates cannot be null");
        }
        // 获取毫秒差异,并转换为秒
        long millisecondsDifference = endDay.getTime() - startDay.getTime();
        return millisecondsDifference / 1000;
    }
    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/java/com/zy/core/MainProcess.java
@@ -47,6 +47,8 @@
                    mainService.storeFinished();
                    // 任务下发
                    mainService.taskStart();
                    // 出库  ===>>  堆垛机10分钟无任务则回到源点
//                    mainService.crnStnToOutStnSou();
                } catch (Exception e) {
                    e.printStackTrace();
                }
@@ -69,8 +71,6 @@
                    mainService.recCrnErr();
                    // 输送线异常信息记录
//                    mainService.recDevErr();
                    // 出库  ===>>  堆垛机5分钟无任务则回到源点
//                    mainService.crnStnToOutStnSou();
                    // 出库  ===>> 工作档信息写入led显示器
//                    mainService.ledExecute(9);
                    // 其他  ===>> LED显示器复位,显示默认信息
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -98,20 +98,6 @@
                    // 复位
                    case 4:
                        CrnCommand command4 = (CrnCommand) task.getData();
                        if (null == command4) {
                            command4 = new CrnCommand();
                        }
                        command4.setCrnNo(slave.getId()); // 堆垛机编号
                        command4.setTaskNo((short) 9999); // 工作号
                        command4.setAckFinish((short) 0);  // 任务完成确认位
                        command4.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式
                        command4.setSourcePosX((short)0);     // 源库位排
                        command4.setSourcePosY((short)0);     // 源库位列
                        command4.setSourcePosZ((short)0);     // 源库位层
                        int row = slave.getId() * 2;
                        command4.setDestinationPosX((short)row);     // 目标库位排
                        command4.setDestinationPosY((short)1);     // 目标库位列
                        command4.setDestinationPosZ((short)1);     // 目标库位层
                        write(command4);
                        break;
                    default:
src/main/resources/application.yml
@@ -14,13 +14,13 @@
    driver-class-name: dm.jdbc.driver.DmDriver
#    url: jdbc:dm://27.172.2.102:5236/SOURCE
#    url: jdbc:dm://27.172.1.130:5236/SOURCE
#    url: jdbc:dm://27.172.1.129:5236/SOURCE
    url: jdbc:dm://27.172.1.129:5236/SOURCE
#    url: jdbc:dm://27.172.1.131/dm?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=GB18030
    url: jdbc:dm://127.0.0.1:5236/SOURCE
    username: SYSDBA
    password: Zy@12345
#    username: ZOS_ZEMIC
#    password: k3Mq6xRv9frOxb7n
#    url: jdbc:dm://127.0.0.1:5236/SOURCE
#    username: SYSDBA
#    password: Zy@12345
    username: ZOS_ZEMIC
    password: k3Mq6xRv9frOxb7n
#    username: ENC(++MryJD2j+X3rpmocG4vPH5vxXbpJNrF)
#    password: ENC(zOcPLHRUpllsRBQRlRrtQmljC8cKAoSzrGQaBST81MY=)
  mvc: