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/meeting/meeting_admin/src/main/resources/bootstrap-dev.yml                                            |    4 
 server/system_timer/src/main/resources/bootstrap-dev.yml                                                     |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/WmsPushCloudController.java                 |   30 ++++
 server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml                                             |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java     |  308 +++++++++++++++++++++++++++++++++++++++++++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/WmsService.java                |    3 
 server/system_gateway/src/main/resources/bootstrap-dev.yml                                                   |    2 
 server/visits/admin_timer/src/main/resources/bootstrap-dev.yml                                               |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java       |   34 ++++
 server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsCarInParkDataResponse.java |   27 +++
 server/meeting/meeting_service/src/main/resources/application-dev.yml                                        |    2 
 11 files changed, 407 insertions(+), 9 deletions(-)

diff --git a/server/meeting/meeting_admin/src/main/resources/bootstrap-dev.yml b/server/meeting/meeting_admin/src/main/resources/bootstrap-dev.yml
index b96ac17..43029fa 100644
--- a/server/meeting/meeting_admin/src/main/resources/bootstrap-dev.yml
+++ b/server/meeting/meeting_admin/src/main/resources/bootstrap-dev.yml
@@ -15,7 +15,7 @@
       password: nacos
       config:
         server-addr: http://192.168.0.212:8848 #閰嶇疆Nacos鍦板潃
-        namespace: dmvisit_dev
+        namespace: dev_renkang
 #        namespace: dev_renkang
         username: nacos
         password: nacos
@@ -25,7 +25,7 @@
       discovery:
         server-addr: http://192.168.0.212:8848 #閰嶇疆Nacos鍦板潃
 #        namespace: dev_renkang
-        namespace: dmvisit
+        namespace: dev_renkang
         username: nacos
         password: nacos
       # 瀹夊叏閰嶇疆
diff --git a/server/meeting/meeting_service/src/main/resources/application-dev.yml b/server/meeting/meeting_service/src/main/resources/application-dev.yml
index be2062f..d99b12b 100644
--- a/server/meeting/meeting_service/src/main/resources/application-dev.yml
+++ b/server/meeting/meeting_service/src/main/resources/application-dev.yml
@@ -4,7 +4,7 @@
 #    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/antaiwuliu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
 #    username: doumee
 #    password: rtjgfEr@&0c0m
-    url: jdbc:mysql://10.50.250.178:3306/antaiwuliu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://10.50.250.253:3306/antaiwuliu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
     username: root
     password: Atwl@2024
     driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/server/system_gateway/src/main/resources/bootstrap-dev.yml b/server/system_gateway/src/main/resources/bootstrap-dev.yml
index 76eb38a..dbd4f80 100644
--- a/server/system_gateway/src/main/resources/bootstrap-dev.yml
+++ b/server/system_gateway/src/main/resources/bootstrap-dev.yml
@@ -7,7 +7,7 @@
       discovery:
         server-addr: http://192.168.0.212:8848 #閰嶇疆Nacos鍦板潃
 #        namespace: dmvisit
-        namespace: dmvisit_dev
+        namespace: dev_renkang
         username: nacos
         password: nacos
     gateway:
diff --git a/server/system_timer/src/main/resources/bootstrap-dev.yml b/server/system_timer/src/main/resources/bootstrap-dev.yml
index 83ecb0f..42d1b75 100644
--- a/server/system_timer/src/main/resources/bootstrap-dev.yml
+++ b/server/system_timer/src/main/resources/bootstrap-dev.yml
@@ -25,6 +25,6 @@
       #        data-id: com.doumee.meeting.admin
       discovery:
         server-addr: http://192.168.0.212:8848 #閰嶇疆Nacos鍦板潃
-        namespace: dmvisit_dev
+        namespace: dev_renkang
         username: nacos
         password: nacos
\ No newline at end of file
diff --git a/server/visits/admin_timer/src/main/resources/bootstrap-dev.yml b/server/visits/admin_timer/src/main/resources/bootstrap-dev.yml
index e6d644d..7ecec93 100644
--- a/server/visits/admin_timer/src/main/resources/bootstrap-dev.yml
+++ b/server/visits/admin_timer/src/main/resources/bootstrap-dev.yml
@@ -23,7 +23,7 @@
 #        data-id: com.doumee.meeting.admin
       discovery:
         server-addr: http://192.168.0.212:8848 #閰嶇疆Nacos鍦板潃
-        namespace: dmvisit
+        namespace: dev_renkang
         username: nacos
         password: nacos
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/WmsPushCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/WmsPushCloudController.java
index 72c6997..30371e6 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/WmsPushCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/WmsPushCloudController.java
@@ -10,6 +10,7 @@
 import com.doumee.core.wms.model.request.WmsInboundNoticeRequest;
 import com.doumee.core.wms.model.request.WmsOutboundNoticeRequest;
 import com.doumee.core.wms.model.response.WmsBaseResponse;
