| | |
| | | <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> |
| | |
| | | /** |
| | | * åé¦å建ç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"; |
| | | |
| | |
| | | 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; |
| | | } |
| | |
| | | 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 { |
| | |
| | | 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"}) |
| | |
| | | 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"}) |
| | |
| | | */ |
| | | //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); |
| | | |
| | |
| | | List<ChartDataVO> getTimeDistribution(StatusRecordDetailSelectVO statusRecordDetailSelectVO); |
| | | |
| | | /** |
| | | * æ¥è¯¢è®¾å¤æçï¼å¨å·¥ä½æ°æ®çé¢ï¼è®¾å¤æçç»è®¡å¾ï¼ï¼ç¹å»æä¸ä¸ªæºå¨çæ¶åè°ç¨ |
| | | * ç»è®¡è®¾å¤æçï¼å¨å·¥ä½æ°æ®çé¢ï¼è®¾å¤æçç»è®¡å¾ï¼ï¼ç¹å»æä¸ä¸ªæºå¨çæ¶åè°ç¨ |
| | | * @param statusRecordDetailSelectVO æ¥è¯¢åæ° |
| | | * @return |
| | | */ |
| | |
| | | @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)") |
| | |
| | | preT = tempStatusVO.getTime().getTime(); |
| | | } |
| | | statusJson.put("preT", preT); |
| | | |
| | | //statusJson.put("t", System.currentTimeMillis());//æ¶é´æ¹ä¸ºå½å) |
| | | map.put(statusDpName, statusJson);//è¦ç忥çDeviceStatus |
| | | } |
| | | } |
| | |
| | | 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()); |
| | |
| | | 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; |
| | |
| | | @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 |
| | |
| | | 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(); |
| | |
| | | default: |
| | | return new ProParamSheetVO(); |
| | | } |
| | | } |
| | | |
| | | }*/ |
| | | /* |
| | | @Override |
| | | public BladeFile exportProcessParam(ProcessParamExcelVO vo) { |
| | | try { |
| | |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | |
| | | */ |
| | | @Override |
| | | public ShiftTimeVO getShiftTime(ProcessParameterSearchVO vo) { |
| | | String workstationId = vo.getWorkstationId(); |
| | |
| | | return entityVO(parameterList, wcs, collectItemMap); |
| | | }).orElse(new ProcessParameterResVO()); |
| | | } |
| | | |
| | | /* |
| | | private ProParamSheetVO buildProcessHourSheet(ProcessParameterSearchVO vo, Boolean isFilterProcessParameter) { |
| | | Date startTime = vo.getStartTime(); |
| | | Date endTime = vo.getEndTime(); |
| | |
| | | return new ProParamSheetVO(); |
| | | } |
| | | return buildSheetVO(vos, dtoList, wcs, getWcsMap()); |
| | | } |
| | | |
| | | }*/ |
| | | /* |
| | | private ProParamSheetVO buildProcessShiftSheet(ProcessParameterSearchVO vo, Boolean isFilterProcessParameter) { |
| | | Integer shift = vo.getShift(); |
| | | LocalDate queryTime = vo.getQueryTime(); |
| | |
| | | return new ProParamSheetVO(); |
| | | } |
| | | return buildSheetVO(vos, dtoList, wcs, getWcsMap()); |
| | | } |
| | | |
| | | }*/ |
| | | /* |
| | | private BladeFile exportByHour(ProcessParamExcelVO vo) throws Exception { |
| | | Date startTime = vo.getStartTime(); |
| | | Date endTime = vo.getEndTime(); |
| | |
| | | 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()})); |
| | |
| | | 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 -> { |
| | |
| | | } |
| | | 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())); |
| | | } |
| | |
| | | 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; |
| | |
| | | |
| | | @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(); |
| | |
| | | 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 |
| | |
| | | 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())) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * æ¹éæ¸
é¤ åé¦ |
| | | * æ¹éæ¸
é¤åé¦çç¼åï¼ä¸»è¦ç¨äºå·æ°åç«¯çæ¾ç¤ºæ°æ® |
| | | * @param startTime |
| | | * @param endTime |
| | | * @param workstationIds |
| | |
| | | } |
| | | |
| | | /** |
| | | * å个æ¸
æ¥ç¼åä¸çåé¦ï¼ä»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 |
| | |
| | | |
| | | CalendarVO getCalendar(Long valueOf); |
| | | |
| | | /** |
| | | * ä¿®æ¹ç产æ¥åæ°æ® |
| | | * @param calendarUpdateVO |
| | | * @return |
| | | */ |
| | | ProductionCalendar updateCalendar(CalendarUpdateVO calendarUpdateVO); |
| | | |
| | | ProductionCalendar copyCalendar(CalendarCopyVO calendarCopyVO); |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | |
| | | 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 { |
| | |
| | | @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); |
| | |
| | | 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) { |
| | |
| | | } |
| | | |
| | | 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) { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * è·å宿¶æ°æ®å±ç¤ºçæ°æ®ç¹å表 |
| | | * @param workstationIdList å·¥ä½idéå |
| | | * @return map(å·¥ä½id -> æ°æ®ç¹éå) |
| | | */ |
| | | public Map<Long, List<RealTimeStatusVO>> getRealTimeProperties(List<Long> workstationIdList) { |
| | | Map<Long, List<RealTimeStatusVO>> properties = new HashMap<>(); |
| | | |
| | |
| | | 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); |
| | |
| | | } |
| | | |
| | | 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; |
| | | } |
| | |
| | | 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; |
| | | } |
| | |
| | | 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"}) |
| | |
| | | |
| | | OtherWorkstationVO getOtherProcessParameter(String partNo, String id); |
| | | |
| | | ProParamSheetVO getProcessParameter(String id, Integer shiftIndex); |
| | | //ProParamSheetVO getProcessParameter(String id, Integer shiftIndex); |
| | | |
| | | List<TraceCatalogFlowRecordExportVO> getExportData(TraceCatalogSearchVO traceCatalogSearchVO); |
| | | |
| | |
| | | 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); |
| | |
| | | return null; |
| | | } |
| | | return null; |
| | | } |
| | | }*/ |
| | | |
| | | |
| | | public List<TraceCatalogFlowRecordExportVO> getExportData(TraceCatalogSearchVO traceCatalogSearchVO) { |
| | |
| | | |
| | | 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 |
| | |
| | | clientid: mqtt_publish |
| | | default_topic: TEST #å½å客æ·ç«¯çé»è®¤ä¸»é¢(大夿°æ¶å没ä»ä¹ç¨) |
| | | #åéè¶
æ¶æ¶é´ |
| | | mqtt.timeout: 1000 |
| | | timeout: 3000 |
| | | #å¿è·³æ¶é´ |
| | | keepalive: 10 |
| | | connectionTimeout: 3000 #è¿æ¥è¶
æ¶æ¶é´ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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()); |
| | | } |
| | | } |