| | |
| | | import com.doumee.core.haikang.model.param.respose.ParkReservationAddResponse; |
| | | import com.doumee.core.haikang.service.HKService; |
| | | import com.doumee.dao.business.dao.UserActionMapper; |
| | | import com.doumee.service.business.third.WmsService; |
| | | import com.doumee.service.business.third.model.LoginUserInfo; |
| | | import com.doumee.service.business.third.model.PageData; |
| | | import com.doumee.service.business.third.model.PageWrap; |
| | |
| | | .apply(" ( t.status = "+Constants.PlatformJobStatus.TRANSFERING.getKey()+" and t.PLATFORM_GROUP_ID = "+pageWrap.getModel().getPlatformGroupId()+" ) ") |
| | | ) |
| | | // .like(PlatformJob::getArriveDate,DateUtil.dateTypeToString(new Date(),"yyyy-MM-dd")) |
| | | .orderByDesc(PlatformJob::getStatus) |
| | | .orderByDesc(PlatformJob::getStatus,PlatformJob::getUrgeTime) |
| | | .orderByAsc(PlatformJob::getSignDate) |
| | | ; |
| | | IPage<PlatformJob> platformJobIPage = platformJobJoinMapper.selectJoinPage(page,PlatformJob.class,queryWrapper); |
| | |
| | | platformJob.setEditDate(new Date()); |
| | | platformJobMapper.updateById(platformJob); |
| | | |
| | | //TODO è°èµ·WMS éç¥æå°è½¬ç§» |
| | | //å卿使¥å¿ |
| | | savePlatformLog(Constants.PlatformJobLogType.TRANSFERING.getKey(),oldPlatformJob,platformJob, |
| | | Constants.PlatformJobLogType.TRANSFERING.getInfo().replace("{data}",oldPlatform.getName())); |
| | |
| | | return platformJob; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | public void autoPlatformCallCar(WmsService wmsService){ |
| | | //æ¥è¯¢å½åå¼å¯çæå°æ°æ® |
| | | List<PlatformGroup> allPlatformGroup = platformGroupMapper.selectList(new QueryWrapper<PlatformGroup>().lambda().eq(PlatformGroup::getStatus,Constants.ZERO) |
| | | .eq(PlatformGroup::getIsdeleted,Constants.ZERO).eq(PlatformGroup::getAutoCall,Constants.ONE) |
| | | ); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(allPlatformGroup)){ |
| | | return; |
| | | } |
| | | //è¿æ»¤å½åæ¶é´æ®µä¸å¨æ¶é´å
çæå°ç» AUTO_CALL_END_TIME AUTO_CALL_START_TIME |
| | | Integer nowHm = Integer.valueOf(DateUtil.getFomartDate(new Date(),"HH:mm").replaceAll(":","")); |
| | | List<PlatformGroup> autoCallGroup = allPlatformGroup.stream().filter( |
| | | i->StringUtils.isNotBlank(i.getAutoCallStartTime())&&StringUtils.isNotBlank(i.getAutoCallEndTime()) |
| | | && Integer.valueOf(i.getAutoCallStartTime().replaceAll(":","")) < nowHm |
| | | && Integer.valueOf(i.getAutoCallEndTime().replaceAll(":","")) > nowHm |
| | | ).collect(Collectors.toList()); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(autoCallGroup)){ |
| | | return; |
| | | } |
| | | //æ¥è¯¢æææå° |
| | | List<Platform> platformList = platformJoinMapper.selectList(new QueryWrapper<Platform>() |
| | | .lambda() |
| | | .eq(Platform::getIsdeleted,Constants.ZERO) |
| | | .eq(Platform::getStatus,Constants.ZERO) |
| | | .in(Platform::getId,autoCallGroup.stream().map(i->i.getId()).collect(Collectors.toList())) |
| | | ); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(platformList)){ |
| | | return; |
| | | } |
| | | //å¾ªç¯ææèªå¨å«å·æå° |
| | | for (PlatformGroup platformGroup:autoCallGroup) { |
| | | List<Platform> platforms = platformList.stream().filter(i->Constants.equalsInteger(i.getGroupId(),platformGroup.getId())).collect(Collectors.toList()); |
| | | if(CollectionUtils.isEmpty(platforms)){ |
| | | continue; |
| | | } |
| | | Boolean isDefaul = false; |
| | | if(Constants.equalsInteger(platforms.size(),Constants.ONE)){ |
| | | isDefaul = true; |
| | | }else{ |
| | | //æ¥è¯¢æå°ç»ä¸çæå°æ¯å¦åæ¶å卿´æåæ£ææå° |
| | | if(( |
| | | ((platforms.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).collect(Collectors.toList()).size()>Constants.ZERO)?Constants.ONE:Constants.ZERO) |
| | | + |
| | | ((platforms.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)).collect(Collectors.toList()).size()>Constants.ZERO)?Constants.ONE:Constants.ZERO) |
| | | )==Constants.ONE |
| | | ){ |
| | | isDefaul = true; |
| | | } |
| | | } |
| | | for (Platform platform:platforms) { |
| | | |
| | | //æå° å«å·å
¥åæ°é |
| | | Integer workingNum = platform.getWorkingNum(); |
| | | //æ¥è¯¢å½åæå°æ¯å¦å卿å°å«å·æ°æ® 妿大äºçäºå¯å«å·æ°é åè·³è¿ |
| | | Integer workNum = platformJobJoinMapper.selectCount(new QueryWrapper<PlatformJob>().lambda() |
| | | .eq(PlatformJob::getIsdeleted,Constants.ZERO) |
| | | .eq(PlatformJob::getPlatformId,platform.getId()) |
| | | .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey())).intValue(); |
| | | if(workNum>=workingNum){ |
| | | continue; |
| | | }; |
| | | |
| | | //æ¥è¯¢æå°ä¸ å¯ä»¥è¿è¡å«å·çæ°æ® |
| | | List<PlatformJob> platformJobList = platformJobJoinMapper.selectList(new QueryWrapper<PlatformJob>() |
| | | .lambda() |
| | | .eq(PlatformJob::getIsdeleted,Constants.ZERO) |
| | | .eq(PlatformJob::getPlatformGroupId, platformGroup.getId()) |
| | | .apply(" ( " + |
| | | " ( t.`STATUS` = "+Constants.PlatformJobStatus.WAIT_CALL.getKey()+" and t.PLATFORM_GROUP_ID = "+platformGroup.getId()+" )" + |
| | | " or " + |
| | | " (t.`STATUS` = "+Constants.PlatformJobStatus.IN_WAIT.getKey()+" and and t.PLATFORM_ID = "+platform.getId()+" ) " + |
| | | " or " + |
| | | " (t.`STATUS` = "+Constants.PlatformJobStatus.TRANSFERING.getKey()+" and t.PLATFORM_ID = "+platform.getId()+" ) " + |
| | | ") " |
| | | ) |
| | | //æåºæ¹å¼ æå°ä½ä¸ç±»å ï¼è½¬ç§»ä¸ >å«å·å
¥åï¼> å æ¥ > ç¾å°æ¶é´ |
| | | .orderByDesc(PlatformJob::getStatus,PlatformJob::getUrgeTime) |
| | | .orderByAsc(PlatformJob::getSignDate)); |
| | | if(CollectionUtils.isEmpty(platformJobList)){ |
| | | continue; |
| | | } |
| | | for (int i = 0; i < workingNum - workNum ; i++) { |
| | | PlatformJob platformJob = this.getAutoCallJob(platformJobList,platform,isDefaul,platformGroup); |
| | | JobOperateDTO jobOperateDTO = new JobOperateDTO(); |
| | | jobOperateDTO.setJobId(platformJob.getId()); |
| | | PlatformJob callPlatformJob = this.platformCallNumber(jobOperateDTO); |
| | | platformJobList = platformJobList.stream().filter(j->!Constants.equalsInteger(j.getId(),platformJob.getId())).collect(Collectors.toList()); |
| | | try{ |
| | | if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())){ |
| | | this.sendInPark(platformJob); |
| | | } |
| | | if(!Constants.equalsInteger(platformJob.getType(),Constants.FOUR) |
| | | && StringUtils.isNotBlank(platformJob.getBillCode())){ |
| | | //éç¥WMSç»å®æå°ä¿¡æ¯ |
| | | wmsService.orderPlatformBind(callPlatformJob); |
| | | } |
| | | }catch (Exception e){ |
| | | logger.error("æå°èªå¨å«å·æéä¸å失败ï¼{}"+JSONObject.toJSONString(platform)); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | public void autoCallInParkCar(WmsService wmsService){ |
| | | //æ¥è¯¢å½åå¼å¯çæå°æ°æ® |
| | | List<PlatformGroup> allPlatformGroup = platformGroupMapper.selectList(new QueryWrapper<PlatformGroup>().lambda().eq(PlatformGroup::getStatus,Constants.ZERO) |
| | | .eq(PlatformGroup::getIsdeleted,Constants.ZERO).eq(PlatformGroup::getAutoCall,Constants.ONE) |
| | | ); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(allPlatformGroup)){ |
| | | return; |
| | | } |
| | | //è¿æ»¤å½åæ¶é´æ®µä¸å¨æ¶é´å
çæå°ç» AUTO_CALL_END_TIME AUTO_CALL_START_TIME |
| | | Integer nowHm = Integer.valueOf(DateUtil.getFomartDate(new Date(),"HH:mm").replaceAll(":","")); |
| | | List<PlatformGroup> autoCallGroup = allPlatformGroup.stream().filter( |
| | | i->StringUtils.isNotBlank(i.getAutoCallStartTime())&&StringUtils.isNotBlank(i.getAutoCallEndTime()) |
| | | && Integer.valueOf(i.getAutoCallStartTime().replaceAll(":","")) < nowHm |
| | | && Integer.valueOf(i.getAutoCallEndTime().replaceAll(":","")) > nowHm |
| | | ).collect(Collectors.toList()); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(autoCallGroup)){ |
| | | return; |
| | | } |
| | | //æ¥è¯¢æææå° |
| | | List<Platform> platformList = platformJoinMapper.selectList(new QueryWrapper<Platform>() |
| | | .lambda() |
| | | .eq(Platform::getIsdeleted,Constants.ZERO) |
| | | .eq(Platform::getStatus,Constants.ZERO) |
| | | .in(Platform::getId,autoCallGroup.stream().map(i->i.getId()).collect(Collectors.toList())) |
| | | ); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(platformList)){ |
| | | return; |
| | | } |
| | | //å¾ªç¯ææèªå¨å«å·æå° |
| | | for (PlatformGroup platformGroup:autoCallGroup) { |
| | | List<Platform> platforms = platformList.stream().filter(i->Constants.equalsInteger(i.getGroupId(),platformGroup.getId())).collect(Collectors.toList()); |
| | | if(CollectionUtils.isEmpty(platforms)){ |
| | | continue; |
| | | } |
| | | Boolean isDefaul = false; |
| | | if(Constants.equalsInteger(platforms.size(),Constants.ONE)){ |
| | | isDefaul = true; |
| | | }else{ |
| | | //æ¥è¯¢æå°ç»ä¸çæå°æ¯å¦åæ¶å卿´æåæ£ææå° |
| | | if((((platforms.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).collect(Collectors.toList()).size()>Constants.ZERO)?Constants.ONE:Constants.ZERO) |
| | | + |
| | | ((platforms.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)).collect(Collectors.toList()).size()>Constants.ZERO)?Constants.ONE:Constants.ZERO) |
| | | )==Constants.ONE |
| | | ){ |
| | | isDefaul = true; |
| | | } |
| | | } |
| | | for (Platform platform:platforms) { |
| | | //æå° å«å·å
¥åæ°é |
| | | Integer callReadyNum = platform.getCallReadyNum(); |
| | | //æ¥è¯¢å½åæå°æ¯å¦åå¨å¾
å¼å§ä½ä¸æ°æ® 妿åå¨åç´æ¥è·³è¿å½åæå° |
| | | Integer callNum = platformJobJoinMapper.selectCount(new QueryWrapper<PlatformJob>().lambda() |
| | | .eq(PlatformJob::getIsdeleted,Constants.ZERO) |
| | | .eq(PlatformJob::getPlatformId,platform.getId()) |
| | | .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.IN_WAIT.getKey())).intValue(); |
| | | if(callNum>=callReadyNum){ |
| | | continue; |
| | | }; |
| | | //æ¥è¯¢æå°ä¸ å¯ä»¥è¿è¡å«å·çæ°æ® |
| | | List<PlatformJob> platformJobList = platformJobJoinMapper.selectList(new QueryWrapper<PlatformJob>() |
| | | .lambda() |
| | | .eq(PlatformJob::getIsdeleted,Constants.ZERO) |
| | | .eq(PlatformJob::getPlatformGroupId, platformGroup.getId()) |
| | | .apply(" t.`STATUS` = "+Constants.PlatformJobStatus.WAIT_CALL.getKey()+" and t.PLATFORM_GROUP_ID = "+platformGroup.getId()+" ) ") |
| | | //æåºæ¹å¼ æå°ä½ä¸ç±»å ï¼å¼å¸¸æèµ·>å«å·å
¥åï¼> å æ¥ > ç¾å°æ¶é´ |
| | | .orderByDesc(PlatformJob::getStatus,PlatformJob::getUrgeTime) |
| | | .orderByAsc(PlatformJob::getSignDate)); |
| | | if(CollectionUtils.isEmpty(platformJobList)){ |
| | | continue; |
| | | } |
| | | for (int i = 0; i < callReadyNum - callNum ; i++) { |
| | | PlatformJob platformJob = this.getAutoCallJob(platformJobList,platform,isDefaul,platformGroup); |
| | | JobOperateDTO jobOperateDTO = new JobOperateDTO(); |
| | | jobOperateDTO.setJobId(platformJob.getId()); |
| | | jobOperateDTO.setPlatformId(platform.getId()); |
| | | PlatformJob callPlatformJob = this.platformInPark(jobOperateDTO); |
| | | platformJobList = platformJobList.stream().filter(j->!Constants.equalsInteger(j.getId(),platformJob.getId())).collect(Collectors.toList()); |
| | | try{ |
| | | if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())){ |
| | | this.sendInPark(platformJob); |
| | | } |
| | | if(!Constants.equalsInteger(platformJob.getType(),Constants.FOUR) |
| | | && StringUtils.isNotBlank(platformJob.getBillCode())){ |
| | | //éç¥WMSç»å®æå°ä¿¡æ¯ |
| | | wmsService.orderPlatformBind(callPlatformJob); |
| | | } |
| | | }catch (Exception e){ |
| | | logger.error("èªå¨å«å·å
¥åæéä¸å失败ï¼{}"+JSONObject.toJSONString(platform)); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * æå°åé
ä»»å¡ |
| | | * @param platformJobList æææå°ä¸å¯ä»¥åé
çä»»å¡ |
| | | * @param platform æå° |
| | | * @param isDefaul æ¯å¦åªæåç±»æå°æè
åªæä¸ä¸ªæå° true / false |
| | | * @param platformGroup æå°ç» |
| | | * @return |
| | | */ |
| | | public PlatformJob getAutoCallJob(List<PlatformJob> platformJobList, Platform platform,Boolean isDefaul,PlatformGroup platformGroup){ |
| | | if(isDefaul){ |
| | | //æå°ä¸åªæä¸ç±»æå° ç´æ¥è¿å第ä¸ä¸ªä»»å¡ |
| | | return platformJobList.get(Constants.ZERO); |
| | | } |
| | | for (PlatformJob platformJob:platformJobList) { |
| | | //å«å·å
¥å æè
å¼å¸¸æèµ· åç´æ¥è¿è¡å«å· |
| | | if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.EXCEPTION.getKey()) |
| | | || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.IN_WAIT.getKey())){ |
| | | return platformJob; |
| | | } |
| | | //æ ¹æ®æå°ç»å¤æ å«å·é»è¾ |
| | | // æ°åºåºåºèªå¨å«å·è§å |
| | | // 1ï¼å¦æå个è¿åä»
å
å«åä¸åè§ï¼åèªå¨åé
è³å¨æ´æçæå°è¿è¡ä½ä¸ï¼ |
| | | // 2ï¼å¦æå个è¿åå
å«ä¸¤ä¸ªå以ä¸çåè§ï¼åéè¦å¤ææ¯å¦åå¨å个åè§è¶
è¿ 500 ä»¶ä¸è¯¥åè§æ°éå æ´ä¸ªè¿åä»»å¡éç 60%å以ä¸ï¼åèªå¨åé
è³å¨æ´æç æå°è¿è¡æå°ï¼ |
| | | // 3ï¼å¦è¥ä¸æ»¡è¶³ä»¥ä¸ä¸¤ç¹ï¼åèªå¨åé
è³æ£ä»¶æå°è¿è¡ä½ä¸ï¼ |
| | | if(Constants.equalsInteger(platformGroup.getType(),Constants.ONE)){ |
| | | //è£
è´§æå° - åºåº |
| | | if(Objects.nonNull(platformJob.getWmsId())){ |
| | | // WMæ¨éä»»å¡ |
| | | List<PlatformWmsDetail> platformWmsDetailList = platformWmsDetailMapper.selectList(new QueryWrapper<PlatformWmsDetail>().lambda() |
| | | .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) |
| | | .eq(PlatformWmsDetail::getJobId,platformJob.getId())); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(platformWmsDetailList)){ |
| | | continue; |
| | | } |
| | | //WMSæ¨éä»»å¡ è¿åä»
å
å«åä¸åè§ï¼ååç±»ååªæä¸ç±»ï¼ï¼åèªå¨åé
è³å¨æ´æçæå°è¿è¡ä½ä¸ï¼ |
| | | List<String> materialNameList = platformWmsDetailList.stream().map(i->i.getMaterialName()).collect(Collectors.toList()); |
| | | Set<String> materialNameSet = new HashSet<>(materialNameList); |
| | | if(Constants.equalsInteger(materialNameSet.size(),Constants.ONE)&&Constants.equalsInteger(platform.getType(),Constants.ZERO)){ |
| | | //åä¸åç±» ä¸å½åå¾ªç¯æå°ä¸ºæ´æçæå° |
| | | return platformJob; |
| | | }else if(!Constants.equalsInteger(materialNameSet.size(),Constants.ONE)){ |
| | | if(Constants.equalsInteger(platform.getType(),Constants.ZERO)){ |
| | | //éåä¸åç±» |
| | | //妿å个è¿åå
å«ä¸¤ä¸ªå以ä¸çåè§ï¼åéè¦å¤ææ¯å¦åå¨å个åè§è¶
è¿ 500 ä»¶ä¸è¯¥åè§æ°éå æ´ä¸ªè¿åä»»å¡éç 60%å以ä¸ï¼åèªå¨åé
è³å¨æ´æç æå°è¿è¡æå°ï¼ |
| | | BigDecimal total = platformWmsDetailList.stream().map(i->i.getIoQty()).reduce(BigDecimal.ZERO,BigDecimal::add); |
| | | BigDecimal compareTotal = new BigDecimal("500"); |
| | | if((total.multiply(new BigDecimal("0.6")).compareTo(compareTotal)>Constants.ZERO)){ |
| | | compareTotal = total.multiply(new BigDecimal("0.6")); |
| | | } |
| | | for (String name:materialNameSet) { |
| | | BigDecimal quanlity = platformWmsDetailList.stream().filter(i->i.getMaterialName().equals(name)).map(i->i.getIoQty()).reduce(BigDecimal.ZERO,BigDecimal::add); |
| | | if(quanlity.compareTo(compareTotal)>Constants.ZERO){ |
| | | //è¶
è¿è§å®æ°é ä¸å½åæå°ä¸ºæ´ææå° |
| | | return platformJob; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //循ç¯WMSä»»å¡ æªåé
è³æ´æçæå°åç´æ¥åé
å°æ£æçæå° |
| | | if(Constants.equalsInteger(platform.getType(),Constants.ONE)){ |
| | | return platformJob; |
| | | } |
| | | }else{ |
| | | //ç©æµè½¦é¢çº¦çä»»å¡ ç´æ¥åé
æ£æçæå° |
| | | if(Constants.equalsInteger(platform.getType(),Constants.TWO)){ |
| | | return platformJob; |
| | | } |
| | | } |
| | | }else{ |
| | | //å¸è´§æå° - å
¥åº |
| | | // 1ï¼åè´§å°ä¸ºæå®å°åºï¼å¦çå¤/èæ¹ï¼åèªå¨åé
è³æ£ä»¶æå°è¿è¡ä½ä¸ï¼ï¼èè¥å å·¥æ
åµï¼ |
| | | // 2ï¼å
¶å®åºæ¯ï¼åèªå¨åé
è³æ´æçæå°è¿è¡ä½ä¸ |
| | | if(Objects.nonNull(platformJob.getWmsId())){ |
| | | PlatformWmsJob platformWmsJob = platformWmsJobMapper.selectOne(new QueryWrapper<PlatformWmsJob>().lambda() |
| | | .eq(PlatformWmsJob::getIsdeleted,Constants.ZERO) |
| | | .eq(PlatformWmsJob::getJobId,platformJob.getId()) |
| | | .orderByDesc(PlatformWmsJob::getId) |
| | | .last(" limit 1") |
| | | ); |
| | | if(Objects.isNull(platformWmsJob)){ |
| | | continue; |
| | | } |
| | | //TODO ææ å
¥åºçæ°æ® |
| | | if(platformWmsJob.getCarrierName().equals("1") && Constants.equalsInteger(platform.getType(),Constants.ONE)){ |
| | | return platformJob; |
| | | } |
| | | if(Constants.equalsInteger(platform.getType(),Constants.ZERO)){ |
| | | return platformJob; |
| | | } |
| | | }else{ |
| | | //ç©æµè½¦é¢çº¦çä»»å¡ ç´æ¥åé
æ£æçæå° |
| | | if(Constants.equalsInteger(platform.getType(),Constants.ZERO)){ |
| | | return platformJob; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |