Your Name пре 3 година
родитељ
комит
7ced73c643

+ 10 - 0
java110-bean/src/main/java/com/java110/dto/visit/VisitDto.java

@@ -28,6 +28,8 @@ public class VisitDto extends PageDto implements Serializable {
     private String ownerName;
     private String ownerName;
     private String userId;
     private String userId;
     private String vId;
     private String vId;
+    private String[] vIds;
+
     private String visitTime;
     private String visitTime;
     private String phoneNumber;
     private String phoneNumber;
     private String visitCase;
     private String visitCase;
@@ -328,4 +330,12 @@ public class VisitDto extends PageDto implements Serializable {
     public void setFlowId(String flowId) {
     public void setFlowId(String flowId) {
         this.flowId = flowId;
         this.flowId = flowId;
     }
     }
+
+    public String[] getvIds() {
+        return vIds;
+    }
+
+    public void setvIds(String[] vIds) {
+        this.vIds = vIds;
+    }
 }
 }

Разлика између датотеке није приказан због своје велике величине
+ 198 - 185
java110-db/src/main/resources/mapper/community/VisitV1ServiceDaoImplMapper.xml


+ 96 - 0
service-community/src/main/java/com/java110/community/cmd/visit/AuditUndoVisitCmd.java

@@ -0,0 +1,96 @@
+package com.java110.community.cmd.visit;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.context.ICmdDataFlowContext;
+import com.java110.core.event.cmd.Cmd;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.dto.itemRelease.ItemReleaseDto;
+import com.java110.dto.visit.VisitDto;
+import com.java110.intf.common.IItemReleaseV1InnerServiceSMO;
+import com.java110.intf.common.IOaWorkflowActivitiInnerServiceSMO;
+import com.java110.intf.community.IVisitSettingV1InnerServiceSMO;
+import com.java110.intf.community.IVisitV1InnerServiceSMO;
+import com.java110.po.itemRelease.ItemReleasePo;
+import com.java110.po.owner.VisitPo;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * 审核 放行
+ */
+@Java110Cmd(serviceCode = "visit.auditUndoVisit")
+public class AuditUndoVisitCmd extends Cmd {
+
+    @Autowired
+    private IOaWorkflowActivitiInnerServiceSMO oaWorkflowUserInnerServiceSMOImpl;
+
+    @Autowired
+    private IVisitV1InnerServiceSMO visitV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IVisitSettingV1InnerServiceSMO visitSettingV1InnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        Assert.hasKeyAndValue(reqJson, "taskId", "未包含任务");
+        Assert.hasKeyAndValue(reqJson, "vId", "未包含访客ID");
+        Assert.hasKeyAndValue(reqJson, "flowId", "未包含流程");
+        Assert.hasKeyAndValue(reqJson, "auditCode", "未包含状态");
+        Assert.hasKeyAndValue(reqJson, "auditMessage", "未包含状态说明");
+
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+
+        String storeId = context.getReqHeaders().get("store-id");
+
+        VisitDto visitDto = new VisitDto();
+        visitDto.setvId(reqJson.getString("vId"));
+        List<VisitDto> visitDtos = visitV1InnerServiceSMOImpl.queryVisits(visitDto);
+
+        Assert.listOnlyOne(visitDtos, "访客不存在");
+
+        //状态 W待审核 D 审核中 C 审核完成 D 审核失败
+        VisitPo visitPo = new VisitPo();
+        visitPo.setvId(visitDtos.get(0).getvId());
+        reqJson.put("id",reqJson.getString("vId"));
+        reqJson.put("storeId",storeId);
+
+
+        //业务办理
+        if ("1100".equals(reqJson.getString("auditCode"))
+                || "1500".equals(reqJson.getString("auditCode"))) { //办理操作
+            reqJson.put("nextUserId", reqJson.getString("staffId"));
+            boolean isLastTask = oaWorkflowUserInnerServiceSMOImpl.completeTask(reqJson);
+            if (isLastTask) {
+                visitPo.setState(VisitDto.STATE_C);
+            } else {
+                visitPo.setState(VisitDto.STATE_D);
+            }
+            visitV1InnerServiceSMOImpl.updateVisit(visitPo);
+            //完成当前流程 插入下一处理人
+        } else if ("1300".equals(reqJson.getString("auditCode"))) { //转单操作
+            reqJson.put("nextUserId", reqJson.getString("staffId"));
+            oaWorkflowUserInnerServiceSMOImpl.changeTaskToOtherUser(reqJson);
+            //reqJson.put("state", "1004"); //工单转单
+            visitPo.setState(VisitDto.STATE_D);
+            visitV1InnerServiceSMOImpl.updateVisit(visitPo);
+        } else if ("1200".equals(reqJson.getString("auditCode"))
+                || "1400".equals(reqJson.getString("auditCode"))
+        ) { //退回操作
+            oaWorkflowUserInnerServiceSMOImpl.goBackTask(reqJson);
+            //reqJson.put("state", "1003"); //工单退单
+            visitPo.setState(VisitDto.STATE_F);
+            visitV1InnerServiceSMOImpl.updateVisit(visitPo);
+        } else {
+            throw new IllegalArgumentException("不支持的类型");
+        }
+
+    }
+}

