From cca504b84583f8f8289b34e794939b8590a16446 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期二, 23 五月 2023 14:34:22 +0800
Subject: [PATCH] optimzie exit room

---
 service-community/src/main/java/com/java110/community/cmd/visit/SaveVisitCmd.java |  562 ++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 329 insertions(+), 233 deletions(-)

diff --git a/service-community/src/main/java/com/java110/community/cmd/visit/SaveVisitCmd.java b/service-community/src/main/java/com/java110/community/cmd/visit/SaveVisitCmd.java
index f6ab41e..08c3c56 100644
--- a/service-community/src/main/java/com/java110/community/cmd/visit/SaveVisitCmd.java
+++ b/service-community/src/main/java/com/java110/community/cmd/visit/SaveVisitCmd.java
@@ -2,27 +2,22 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.annotation.Java110Transactional;
 import com.java110.core.context.ICmdDataFlowContext;
 import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
-import com.java110.core.factory.CommunitySettingFactory;
 import com.java110.core.factory.GenerateCodeFactory;
-import com.java110.dto.file.FileDto;
-import com.java110.dto.owner.OwnerCarDto;
+import com.java110.core.smo.IPhotoSMO;
+import com.java110.dto.oaWorkflow.OaWorkflowDto;
+import com.java110.dto.oaWorkflow.OaWorkflowXmlDto;
 import com.java110.dto.parking.ParkingSpaceDto;
 import com.java110.dto.visit.VisitDto;
-import com.java110.intf.common.IFileInnerServiceSMO;
-import com.java110.intf.common.IFileRelInnerServiceSMO;
-import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
-import com.java110.intf.community.IVisitInnerServiceSMO;
-import com.java110.intf.community.IVisitV1InnerServiceSMO;
-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.dto.visitSetting.VisitSettingDto;
+import com.java110.intf.common.*;
+import com.java110.intf.community.*;
+import com.java110.intf.oa.IOaWorkflowInnerServiceSMO;
+import com.java110.intf.oa.IOaWorkflowXmlInnerServiceSMO;
 import com.java110.po.owner.VisitPo;
-import com.java110.po.ownerCarAttr.OwnerCarAttrPo;
 import com.java110.po.parking.ParkingSpacePo;
 import com.java110.utils.exception.CmdException;
 import com.java110.utils.util.Assert;
@@ -30,15 +25,18 @@
 import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
+import java.text.ParseException;
+import java.util.*;
 
+/**
+ * 璁垮鐧昏
+ *
+ * @author fqz
+ * @date 2023-02-27 10:23
+ */
 @Java110Cmd(serviceCode = "visit.saveVisit")
 public class SaveVisitCmd extends Cmd {
 
@@ -49,22 +47,24 @@
     private IVisitV1InnerServiceSMO visitV1InnerServiceSMOImpl;
 
     @Autowired
-    private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+    private IPhotoSMO photoSMOImpl;
 
     @Autowired
     private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
 
     @Autowired
-    private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl;
+    private IVisitSettingV1InnerServiceSMO visitSettingV1InnerServiceSMOImpl;
 
     @Autowired
-    private IOwnerCarAttrInnerServiceSMO ownerCarAttrInnerServiceSMOImpl;
+    private IOaWorkflowInnerServiceSMO oaWorkflowInnerServiceSMOImpl;
 
     @Autowired
-    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+    private IOaWorkflowActivitiInnerServiceSMO oaWorkflowActivitiInnerServiceSMOImpl;
 
     @Autowired
-    private IFileInnerServiceSMO fileInnerServiceSMOImpl;
+    private IOaWorkflowXmlInnerServiceSMO oaWorkflowXmlInnerServiceSMOImpl;
+
+    public static final String CODE_PREFIX_ID = "10";
 
     //閿�
     public static final String IS_NEED_REVIEW = "IS_NEED_REVIEW";
@@ -87,224 +87,320 @@
     }
 
     @Override
-    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
+    @Java110Transactional
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
         String userId = context.getReqHeaders().get("user-id");
+        String storeId = context.getReqHeaders().get("store-id");
         reqJson.put("vId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_vId));
-        //鏄惁闇�瑕佸鏍�
-        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");
-        }
         //闅忚浜烘暟
