From 6eb064b4aa583bc8be55b23a82badc5d8442cbb1 Mon Sep 17 00:00:00 2001
From: xiaogang <905166056@qq.com>
Date: 星期三, 25 五月 2022 15:27:38 +0800
Subject: [PATCH] 1、优化访客预约等相关设置2、增加积分抵扣

---
 service-api/src/main/java/com/java110/api/listener/visit/SaveVisitListener.java |  180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 169 insertions(+), 11 deletions(-)

diff --git a/service-api/src/main/java/com/java110/api/listener/visit/SaveVisitListener.java b/service-api/src/main/java/com/java110/api/listener/visit/SaveVisitListener.java
index 802e3f9..51933da 100755
--- a/service-api/src/main/java/com/java110/api/listener/visit/SaveVisitListener.java
+++ b/service-api/src/main/java/com/java110/api/listener/visit/SaveVisitListener.java
@@ -8,12 +8,20 @@
 import com.java110.core.event.service.api.ServiceDataFlowEvent;
 import com.java110.core.factory.CommunitySettingFactory;
 import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.owner.OwnerCarDto;
+import com.java110.dto.parking.ParkingSpaceDto;
 import com.java110.dto.visit.VisitDto;
 import com.java110.intf.common.IFileInnerServiceSMO;
 import com.java110.dto.file.FileDto;
+import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
 import com.java110.intf.community.IVisitInnerServiceSMO;
+import com.java110.intf.user.IOwnerCarAttrInnerServiceSMO;
+import com.java110.intf.user.IOwnerCarInnerServiceSMO;
+import com.java110.intf.user.IOwnerCarV1InnerServiceSMO;
+import com.java110.po.car.OwnerCarPo;
 import com.java110.po.file.FileRelPo;
-import com.java110.po.owner.VisitPo;
+import com.java110.po.ownerCarAttr.OwnerCarAttrPo;
+import com.java110.po.parking.ParkingSpacePo;
 import com.java110.utils.constant.BusinessTypeConstant;
 import com.java110.utils.constant.ServiceCodeVisitConstant;
 import com.java110.utils.util.Assert;
