Просмотр исходного кода

Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity

java110 лет назад: 5
Родитель
Сommit
8f715983ed

+ 12 - 0
service-job/src/main/java/com/java110/job/adapt/hcIot/asyn/IIotSendAsyn.java

@@ -137,4 +137,16 @@ public interface IIotSendAsyn {
      * @param staffs
      */
     void addAttendance(JSONObject postParameters, List<JSONObject> staffs);
+
+    /**
+     * 编辑考勤 同步
+     * @param postParameters
+     */
+    void updateAttendance(JSONObject postParameters);
+
+    /**
+     * 删除考勤 同步
+     * @param postParameters
+     */
+    void deleteAttendance(JSONObject postParameters);
 }

+ 101 - 5
service-job/src/main/java/com/java110/job/adapt/hcIot/asyn/impl/IotSendAsynImpl.java

@@ -35,11 +35,7 @@ import com.java110.vo.ResultVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.*;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
@@ -1086,6 +1082,10 @@ public class IotSendAsynImpl implements IIotSendAsyn {
                 return;
             }
 
+            if (staffs == null || staffs.size() < 1) {
+                return;
+            }
+
             url = IotConstant.getUrl(IotConstant.ADD_ATTENDANCE_CLASSES_STAFFS);
             for (JSONObject staff : staffs) {
                 staff.put("taskId", machineTranslateDto.getMachineTranslateId());
@@ -1108,6 +1108,102 @@ public class IotSendAsynImpl implements IIotSendAsyn {
         }
     }
 
