yangys
2024-11-15 d66fe6d46cdbaeb88e68ad96da6deb0b35cd131b
清理无用代码
已修改20个文件
已删除8个文件
已添加1个文件
568 ■■■■■ 文件已修改
smart-man-boot/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/common/config/MdcMqttConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/common/utils/LocalDateTimeUtils.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/controller/ProcessParameterController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/jobHandler/CacheNewCollectXxlJob.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/mapper/SuperCollectJsonMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/mapper/SuperNewCollectMapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/ICollectDataService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/IProcessParameterService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/IStatusRecordService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/ISuperNewCollectService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/IWorkstationFeedbackService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/RealTimeDataService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/CollectDataServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/EfficiencyAnalysisServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/ProcessParameterServiceImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/StatusRecordServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/SuperNewCollectServiceImpl.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/WorkstationFeedbackDetailServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/WorkstationFeedbackServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/smis/service/ICalendarService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/smis/service/impl/CalendarServiceImpl.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/smis/service/impl/WorkstationServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/trace/controller/TraceFlowRecordController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/trace/service/ITraceFlowRecordService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/trace/service/impl/TraceFlowRecordServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/resources/application-dev.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/resources/com/qianwen/smartman/modules/mdc/mapper/SuperCollectJsonMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/test/java/com/qianwen/smartman/modules/smis/service/impl/CalendarServiceImplTest.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/pom.xml
@@ -498,6 +498,12 @@
            <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
  <build>
smart-man-boot/src/main/java/com/qianwen/smartman/common/config/MdcMqttConfig.java
@@ -64,7 +64,7 @@
    /**
     * åé¦ˆåˆ›å»ºçš„topic(mdc中),本应用接收并处理
     */
    public static final String FEEDBACK_TOPIC = "mdc/feedback";
    //public static final String FEEDBACK_TOPIC = "mdc/feedback";
    
    public static final String WOCKSTATION_CREATE_TOPIC = "mdc/workstation-create";
    
smart-man-boot/src/main/java/com/qianwen/smartman/common/utils/LocalDateTimeUtils.java
@@ -79,12 +79,23 @@
        return time.withHour(23).withMinute(59).withSecond(59).withNano(999999999);
    }
    /**
     * è®¡ç®—一年的天数
     * @param year å¹´ä»½
     * @return year指定的年份总天数
     */
    public static Integer getDayOfYear(Integer year) {
        return Integer.valueOf(LocalDate.of(year.intValue(), 1, 1).isLeapYear() ? 366 : 365);
        return Integer.valueOf(LocalDate.of(year, 1, 1).isLeapYear() ? 366 : 365);
    }
    /**
     * è®¡ç®—2个日期天数的差 endDate-startDate
     * @param startDate
     * @param endDate
     * @return
     */
    public static Integer getDifference(LocalDate startDate, LocalDate endDate) {
        Long l = Long.valueOf(endDate.toEpochDay() - startDate.toEpochDay());
        Long l = Long.valueOf(endDate.toEpochDay() - startDate.toEpochDay());//l.intValue()
        Integer difference = Integer.valueOf(Integer.parseInt(l.toString()));
        return difference;
    }
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/controller/ProcessParameterController.java
@@ -36,7 +36,7 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Api(value = "加工过程参数controller", tags = {"加工过程参数controller"})
@Api(value = "加工过程参数", tags = {"加工过程参数"})
@ApiResource({"mdc/process-parameter"})
@RestController
public class ProcessParameterController {
@@ -52,13 +52,14 @@
        return R.data(this.processParameterService.queryProcessParameterChart(vo));
    }
    /*
    @ApiOperationSupport(order = 2)
    @PostResource({"/sheet"})
    @ApiOperation(ExcelConstant.PROCESS_PARAMETER)
    @PreAuth
    public R<ProParamSheetVO> queryProcessParameterSheet(@Valid @RequestBody ProcessParameterSearchVO vo) {
        return R.data(this.processParameterService.queryProcessParameterSheet(vo, true));
    }
    }*/
    @ApiOperationSupport(order = 3)
    @PostResource({"/item"})