@@ -27,9 +35,10 @@
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
-import java.util.TimeZone;
+import java.util.Random;
 
 /**
  * 淇濆瓨灏忓尯渚﹀惉
@@ -47,11 +56,29 @@
     @Autowired
     private IFileInnerServiceSMO fileInnerServiceSMOImpl;
 
+    @Autowired
+    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarAttrInnerServiceSMO ownerCarAttrInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+
     //閿�
     public static final String IS_NEED_REVIEW = "IS_NEED_REVIEW";
 
     //閿�
     public static final String VISIT_NUMBER = "VISIT_NUMBER";
+
+    //閿�
+    public static final String CAR_FREE_TIME = "CAR_FREE_TIME";
+
+    //閿�
+    public static final String ASCRIPTION_CAR_AREA_ID = "ASCRIPTION_CAR_AREA_ID";
 
     @Override
     protected void validate(ServiceDataFlowEvent event, JSONObject reqJson) {
@@ -68,8 +95,14 @@
     protected void doSoService(ServiceDataFlowEvent event, DataFlowContext context, JSONObject reqJson) throws ParseException {
         reqJson.put("vId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_vId));
         //鏄惁闇�瑕佸鏍�
-        String val = CommunitySettingFactory.getValue(reqJson.getString("communityId"), IS_NEED_REVIEW);
-        if (!StringUtils.isEmpty(val) && val.equals("true") && reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) {
+        String isNeedReviewFlag = CommunitySettingFactory.getValue(reqJson.getString("communityId"), IS_NEED_REVIEW);
+        //鏄惁鏈夌┖闂茶溅浣� false 鏈夌┖闂�  true鏃犵┖闂�
+        boolean freeSpace = false;
+        //鏄惁瓒呰繃瑙勫畾娆℃暟
+        boolean specifiedTimes = false;
+        //鏄惁瀛樺湪杞﹁締
+        boolean existCar = false;
+        if (!StringUtils.isEmpty(isNeedReviewFlag) && isNeedReviewFlag.equals("true") && reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) {
             reqJson.put("state", "0"); //0琛ㄧず鏈鏍革紱1琛ㄧず瀹℃牳閫氳繃锛�2琛ㄧず瀹℃牳鎷掔粷
         } else {
             reqJson.put("state", "1");
@@ -78,9 +111,60 @@
         if (reqJson.containsKey("entourage") && reqJson.getString("entourage").equals("")) {
             reqJson.put("entourage", "0");
         }
-        //鏄惁瓒呰繃瑙勫畾娆℃暟
-        boolean specifiedTimes = false;
+        reqJson.put("recordState", "0");
         if (reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) {
+            //鑾峰彇棰勭害杞﹀厤璐规椂闀跨殑鍊�
+            String freeTime = CommunitySettingFactory.getValue(reqJson.getString("communityId"), CAR_FREE_TIME);
+            String visitTime = reqJson.getString("visitTime");
+            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Date time = df.parse(visitTime);
+            Calendar newTime = Calendar.getInstance();
+            newTime.setTime(time);
+            newTime.add(Calendar.MINUTE, Integer.parseInt(freeTime));//鏃ユ湡鍔犱笂鍒嗛挓
+            Date newDate = newTime.getTime();
+            String finishFreeTime = df.format(newDate);
+            reqJson.put("freeTime", finishFreeTime);
+            if (!StringUtils.isEmpty(isNeedReviewFlag) && isNeedReviewFlag.equals("false")) { //涓嶉渶瑕佸鏍稿氨闅忔満鑷姩鍒嗛厤杞︿綅
+                //鑾峰彇灏忓尯閰嶇疆閲岄厤缃殑鍋滆溅鍦篿d
+                String parkingAreaId = CommunitySettingFactory.getValue(reqJson.getString("communityId"), ASCRIPTION_CAR_AREA_ID);
+                if (StringUtil.isEmpty(parkingAreaId)) { //濡傛灉娌℃湁閰嶇疆鍋滆溅鍦篿d锛屽氨闅忎究鍒嗛厤璇ュ皬鍖轰笅涓�涓┖闂茶溅浣�
+                    ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
+                    parkingSpace.setCommunityId(reqJson.getString("communityId"));
+                    parkingSpace.setState("F"); //杞︿綅鐘舵�� 鍑哄敭 S锛屽嚭绉� H 锛岀┖闂� F
+                    parkingSpace.setParkingType("1"); //1锛氭櫘閫氳溅浣�  2锛氬瓙姣嶈溅浣�  3锛氳豹鍗庤溅浣�
+                    //鏌ヨ灏忓尯绌洪棽杞︿綅
+                    List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
+                    if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
+                        freeSpace = true;
+                    } else {
+                        //闅忔満鐢熸垚涓�涓笉澶т簬闆嗗悎闀垮害鐨勬暣鏁�
+                        Random random = new Random();
+                        int i = random.nextInt(parkingSpaceDtos.size());
+                        //鑾峰彇杞︿綅id
+                        String psId = parkingSpaceDtos.get(i).getPsId();
+                        reqJson.put("psId", psId);
+                    }
+                } else {
+                    ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
+                    parkingSpace.setCommunityId(reqJson.getString("communityId"));
+                    parkingSpace.setPaId(parkingAreaId); //鍋滆溅鍦篿d
+                    parkingSpace.setState("F"); //杞︿綅鐘舵�� 鍑哄敭 S锛屽嚭绉� H 锛岀┖闂� F
+                    parkingSpace.setParkingType("1"); //1锛氭櫘閫氳溅浣�  2锛氬瓙姣嶈溅浣�  3锛氳豹鍗庤溅浣�
+                    List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
+                    if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
+                        freeSpace = true;
+                    } else {
+                        //闅忔満鐢熸垚涓�涓笉澶т簬闆嗗悎闀垮害鐨勬暣鏁�
+                        Random random = new Random();
+                        int i = random.nextInt(parkingSpaceDtos.size());
+                        //鑾峰彇杞︿綅id
+                        String psId = parkingSpaceDtos.get(i).getPsId();
+                        reqJson.put("psId", psId);
+                    }
+                }
+            } else { //闇�瑕佸鏍稿氨鍦ㄥ鏍搁�氳繃鏃舵墠鍒嗛厤杞︿綅
+                reqJson.put("psId", "-1");
+            }
             //鏌ヨ棰勭害杞﹁締鐧昏娆℃暟
             int number = Integer.parseInt(CommunitySettingFactory.getValue(reqJson.getString("communityId"), VISIT_NUMBER));
             VisitDto visitDto = new VisitDto();
@@ -91,13 +175,36 @@
             List<VisitDto> visitDtos = visitInnerServiceSMOImpl.queryVisits(visitDto);
             int count = visitDtos.size();
             //棰勭害杞﹁締鐧昏娆℃暟0涓嶅仛闄愬埗
-            if (count >= number && number>0) {
-                if (!StringUtils.isEmpty(val) && val.equals("false")) {
+            if (count >= number && number > 0) {
+                if (!StringUtils.isEmpty(isNeedReviewFlag) && isNeedReviewFlag.equals("false")) {
                     reqJson.put("state", "0");
+                    reqJson.put("psId", null);
+                    reqJson.put("freeTime", null);
                 }
                 specifiedTimes = true;
             }
+            //鏍¢獙杞︾墝鍙锋槸鍚﹀瓨鍦�
+            OwnerCarDto ownerCarDto1 = new OwnerCarDto();
+            ownerCarDto1.setCommunityId(reqJson.getString("communityId"));
+            ownerCarDto1.setCarNum(reqJson.getString("carNum"));
+            int existCarCount = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(ownerCarDto1);
+            if (existCarCount > 0) {
+                existCar = true;
+                reqJson.put("psId", "-1");
+            }
         }
+
+        String result = "";
+        if (existCar) {
+            result = "璁垮淇℃伅鐧昏鎴愬姛,杞﹁締宸茬粡瀛樺湪棰勭害锛岃鎮ㄥ湪棰勭害鍒版湡鍚庯紝鍐嶆杩涜杞﹁締棰勭害锛岃阿璋紒";
+        }
+        if (specifiedTimes) {
+            result = "璁垮淇℃伅鐧昏鎴愬姛,鎮ㄥ凡缁忚秴杩囬绾﹁溅杈嗙櫥璁版鏁伴檺鍒讹紝杞﹁締灏嗘棤娉曡嚜鍔ㄥ鏍革紒";
+        }
+        if (freeSpace) {
+            result = "璁垮淇℃伅鐧昏鎴愬姛,褰撳墠鍋滆溅鍦哄凡鏃犵┖闂茶溅浣嶏紝鐧昏杞﹁締灏嗘殏鏃朵笉鑳借繘鍏ュ仠杞﹀満锛岃鎮ㄥ悎鐞嗗畨鎺掑嚭琛屻��";
+        }
+        reqJson.put("stateRemark", result);
         visitBMOImpl.addVisit(reqJson, context);
         if (reqJson.containsKey("photo") && !StringUtils.isEmpty(reqJson.getString("photo"))) {
             FileDto fileDto = new FileDto();
@@ -121,12 +228,63 @@
             super.insert(context, fileRelPo, BusinessTypeConstant.BUSINESS_TYPE_SAVE_FILE_REL);
         }
         commit(context);
-        if (specifiedTimes) {
-            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "鐧昏鎴愬姛,鎮ㄥ凡缁忚秴杩囬绾﹁溅杈嗙櫥璁版鏁伴檺鍒讹紝杞﹁締灏嗘棤娉曡嚜鍔ㄥ鏍革紒");
+        if (!StringUtil.isEmpty(reqJson.getString("state")) && reqJson.getString("state").equals("1")
+                && reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))
+                && !existCar && !StringUtil.isEmpty(reqJson.getString("psId"))) { //瀹℃牳閫氳繃涓旀湁杞︿綅灏辨洿鏂拌溅浣嶇姸鎬�
+            ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
+            parkingSpaceDto.setPsId(reqJson.getString("psId"));
+            //鏌ヨ鍋滆溅浣�
+            List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
+            Assert.listOnlyOne(parkingSpaceDtos, "璁垮鐧昏,鏌ヨ鍋滆溅浣嶉敊璇紒");
+            //娣诲姞杞﹁締淇℃伅
+            OwnerCarPo ownerCarPo = new OwnerCarPo();
+            ownerCarPo.setCarId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_carId));
+            ownerCarPo.setOwnerId(reqJson.getString("ownerId"));
+            ownerCarPo.setbId("-1");
+            ownerCarPo.setCarNum(reqJson.getString("carNum"));
+            ownerCarPo.setCarBrand("鏃狅紙棰勭害杞︼級");
+            ownerCarPo.setCarType("9901");
+            ownerCarPo.setCarColor("鏃狅紙棰勭害杞︼級");
+            ownerCarPo.setPsId(reqJson.getString("psId"));
+            ownerCarPo.setUserId(context.getUserId());
+            ownerCarPo.setRemark("璁垮鐧昏棰勭害杞�");
+            ownerCarPo.setCommunityId(reqJson.getString("communityId"));
+            ownerCarPo.setStartTime(reqJson.getString("visitTime"));
+            ownerCarPo.setEndTime(reqJson.getString("freeTime"));
+            ownerCarPo.setState(OwnerCarDto.STATE_NORMAL); //1001 姝e父鐘舵�侊紝2002 杞︿綅閲婃斁娆犺垂鐘舵��  3003 杞︿綅閲婃斁
+            ownerCarPo.setCarTypeCd(OwnerCarDto.CAR_TYPE_TEMP); //1001 涓氫富杞﹁締 1002 鎴愬憳杞﹁締 1003 涓存椂杞�
+            ownerCarPo.setMemberId(reqJson.getString("ownerId"));
+            ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
+            //娣诲姞杞﹁締灞炴��
+            OwnerCarAttrPo ownerCarAttrPo = new OwnerCarAttrPo();
+            ownerCarAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_cartId));
+            ownerCarAttrPo.setCarId(ownerCarPo.getCarId());
+            ownerCarAttrPo.setCommunityId(ownerCarPo.getCommunityId());
+            ownerCarAttrPo.setSpecCd("6443000036"); //6443000036涓氫富杞﹁締
+            ownerCarAttrPo.setValue("true"); //棰勭害杞�
+            ownerCarAttrPo.setbId("-1");
+            ownerCarAttrInnerServiceSMOImpl.saveOwnerCarAttr(ownerCarAttrPo);
+            //鏇存敼杞︿綅鐘舵��
+            ParkingSpacePo parkingSpacePo = new ParkingSpacePo();
+            parkingSpacePo.setPsId(reqJson.getString("psId"));
+            parkingSpacePo.setState("H"); //杞︿綅鐘舵�� 鍑哄敭 S锛屽嚭绉� H 锛岀┖闂� F
+            parkingSpaceInnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
+        }
+        if (existCar) {
+            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "璁垮淇℃伅鐧昏鎴愬姛,杞﹁締宸茬粡瀛樺湪棰勭害锛岃鎮ㄥ湪棰勭害鍒版湡鍚庯紝鍐嶆杩涜杞﹁締棰勭害锛岃阿璋紒");
             context.setResponseEntity(responseEntity);
             return;
         }
-
+        if (specifiedTimes) {
+            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "璁垮淇℃伅鐧昏鎴愬姛,鎮ㄥ凡缁忚秴杩囬绾﹁溅杈嗙櫥璁版鏁伴檺鍒讹紝杞﹁締灏嗘棤娉曡嚜鍔ㄥ鏍革紒");
+            context.setResponseEntity(responseEntity);
+            return;
+        }
+        if (freeSpace) {
+            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "璁垮淇℃伅鐧昏鎴愬姛,褰撳墠鍋滆溅鍦哄凡鏃犵┖闂茶溅浣嶏紝鐧昏杞﹁締灏嗘殏鏃朵笉鑳借繘鍏ュ仠杞﹀満锛岃鎮ㄥ悎鐞嗗畨鎺掑嚭琛屻��");
+            context.setResponseEntity(responseEntity);
+            return;
+        }
     }
 
     @Override

--
Gitblit v1.8.0