+    @Override
+    public void updateAttendance(JSONObject postParameters) {
+        MachineTranslateDto machineTranslateDto = getMachineTranslateDto(postParameters,
+                MachineTranslateDto.CMD_UPDATE_ATTENDANCE_CLASSES,
+                DEFAULT_MACHINE_CODE,
+                DEFAULT_MACHINE_ID,
+                "extClassesId",
+                "classesName",
+                MachineTranslateDto.TYPE_ATTENDANCE);
+        ResponseEntity<String> responseEntity = null;
+        String url = IotConstant.getUrl(IotConstant.UPDATE_ATTENDANCE_CLASSES);
+        try {
+            postParameters.put("taskId", machineTranslateDto.getMachineTranslateId());
+            HttpEntity httpEntity = new HttpEntity(postParameters.toJSONString(), getHeaders());
+            responseEntity = outRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
+
+            logger.debug("调用HC IOT信息:" + responseEntity);
+
+            if (responseEntity.getStatusCode() != HttpStatus.OK) {
+                machineTranslateDto.setState(MachineTranslateDto.STATE_ERROR);
+                machineTranslateDto.setRemark(responseEntity.getBody());
+                saveTranslateError(machineTranslateDto, postParameters.toJSONString(), responseEntity != null ? responseEntity.getBody() : "", url);
+                return;
+            }
+            JSONObject tokenObj = JSONObject.parseObject(responseEntity.getBody());
+
+            if (!tokenObj.containsKey("code") || ResultVo.CODE_OK != tokenObj.getInteger("code")) {
+                machineTranslateDto.setState(MachineTranslateDto.STATE_ERROR);
+                machineTranslateDto.setRemark(tokenObj.getString("msg"));
+                //保存 失败报文
+                saveTranslateError(machineTranslateDto, postParameters.toJSONString(), responseEntity != null ? responseEntity.getBody() : "", url);
+
+                return;
+            }
+
+        } catch (Exception e) {
+            machineTranslateDto.setState(MachineTranslateDto.STATE_ERROR);
+            machineTranslateDto.setRemark(e.getLocalizedMessage());
+            //保存 失败报文
+            saveTranslateError(machineTranslateDto, postParameters.toJSONString(), responseEntity != null ? responseEntity.getBody() : "", url);
+
+            return;
+        } finally {
+            saveTranslateLog(machineTranslateDto);
+            refreshAccessToken(responseEntity);
+        }
+    }
+
+    @Override
+    public void deleteAttendance(JSONObject postParameters) {
+        MachineTranslateDto machineTranslateDto = getMachineTranslateDto(postParameters,
+                MachineTranslateDto.CMD_DELETE_ATTENDANCE_CLASSES,
+                DEFAULT_MACHINE_CODE,
+                DEFAULT_MACHINE_ID,
+                "extClassesId",
+                "classesName",
+                MachineTranslateDto.TYPE_ATTENDANCE);
+        ResponseEntity<String> responseEntity = null;
+        String url = IotConstant.getUrl(IotConstant.DELETE_ATTENDANCE_CLASSES);
+        try {
+            postParameters.put("taskId", machineTranslateDto.getMachineTranslateId());
+            HttpEntity httpEntity = new HttpEntity(postParameters.toJSONString(), getHeaders());
+            responseEntity = outRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
+
+            logger.debug("调用HC IOT信息:" + responseEntity);
+
+            if (responseEntity.getStatusCode() != HttpStatus.OK) {
+                machineTranslateDto.setState(MachineTranslateDto.STATE_ERROR);
+                machineTranslateDto.setRemark(responseEntity.getBody());
+                saveTranslateError(machineTranslateDto, postParameters.toJSONString(), responseEntity != null ? responseEntity.getBody() : "", url);
+                return;
+            }
+            JSONObject tokenObj = JSONObject.parseObject(responseEntity.getBody());
+
+            if (!tokenObj.containsKey("code") || ResultVo.CODE_OK != tokenObj.getInteger("code")) {
+                machineTranslateDto.setState(MachineTranslateDto.STATE_ERROR);
+                machineTranslateDto.setRemark(tokenObj.getString("msg"));
+                //保存 失败报文
+                saveTranslateError(machineTranslateDto, postParameters.toJSONString(), responseEntity != null ? responseEntity.getBody() : "", url);
+
+                return;
+            }
+
+        } catch (Exception e) {
+            machineTranslateDto.setState(MachineTranslateDto.STATE_ERROR);
+            machineTranslateDto.setRemark(e.getLocalizedMessage());
+            //保存 失败报文
+            saveTranslateError(machineTranslateDto, postParameters.toJSONString(), responseEntity != null ? responseEntity.getBody() : "", url);
+
+            return;
+        } finally {
+            saveTranslateLog(machineTranslateDto);
+            refreshAccessToken(responseEntity);
+        }
+    }
+
     private MachineTranslateDto getMachineTranslateDto(JSONObject postParameters, String cmd,
                                                        String machineCode,
                                                        String machineId,

+ 2 - 2
service-job/src/main/java/com/java110/job/adapt/hcIot/attendance/AddAttendanceToIotAdapt.java

@@ -138,8 +138,8 @@ public class AddAttendanceToIotAdapt extends DatabusAdaptImpl {
             staffObj.put("extClassesId", attendanceClassesDto.getClassesId());
             staffObj.put("extStaffId", orgStaffRelDto1.getStaffId());
             staffObj.put("staffName", orgStaffRelDto1.getStaffName());
-            staffObj.put("departmentId", orgStaffRelDto1.getDepartmentId());
-            staffObj.put("departmentName", orgStaffRelDto1.getDepartmentName());
+            staffObj.put("departmentId", attendanceClassesDto.getClassesObjId());
+            staffObj.put("departmentName", attendanceClassesDto.getClassesObjName());
             staffObjs.add(staffObj);
         }
         return staffObjs;

+ 41 - 45
service-job/src/main/java/com/java110/job/adapt/hcIot/attendance/DeleteAttendanceToIotAdapt.java

@@ -17,25 +17,23 @@ package com.java110.job.adapt.hcIot.attendance;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.java110.dto.owner.OwnerCarDto;
-import com.java110.dto.parking.ParkingSpaceDto;
+import com.java110.dto.attendanceClasses.AttendanceClassesDto;
 import com.java110.entity.order.Business;
-import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
-import com.java110.intf.user.IOwnerCarInnerServiceSMO;
+import com.java110.intf.common.IAttendanceClassesInnerServiceSMO;
+import com.java110.intf.user.IOrgStaffRelInnerServiceSMO;
 import com.java110.job.adapt.DatabusAdaptImpl;
 import com.java110.job.adapt.hcIot.asyn.IIotSendAsyn;
-import com.java110.po.car.OwnerCarPo;
+import com.java110.po.attendanceClasses.AttendanceClassesPo;
 import com.java110.utils.constant.StatusConstant;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
-import com.java110.utils.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
 
 /**
- * HC iot 设备同步适配器
+ * HC iot 考勤同步适配器
  * <p>
  * 接口协议地址: https://gitee.com/java110/MicroCommunityThings/blob/master/back/docs/api.md
  *
@@ -45,18 +43,24 @@ import java.util.List;
 public class DeleteAttendanceToIotAdapt extends DatabusAdaptImpl {
 
     @Autowired
-    private IIotSendAsyn hcOwnerCarAsynImpl;
+    private IIotSendAsyn hcOwnerAttendanceAsynImpl;
+
 
     @Autowired
-    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+    private IAttendanceClassesInnerServiceSMO attendanceClassesInnerServiceSMOImpl;
 
     @Autowired
-    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
+    private IOrgStaffRelInnerServiceSMO orgStaffRelInnerServiceSMOImpl;
+
 
     /**
-     * {
-     * "extOwnerCarId": "702020042194860037"
-     * }
+     * accessToken={access_token}
+     * &extCommunityUuid=01000
+     * &extCommunityId=1
+     * &devSn=111111111
+     * &name=设备名称
+     * &positionType=0
+     * &positionUuid=1
      *
      * @param business   当前处理业务
      * @param businesses 所有业务信息
@@ -64,49 +68,41 @@ public class DeleteAttendanceToIotAdapt extends DatabusAdaptImpl {
     @Override
     public void execute(Business business, List<Business> businesses) {
         JSONObject data = business.getData();
-        if (data.containsKey(OwnerCarPo.class.getSimpleName())) {
-            Object bObj = data.get(OwnerCarPo.class.getSimpleName());
-            JSONArray businessOwnerCars = null;
+        if (data.containsKey(AttendanceClassesPo.class.getSimpleName())) {
+            Object bObj = data.get(AttendanceClassesPo.class.getSimpleName());
+            JSONArray businessOwnerAttendances = null;
             if (bObj instanceof JSONObject) {
-                businessOwnerCars = new JSONArray();
-                businessOwnerCars.add(bObj);
+                businessOwnerAttendances = new JSONArray();
+                businessOwnerAttendances.add(bObj);
             } else if (bObj instanceof List) {
-                businessOwnerCars = JSONArray.parseArray(JSONObject.toJSONString(bObj));
+                businessOwnerAttendances = JSONArray.parseArray(JSONObject.toJSONString(bObj));
             } else {
-                businessOwnerCars = (JSONArray) bObj;
+                businessOwnerAttendances = (JSONArray) bObj;
             }
-            //JSONObject businessOwnerCar = data.getJSONObject("businessOwnerCar");
-            for (int bOwnerCarIndex = 0; bOwnerCarIndex < businessOwnerCars.size(); bOwnerCarIndex++) {
-                JSONObject businessOwnerCar = businessOwnerCars.getJSONObject(bOwnerCarIndex);
-                doSendOwnerCar(business, businessOwnerCar);
+            //JSONObject businessOwnerAttendance = data.getJSONObject("businessOwnerAttendance");
+            for (int bOwnerAttendanceIndex = 0; bOwnerAttendanceIndex < businessOwnerAttendances.size(); bOwnerAttendanceIndex++) {
+                JSONObject businessOwnerAttendance = businessOwnerAttendances.getJSONObject(bOwnerAttendanceIndex);
+                doSendOwnerAttendance(business, businessOwnerAttendance);
             }
         }
     }
 
-    private void doSendOwnerCar(Business business, JSONObject businessOwnerCar) {
-        OwnerCarPo ownerCarPo = BeanConvertUtil.covertBean(businessOwnerCar, OwnerCarPo.class);
-        OwnerCarDto ownerCarDto = new OwnerCarDto();
-        ownerCarDto.setCarId(ownerCarPo.getCarId());
-        ownerCarDto.setStatusCd(StatusConstant.STATUS_CD_INVALID);
-        List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
-        Assert.listOnlyOne(ownerCarDtos, "未找到停车场");
+    private void doSendOwnerAttendance(Business business, JSONObject businessOwnerAttendance) {
 
-        //没有车位就不同步了
-        if (StringUtil.isEmpty(ownerCarDtos.get(0).getPsId()) || "-1".equals(ownerCarDtos.get(0).getPsId())) {
-            return;
-        }
+        AttendanceClassesPo ownerAttendancePo = BeanConvertUtil.covertBean(businessOwnerAttendance, AttendanceClassesPo.class);
+
+        AttendanceClassesDto ownerAttendanceDto = new AttendanceClassesDto();
+        ownerAttendanceDto.setClassesId(ownerAttendancePo.getClassesId());
+        ownerAttendanceDto.setStoreId(ownerAttendancePo.getStoreId());
+        ownerAttendanceDto.setStatusCd(StatusConstant.STATUS_CD_INVALID);
+        List<AttendanceClassesDto> attendanceDtos = attendanceClassesInnerServiceSMOImpl.queryAttendanceClassess(ownerAttendanceDto);
 
-        ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
-        parkingSpaceDto.setPsId(ownerCarDtos.get(0).getPsId());
-        parkingSpaceDto.setCommunityId(ownerCarDtos.get(0).getCommunityId());
-        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
-        Assert.listOnlyOne(ownerCarDtos, "未找到车位");
+        Assert.listOnlyOne(attendanceDtos, "未找到考勤班组");
 
         JSONObject postParameters = new JSONObject();
-        postParameters.put("extCarId", ownerCarDtos.get(0).getCarId());
-        postParameters.put("carNum", ownerCarDtos.get(0).getCarNum());
-        postParameters.put("extPaId", parkingSpaceDtos.get(0).getPaId());
-        postParameters.put("extCommunityId", ownerCarDtos.get(0).getCommunityId());
-        hcOwnerCarAsynImpl.deleteOwnerCar(postParameters);
+        postParameters.put("extClassesId", attendanceDtos.get(0).getClassesId());
+        postParameters.put("classesName", attendanceDtos.get(0).getClassesName());
+        postParameters.put("extCommunityId", "-1");
+        hcOwnerAttendanceAsynImpl.deleteAttendance(postParameters);
     }
 }

+ 0 - 131
service-job/src/main/java/com/java110/job/adapt/hcIot/attendance/ModifyAttendanceToIotAdapt.java

@@ -1,131 +0,0 @@
-/*
- * Copyright 2017-2020 吴学文 and java110 team.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.java110.job.adapt.hcIot.attendance;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.java110.dto.owner.OwnerCarDto;
-import com.java110.dto.parking.ParkingSpaceDto;
-import com.java110.entity.order.Business;
-import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
-import com.java110.intf.user.IOwnerCarInnerServiceSMO;
-import com.java110.job.adapt.DatabusAdaptImpl;
-import com.java110.job.adapt.hcIot.asyn.IIotSendAsyn;
-import com.java110.po.car.OwnerCarPo;
-import com.java110.utils.util.Assert;
-import com.java110.utils.util.BeanConvertUtil;
-import com.java110.utils.util.DateUtil;
-import com.java110.utils.util.StringUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * HC iot 车辆同步适配器
- * 接口协议地址: https://gitee.com/java110/MicroCommunityThings/blob/master/back/docs/api.md
- *
- * @desc add by 吴学文 18:58
- */
-@Component(value = "modifyAttendanceToIotAdapt")
-public class ModifyAttendanceToIotAdapt extends DatabusAdaptImpl {
-
-    @Autowired
-    private IIotSendAsyn hcOwnerCarAsynImpl;
-
-    @Autowired
-    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
-
-    @Autowired
-    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
-
-
-    /**
-     * accessToken={access_token}
-     * &extCommunityUuid=01000
-     * &extCommunityId=1
-     * &devSn=111111111
-     * &name=车辆名称
-     * &positionType=0
-     * &positionUuid=1
-     *
-     * @param business   当前处理业务
-     * @param businesses 所有业务信息
-     */
-    @Override
-    public void execute(Business business, List<Business> businesses) {
-        JSONObject data = business.getData();
-        if (data.containsKey(OwnerCarPo.class.getSimpleName())) {
-            Object bObj = data.get(OwnerCarPo.class.getSimpleName());
-            JSONArray businessOwnerCars = null;
-            if (bObj instanceof JSONObject) {
-                businessOwnerCars = new JSONArray();
-                businessOwnerCars.add(bObj);
-            } else if (bObj instanceof List) {
-                businessOwnerCars = JSONArray.parseArray(JSONObject.toJSONString(bObj));
-            } else {
-                businessOwnerCars = (JSONArray) bObj;
-            }
-            //JSONObject businessOwnerCar = data.getJSONObject("businessOwnerCar");
-            for (int bOwnerCarIndex = 0; bOwnerCarIndex < businessOwnerCars.size(); bOwnerCarIndex++) {
-                JSONObject businessOwnerCar = businessOwnerCars.getJSONObject(bOwnerCarIndex);
-                doSendOwnerCar(business, businessOwnerCar);
-            }
-        }
-    }
-
-    private void doSendOwnerCar(Business business, JSONObject businessOwnerCar) {
-
-        OwnerCarPo ownerCarPo = BeanConvertUtil.covertBean(businessOwnerCar, OwnerCarPo.class);
-
-        OwnerCarDto ownerCarDto = new OwnerCarDto();
-        ownerCarDto.setCarNum(ownerCarPo.getCarNum());
-        ownerCarDto.setCommunityId(ownerCarPo.getCommunityId());
-        List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
-
-        Assert.listOnlyOne(ownerCarDtos, "未找到停车场");
-
-        //没有车位就不同步了
-        if (StringUtil.isEmpty(ownerCarDtos.get(0).getPsId()) || "-1".equals(ownerCarDtos.get(0).getPsId())) {
-            return;
-        }
-
-        //电动车
-        //三轮车 不同步物联网系统
-        if ("9904,9905".contains(ownerCarDtos.get(0).getCarType())) {
-            return;
-        }
-
-        ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
-        parkingSpaceDto.setPsId(ownerCarDtos.get(0).getPsId());
-        parkingSpaceDto.setCommunityId(ownerCarDtos.get(0).getCommunityId());
-        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
-        Assert.listOnlyOne(ownerCarDtos, "未找到车位");
-
-
-        JSONObject postParameters = new JSONObject();
-
-        postParameters.put("carNum", ownerCarDtos.get(0).getCarNum());
-        postParameters.put("startTime", DateUtil.getFormatTimeString(ownerCarDtos.get(0).getStartTime(), DateUtil.DATE_FORMATE_STRING_A));
-        postParameters.put("endTime", DateUtil.getFormatTimeString(ownerCarDtos.get(0).getEndTime(), DateUtil.DATE_FORMATE_STRING_A));
-        postParameters.put("extPaId", parkingSpaceDtos.get(0).getPaId());
-        postParameters.put("personName", ownerCarDtos.get(0).getOwnerName());
-        postParameters.put("personTel", ownerCarDtos.get(0).getLink());
-        postParameters.put("extCarId", ownerCarDtos.get(0).getCarId());
-        postParameters.put("extCommunityId", ownerCarDtos.get(0).getCommunityId());
-        hcOwnerCarAsynImpl.updateOwnerCar(postParameters);
-    }
-}

+ 115 - 0
service-job/src/main/java/com/java110/job/adapt/hcIot/attendance/UpdateAttendanceToIotAdapt.java

@@ -0,0 +1,115 @@
+/*
+ * Copyright 2017-2020 吴学文 and java110 team.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.java110.job.adapt.hcIot.attendance;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.dto.attendanceClasses.AttendanceClassesDto;
+import com.java110.dto.org.OrgStaffRelDto;
+import com.java110.entity.order.Business;
+import com.java110.intf.common.IAttendanceClassesInnerServiceSMO;
+import com.java110.intf.user.IOrgStaffRelInnerServiceSMO;
+import com.java110.job.adapt.DatabusAdaptImpl;
+import com.java110.job.adapt.hcIot.asyn.IIotSendAsyn;
+import com.java110.po.attendanceClasses.AttendanceClassesPo;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * HC iot 考勤同步适配器
+ * <p>
+ * 接口协议地址: https://gitee.com/java110/MicroCommunityThings/blob/master/back/docs/api.md
+ *
+ * @desc add by 吴学文 18:58
+ */
+@Component(value = "updateAttendanceToIotAdapt")
+public class UpdateAttendanceToIotAdapt extends DatabusAdaptImpl {
+
+    @Autowired
+    private IIotSendAsyn hcOwnerAttendanceAsynImpl;
+
+
+    @Autowired
+    private IAttendanceClassesInnerServiceSMO attendanceClassesInnerServiceSMOImpl;
+
+    @Autowired
+    private IOrgStaffRelInnerServiceSMO orgStaffRelInnerServiceSMOImpl;
+
+
+    /**
+     * accessToken={access_token}
+     * &extCommunityUuid=01000
+     * &extCommunityId=1
+     * &devSn=111111111
+     * &name=设备名称
+     * &positionType=0
+     * &positionUuid=1
+     *
+     * @param business   当前处理业务
+     * @param businesses 所有业务信息
+     */
+    @Override
+    public void execute(Business business, List<Business> businesses) {
+        JSONObject data = business.getData();
+        if (data.containsKey(AttendanceClassesPo.class.getSimpleName())) {
+            Object bObj = data.get(AttendanceClassesPo.class.getSimpleName());
+            JSONArray businessOwnerAttendances = null;
+            if (bObj instanceof JSONObject) {
+                businessOwnerAttendances = new JSONArray();
+                businessOwnerAttendances.add(bObj);
+            } else if (bObj instanceof List) {
+                businessOwnerAttendances = JSONArray.parseArray(JSONObject.toJSONString(bObj));
+            } else {
+                businessOwnerAttendances = (JSONArray) bObj;
+            }
+            //JSONObject businessOwnerAttendance = data.getJSONObject("businessOwnerAttendance");
+            for (int bOwnerAttendanceIndex = 0; bOwnerAttendanceIndex < businessOwnerAttendances.size(); bOwnerAttendanceIndex++) {
+                JSONObject businessOwnerAttendance = businessOwnerAttendances.getJSONObject(bOwnerAttendanceIndex);
+                doSendOwnerAttendance(business, businessOwnerAttendance);
+            }
+        }
+    }
+
+    private void doSendOwnerAttendance(Business business, JSONObject businessOwnerAttendance) {
+
+        AttendanceClassesPo ownerAttendancePo = BeanConvertUtil.covertBean(businessOwnerAttendance, AttendanceClassesPo.class);
+
+        AttendanceClassesDto ownerAttendanceDto = new AttendanceClassesDto();
+        ownerAttendanceDto.setClassesId(ownerAttendancePo.getClassesId());
+        ownerAttendanceDto.setStoreId(ownerAttendancePo.getStoreId());
+        List<AttendanceClassesDto> attendanceDtos = attendanceClassesInnerServiceSMOImpl.queryAttendanceClassess(ownerAttendanceDto);
+
+        Assert.listOnlyOne(attendanceDtos, "未找到考勤班组");
+
+        JSONObject postParameters = new JSONObject();
+        postParameters.put("classesName", attendanceDtos.get(0).getClassesName());
+        postParameters.put("timeOffset", attendanceDtos.get(0).getTimeOffset());
+        postParameters.put("clockCount", attendanceDtos.get(0).getClockCount());
+        postParameters.put("clockType", attendanceDtos.get(0).getClockType());
+        postParameters.put("clockTypeValue", attendanceDtos.get(0).getClockTypeValue());
+        postParameters.put("lateOffset", attendanceDtos.get(0).getLateOffset());
+        postParameters.put("leaveOffset", attendanceDtos.get(0).getLeaveOffset());
+        postParameters.put("extClassesId", attendanceDtos.get(0).getClassesId());
+        postParameters.put("extCommunityId", "-1");
+        postParameters.put("attrs", JSONArray.parseArray(JSONArray.toJSONString(attendanceDtos.get(0).getAttrs())));
+        hcOwnerAttendanceAsynImpl.updateAttendance(postParameters);
+    }
+}