+ 146 - 0
service-community/src/main/java/com/java110/community/cmd/visit/QueryFinishVisitCmd.java

@@ -0,0 +1,146 @@
+package com.java110.community.cmd.visit;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.context.ICmdDataFlowContext;
+import com.java110.core.event.cmd.Cmd;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.dto.itemRelease.ItemReleaseDto;
+import com.java110.dto.oaWorkflow.OaWorkflowDto;
+import com.java110.dto.visit.VisitDto;
+import com.java110.dto.visitSetting.VisitSettingDto;
+import com.java110.dto.workflow.WorkflowDto;
+import com.java110.entity.audit.AuditUser;
+import com.java110.intf.common.IItemReleaseV1InnerServiceSMO;
+import com.java110.intf.common.IOaWorkflowActivitiInnerServiceSMO;
+import com.java110.intf.community.IVisitSettingV1InnerServiceSMO;
+import com.java110.intf.community.IVisitV1InnerServiceSMO;
+import com.java110.intf.oa.IOaWorkflowInnerServiceSMO;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 查询物品放行已办单
+ */
+@Java110Cmd(serviceCode = "visit.queryFinishVisit")
+public class QueryFinishVisitCmd extends Cmd {
+
+    @Autowired
+    private IOaWorkflowActivitiInnerServiceSMO oaWorkflowUserInnerServiceSMOImpl;
+
+    @Autowired
+    private IOaWorkflowInnerServiceSMO oaWorkflowInnerServiceSMOImpl;
+
+    @Autowired
+    private IVisitV1InnerServiceSMO visitV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IVisitSettingV1InnerServiceSMO visitSettingV1InnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        super.validatePageInfo(reqJson);
+    }
+
+    @Override
+    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");
+
+        OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
+        oaWorkflowDto.setState(OaWorkflowDto.STATE_COMPLAINT);
+        oaWorkflowDto.setFlowType(OaWorkflowDto.FLOW_TYPE_VISIT);
+        List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto);
+
+        if (oaWorkflowDtos == null || oaWorkflowDtos.size() < 1) {
+            return;
+        }
+        List<String> flowIds = new ArrayList<>();
+        for (OaWorkflowDto tmpOaWorkflowDto : oaWorkflowDtos) {
+            flowIds.add(WorkflowDto.DEFAULT_PROCESS + tmpOaWorkflowDto.getFlowId());
+        }
+
+        AuditUser auditUser = new AuditUser();
+        auditUser.setProcessDefinitionKeys(flowIds);
+        auditUser.setUserId(userId);
+        auditUser.setStoreId(storeId);
+        auditUser.setPage(reqJson.getInteger("page"));
+        auditUser.setRow(reqJson.getInteger("row"));
+
+        long count = oaWorkflowUserInnerServiceSMOImpl.getDefinitionKeysUserHistoryTaskCount(auditUser);
+
+        List<JSONObject> datas = null;
+
+        if (count > 0) {
+            datas = oaWorkflowUserInnerServiceSMOImpl.getDefinitionKeysUserHistoryTasks(auditUser);
+            //刷新 表单数据
+            refreshFormData(datas, reqJson);
+
+            // 输入flowId
+            refreshSetting(datas,reqJson);
+        } else {
+            datas = new ArrayList<>();
+        }
+
+        ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) reqJson.getInteger("row")), count, datas);
+
+        ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
+        context.setResponseEntity(responseEntity);
+
+    }
+
+    private void refreshFormData(List<JSONObject> datas, JSONObject paramIn) {
+
+        List<String> ids = new ArrayList<>();
+        for (JSONObject data : datas) {
+            ids.add(data.getString("id"));
+        }
+        if (ids.size() < 1) {
+            return;
+        }
+
+        VisitDto visitDto = new VisitDto();
+        visitDto.setvIds(ids.toArray(new String[ids.size()]));
+        List<VisitDto> itemReleaseDtos = visitV1InnerServiceSMOImpl.queryVisits(visitDto);
+        if (itemReleaseDtos == null || itemReleaseDtos.size() < 1) {
+            return;
+        }
+        for (JSONObject data : datas) {
+            for (VisitDto form : itemReleaseDtos) {
+                if (data.getString("id").equals(form.getvId())) {
+                    data.putAll(BeanConvertUtil.beanCovertJson(form));
+                }
+            }
+        }
+    }
+
+
+    private void refreshSetting(List<JSONObject> datas, JSONObject reqJson) {
+        VisitSettingDto visitSettingDto = new VisitSettingDto();
+        visitSettingDto.setCommunityId(reqJson.getString("communityId"));
+        List<VisitSettingDto> visitSettingDtos = visitSettingV1InnerServiceSMOImpl.queryVisitSettings(visitSettingDto);
+
+        if (visitSettingDtos == null || visitSettingDtos.size() < 1) {
+            return;
+        }
+
+        if(datas == null || datas.size() < 1){
+            return;
+        }
+
+        for(JSONObject data : datas){
+            data.put("flowId",visitSettingDtos.get(0).getFlowId());
+        }
+
+    }
+
+
+}