@@ -93,13 +94,14 @@
        return R.data(this.processParameterService.processParams(workstationId));
    }
    /*
    @ApiOperationSupport(order = 6)
    @PostResource({"/excel/export"})
    @ApiOperation("导出加工过程参数")
    @PreAuth
    public R<BladeFile> exportProcessParam(@RequestBody ProcessParamExcelVO vo) {
        return R.data(this.processParameterService.exportProcessParam(vo));
    }
    }*/
    @ApiOperationSupport(order = 7)
    @PostResource({"/shift-time"})
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/jobHandler/CacheNewCollectXxlJob.java
ÎļþÒÑɾ³ý
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/mapper/SuperCollectJsonMapper.java
ÎļþÒÑɾ³ý
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/mapper/SuperNewCollectMapper.java
ÎļþÒÑɾ³ý
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/ICollectDataService.java
ÎļþÒÑɾ³ý
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/IProcessParameterService.java
@@ -35,9 +35,9 @@
     */
    //List<WorkstationWcsDmpDTO> processParam(String workstationId);
    ProParamSheetVO queryProcessParameterSheet(ProcessParameterSearchVO vo, Boolean isFilterProcessParameter);
    //ProParamSheetVO queryProcessParameterSheet(ProcessParameterSearchVO vo, Boolean isFilterProcessParameter);
    BladeFile exportProcessParam(ProcessParamExcelVO vo);
    //BladeFile exportProcessParam(ProcessParamExcelVO vo);
    ShiftTimeVO getShiftTime(ProcessParameterSearchVO vo);
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/IStatusRecordService.java
@@ -24,7 +24,7 @@
    List<ChartDataVO> getTimeDistribution(StatusRecordDetailSelectVO statusRecordDetailSelectVO);
    /**
     * æŸ¥è¯¢è®¾å¤‡æ•ˆçŽ‡ï¼Œåœ¨å·¥ä½æ•°æ®ç•Œé¢ï¼ˆè®¾å¤‡æ•ˆçŽ‡ç»Ÿè®¡å›¾ï¼‰ï¼Œç‚¹å‡»æŸä¸€ä¸ªæœºå™¨çš„æ—¶å€™è°ƒç”¨
     * ç»Ÿè®¡è®¾å¤‡æ•ˆçŽ‡ï¼Œåœ¨å·¥ä½æ•°æ®ç•Œé¢ï¼ˆè®¾å¤‡æ•ˆçŽ‡ç»Ÿè®¡å›¾ï¼‰ï¼Œç‚¹å‡»æŸä¸€ä¸ªæœºå™¨çš„æ—¶å€™è°ƒç”¨
     * @param statusRecordDetailSelectVO æŸ¥è¯¢å‚æ•°
     * @return
     */
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/ISuperNewCollectService.java
ÎļþÒÑɾ³ý
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/IWorkstationFeedbackService.java
@@ -51,6 +51,13 @@
    @RedisLock(value = ExtCacheConstant.WORK_FEEDBACK, param = "#dto.workstationId")
    boolean endAndStartAgainFeedback(WorkstationEndAndStartImmediateFeedBackDTO dto);
    /**
     * ä»Žåé¦ˆçš„redis缓存中获取状态记录的数据
     * @param statusTime
     * @param workstationIds
     * @param statusRecordList
     * @return
     */
    List<StatusRecordVO> groupStatusRecordWithFeedbackCache(final LocalDate statusTime, final Long workstationIds, final List<StatusRecordVO> statusRecordList);
    @Cacheable(cacheNames = {WORK_FEEDBACK_EXP}, key = "'id:'.concat(#id)")
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/RealTimeDataService.java
@@ -49,7 +49,7 @@
                preT = tempStatusVO.getTime().getTime();
            }
            statusJson.put("preT", preT);
            //statusJson.put("t", System.currentTimeMillis());//时间改为当前)
            map.put(statusDpName, statusJson);//覆盖原来的DeviceStatus
        }
    }
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/CollectDataServiceImpl.java
ÎļþÒÑɾ³ý
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/EfficiencyAnalysisServiceImpl.java
@@ -101,11 +101,14 @@
        IPage<Workstation> workstationPage = WorkstationConvert.INSTANCE.convert(workstationVOPage);
        List<Long> workstationIds = workstationPage.getRecords().stream().map(Workstation::getId).collect(Collectors.toList());
        List<IntervalDateDto> intervalDates = LocalDateTimeUtils.getIntervalDate(statisticsAnalysisQueryVO.getStartDate(), statisticsAnalysisQueryVO.getEndDate());
        //都是用采集的数据(getStatusData),不用反馈的。计划内外所有状态都能设置。
        if (statisticsAnalysisQueryVO.getProductivityType() == ProductivityTypeEnum.OEE) {
            superAggregateStates = this.superAggregateStateService.getStatusDataWithFeedback(workstationIds, statisticsAnalysisQueryVO.getStatisticalMethod(), statisticsAnalysisQueryVO.getStartDate(), statisticsAnalysisQueryVO.getEndDate());
            //superAggregateStates = this.superAggregateStateService.getStatusDataWithFeedback(workstationIds, statisticsAnalysisQueryVO.getStatisticalMethod(), statisticsAnalysisQueryVO.getStartDate(), statisticsAnalysisQueryVO.getEndDate());
        } else {
            superAggregateStates = this.superAggregateStateService.getStatusData(workstationIds, statisticsAnalysisQueryVO.getStatisticalMethod(), statisticsAnalysisQueryVO.getStartDate(), statisticsAnalysisQueryVO.getEndDate());
            //superAggregateStates = this.superAggregateStateService.getStatusData(workstationIds, statisticsAnalysisQueryVO.getStatisticalMethod(), statisticsAnalysisQueryVO.getStartDate(), statisticsAnalysisQueryVO.getEndDate());
        }
        superAggregateStates = this.superAggregateStateService.getStatusData(workstationIds, statisticsAnalysisQueryVO.getStatisticalMethod(), statisticsAnalysisQueryVO.getStartDate(), statisticsAnalysisQueryVO.getEndDate());
        List<SuperAggregate> superAggregateList = superAggregateStates.stream().filter(x -> {
            return x.getWcs() > 0;
        }).collect(Collectors.toList());
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/ProcessParameterServiceImpl.java
@@ -68,7 +68,7 @@
import com.qianwen.smartman.modules.mdc.dto.StatusDTO;
import com.qianwen.smartman.modules.mdc.entity.WorkstationCollectData;
import com.qianwen.smartman.modules.mdc.enums.ProcessParamEnum;
import com.qianwen.smartman.modules.mdc.mapper.SuperCollectJsonMapper;
//import com.qianwen.smartman.modules.mdc.mapper.SuperCollectJsonMapper;
import com.qianwen.smartman.modules.mdc.mapper.SuperProcessParameterMapper;
import com.qianwen.smartman.modules.mdc.service.IProcessParameterService;
import com.qianwen.smartman.modules.mdc.service.ProcessParameterHelperService;
@@ -91,8 +91,8 @@
@Service
public class ProcessParameterServiceImpl implements IProcessParameterService {
    private static final Logger log = LoggerFactory.getLogger(ProcessParameterServiceImpl.class);
    @Autowired
    private SuperCollectJsonMapper collectJsonMapper;
    //@Autowired
    //private SuperCollectJsonMapper collectJsonMapper;
    @Autowired
    private IWorkstationService workstationService;
    @Autowired
@@ -221,7 +221,7 @@
        return list.stream().filter(dp -> dp.getIsProcessParam()!=null && dp.getIsProcessParam()).collect(Collectors.toList());
        
    }
    /*
    @Override
    public ProParamSheetVO queryProcessParameterSheet(ProcessParameterSearchVO vo, Boolean isFilterProcessParameter) {
        ProcessParamEnum methodEnum = vo.getMethodEnum();
@@ -233,8 +233,8 @@
            default:
                return new ProParamSheetVO();
        }
    }
    }*/
    /*
    @Override
    public BladeFile exportProcessParam(ProcessParamExcelVO vo) {
        try {
@@ -244,7 +244,7 @@
            throw new RuntimeException(e);
        }
    }
    */
    @Override
    public ShiftTimeVO getShiftTime(ProcessParameterSearchVO vo) {
        String workstationId = vo.getWorkstationId();
@@ -456,7 +456,7 @@
            return entityVO(parameterList, wcs, collectItemMap);
        }).orElse(new ProcessParameterResVO());
    }
    /*
    private ProParamSheetVO buildProcessHourSheet(ProcessParameterSearchVO vo, Boolean isFilterProcessParameter) {
        Date startTime = vo.getStartTime();
        Date endTime = vo.getEndTime();
@@ -483,8 +483,8 @@
            return new ProParamSheetVO();
        }
        return buildSheetVO(vos, dtoList, wcs, getWcsMap());
    }
    }*/
    /*
    private ProParamSheetVO buildProcessShiftSheet(ProcessParameterSearchVO vo, Boolean isFilterProcessParameter) {
        Integer shift = vo.getShift();
        LocalDate queryTime = vo.getQueryTime();
@@ -510,8 +510,8 @@
            return new ProParamSheetVO();
        }
        return buildSheetVO(vos, dtoList, wcs, getWcsMap());
    }
    }*/
    /*
    private BladeFile exportByHour(ProcessParamExcelVO vo) throws Exception {
        Date startTime = vo.getStartTime();
        Date endTime = vo.getEndTime();
@@ -524,7 +524,8 @@
        MultipartFile multipartFile = ExcelStrategyUtil.customerStyleExport(fileName, ExcelConstant.SHEET, head, content);
        return this.ossBuilder.tempTemplate().putFile(multipartFile.getOriginalFilename(), multipartFile);
    }
    */
    /*
    private List<List<Object>> buildExcelContentByHour(Long workstationId, List<WorkstationWcsDmpDTO> collectItem, Date startTime, Date endTime) {
        Workstation workstation = (Workstation) this.workstationService.getById(workstationId);
        Map<Long, GroupWorkDTO> groupWorkMap = this.workstationService.queryGroupWorkStation(Lists.newArrayList(new Long[]{workstation.getId()}));
@@ -539,7 +540,7 @@
            return Lists.newArrayList();
        }
        return buildExcelContentByHour(collectItem, parameterList, wcs, workstation, groupName, timeShiftAll);
    }
    }*/
    private List<List<Object>> buildExcelContentByHour(List<WorkstationWcsDmpDTO> collectItem, List<NewParamDTO> parameterList, WorkstationWcsDmpDTO wcs, Workstation workstation, String groupName, List<CalendarShiftDTO> timeShiftAll) {
        List<Tuple> times = timeShiftAll.stream().map(calendarShiftDTO -> {
@@ -583,11 +584,11 @@
        }
        return head;
    }
    /*
    private List<NewParamDTO> processParameterList(Date startTime, Date endTime, String workstationId) {
        return this.collectJsonMapper.queryProcessParameter(workstationId, Long.valueOf(startTime.getTime()), Long.valueOf(endTime.getTime()));
    }
    */
    private List<ProcessParameterVO> oldProcessParameterList(Date startTime, Date endTime, List<String> collectItems, String workstationId) {
        return this.parameterMapper.queryProcessParameter(workstationId, collectItems, Long.valueOf(startTime.getTime()), Long.valueOf(endTime.getTime()));
    }
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/StatusRecordServiceImpl.java
@@ -166,12 +166,16 @@
    public List<ChartDataVO> getEquipmentEfficiency(StatusRecordDetailSelectVO statusRecordDetailSelectVO) {
        List<ChartDataVO> result = new ArrayList<>();
        List<SuperAggregateState> superAggregateStateList = this.superAggregateStateService.getStatusData(Arrays.asList(statusRecordDetailSelectVO.getWorkstationId()), null, statusRecordDetailSelectVO.getDate(), statusRecordDetailSelectVO.getDate());
        List<SuperAggregateState> oeeAggregateStateList = this.superAggregateStateService.getStatusDataWithFeedback(Arrays.asList(statusRecordDetailSelectVO.getWorkstationId()), null, statusRecordDetailSelectVO.getDate(), statusRecordDetailSelectVO.getDate());
        //下面一行不用了,应为稼动率再分析设置界面和这里不相符,我们同意使用状态数据,不用feedback的
        //List<SuperAggregateState> oeeAggregateStateList = this.superAggregateStateService.getStatusDataWithFeedback(Arrays.asList(statusRecordDetailSelectVO.getWorkstationId()), null, statusRecordDetailSelectVO.getDate(), statusRecordDetailSelectVO.getDate());
        ProductivityTypeEnum[] values = ProductivityTypeEnum.values();
        int length = values.length;
        for (int i = 0; i < length; i++) {
            ProductivityTypeEnum productivityTypeEnum = values[i];
            ChartDataVO chartData = new ChartDataVO().setName(productivityTypeEnum.getMessage()).setValue(EifficiencyUtils.calculationResults(productivityTypeEnum == ProductivityTypeEnum.OEE ? oeeAggregateStateList : superAggregateStateList, productivityTypeEnum));
            //ChartDataVO chartData = new ChartDataVO().setName(productivityTypeEnum.getMessage()).setValue(EifficiencyUtils.calculationResults(productivityTypeEnum == ProductivityTypeEnum.OEE ? oeeAggregateStateList : superAggregateStateList, productivityTypeEnum));
            //上面一行,去掉oee的传值
            ChartDataVO chartData = new ChartDataVO().setName(productivityTypeEnum.getMessage()).setValue(EifficiencyUtils.calculationResults(superAggregateStateList, productivityTypeEnum));
            result.add(chartData);
        }
        return result;
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/SuperNewCollectServiceImpl.java
ÎļþÒÑɾ³ý
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/WorkstationFeedbackDetailServiceImpl.java
@@ -40,9 +40,10 @@
    @Override
    public List<WorkstationFeedbackDetail> cancelFeedback(final LocalDate queryDate, final Long workstationId) {
        //在接口上,该方法已经被缓存到了redis(具体键值请查看接口方法注解),刚刚添加完数据是不会访问这个方法内部执行查询的,刚添加完返回也不会有WorkstationFeedbackDetail数据
        return list(Lambda.eq(WorkstationFeedbackDetail::getWorkstationId, workstationId)
                .dayBetween(queryDate, WorkstationFeedbackDetail::getStartTime, WorkstationFeedbackDetail::getEndTime)
                .eq(WorkstationFeedbackDetail::getCancel, Boolean.valueOf(true)).orderByDesc(WorkstationFeedbackDetail::getStartTime));
                .eq(WorkstationFeedbackDetail::getCancel, true).orderByDesc(WorkstationFeedbackDetail::getStartTime));
        /*
        return list((Wrapper) ((ExtraLambdaQueryWrapper) Lambda.eq((v0) -> {
            return v0.getWorkstationId();
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/WorkstationFeedbackServiceImpl.java
@@ -132,14 +132,6 @@
        return getOne(Lambda.eq(WorkstationFeedback::getWorkstationId, workstationId)
                .eq(WorkstationFeedback::getFeedbackType, FeedbackType.IMMEDIATE.getValue())
                .isNull(WorkstationFeedback::getEndTime));
        /*
        return (WorkstationFeedback) getOne((Wrapper) ((ExtraLambdaQueryWrapper) Lambda.eq((v0) -> {
            return v0.getWorkstationId();
        }, workstationId).eq((v0) -> {
            return v0.getFeedbackType();
        }, Integer.valueOf(FeedbackType.IMMEDIATE.getValue()))).isNull((v0) -> {
            return v0.getEndTime();
        }));*/
    }
    @Override 
@@ -157,7 +149,7 @@
                    updateById(oldFeedback);
                }
                WorkstationFeedback addFeedback = new WorkstationFeedback();
                addFeedback.setWorkstationId(Long.valueOf(Long.parseLong(workstationId)));
                addFeedback.setWorkstationId(Long.parseLong(workstationId));
                addFeedback.setStartTime(now);
                addFeedback.setFeedbackTime(now);
                if (Func.isNotEmpty(dto.getFeedUser())) {
@@ -211,7 +203,7 @@
    }
    /**
     * æ‰¹é‡æ¸…除 åé¦ˆ
     * æ‰¹é‡æ¸…除反馈的缓存,主要用于刷新前端的显示数据
     * @param startTime
     * @param endTime
     * @param workstationIds
@@ -225,7 +217,7 @@
    }
    /**
     * å•个清楚缓存中的反馈,从catcheName=WORK_FEEDBACK_EXP3缓存中删除 å®žé™…key为 group:feedback:list:blade:feedback#259200${workstationId}:yyyy-MM-dd HH:mm:ss
     * å•个清楚缓存中的反馈,从catcheName=WORK_FEEDBACK_EXP3缓存中删除 å®žé™…key为 blade:feedback:group:feedback:list:blade:feedback#259200${workstationId}:yyyy-MM-dd HH:mm:ss
     * @param start
     * @param end
     * @param workstationId
smart-man-boot/src/main/java/com/qianwen/smartman/modules/smis/service/ICalendarService.java
@@ -38,6 +38,11 @@
    CalendarVO getCalendar(Long valueOf);
    /**
     * ä¿®æ”¹ç”Ÿäº§æ—¥åŽ†æ•°æ®
     * @param calendarUpdateVO
     * @return
     */
    ProductionCalendar updateCalendar(CalendarUpdateVO calendarUpdateVO);
    ProductionCalendar copyCalendar(CalendarCopyVO calendarCopyVO);