+import com.doumee.core.wms.model.response.WmsCarInParkDataResponse;
 import com.doumee.service.business.third.WmsService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -19,6 +20,8 @@
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
 
 /**
  * @author 姹熻箘韫�
@@ -101,6 +104,9 @@
         }
         return result;
     }
+
+
+
     @ApiOperation("銆怶MS銆戞帹閫佸彇娑堝嚭搴撳崟閫氱煡浠诲姟")
     @LoginNoRequired
     @PostMapping("/push/cancelOutbound")
@@ -144,4 +150,28 @@
         return result;
     }
 
+
+
+
+    @ApiOperation("銆怶MS銆戣幏鍙栬溅杈嗘槸鍚﹀叆鍥�")
+    @LoginNoRequired
+    @PostMapping("/push/carInParkInfo")
+    public WmsBaseResponse carInParkInfo(@RequestBody WmsBaseRequest<String> param) {
+        int success = Constants.ZERO;
+        WmsBaseResponse result = null;
+        try {
+            result = wmsService.getCarInPark(param);
+        }catch (BusinessException e){
+            log.error("銆怶MS銆戣幏鍙栬溅杈嗘槸鍚﹀叆鍥�===澶辫触锛�"+e.getMessage());
+            success = Constants.ONE;
+        }catch (Exception e){
+            log.error("銆怶MS銆戣幏鍙栬溅杈嗘槸鍚﹀叆鍥�===澶辫触锛�"+e.getMessage());
+            e.printStackTrace();
+            success = Constants.ONE;
+        }finally {
+            wmsService.saveInterfaceLog("/wms/push/carInParkInfo", "鑾峰彇杞﹁締鏄惁鍏ュ洯",JSONObject.toJSONString(param),
+                    success, JSONObject.toJSONString(result),Constants.ONE);
+        }
+        return result;
+    }
 }
diff --git a/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml b/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
index 4847601..b4f1b39 100644
--- a/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
+++ b/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
@@ -16,7 +16,7 @@
       discovery:
         server-addr: http://192.168.0.212:8848 #閰嶇疆Nacos鍦板潃
 #        namespace: dmvisit
-        namespace: dmvisit_dev
+        namespace: dev_renkang
         username: nacos
         password: nacos
 knife4j:
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsCarInParkDataResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsCarInParkDataResponse.java
new file mode 100644
index 0000000..e5032e4
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsCarInParkDataResponse.java
@@ -0,0 +1,27 @@
+package com.doumee.core.wms.model.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("WMS鎺ュ彛澶勭悊鑾峰彇杞﹁締鏄惁鍏ュ洯杩斿洖data鍙傛暟")
+public class WmsCarInParkDataResponse {
+
+    @ApiModelProperty(value = "鍏ュ巶鏃堕棿" ,example = "1")
+    private Date eventDate;
+
+    @ApiModelProperty(value = "杞︾墝鍙�" ,example = "1")
+    private String carNo;
+
+    @ApiModelProperty(value = "鏄惁鍦ㄥ洯" ,example = "1")
+    private Boolean inPark;
+
+}
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;
+    }
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java
index e93d5ea..03f044d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java
@@ -11,6 +11,7 @@
 import com.doumee.core.wms.model.request.*;
 import com.doumee.core.wms.model.response.WmsBaseDataResponse;
 import com.doumee.core.wms.model.response.WmsBaseResponse;
+import com.doumee.core.wms.model.response.WmsCarInParkDataResponse;
 import com.doumee.core.wx.wxPlat.WxPlatConstants;
 import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.business.*;
@@ -845,4 +846,37 @@
         response.getData().add(rData);
         return  response;
     }
+
+
+    @Override
+    public WmsBaseResponse<List<WmsCarInParkDataResponse>> getCarInPark(WmsBaseRequest<String> param) {
+        try {
+            WmsBaseResponse<List<WmsCarInParkDataResponse>> wmsBaseResponse = new WmsBaseResponse();
+            List<Retention> retentionList =  retentionMapper.selectList(new QueryWrapper<Retention>().lambda()
+                            .eq(Retention::getIsdeleted,Constants.ZERO)
+                    .in(Retention::getCarNo,param.getData()));
+            List  list = new ArrayList<>();
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(retentionList)){
+                for (String carNo:param.getData()) {
+                    WmsCarInParkDataResponse wmsCarInParkDataResponse = new WmsCarInParkDataResponse();
+                    wmsCarInParkDataResponse.setCarNo(carNo);
+                    List<Retention> retentions = retentionList.stream().filter(i->i.getCarNo().equals(carNo)).collect(Collectors.toList());
+                    wmsCarInParkDataResponse.setInPark(retentions.size()>Constants.ZERO?true:false);
+                    if(wmsCarInParkDataResponse.getInPark()){
+                        wmsCarInParkDataResponse.setEventDate(retentions.get(Constants.ZERO).getEventDate());
+                    }
+                    list.add(wmsCarInParkDataResponse);
+                }
+
+            }
+            wmsBaseResponse.setSuccess(true);
+            wmsBaseResponse.setMessage("鑾峰彇鎴愬姛");
+            wmsBaseResponse.setData(list);
+            return wmsBaseResponse;
+        }catch (Exception e){
+            log.error("銆怶MS銆戝嚭搴撳彇娑堥�氱煡浠诲姟涓氬姟澶勭悊===============涓氬姟澶勭悊寮傚父"+e.getMessage());
+            return returnFailReuslt("涓氬姟澶勭悊寮傚父");
+        }
+    }
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/WmsService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/WmsService.java
index 9a95c05..4e145db 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/WmsService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/WmsService.java
@@ -6,6 +6,7 @@
 import com.doumee.core.wms.model.request.WmsOutboundNoticeRequest;
 import com.doumee.core.wms.model.response.WmsBaseResponse;
 import com.doumee.core.wms.model.response.WmsBaseDataResponse;
+import com.doumee.core.wms.model.response.WmsCarInParkDataResponse;
 import com.doumee.dao.business.model.PlatformJob;
 
 import java.util.List;
@@ -59,4 +60,6 @@
 
 
     void computjobTotalNum(List<Integer> jobList);
+
+    WmsBaseResponse<List<WmsCarInParkDataResponse>> getCarInPark(WmsBaseRequest<String> param);
 }

--
Gitblit v1.9.3