+ 148 - 0
service-community/src/main/java/com/java110/community/cmd/visit/QueryUndoVisitCmd.java

@@ -0,0 +1,148 @@
+package com.java110.community.cmd.visit;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.context.ICmdDataFlowContext;
+import com.java110.core.event.cmd.Cmd;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.dto.itemRelease.ItemReleaseDto;
+import com.java110.dto.oaWorkflow.OaWorkflowDto;
+import com.java110.dto.visit.VisitDto;
+import com.java110.dto.visitSetting.VisitSettingDto;
+import com.java110.dto.workflow.WorkflowDto;
+import com.java110.entity.audit.AuditUser;
+import com.java110.intf.common.IItemReleaseV1InnerServiceSMO;
+import com.java110.intf.common.IOaWorkflowActivitiInnerServiceSMO;
+import com.java110.intf.community.IVisitSettingV1InnerServiceSMO;
+import com.java110.intf.community.IVisitV1InnerServiceSMO;
+import com.java110.intf.oa.IOaWorkflowInnerServiceSMO;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.vo.ResultVo;
+import com.java110.vo.api.visit.ApiVisitDataVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 查询物品放行代办单
+ */
+@Java110Cmd(serviceCode = "visit.queryUndoVisit")
+public class QueryUndoVisitCmd extends Cmd {
+
+    @Autowired
+    private IOaWorkflowActivitiInnerServiceSMO oaWorkflowUserInnerServiceSMOImpl;
+
+    @Autowired
+    private IOaWorkflowInnerServiceSMO oaWorkflowInnerServiceSMOImpl;
+
+
+    @Autowired
+    private IVisitV1InnerServiceSMO visitV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IVisitSettingV1InnerServiceSMO visitSettingV1InnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        super.validatePageInfo(reqJson);
+    }
+
+    @Override
+    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");
+
+        OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
+        oaWorkflowDto.setState(OaWorkflowDto.STATE_COMPLAINT);
+        oaWorkflowDto.setFlowType(OaWorkflowDto.FLOW_TYPE_VISIT);
+        List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto);
+
+        if (oaWorkflowDtos == null || oaWorkflowDtos.size() < 1) {
+            return;
+        }
+        List<String> flowIds = new ArrayList<>();
+        for (OaWorkflowDto tmpOaWorkflowDto : oaWorkflowDtos) {
+            flowIds.add(WorkflowDto.DEFAULT_PROCESS + tmpOaWorkflowDto.getFlowId());
+        }
+
+        AuditUser auditUser = new AuditUser();
+        auditUser.setProcessDefinitionKeys(flowIds);
+        auditUser.setUserId(userId);
+        auditUser.setStoreId(storeId);
+        auditUser.setPage(reqJson.getInteger("page"));
+        auditUser.setRow(reqJson.getInteger("row"));
+
+        long count = oaWorkflowUserInnerServiceSMOImpl.getDefinitionKeysUserTaskCount(auditUser);
+
+        List<JSONObject> datas = null;
+
+        if (count > 0) {
+            datas = oaWorkflowUserInnerServiceSMOImpl.getDefinitionKeysUserTasks(auditUser);
+            //刷新 表单数据
+            refreshFormData(datas, reqJson);
+
+            // 输入flowId
+            refreshSetting(datas,reqJson);
+        } else {
+            datas = new ArrayList<>();
+        }
+
+        ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) reqJson.getInteger("row")), count, datas);
+
+        ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
+        context.setResponseEntity(responseEntity);
+
+    }
+
+    private void refreshFormData(List<JSONObject> datas, JSONObject paramIn) {
+
+        List<String> ids = new ArrayList<>();
+        for (JSONObject data : datas) {
+            ids.add(data.getString("id"));
+        }
+        if (ids.size() < 1) {
+            return;
+        }
+
+        VisitDto visitDto = new VisitDto();
+        visitDto.setvIds(ids.toArray(new String[ids.size()]));
+        List<VisitDto> itemReleaseDtos = visitV1InnerServiceSMOImpl.queryVisits(visitDto);
+        if (itemReleaseDtos == null || itemReleaseDtos.size() < 1) {
+            return;
+        }
+        for (JSONObject data : datas) {
+            for (VisitDto form : itemReleaseDtos) {
+                if (data.getString("id").equals(form.getvId())) {
+                    data.putAll(BeanConvertUtil.beanCovertJson(form));
+                }
+            }
+        }
+    }
+
+
+    private void refreshSetting(List<JSONObject> datas, JSONObject reqJson) {
+        VisitSettingDto visitSettingDto = new VisitSettingDto();
+        visitSettingDto.setCommunityId(reqJson.getString("communityId"));
+        List<VisitSettingDto> visitSettingDtos = visitSettingV1InnerServiceSMOImpl.queryVisitSettings(visitSettingDto);
+
+        if (visitSettingDtos == null || visitSettingDtos.size() < 1) {
+            return;
+        }
+
+        if(datas == null || datas.size() < 1){
+            return;
+        }
+
+        for(JSONObject data : datas){
+            data.put("flowId",visitSettingDtos.get(0).getFlowId());
+        }
+
+    }
+
+
+}

