From 6c82e309443f491eda73a95c01386becec69224b Mon Sep 17 00:00:00 2001 From: rk <94314517@qq.com> Date: 星期三, 24 九月 2025 16:00:37 +0800 Subject: [PATCH] 自动叫号业务与WMS获取车辆是否在园接口 --- server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java | 308 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 306 insertions(+), 2 deletions(-) diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java index 44c182b..c696282 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java @@ -12,6 +12,7 @@ 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; @@ -407,7 +408,7 @@ .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); @@ -1376,7 +1377,6 @@ platformJob.setEditDate(new Date()); platformJobMapper.updateById(platformJob); - //TODO 璋冭捣WMS 閫氱煡鏈堝彴杞Щ //瀛樺偍鎿嶄綔鏃ュ織 savePlatformLog(Constants.PlatformJobLogType.TRANSFERING.getKey(),oldPlatformJob,platformJob, Constants.PlatformJobLogType.TRANSFERING.getInfo().replace("{data}",oldPlatform.getName())); @@ -2570,4 +2570,308 @@ 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{ + //鏌ヨ鏈堝彴缁勪笅鐨勬湀鍙版槸鍚﹀悓鏃跺瓨鍦ㄦ暣鎵樺拰鏁f墭鏈堝彴 + 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{ + //鏌ヨ鏈堝彴缁勪笅鐨勬湀鍙版槸鍚﹀悓鏃跺瓨鍦ㄦ暣鎵樺拰鏁f墭鏈堝彴 + 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{ + //鐗╂祦杞﹂绾︾殑浠诲姟 鐩存帴鍒嗛厤 鏁f墭鐩樻湀鍙� + 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{ + //鐗╂祦杞﹂绾︾殑浠诲姟 鐩存帴鍒嗛厤 鏁f墭鐩樻湀鍙� + if(Constants.equalsInteger(platform.getType(),Constants.ZERO)){ + return platformJob; + } + } + } + } + return null; + } + } -- Gitblit v1.9.3