-        if (reqJson.containsKey("entourage") && reqJson.getString("entourage").equals("")) {
+        if (StringUtil.isEmpty(reqJson.getString("entourage"))) {
             reqJson.put("entourage", "0");
         }
         reqJson.put("recordState", "0");
-        if (reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) {
-            //鑾峰彇棰勭害杞﹀厤璐规椂闀跨殑鍊�
-            String freeTime = CommunitySettingFactory.getValue(reqJson.getString("communityId"), CAR_FREE_TIME);
-
-            if (StringUtil.isEmpty(freeTime)) {
-                freeTime = "120";
-            }
-            Date time = DateUtil.getDateFromStringA(reqJson.getString("visitTime"));
-            Calendar newTime = Calendar.getInstance();
-            newTime.setTime(time);
-            newTime.add(Calendar.MINUTE, Integer.parseInt(freeTime));//鏃ユ湡鍔犱笂鍒嗛挓
-            Date newDate = newTime.getTime();
-            String finishFreeTime = DateUtil.getFormatTimeString(newDate, DateUtil.DATE_FORMATE_STRING_A);
-            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");
-            }
-            //鏌ヨ棰勭害杞﹁締鐧昏娆℃暟
-            String visitNumber = CommunitySettingFactory.getValue(reqJson.getString("communityId"), VISIT_NUMBER);
-            if (StringUtil.isEmpty(visitNumber)) {
-                visitNumber = "10000";
-            }
-            int number = Integer.parseInt(visitNumber);
-
-            VisitDto visitDto = new VisitDto();
-            //鏌ヨ褰撳ぉ杞﹁締鐧昏娆℃暟
-            visitDto.setOwnerId(reqJson.getString("ownerId"));
-            visitDto.setCarNumNoEmpty("1");
-            visitDto.setSameDay("1");
-            List<VisitDto> visitDtos = visitInnerServiceSMOImpl.queryVisits(visitDto);
-            int count = visitDtos.size();
-            //棰勭害杞﹁締鐧昏娆℃暟0涓嶅仛闄愬埗
-            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);
-        addVisit(reqJson);
-        if (reqJson.containsKey("photo") && !StringUtils.isEmpty(reqJson.getString("photo"))) {
-            if(reqJson.getString("photo").length()>512){ //璇存槑鏄浘鐗�
-                FileDto fileDto = new FileDto();
-                fileDto.setFileId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_file_id));
-                fileDto.setFileName(fileDto.getFileId());
-                fileDto.setContext(reqJson.getString("photo"));
-                fileDto.setSuffix("jpeg");
-                fileDto.setCommunityId(reqJson.getString("communityId"));
-                String fileName = fileInnerServiceSMOImpl.saveFile(fileDto);
-                reqJson.put("photo", fileName);
-
-            }
-            JSONObject businessUnit = new JSONObject();
-            businessUnit.put("fileRelId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_fileRelId));
-            businessUnit.put("relTypeCd", "11000");
-            businessUnit.put("saveWay", "table");
-            businessUnit.put("objId", reqJson.getString("vId"));
-            businessUnit.put("fileRealName", reqJson.getString("photo"));
-            businessUnit.put("fileSaveName", reqJson.getString("photo"));
-            FileRelPo fileRelPo = BeanConvertUtil.covertBean(businessUnit, FileRelPo.class);
-            fileRelInnerServiceSMOImpl.saveFileRel(fileRelPo);
-        }
-        if ("1".equals(reqJson.getString("state"))
-                && reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))
-                && !existCar && !StringUtil.isEmpty(reqJson.getString("psId")) && !"-1".equals(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(userId);
-            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"));
-            ownerCarPo.setLeaseType(OwnerCarDto.LEASE_TYPE_RESERVE); //H 鏈堢杞�   S 鍑哄敭杞�   I 鍐呴儴杞�   NM 鍏嶈垂杞�   R 棰勭害杞�
-            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;
-        }
-    }
-
-    /**
-     * 娣诲姞灏忓尯淇℃伅
-     *
-     * @param paramInJson 鎺ュ彛璋冪敤鏀句紶鍏ュ叆鍙�
-     * @return 璁㈠崟鏈嶅姟鑳藉鎺ュ彈鐨勬姤鏂�
-     */
-    public void addVisit(JSONObject paramInJson) {
-
-        JSONObject businessVisit = new JSONObject();
-        businessVisit.putAll(paramInJson);
-
-        VisitPo visitPo = BeanConvertUtil.covertBean(businessVisit, VisitPo.class);
+        VisitPo visitPo = BeanConvertUtil.covertBean(reqJson, VisitPo.class);
+        visitPo.setState(VisitDto.STATE_W);
+        visitPo.setUserId(userId);
         int flag = visitV1InnerServiceSMOImpl.saveVisit(visitPo);
         if (flag < 1) {
             throw new CmdException("淇濆瓨璁垮澶辫触");
         }
+        photoSMOImpl.savePhoto(reqJson, reqJson.getString("vId"), reqJson.getString("communityId"));
+        // 璁垮璁板綍鏄惁闇�瑕佸鏍�
+        if (hasAuditVisit(visitPo, reqJson, storeId, userId)) {
+            return; // 闇�瑕佸鏍哥粨鏉燂紝瀹℃牳鏃跺鐞� 鐩稿簲 閫佸浘鐗� 鍜岃溅鐗屾暟鎹�
+        }
+        //鏌ヨ璁垮閰嶇疆淇℃伅
+        VisitSettingDto visitSettingDto = new VisitSettingDto();
+        visitSettingDto.setCommunityId(reqJson.getString("communityId"));
+        List<VisitSettingDto> visitSettingDtos = visitSettingV1InnerServiceSMOImpl.queryVisitSettings(visitSettingDto);
+        //鏈夎溅杈嗕俊鎭殑鎯呭喌涓嬪垽鏂溅杈嗘槸鍚﹂渶瑕佸鏍�
+        if (reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) { //鏈夎溅杈�
+            if (visitSettingDtos != null && visitSettingDtos.size() == 1 && visitSettingDtos.get(0).getCarNumWay().equals("Y")) { //杞﹁締鍚屾 Y 鏄� N 鍚�
+                //鑾峰彇棰勭害杞﹁締鍋滆溅鍦篒D銆侀绾﹁溅杈嗗厤璐规椂闀裤�侀绾﹁溅闄愬埗娆℃暟銆侀绾﹁溅鏄惁瀹℃牳
+                JSONObject visitJson = getVisitCarOperate(reqJson);
+                //杞﹁締鏄惁闇�瑕佸鏍�
+//            String isNeedReview = CommunitySettingFactory.getValue(reqJson.getString("communityId"), IS_NEED_REVIEW); //鑾峰彇灏忓尯閰嶇疆閲岃溅杈嗘槸鍚﹂渶瑕佸鏍哥殑鍊�
+                String isNeedReview = visitJson.getString("isNeedReview"); //鑾峰彇杞﹁締鏄惁闇�瑕佸鏍哥殑鍊�
+                if (!StringUtil.isEmpty(isNeedReview) && isNeedReview.equals("0")) { //0琛ㄧず闇�瑕佸鏍�  1琛ㄧず涓嶉渶瑕佸鏍�
+                    visitPo = new VisitPo();
+                    visitPo.setCarState(VisitDto.CAR_STATE_W); //杞﹁締鐘舵�佷负寰呭鏍哥姸鎬�
+                    visitPo.setState(VisitDto.STATE_C); //璁垮璁板綍涓哄鏍搁�氳繃鐘舵��
+                    visitPo.setvId(reqJson.getString("vId"));
+                    visitPo.setCommunityId(reqJson.getString("communityId"));
+                    flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
+                    if (flag < 1) {
+                        throw new CmdException("淇敼璁垮鐘舵�佸け璐�");
+                    }
+                } else { //鍏朵粬鎯呭喌榛樿涓鸿溅杈嗗鏍搁�氳繃
+                    visitPo = new VisitPo();
+                    visitPo.setState(VisitDto.STATE_C); //璁垮璁板綍鐘舵�佸彉涓哄鏍搁�氳繃
+                    visitPo.setvId(reqJson.getString("vId"));
+                    visitPo.setCommunityId(reqJson.getString("communityId"));
+                    JSONObject param = dealVisitorRegistrationTimes(visitJson); //鍒ゆ柇鏄惁瓒呰繃璁垮鐧昏娆℃暟
+                    if (param.containsKey("specifiedTimes") && !StringUtil.isEmpty(param.getString("specifiedTimes")) && param.getString("specifiedTimes").equals("true")) { //瓒呰繃杞﹁締鐧昏娆℃暟
+                        visitPo.setStateRemark("璁垮淇℃伅鐧昏鎴愬姛,鎮ㄥ凡缁忚秴杩囬绾﹁溅杈嗙櫥璁版鏁伴檺鍒讹紝杞﹁締灏嗘棤娉曞鏍革紒");
+                        visitPo.setCarStateRemark("璁垮淇℃伅鐧昏鎴愬姛,鎮ㄥ凡缁忚秴杩囬绾﹁溅杈嗙櫥璁版鏁伴檺鍒讹紝杞﹁締灏嗘棤娉曞鏍革紒");
+                        visitPo.setCarState(VisitDto.CAR_STATE_F); //杞﹁締鐘舵�佸彉涓哄鏍告嫆缁�
+                        ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "璁垮淇℃伅鐧昏鎴愬姛,鎮ㄥ凡缁忚秴杩囬绾﹁溅杈嗙櫥璁版鏁伴檺鍒讹紝杞﹁締灏嗘棤娉曡嚜鍔ㄥ鏍革紒");
+                        context.setResponseEntity(responseEntity);
+                        flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
+                        if (flag < 1) {
+                            throw new CmdException("淇濆瓨璁垮澶辫触");
+                        }
+                    } else { //鏈秴杩囪溅杈嗙櫥璁版鏁�
+                        //鑾峰彇杞︿綅
+                        JSONObject paramJson = dealParkingSpace(visitJson);
+                        if (paramJson.containsKey("freeSpace") && !StringUtil.isEmpty(paramJson.getString("freeSpace")) && paramJson.getString("freeSpace").equals("true")) { //鏃犵┖闂茶溅浣�
+                            visitPo.setStateRemark("璁垮淇℃伅鐧昏鎴愬姛,褰撳墠鍋滆溅鍦哄凡鏃犵┖闂茶溅浣嶏紝鐧昏杞﹁締灏嗘殏鏃朵笉鑳借繘鍏ュ仠杞﹀満锛岃鎮ㄥ悎鐞嗗畨鎺掑嚭琛屻��");
+                            visitPo.setCarStateRemark("璁垮淇℃伅鐧昏鎴愬姛,褰撳墠鍋滆溅鍦哄凡鏃犵┖闂茶溅浣嶏紝鐧昏杞﹁締灏嗘殏鏃朵笉鑳借繘鍏ュ仠杞﹀満锛岃鎮ㄥ悎鐞嗗畨鎺掑嚭琛屻��");
+                            visitPo.setCarState(VisitDto.CAR_STATE_F); //杞﹁締鐘舵�佷负瀹℃牳鎷掔粷鐘舵��
+                            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "璁垮淇℃伅鐧昏鎴愬姛,褰撳墠鍋滆溅鍦哄凡鏃犵┖闂茶溅浣嶏紝鐧昏杞﹁締灏嗘殏鏃朵笉鑳借繘鍏ュ仠杞﹀満锛岃鎮ㄥ悎鐞嗗畨鎺掑嚭琛屻��");
+                            context.setResponseEntity(responseEntity);
+                            flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
+                            if (flag < 1) {
+                                throw new CmdException("淇濆瓨璁垮澶辫触");
+                            }
+                        } else { //鏈夌┖闂茶溅浣�
+                            visitPo.setPsId(paramJson.getString("psId"));
+                            //澶勭悊棰勭害杞﹀厤璐规椂闀�
+                            String freeTime = dealVisitCarFreeTime(visitJson);
+                            reqJson.put("freeTime", freeTime);
+                            visitPo.setFreeTime(freeTime); //棰勭害杞﹀厤璐规椂闀�
+                            visitPo.setCarState(VisitDto.CAR_STATE_C); //杞﹁締鐘舵�佷负瀹℃牳閫氳繃鐘舵��
+                            flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
+                            if (flag < 1) {
+                                throw new CmdException("淇敼璁垮鐘舵�佸け璐�");
+                            }
+                            //淇敼杞︿綅鐘舵��
+                            modifyParkingSpaceSate(paramJson);
+                        }
+                    }
+                }
+            } else if (visitSettingDtos != null && visitSettingDtos.size() == 1 && visitSettingDtos.get(0).getCarNumWay().equals("N")) { //杞﹁締涓嶅悓姝�
+                visitPo = new VisitPo();
+                visitPo.setState(VisitDto.STATE_C);
+                visitPo.setCarState(VisitDto.CAR_STATE_C); //杞﹁締瀹℃牳閫氳繃
+                visitPo.setCarStateRemark("杞﹁締涓嶅悓姝ワ紒");
+                visitPo.setvId(reqJson.getString("vId"));
+                visitPo.setCommunityId(reqJson.getString("communityId"));
+                flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
+                if (flag < 1) {
+                    throw new CmdException("淇敼璁垮鐘舵�佸け璐�");
+                }
+            }
+        } else { //鏃犺溅杈�
+            visitPo = new VisitPo();
+            visitPo.setState(VisitDto.STATE_C);
+            visitPo.setvId(reqJson.getString("vId"));
+            visitPo.setCommunityId(reqJson.getString("communityId"));
+            flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
+            if (flag < 1) {
+                throw new CmdException("淇敼璁垮鐘舵�佸け璐�");
+            }
+        }
+    }
+
+    /**
+     * 鏄惁闇�瑕佸鏍�
+     *
+     * @param visitPo
+     * @param reqJson
+     */
+    private boolean hasAuditVisit(VisitPo visitPo, JSONObject reqJson, String storeId, String userId) {
+        VisitSettingDto visitSettingDto = new VisitSettingDto();
+        visitSettingDto.setCommunityId(reqJson.getString("communityId"));
+        List<VisitSettingDto> visitSettingDtos = visitSettingV1InnerServiceSMOImpl.queryVisitSettings(visitSettingDto);
+        if (visitSettingDtos == null || visitSettingDtos.size() < 1) {
+            return false;
+        }
+        // 闇�瑕佸鏍�
+        if (!VisitSettingDto.AUDIT_WAY_YES.equals(visitSettingDtos.get(0).getAuditWay())) {
+            return false;
+        }
+        //瑙﹀彂 瀹℃壒娴佺▼
+        OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
+        oaWorkflowDto.setStoreId(storeId);
+        oaWorkflowDto.setFlowId(visitSettingDtos.get(0).getFlowId());
+        List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto);
+        Assert.listOnlyOne(oaWorkflowDtos, "娴佺▼涓嶅瓨鍦�");
+        if (!OaWorkflowDto.STATE_COMPLAINT.equals(oaWorkflowDtos.get(0).getState())) {
+            throw new IllegalArgumentException(oaWorkflowDtos.get(0).getFlowName() + "娴佺▼鏈儴缃�");
+        }
+        if (StringUtil.isEmpty(oaWorkflowDtos.get(0).getProcessDefinitionKey())) {
+            throw new IllegalArgumentException(oaWorkflowDtos.get(0).getFlowName() + "娴佺▼鏈儴缃�");
+        }
+        //鍚姩浠诲姟
+        JSONObject flowJson = new JSONObject();
+        flowJson.put("processDefinitionKey", oaWorkflowDtos.get(0).getProcessDefinitionKey());
+        flowJson.put("createUserId", userId);
+        flowJson.put("flowId", oaWorkflowDtos.get(0).getFlowId());
+        flowJson.put("id", visitPo.getvId());
+        flowJson.put("auditMessage", "鎻愪氦瀹℃牳");
+        flowJson.put("storeId", storeId);
+        reqJson.put("processDefinitionKey", oaWorkflowDtos.get(0).getProcessDefinitionKey());
+        JSONObject result = oaWorkflowActivitiInnerServiceSMOImpl.startProcess(flowJson);
+        //鎻愪氦鑰呮彁浜�
+        flowJson = new JSONObject();
+        flowJson.put("processInstanceId", result.getString("processInstanceId"));
+        flowJson.put("createUserId", userId);
+        flowJson.put("nextUserId", nextAuditStaff(storeId, visitSettingDtos.get(0).getFlowId())); // 杩欓噷瑕佹眰娴佺▼ 涓嬩竴澶勭悊浜哄繀椤昏鎸囧畾
+        flowJson.put("storeId", storeId);
+        flowJson.put("id", visitPo.getvId());
+        flowJson.put("flowId", oaWorkflowDtos.get(0).getFlowId());
+        oaWorkflowActivitiInnerServiceSMOImpl.autoFinishFirstTask(flowJson);
+        visitPo = new VisitPo();
+        visitPo.setState(VisitDto.STATE_D);
+        visitPo.setvId(reqJson.getString("vId"));
+        visitPo.setCommunityId(reqJson.getString("communityId"));
+        if (reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) {
+            visitPo.setCarState(VisitDto.CAR_STATE_D);
+        }
+        int flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
+        if (flag < 1) {
+            throw new CmdException("淇敼璁垮鐘舵�佸け璐�");
+        }
+        return true;
+    }
+
+    private String nextAuditStaff(String storeId, String flowId) {
+        OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
+        oaWorkflowDto.setFlowId(flowId);
+        oaWorkflowDto.setStoreId(storeId);
+        List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto);
+        Assert.listOnlyOne(oaWorkflowDtos, "娴佺▼涓嶅瓨鍦�");
+        OaWorkflowXmlDto oaWorkflowXmlDto = new OaWorkflowXmlDto();
+        oaWorkflowXmlDto.setFlowId(oaWorkflowDtos.get(0).getFlowId());
+        List<OaWorkflowXmlDto> oaWorkflowXmlDtos = oaWorkflowXmlInnerServiceSMOImpl.queryOaWorkflowXmls(oaWorkflowXmlDto);
+        Assert.listOnlyOne(oaWorkflowXmlDtos, "娴佺▼涓嶅瓨鍦�");
+        List<JSONObject> tasks = oaWorkflowActivitiInnerServiceSMOImpl.queryFirstAuditStaff(oaWorkflowXmlDtos.get(0));
+        if (tasks == null || tasks.size() < 1) {
+            throw new CmdException("娴佺▼鏈缃笅涓�姝ュ鏍镐汉");
+        }
+        String assignee = tasks.get(0).getString("assignee");
+        if (assignee.startsWith("-")) {
+            throw new CmdException("娴佺▼鏈缃笅涓�姝ュ鏍镐汉");
+        }
+        return assignee;
+    }
+
+    //澶勭悊杞︿綅id
+    public JSONObject dealParkingSpace(JSONObject reqJson) {
+        //鏄惁鏈夌┖闂茶溅浣� false 鏈夌┖闂�  true鏃犵┖闂�
+        boolean freeSpace = false;
+        //鑾峰彇璁垮閰嶇疆閲岄厤缃殑鍋滆溅鍦篿d
+//        String parkingAreaId = CommunitySettingFactory.getValue(reqJson.getString("communityId"), ASCRIPTION_CAR_AREA_ID);
+        String ascriptionCarAreaId = reqJson.getString("ascriptionCarAreaId");
+        if (StringUtil.isEmpty(ascriptionCarAreaId)) { //濡傛灉娌℃湁閰嶇疆鍋滆溅鍦篿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(ascriptionCarAreaId); //鍋滆溅鍦篿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);
+            }
+        }
+        reqJson.put("freeSpace", freeSpace);
+        return reqJson;
+    }
+
+    //鏇存敼杞︿綅鐘舵��
+    public void modifyParkingSpaceSate(JSONObject reqJson) {
+        ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
+        parkingSpaceDto.setPsId(reqJson.getString("psId"));
+        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
+        Assert.listOnlyOne(parkingSpaceDtos, "鏌ヨ杞︿綅閿欒锛�");
+        ParkingSpacePo parkingSpacePo = new ParkingSpacePo();
+        parkingSpacePo.setPsId(parkingSpaceDtos.get(0).getPsId());
+        parkingSpacePo.setState("H"); //杞︿綅鐘舵�� 鍑哄敭 S锛屽嚭绉� H 锛岀┖闂� F
+        parkingSpaceInnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
+    }
+
+    //鍒ゆ柇鏄惁瓒呰繃璁垮鐧昏娆℃暟
+    public JSONObject dealVisitorRegistrationTimes(JSONObject reqJson) {
+        //鏄惁瓒呰繃瑙勫畾娆℃暟
+        boolean specifiedTimes = false;
+        //鏌ヨ棰勭害杞﹁締鐧昏娆℃暟
+//        String visitNumber = CommunitySettingFactory.getValue(reqJson.getString("communityId"), VISIT_NUMBER);
+        String visitNumber = reqJson.getString("visitNumber"); //棰勭害杞﹂檺鍒舵鏁�
+        if (StringUtil.isEmpty(visitNumber)) {
+            reqJson.put("specifiedTimes", specifiedTimes);
+            return reqJson;
+        }
+        int number = Integer.parseInt(visitNumber);
+        VisitDto visitDto = new VisitDto();
+        //鏌ヨ褰撳ぉ杞﹁締鐧昏娆℃暟
+        visitDto.setOwnerId(reqJson.getString("ownerId"));
+        visitDto.setCommunityId(reqJson.getString("communityId"));
+        visitDto.setCarNumNoEmpty("1");
+        visitDto.setSameDay("1");
+        visitDto.setCarState("1"); //杞﹁締瀹℃牳閫氳繃
+        visitDto.setSign(reqJson.getString("vId"));
+        List<VisitDto> visitDtos = visitInnerServiceSMOImpl.queryVisits(visitDto);
+        int count = visitDtos.size();
+        //棰勭害杞﹁締鐧昏娆℃暟0涓嶅仛闄愬埗
+        if (count >= number && number > 0) {
+            reqJson.put("psId", null);
+            reqJson.put("freeTime", null);
+            specifiedTimes = true;
+        }
+        reqJson.put("specifiedTimes", specifiedTimes);
+        return reqJson;
+    }
+
+    //澶勭悊棰勭害杞﹀厤璐规椂闀�
+    public String dealVisitCarFreeTime(JSONObject reqJson) {
+        //鑾峰彇棰勭害杞﹀厤璐规椂闀跨殑鍊�
+//        String freeTime = CommunitySettingFactory.getValue(reqJson.getString("communityId"), CAR_FREE_TIME);
+        String carFreeTime = reqJson.getString("carFreeTime");
+        if (StringUtil.isEmpty(carFreeTime)) {
+            carFreeTime = "120";
+        }
+        Date time = DateUtil.getDateFromStringA(reqJson.getString("visitTime"));
+        Calendar newTime = Calendar.getInstance();
+        newTime.setTime(time);
+        newTime.add(Calendar.MINUTE, Integer.parseInt(carFreeTime));//鏃ユ湡鍔犱笂鍒嗛挓
+        Date newDate = newTime.getTime();
+        String finishFreeTime = DateUtil.getFormatTimeString(newDate, DateUtil.DATE_FORMATE_STRING_A);
+        return finishFreeTime;
+    }
+
+    //鑾峰彇棰勭害杞﹁締鍋滆溅鍦篒D銆侀绾﹁溅杈嗗厤璐规椂闀裤�侀绾﹁溅闄愬埗娆℃暟銆侀绾﹁溅鏄惁瀹℃牳
+    public JSONObject getVisitCarOperate(JSONObject reqJson) {
+        VisitSettingDto visitSettingDto = new VisitSettingDto();
+        visitSettingDto.setCommunityId(reqJson.getString("communityId"));
+        List<VisitSettingDto> visitSettingDtos = visitSettingV1InnerServiceSMOImpl.queryVisitSettings(visitSettingDto);
+        if (visitSettingDtos != null && visitSettingDtos.size() > 0) {
+            reqJson.put("ascriptionCarAreaId", visitSettingDtos.get(0).getPaId()); //棰勭害杞﹁締褰掑睘鍋滆溅鍦篒D
+            reqJson.put("carFreeTime", visitSettingDtos.get(0).getCarFreeTime()); //棰勭害杞﹁締鍏嶈垂鏃堕暱(鍗曚綅涓哄垎閽�)
+            reqJson.put("visitNumber", visitSettingDtos.get(0).getVisitNumber()); //棰勭害杞﹂檺鍒舵鏁�
+            reqJson.put("isNeedReview", visitSettingDtos.get(0).getIsNeedReview()); //棰勭害杞︽槸鍚﹀鏍�  0琛ㄧず闇�瑕佸鏍�  1琛ㄧず涓嶉渶瑕佸鏍�
+        }
+        return reqJson;
     }
 }

--
Gitblit v1.8.0