smart-man-boot/src/main/java/com/qianwen/smartman/modules/smis/service/impl/CalendarServiceImpl.java
@@ -10,6 +10,7 @@
import java.time.temporal.TemporalUnit;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
@@ -30,7 +31,7 @@
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.apache.commons.lang3.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
@@ -94,6 +95,7 @@
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
@Service
public class CalendarServiceImpl extends ServiceImpl<CalendarMapper, ProductionCalendar> implements ICalendarService {
@@ -114,6 +116,9 @@
    @Transactional(rollbackFor = {Exception.class})
    public ProductionCalendar saveCalendar(CalendarSaveVO calendarSaveVO) {
        checkCalendar(calendarSaveVO, AuthUtil.getTenantId());
        checkDateDTOList(calendarSaveVO.getDateDTOList());
        ProductionCalendar productionCalendar = ProductionCalendarConvert.INSTANCE.conver(calendarSaveVO);
        save(productionCalendar);
        saveCalendarDayTime(calendarSaveVO.getDateDTOList(), productionCalendar);
@@ -130,13 +135,48 @@
        return productionCalendar;
    }
    @Transactional
    @Override
    public ProductionCalendar updateCalendar(CalendarUpdateVO calendarUpdateVO) {
        checkDateDTOList(calendarUpdateVO.getDateDTOList());
        this.calendarDayService.deleteByCalendarId(calendarUpdateVO.getId());
        this.calendarDaytimeService.deleteByCalendarId(calendarUpdateVO.getId());
        ProductionCalendar calendar = getById(calendarUpdateVO.getId());
        updateCalendarDayTime(calendarUpdateVO.getDateDTOList(), calendar);
        return calendar;
    }
    /**
     * æ£€æŸ¥å…¥å‚日期列表的重复数据,有重复则抛出错误信息
     * @param dateDTOList
     */
    void checkDateDTOList(List<CalendarDateDTO> dateDTOList) {
        List<LocalDate> dupList = dupulicateDate(dateDTOList);
        if(!dupList.isEmpty()) {
            String msg = StringUtils.join(dupList.stream().map(dt -> dt.format(DateTimeFormatter.ISO_DATE)).collect(Collectors.toList()), ",");
            throw new ServiceException("日期数据重复:"+msg);
        }
    }
    /***
     * èŽ·å–dateDTOList里面重复的数据(根据日期),日期一天只有一条
     * @param dateDTOList
     * @return
     */
    List<LocalDate> dupulicateDate(List<CalendarDateDTO> dateDTOList) {
        if(ObjectUtil.isEmpty(dateDTOList)) {
            return Collections.emptyList();
        }
        List<LocalDate> dupList = new ArrayList<>();
        Map<LocalDate, List<CalendarDateDTO>> map = dateDTOList.stream().collect(Collectors.groupingBy(CalendarDateDTO::getCalendarDate));
        map.forEach((date,dtoList) -> {
            if(dtoList.size()>1) {
                dupList.add(date);
            }
        });
        return dupList;
    }
    private void saveCalendarDayTime(List<CalendarDateDTO> dateDTOList, ProductionCalendar productionCalendar) {
@@ -258,52 +298,53 @@
    }
    private void updateCalendarDayTime(List<CalendarDateDTO> dateDTOList, ProductionCalendar calenadar) {
        final LocalDate localDateNow = LocalDate.now();
        Long calendarId = calenadar.getId();
        Integer year = calenadar.getYear();
        Integer currentYear = Integer.valueOf(LocalDate.now().getYear());
        Set<LocalDate> dateList = dateDTOList.stream().filter(c -> {
            return !Func.isNull(c.getModelId()) && Func.isNull(c.getOffDayId());
        }).map((v0) -> {
            return v0.getCalendarDate();
        }).collect(Collectors.toSet());
        Set<LocalDate> offDay = dateDTOList.stream().filter(c2 -> {
            return !Func.isNull(c2.getOffDayId());
        }).map((v0) -> {
            return v0.getCalendarDate();
        }).collect(Collectors.toSet());
        Integer currentYear = localDateNow.getYear();
        //提取出班制id不是null且不是休息日的 æ—¥æœŸ
        Set<LocalDate> dateList = dateDTOList.stream().filter(c -> (!Func.isNull(c.getModelId()) && Func.isNull(c.getOffDayId()))).map(CalendarDateDTO::getCalendarDate).collect(Collectors.toSet());
        //提取所有为休息日的日期
        /**/
        Set<LocalDate> offDay = dateDTOList.stream().filter(c -> !Func.isNull(c.getOffDayId())).map(CalendarDateDTO::getCalendarDate).collect(Collectors.toSet());
        //初始化最终要保存的day和daytime列表,等待后面代码填充
        List<ProductionCalendarDaytime> productionCalendarDaytimeList = new ArrayList<>();
        List<ProductionCalendarDay> productionCalendarDayList = new ArrayList<>();
        List<Long> modelIds = dateDTOList.stream().map((v0) -> {
            return v0.getModelId();
        }).distinct().collect(Collectors.toList());
        //提取所有班制id并去重
        List<Long> modelIds = dateDTOList.stream().map(CalendarDateDTO::getModelId).distinct().collect(Collectors.toList());
        Map<Long, ShiftVO> shiftDetailMap = this.shiftModelService.getShiftDetail(modelIds);
        Snowflake snowflake = IdUtil.createSnowflake(1L, 1L);
        
        //查询今天的daytime数据列表
        List<ProductionCalendarDaytime> todayDateTimeList = this.calendarDaytimeService.list(new QueryWrapper<ProductionCalendarDaytime>().lambda()
                .eq(ProductionCalendarDaytime::getCalendarDate, LocalDate.now())
                .eq(ProductionCalendarDaytime::getCalendarDate, localDateNow)
                .eq(ProductionCalendarDaytime::getCalendarId, calendarId)
                .orderByAsc(ProductionCalendarDaytime::getStartTime));
        
        
        List<ProductionCalendarDaytime> curProductionCalendarDayTimeList = new ArrayList<>();
        LocalDate lastDayOfYear = LocalDateTimeUtils.getLastDayOfYear(LocalDate.now());
        long difference = year.intValue() == LocalDate.now().getYear() ? LocalDateTimeUtils.getDifference(LocalDate.now(), lastDayOfYear).intValue() : LocalDateTimeUtils.getDayOfYear(year).intValue() - 1;
        long j = 0;
        while (true) {
            long i = j;
            if (i <= difference) {
                LocalDate needHandleDate = year.equals(currentYear) ? LocalDate.now().plus(difference - i, ChronoUnit.DAYS) : LocalDate.of(year.intValue(), 1, 1).plus(difference - i, ChronoUnit.DAYS);// (TemporalUnit) ChronoUnit.DAYS
                LocalDate nextNeedHandleDate = needHandleDate.plus(1L, (TemporalUnit) ChronoUnit.DAYS);
                buildCurrentDayTime(dateDTOList, calendarId, year, dateList, offDay, productionCalendarDaytimeList, productionCalendarDayList, shiftDetailMap, snowflake, curProductionCalendarDayTimeList, needHandleDate);
                handleConflietDayTime(calenadar, year, productionCalendarDaytimeList, todayDateTimeList, curProductionCalendarDayTimeList, difference, i, needHandleDate, nextNeedHandleDate);
                j = i + 1;
            } else {
                this.calendarDayService.saveBatchDay(productionCalendarDayList);
                this.calendarDaytimeService.saveBatchDaytime(productionCalendarDaytimeList);
                return;
            }
        LocalDate lastDayOfYear = LocalDateTimeUtils.getLastDayOfYear(localDateNow);//今年最后一天
        //日历的年份与当前年份相同,则返回: ä»Šå¹´æœ€åŽä¸€å¤©-今天 çš„天数差.否则返回:一整年的天数-1
        //difference ä¹Ÿå°±æ˜¯å®žé™…需要排班的总天数
        long difference = year.intValue() == localDateNow.getYear() ? LocalDateTimeUtils.getDifference(localDateNow, lastDayOfYear) : LocalDateTimeUtils.getDayOfYear(year) - 1;
        //计算并生成day和daytime数据
        for (long i = 0; i < difference; i++) {//修改i<=difference æ”¹ä¸ºi<difference,下面代码difference - i在最后一次循环difference - i=0,也就是当天了,当天是不能排班的,而且会造成day数据重复
            //考虑LocalDate.now()实例化,plus改为plusDays
            //LocalDate needHandleDate = year.equals(currentYear) ? localDateNow.plus(difference - i, ChronoUnit.DAYS) : LocalDate.of(year, 1, 1).plus(difference - i, ChronoUnit.DAYS);
            LocalDate needHandleDate = year.equals(currentYear) ? localDateNow.plusDays(difference - i) : LocalDate.of(year, 1, 1).plusDays(difference - i);
            //LocalDate nextNeedHandleDate = needHandleDate.plus(1, ChronoUnit.DAYS);
            LocalDate nextNeedHandleDate = needHandleDate.plusDays(1);
            buildCurrentDayTime(dateDTOList, calendarId, year, dateList, offDay, productionCalendarDaytimeList, productionCalendarDayList, shiftDetailMap, snowflake, curProductionCalendarDayTimeList, needHandleDate);
            handleConflietDayTime(calenadar, year, productionCalendarDaytimeList, todayDateTimeList, curProductionCalendarDayTimeList, difference, i, needHandleDate, nextNeedHandleDate);
        }
        //保存day和daytime数据
        this.calendarDayService.saveBatchDay(productionCalendarDayList);
        this.calendarDaytimeService.saveBatchDaytime(productionCalendarDaytimeList);
    }
    private void handleConflietDayTime(ProductionCalendar calenadar, Integer year, List<ProductionCalendarDaytime> productionCalendarDaytimeList, List<ProductionCalendarDaytime> todayDateTimeList, List<ProductionCalendarDaytime> curProductionCalendarDayTimeList, long difference, long i, LocalDate needHandleDate, LocalDate nextNeedHandleDate) {
smart-man-boot/src/main/java/com/qianwen/smartman/modules/smis/service/impl/WorkstationServiceImpl.java
@@ -589,6 +589,11 @@
   
    /**
     * èŽ·å–å®žæ—¶æ•°æ®å±•ç¤ºçš„æ•°æ®ç‚¹åˆ—è¡¨
     * @param workstationIdList å·¥ä½id集合
     * @return map(工位id -> æ•°æ®ç‚¹é›†åˆ)
     */
    public Map<Long, List<RealTimeStatusVO>> getRealTimeProperties(List<Long> workstationIdList) {
        Map<Long, List<RealTimeStatusVO>> properties = new HashMap<>();
        
@@ -603,7 +608,7 @@
            WorkstationDatapointsVO  dpVO = wsDpService.getDatapoints(workstationId);
            if(dpVO!=null && ObjectUtil.isNotEmpty(dpVO.getDpHead())) {
                
                String prop,label;
                String prop;
                JSONArray dpCfgJson = JSONArray.parseArray(dpVO.getDpConfig());
                for(int i=0;i<dpCfgJson.size();i++) {
                    cfgRow = dpCfgJson.getJSONObject(i);
@@ -1141,16 +1146,16 @@
    }
    private IPage<WorkstationRealTimeStatusVO> manualBuildIPage(Query query, List<WorkstationRealTimeStatusVO> result) {
        Page<WorkstationRealTimeStatusVO> page = new Page<>(query.getCurrent().intValue(), query.getSize().intValue(), result.size());
        Page<WorkstationRealTimeStatusVO> page = new Page<>(query.getCurrent(), query.getSize(), result.size());
        if (result.size() == 0) {
            return page;
        }
        if (query.getSize().intValue() == -1) {
        if (query.getSize() == -1) {
            page.setRecords(result);
        } else if (result.size() < ((query.getCurrent().intValue() - 1) * query.getSize().intValue()) + query.getSize().intValue()) {
            page.setRecords(result.subList((query.getCurrent().intValue() - 1) * query.getSize().intValue(), result.size()));
        } else if (result.size() < ((query.getCurrent() - 1) * query.getSize()) + query.getSize()) {
            page.setRecords(result.subList((query.getCurrent() - 1) * query.getSize(), result.size()));
        } else {
            page.setRecords(result.subList((query.getCurrent().intValue() - 1) * query.getSize().intValue(), ((query.getCurrent().intValue() - 1) * query.getSize().intValue()) + query.getSize().intValue()));
            page.setRecords(result.subList((query.getCurrent() - 1) * query.getSize(), ((query.getCurrent() - 1) * query.getSize()) + query.getSize()));
        }
        return page;
    }
@@ -1161,12 +1166,10 @@
            return dataList;
        }
        //TODO,格式太差
        Map<Long, List<RealTimeStatusVO>> realTimePropertiesMap = getRealTimeProperties( list.stream().map((v0) -> {
            return v0.getId();
        }).collect(Collectors.toList()));
        Map<Long, List<RealTimeStatusVO>> realTimePropertiesMap = getRealTimeProperties( list.stream().map(WorkstationRealTimeStatusVO::getId).collect(Collectors.toList()));
        
        return list.stream().filter(i -> {
            boolean filter = Boolean.TRUE.booleanValue();
            boolean filter = true;
            if (Func.isEmpty(i.getMachineId())) {
                filter = false;
            }
smart-man-boot/src/main/java/com/qianwen/smartman/modules/trace/controller/TraceFlowRecordController.java
@@ -60,13 +60,14 @@
        return R.data(this.traceFlowRecordService.getOtherProcessParameter(partNo, id));
    }
    /*
    @ApiOperationSupport(order = 3)
    @GetResource({"/workstation-process-parameter"})
    @ApiOperation("加工设备类型获取工件流程记录")
    @PreAuth
    public R<ProParamSheetVO> processParameter(@RequestParam("id") @ApiParam(value = "加工流程id", required = true) String id, @RequestParam("shiftIndex") @ApiParam(value = "班次", required = true) Integer shiftIndex) {
        return R.data(this.traceFlowRecordService.getProcessParameter(id, shiftIndex));
    }
    }*/
    @ApiOperationSupport(order = 4)
    @PostResource({"/export"})
smart-man-boot/src/main/java/com/qianwen/smartman/modules/trace/service/ITraceFlowRecordService.java
@@ -23,7 +23,7 @@
    OtherWorkstationVO getOtherProcessParameter(String partNo, String id);
    ProParamSheetVO getProcessParameter(String id, Integer shiftIndex);
    //ProParamSheetVO getProcessParameter(String id, Integer shiftIndex);
    List<TraceCatalogFlowRecordExportVO> getExportData(TraceCatalogSearchVO traceCatalogSearchVO);
smart-man-boot/src/main/java/com/qianwen/smartman/modules/trace/service/impl/TraceFlowRecordServiceImpl.java
@@ -155,16 +155,13 @@
        return otherWorkstationVO;
    }
    /*
    public ProParamSheetVO getProcessParameter(String id, Integer shiftIndex) {
        TraceFlowRecord traceFlowRecord = (TraceFlowRecord) getById(id);
        if (traceFlowRecord != null) {
            TraceFlowSettings traceFlowSettings = this.flowSettingsService.getOne(Wrappers.<TraceFlowSettings>lambdaQuery()
                    .eq(TraceFlowSettings::getCode, traceFlowRecord.getFlowCode()));
            /*
            TraceFlowSettings traceFlowSettings = (TraceFlowSettings) this.flowSettingsService.getOne((Wrapper) Wrappers.lambdaQuery().eq((v0) -> {
                return v0.getCode();
            }, traceFlowRecord.getFlowCode()));*/
            if (traceFlowSettings != null) {
                ProcessParameterSearchVO processParameterSearchVO = new ProcessParameterSearchVO();
                processParameterSearchVO.setMethodEnum(ProcessParamEnum.HOUR);
@@ -181,7 +178,7 @@
            return null;
        }
        return null;
    }
    }*/
    
    public List<TraceCatalogFlowRecordExportVO> getExportData(TraceCatalogSearchVO traceCatalogSearchVO) {
smart-man-boot/src/main/resources/application-dev.yml
@@ -45,7 +45,7 @@
iotdb:
  driver: org.apache.iotdb.jdbc.IoTDBDriver
  host: 120.46.212.231
  host: 116.63.148.72 #116.63.148.72  120.46.212.231
  port: 6667
  maxSize: 10
  username: root
@@ -60,7 +60,7 @@
  clientid: mqtt_publish
  default_topic: TEST #当前客户端的默认主题(大多数时候没什么用)
  #发送超时时间
  mqtt.timeout: 1000
  timeout: 3000
  #心跳时间
  keepalive: 10
  connectionTimeout: 3000 #连接超时时间
smart-man-boot/src/main/resources/com/qianwen/smartman/modules/mdc/mapper/SuperCollectJsonMapper.xml
ÎļþÒÑɾ³ý
smart-man-boot/src/test/java/com/qianwen/smartman/modules/smis/service/impl/CalendarServiceImplTest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package com.qianwen.smartman.modules.smis.service.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.junit.jupiter.api.Test;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.Assertions;
import com.qianwen.smartman.modules.smis.dto.CalendarDateDTO;
public class CalendarServiceImplTest {
    @Test
    public void testDupulicateDate() {
        CalendarServiceImpl s = new CalendarServiceImpl();
        List<CalendarDateDTO> dateDTOList = new ArrayList<>();
        Assertions.assertNotNull(s.dupulicateDate(null));
        Assertions.assertNotNull(s.dupulicateDate(dateDTOList));
        LocalDate d1 = LocalDate.now();
        CalendarDateDTO dto1 = new CalendarDateDTO();
        dto1.setCalendarDate(d1);
        Assertions.assertTrue(s.dupulicateDate(Arrays.asList(dto1)).isEmpty());
        CalendarDateDTO dto2 = new CalendarDateDTO();
        dto2.setCalendarDate(d1);
        List<LocalDate> dupList = s.dupulicateDate(Arrays.asList(dto1,dto2));
        Assertions.assertTrue(dupList.size()==1);
        //昨天,加入列表
        LocalDate d3 = d1.minusDays(1);
        CalendarDateDTO dto3 = new CalendarDateDTO();
        dto3.setCalendarDate(d3);
        dupList = s.dupulicateDate(Arrays.asList(dto1,dto2,dto3));
        Assertions.assertTrue(dupList.size()==1);
        //和dto3数据相同,应该是2条重复了
        LocalDate d4 = d1.minusDays(1);
        CalendarDateDTO dto4 = new CalendarDateDTO();
        dto4.setCalendarDate(d4);
        dupList = s.dupulicateDate(Arrays.asList(dto1,dto2,dto3,dto4));
        Assertions.assertTrue(dupList.size()==2);
    }
    @Test
    public void testFormatDate() {
        LocalDate d1 = LocalDate.of(2024, 11, 5);
        LocalDate d3 = LocalDate.of(2024, 11, 6);
        List<LocalDate> dupList = Arrays.asList(d1,d3);
        String str = StringUtils.join(dupList.stream().map(dt -> dt.format(DateTimeFormatter.ISO_DATE)).collect(Collectors.toList()), ",");
        System.out.print("r="+str);
    }
    @Test
    public void testDef() {
        LocalDate d1 = LocalDate.of(1970, 1, 1);
        Assertions.assertEquals(0, d1.toEpochDay());
        d1 = LocalDate.of(1970, 1, 30);
        Assertions.assertEquals(29, d1.toEpochDay());
    }
}