+ 0 - 117
service-community/src/main/java/com/java110/community/cmd/visit/SaveVisitCmd.java

@@ -137,24 +137,6 @@ public class SaveVisitCmd extends Cmd {
             return; // 需要审核结束,审核时处理 相应 送图片 和车牌数据
             return; // 需要审核结束,审核时处理 相应 送图片 和车牌数据
         }
         }
 
 
-        String faceWay = "Y";
-        String carNumWay = "N";
-
-        // 查询访客设置
-        VisitSettingDto visitSettingDto = new VisitSettingDto();
-        visitSettingDto.setCommunityId(reqJson.getString("communityId"));
-        List<VisitSettingDto> visitSettingDtos = visitSettingV1InnerServiceSMOImpl.queryVisitSettings(visitSettingDto);
-
-        if (visitSettingDtos != null && visitSettingDtos.size() > 0) {
-            faceWay = visitSettingDtos.get(0).getFaceWay();
-            carNumWay = visitSettingDtos.get(0).getCarNumWay();
-            // 同步车牌 这里需要停车场,所以没有配置访客设置,不同步
-            synchronizedVisitCarNum(visitPo, carNumWay, visitSettingDtos.get(0));
-        }
-
-        // 同步访客人脸
-        synchronousVisitFace(visitPo, faceWay, reqJson.getString("photo"));
-
         visitPo = new VisitPo();
         visitPo = new VisitPo();
         visitPo.setState(VisitDto.STATE_C);
         visitPo.setState(VisitDto.STATE_C);
         visitPo.setvId(reqJson.getString("vId"));
         visitPo.setvId(reqJson.getString("vId"));
@@ -165,105 +147,6 @@ public class SaveVisitCmd extends Cmd {
         }
         }
     }
     }
 
 
