| | |
| | | import com.qianwen.smartman.common.constant.ExtCacheConstant; |
| | | import com.qianwen.smartman.common.enums.GlobalWcsTypeEnum; |
| | | import com.qianwen.smartman.common.utils.Lambda; |
| | | import com.qianwen.smartman.modules.cps.entity.Employee; |
| | | import com.qianwen.smartman.modules.cps.entity.Workstation; |
| | | import com.qianwen.smartman.modules.cps.service.IEmployeeService; |
| | | import com.qianwen.smartman.modules.cps.service.IGlobalWcsService; |
| | | import com.qianwen.smartman.modules.cps.service.IWorkstationService; |
| | | import com.qianwen.smartman.modules.smis.entity.Employee; |
| | | import com.qianwen.smartman.modules.smis.entity.Workstation; |
| | | import com.qianwen.smartman.modules.smis.service.IEmployeeService; |
| | | import com.qianwen.smartman.modules.smis.service.IGlobalWcsService; |
| | | import com.qianwen.smartman.modules.smis.service.IWorkstationService; |
| | | import com.qianwen.smartman.modules.mdc.convert.StatusRecordConvert; |
| | | import com.qianwen.smartman.modules.mdc.dto.GroupFeedbackCacheDTO; |
| | | import com.qianwen.smartman.modules.mdc.dto.WorkstationEndAndStartImmediateFeedBackDTO; |
| | |
| | | @Override |
| | | public WorkstationFeedback getImmediateFeedback(Serializable workstationId) { |
| | | return getOne(Lambda.eq(WorkstationFeedback::getWorkstationId, workstationId) |
| | | .eq(WorkstationFeedback::getFeedbackType, Integer.valueOf(FeedbackType.IMMEDIATE.getValue())) |
| | | .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())) { |
| | |
| | | } else { |
| | | addFeedback.setFeedUser(getEmployeeById().getId()); |
| | | } |
| | | addFeedback.setFeedbackType(Integer.valueOf(FeedbackType.IMMEDIATE.getValue())); |
| | | addFeedback.setFeedbackType(FeedbackType.IMMEDIATE.getValue()); |
| | | addFeedback.setStatus(FeedbackStatus.WAIT_SYNC.getValue()); |
| | | addFeedback.setRemark(dto.getDescription()); |
| | | addFeedback.setWcs(dto.getWcs()); |
| | |
| | | this.redisLockClient.lockFair(ExtCacheConstant.WORK_FEEDBACK.concat(":").concat(workstationId), 30L, 100L, () -> { |
| | | existTimeOverImmediateFeedbackException(dto); |
| | | WorkstationFeedback addFeedback = new WorkstationFeedback(); |
| | | addFeedback.setWorkstationId(Long.valueOf(Long.parseLong(workstationId))); |
| | | addFeedback.setWorkstationId(Long.parseLong(workstationId)); |
| | | addFeedback.setStartTime(dto.getStartTime()); |
| | | addFeedback.setEndTime(dto.getEndTime()); |
| | | addFeedback.setFeedbackTime(new Date()); |
| | | if (Func.isNotEmpty(dto.getFeedUser())) { |
| | | addFeedback.setFeedUser(Long.valueOf(Long.parseLong(dto.getFeedUser()))); |
| | | addFeedback.setEndFeedUser(Long.valueOf(Long.parseLong(dto.getFeedUser()))); |
| | | addFeedback.setFeedUser(Long.parseLong(dto.getFeedUser())); |
| | | addFeedback.setEndFeedUser(Long.parseLong(dto.getFeedUser())); |
| | | } else { |
| | | addFeedback.setFeedUser(getEmployeeById().getId()); |
| | | addFeedback.setEndFeedUser(getEmployeeById().getId()); |
| | | } |
| | | addFeedback.setFeedbackType(Integer.valueOf(FeedbackType.TIME_RANGE.getValue())); |
| | | addFeedback.setFeedbackType(FeedbackType.TIME_RANGE.getValue()); |
| | | addFeedback.setStatus(FeedbackStatus.WAIT_SYNC.getValue()); |
| | | addFeedback.setRemark(dto.getDescription()); |
| | | addFeedback.setWcs(dto.getWcs()); |
| | | return Boolean.valueOf(save(addFeedback)); |
| | | return save(addFeedback);//保存到mysql |
| | | }); |
| | | } |
| | | evictFeedback(dto.getStartTime(), dto.getEndTime(), dto.getWorkstationIds()); |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 批量清除反馈的缓存,主要用于刷新前端的显示数据 |
| | | * @param startTime |
| | | * @param endTime |
| | | * @param workstationIds |
| | | */ |
| | | private void evictFeedback(final Date startTime, final Date endTime, List<String> workstationIds) { |
| | | LocalDate start = startTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); |
| | | LocalDate end = endTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); |
| | |
| | | }); |
| | | } |
| | | |
| | | private void evictFeedback(final LocalDate start, final LocalDate end, final Serializable workstationId) { |
| | | long distance = ChronoUnit.DAYS.between(start, end); |
| | | /** |
| | | * 单个清楚缓存中的反馈,从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 |
| | | */ |
| | | private void evictFeedback(final LocalDate start, final LocalDate end, final String workstationId) { |
| | | long distance = ChronoUnit.DAYS.between(start, end);//一共limit几天(就是取几个数) |
| | | Stream.iterate(start, d -> { |
| | | return d.plusDays(1L); |
| | | }).limit(distance + 1).forEach(date -> { |
| | | String key = String.valueOf(workstationId).concat(":").concat(Func.formatDate(date)); |
| | | String key = workstationId.concat(":").concat(Func.formatDate(date)); |
| | | CacheUtil.evict(IWorkstationFeedbackService.WORK_FEEDBACK_EXP3, GROUP_FEEDBACK_CACHE_KEY, key, false); |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 检查是否有正在进行中的状态反馈 |
| | | * @param dto |
| | | */ |
| | | private void existTimeOverImmediateFeedbackException(WorkstationNoImmediateFeedBackDTO dto) { |
| | | if (dto.getWorkstationIds().stream().map(this.selfService::getImmediateFeedback).filter(Objects::nonNull).anyMatch(feedback -> |
| | | (dto.getStartTime().getTime() >= feedback.getStartTime().getTime() || dto.getEndTime().getTime() >= feedback.getStartTime().getTime()))) |