-    private void synchronousVisitFace(VisitPo visitPo, String faceWay, String photo) {
-        if (VisitSettingDto.FACE_WAY_NO.equals(faceWay) || StringUtil.isEmpty(photo)) {
-            return;
-        }
-        // 查询 访问业主可以访问的门禁设备
-        RoomDto roomDto = new RoomDto();
-        roomDto.setOwnerId(visitPo.getOwnerId());
-        //这种情况说明 业主已经删掉了 需要查询状态为 1 的数据
-        List<RoomDto> rooms = roomInnerServiceSMOImpl.queryRoomsByOwner(roomDto);
-
-        //拿到小区ID
-        String communityId = visitPo.getCommunityId();
-        //根据小区ID查询现有设备
-        MachineDto machineDto = new MachineDto();
-        machineDto.setCommunityId(communityId);
-        //String[] locationObjIds = new String[]{communityId};
-        List<String> locationObjIds = new ArrayList<>();
-        locationObjIds.add(communityId);
-        for (RoomDto tRoomDto : rooms) {
-            locationObjIds.add(tRoomDto.getUnitId());
-            locationObjIds.add(tRoomDto.getRoomId());
-            locationObjIds.add(tRoomDto.getFloorId());
-        }
-
-        machineDto.setLocationObjIds(locationObjIds.toArray(new String[locationObjIds.size()]));
-        List<MachineDto> machineDtos = machineInnerServiceSMOImpl.queryMachines(machineDto);
-        if (machineDtos == null || machineDtos.size() < 1) {
-            return;
-        }
-
-        // 同步到 门禁白名单中
-        for (MachineDto tmpMachineDto : machineDtos) {
-            if (!"9999".equals(tmpMachineDto.getMachineTypeCd())) {
-                continue;
-            }
-            AccessControlWhiteDto accessControlWhiteDto = new AccessControlWhiteDto();
-            accessControlWhiteDto.setCommunityId(communityId);
-            accessControlWhiteDto.setTel(visitPo.getPhoneNumber());
-            accessControlWhiteDto.setMachineId(tmpMachineDto.getMachineId());
-            List<AccessControlWhiteDto> accessControlWhiteDtos = accessControlWhiteV1InnerServiceSMOImpl.queryAccessControlWhites(accessControlWhiteDto);
-            AccessControlWhitePo accessControlWhitePo = new AccessControlWhitePo();
-            if (accessControlWhiteDtos == null || accessControlWhiteDtos.size() < 1) {
-                accessControlWhitePo.setAcwId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
-                accessControlWhitePo.setCommunityId(visitPo.getCommunityId());
-                accessControlWhitePo.setEndTime(visitPo.getDepartureTime());
-                accessControlWhitePo.setIdCard("");
-                accessControlWhitePo.setMachineId(tmpMachineDto.getMachineId());
-                accessControlWhitePo.setPersonName(visitPo.getvName());
-                accessControlWhitePo.setPersonType(AccessControlWhiteDto.PERSON_TYPE_VISIT);
-                accessControlWhitePo.setStartTime(visitPo.getVisitTime());
-                accessControlWhitePo.setTel(visitPo.getPhoneNumber());
-                accessControlWhitePo.setThirdId(visitPo.getvId());
-                int flag = accessControlWhiteV1InnerServiceSMOImpl.saveAccessControlWhite(accessControlWhitePo);
-                if (flag < 1) {
-                    throw new CmdException("同步门禁白名单失败");
-                }
-            } else {
-                accessControlWhitePo.setAcwId(accessControlWhiteDtos.get(0).getAcwId());
-                accessControlWhitePo.setStartTime(visitPo.getVisitTime());
-                accessControlWhitePo.setEndTime(visitPo.getDepartureTime());
-                int flag = accessControlWhiteV1InnerServiceSMOImpl.updateAccessControlWhite(accessControlWhitePo);
-                if (flag < 1) {
-                    throw new CmdException("保存数据失败");
-                }
-            }
-
-            photoSMOImpl.savePhoto(photo, accessControlWhitePo.getAcwId(), accessControlWhitePo.getCommunityId());
-
-        }
-    }
-
-    /**
-     * 预约车辆 加入 白名单 是最合适的
-     * 不应该加入到业主车辆中
-     *
-     * @param visitPo
-     * @param carNumWay
-     * @param visitSettingDto
-     */
-    private void synchronizedVisitCarNum(VisitPo visitPo, String carNumWay, VisitSettingDto visitSettingDto) {
-        if (VisitSettingDto.CAR_NUM_WAY_NO.equals(carNumWay)) {
-            return;
-        }
-
-        CarBlackWhitePo carBlackWhitePo = new CarBlackWhitePo();
-        carBlackWhitePo.setCarNum(visitPo.getCarNum());
-        carBlackWhitePo.setBlackWhite(CarBlackWhiteDto.BLACK_WHITE_WHITE);
-        carBlackWhitePo.setCommunityId(visitPo.getCommunityId());
-        carBlackWhitePo.setPaId(visitSettingDto.getPaId());
-        carBlackWhitePo.setBwId(GenerateCodeFactory.getGeneratorId("11"));
-        carBlackWhitePo.setStartTime(visitPo.getVisitTime());
-        carBlackWhitePo.setEndTime(visitPo.getDepartureTime());
-        int flag = carBlackWhiteV1InnerServiceSMOImpl.saveCarBlackWhite(carBlackWhitePo);
-        if (flag < 1) {
-            throw new CmdException("预约车辆添加白名单失败");
-        }
-
-
-    }
 
 
     /**
     /**
      * 是否需要审核
      * 是否需要审核

+ 183 - 0
service-community/src/main/java/com/java110/community/smo/impl/VisitV1InnerServiceSMOImpl.java

@@ -18,15 +18,34 @@ package com.java110.community.smo.impl;
 
 
 import com.java110.community.dao.IVisitV1ServiceDao;
 import com.java110.community.dao.IVisitV1ServiceDao;
 import com.java110.core.base.smo.BaseServiceSMO;
 import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.smo.IPhotoSMO;
 import com.java110.dto.PageDto;
 import com.java110.dto.PageDto;
+import com.java110.dto.RoomDto;
+import com.java110.dto.accessControlWhite.AccessControlWhiteDto;
+import com.java110.dto.file.FileRelDto;
+import com.java110.dto.machine.CarBlackWhiteDto;
+import com.java110.dto.machine.MachineDto;
 import com.java110.dto.visit.VisitDto;
 import com.java110.dto.visit.VisitDto;
+import com.java110.dto.visitSetting.VisitSettingDto;
+import com.java110.intf.common.IAccessControlWhiteV1InnerServiceSMO;
+import com.java110.intf.common.IFileRelInnerServiceSMO;
+import com.java110.intf.common.IMachineInnerServiceSMO;
+import com.java110.intf.community.IRoomInnerServiceSMO;
+import com.java110.intf.community.IVisitSettingV1InnerServiceSMO;
 import com.java110.intf.community.IVisitV1InnerServiceSMO;
 import com.java110.intf.community.IVisitV1InnerServiceSMO;
+import com.java110.intf.user.ICarBlackWhiteV1InnerServiceSMO;
+import com.java110.po.accessControlWhite.AccessControlWhitePo;
+import com.java110.po.car.CarBlackWhitePo;
 import com.java110.po.owner.VisitPo;
 import com.java110.po.owner.VisitPo;
+import com.java110.utils.exception.CmdException;
 import com.java110.utils.util.BeanConvertUtil;
 import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -44,6 +63,28 @@ public class VisitV1InnerServiceSMOImpl extends BaseServiceSMO implements IVisit
     private IVisitV1ServiceDao visitV1ServiceDaoImpl;
     private IVisitV1ServiceDao visitV1ServiceDaoImpl;
 
 
 
 
+    @Autowired
+    private IVisitSettingV1InnerServiceSMO visitSettingV1InnerServiceSMOImpl;
+
+    @Autowired
+    private ICarBlackWhiteV1InnerServiceSMO carBlackWhiteV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
+
+    @Autowired
+    private IMachineInnerServiceSMO machineInnerServiceSMOImpl;
+
+    @Autowired
+    private IAccessControlWhiteV1InnerServiceSMO accessControlWhiteV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+
+    @Autowired
+    private IPhotoSMO photoSMOImpl;
+
+
     @Override
     @Override
     public int saveVisit(@RequestBody VisitPo visitPo) {
     public int saveVisit(@RequestBody VisitPo visitPo) {
         int saveFlag = visitV1ServiceDaoImpl.saveVisitInfo(BeanConvertUtil.beanCovertMap(visitPo));
         int saveFlag = visitV1ServiceDaoImpl.saveVisitInfo(BeanConvertUtil.beanCovertMap(visitPo));
@@ -53,9 +94,151 @@ public class VisitV1InnerServiceSMOImpl extends BaseServiceSMO implements IVisit
     @Override
     @Override
     public int updateVisit(@RequestBody VisitPo visitPo) {
     public int updateVisit(@RequestBody VisitPo visitPo) {
         int saveFlag = visitV1ServiceDaoImpl.updateVisitInfo(BeanConvertUtil.beanCovertMap(visitPo));
         int saveFlag = visitV1ServiceDaoImpl.updateVisitInfo(BeanConvertUtil.beanCovertMap(visitPo));
+        if(saveFlag < 1 || !VisitDto.STATE_C.equals(visitPo.getState())){
+            return saveFlag;
+        }
+
+        VisitDto visitDto = new VisitDto();
+        visitDto.setvId(visitPo.getvId());
+        visitDto.setPage(1);
+        visitDto.setRow(1);
+        List<VisitDto> visitDtos = queryVisits(visitDto);
+
+        if(visitDtos == null || visitDtos.size() < 1){
+            return saveFlag;
+        }
+        visitDto = visitDtos.get(0);
+
+        String faceWay = "Y";
+        String carNumWay = "N";
+
+        // 查询访客设置
+        VisitSettingDto visitSettingDto = new VisitSettingDto();
+        visitSettingDto.setCommunityId(visitDto.getCommunityId());
+        List<VisitSettingDto> visitSettingDtos = visitSettingV1InnerServiceSMOImpl.queryVisitSettings(visitSettingDto);
+
+        if (visitSettingDtos != null && visitSettingDtos.size() > 0) {
+            faceWay = visitSettingDtos.get(0).getFaceWay();
+            carNumWay = visitSettingDtos.get(0).getCarNumWay();
+            // 同步车牌 这里需要停车场,所以没有配置访客设置,不同步
+            synchronizedVisitCarNum(visitDto, carNumWay, visitSettingDtos.get(0));
+        }
+
+        FileRelDto fileRelDto = new FileRelDto();
+        fileRelDto.setObjId(visitDtos.get(0).getvId());
+        List<FileRelDto> fileRelDtos = fileRelInnerServiceSMOImpl.queryFileRels(fileRelDto);
+
+        if(fileRelDtos == null || fileRelDtos.size() < 1){
+            return saveFlag;
+        }
+
+        // 同步访客人脸
+        synchronousVisitFace(visitDto, faceWay, fileRelDtos.get(0).getFileSaveName());
+
         return saveFlag;
         return saveFlag;
     }
     }
 
 
+
+    private void synchronousVisitFace(VisitDto visitDto, String faceWay, String photo) {
+        if (VisitSettingDto.FACE_WAY_NO.equals(faceWay) || StringUtil.isEmpty(photo)) {
+            return;
+        }
+        // 查询 访问业主可以访问的门禁设备
+        RoomDto roomDto = new RoomDto();
+        roomDto.setOwnerId(visitDto.getOwnerId());
+        //这种情况说明 业主已经删掉了 需要查询状态为 1 的数据
+        List<RoomDto> rooms = roomInnerServiceSMOImpl.queryRoomsByOwner(roomDto);
+
+        //拿到小区ID
+        String communityId = visitDto.getCommunityId();
+        //根据小区ID查询现有设备
+        MachineDto machineDto = new MachineDto();
+        machineDto.setCommunityId(communityId);
+        //String[] locationObjIds = new String[]{communityId};
+        List<String> locationObjIds = new ArrayList<>();
+        locationObjIds.add(communityId);
+        for (RoomDto tRoomDto : rooms) {
+            locationObjIds.add(tRoomDto.getUnitId());
+            locationObjIds.add(tRoomDto.getRoomId());
+            locationObjIds.add(tRoomDto.getFloorId());
+        }
+
+        machineDto.setLocationObjIds(locationObjIds.toArray(new String[locationObjIds.size()]));
+        List<MachineDto> machineDtos = machineInnerServiceSMOImpl.queryMachines(machineDto);
+        if (machineDtos == null || machineDtos.size() < 1) {
+            return;
+        }
+
+        // 同步到 门禁白名单中
+        for (MachineDto tmpMachineDto : machineDtos) {
+            if (!"9999".equals(tmpMachineDto.getMachineTypeCd())) {
+                continue;
+            }
+            AccessControlWhiteDto accessControlWhiteDto = new AccessControlWhiteDto();
+            accessControlWhiteDto.setCommunityId(communityId);
+            accessControlWhiteDto.setTel(visitDto.getPhoneNumber());
+            accessControlWhiteDto.setMachineId(tmpMachineDto.getMachineId());
+            List<AccessControlWhiteDto> accessControlWhiteDtos = accessControlWhiteV1InnerServiceSMOImpl.queryAccessControlWhites(accessControlWhiteDto);
+            AccessControlWhitePo accessControlWhitePo = new AccessControlWhitePo();
+            if (accessControlWhiteDtos == null || accessControlWhiteDtos.size() < 1) {
+                accessControlWhitePo.setAcwId(GenerateCodeFactory.getGeneratorId("10"));
+                accessControlWhitePo.setCommunityId(visitDto.getCommunityId());
+                accessControlWhitePo.setEndTime(visitDto.getDepartureTime());
+                accessControlWhitePo.setIdCard("");
+                accessControlWhitePo.setMachineId(tmpMachineDto.getMachineId());
+                accessControlWhitePo.setPersonName(visitDto.getvName());
+                accessControlWhitePo.setPersonType(AccessControlWhiteDto.PERSON_TYPE_VISIT);
+                accessControlWhitePo.setStartTime(visitDto.getVisitTime());
+                accessControlWhitePo.setTel(visitDto.getPhoneNumber());
+                accessControlWhitePo.setThirdId(visitDto.getvId());
+                int flag = accessControlWhiteV1InnerServiceSMOImpl.saveAccessControlWhite(accessControlWhitePo);
+                if (flag < 1) {
+                    throw new CmdException("同步门禁白名单失败");
+                }
+            } else {
+                accessControlWhitePo.setAcwId(accessControlWhiteDtos.get(0).getAcwId());
+                accessControlWhitePo.setStartTime(visitDto.getVisitTime());
+                accessControlWhitePo.setEndTime(visitDto.getDepartureTime());
+                int flag = accessControlWhiteV1InnerServiceSMOImpl.updateAccessControlWhite(accessControlWhitePo);
+                if (flag < 1) {
+                    throw new CmdException("保存数据失败");
+                }
+            }
+
+            photoSMOImpl.savePhoto(photo, accessControlWhitePo.getAcwId(), accessControlWhitePo.getCommunityId());
+
+        }
+    }
+
+    /**
+     * 预约车辆 加入 白名单 是最合适的
+     * 不应该加入到业主车辆中
+     *
+     * @param visitDto
+     * @param carNumWay
+     * @param visitSettingDto
+     */
+    private void synchronizedVisitCarNum(VisitDto visitDto, String carNumWay, VisitSettingDto visitSettingDto) {
+        if (VisitSettingDto.CAR_NUM_WAY_NO.equals(carNumWay)) {
+            return;
+        }
+
+        CarBlackWhitePo carBlackWhitePo = new CarBlackWhitePo();
+        carBlackWhitePo.setCarNum(visitDto.getCarNum());
+        carBlackWhitePo.setBlackWhite(CarBlackWhiteDto.BLACK_WHITE_WHITE);
+        carBlackWhitePo.setCommunityId(visitDto.getCommunityId());
+        carBlackWhitePo.setPaId(visitSettingDto.getPaId());
+        carBlackWhitePo.setBwId(GenerateCodeFactory.getGeneratorId("11"));
+        carBlackWhitePo.setStartTime(visitDto.getVisitTime());
+        carBlackWhitePo.setEndTime(visitDto.getDepartureTime());
+        int flag = carBlackWhiteV1InnerServiceSMOImpl.saveCarBlackWhite(carBlackWhitePo);
+        if (flag < 1) {
+            throw new CmdException("预约车辆添加白名单失败");
+        }
+
+
+    }
+
     @Override
     @Override
     public int deleteVisit(@RequestBody VisitPo visitPo) {
     public int deleteVisit(@RequestBody VisitPo visitPo) {
         visitPo.setStatusCd("1");
         visitPo.setStatusCd("1");